code-coordinator 0.5.266__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.266 → code_coordinator-0.5.267}/PKG-INFO +1 -1
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/board_wire.py +131 -18
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/serve_app.py +39 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/codegen.py +22 -7
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_read_path.py +8 -7
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_wire.py +96 -6
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/data.rs +31 -16
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/drive_queue.rs +34 -8
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/pipeline.rs +33 -12
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/sessions.rs +31 -2
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/settings_ui.rs +8 -5
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/tests.rs +304 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/types/generated.rs +9 -6
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/.gitignore +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/CLAUDE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/GOAL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/LICENSE +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/MANIFEST.in +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/README.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agent.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/block_log.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/board_service.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/brain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/claim.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/client.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/comments.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dao.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/db.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/deps.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/drive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/events.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/filelock.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/freshness.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/gates.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/goal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/context.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/models.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/render.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/health/units.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/hooks.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/interactive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/models.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/network.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/notify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/openapi.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/parentage.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/plans.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/progress.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/release_window.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/reports.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/review.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/self_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/smoke.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/split_work.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/sql.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/test_author.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/test_report.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/usage.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/install-agent.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/pyproject.toml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/setup.cfg +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/__init__.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/conftest.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_db.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_events.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_init.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_models.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_network.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_session.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_split.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_state.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.266 → code_coordinator-0.5.267}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.266 → 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]]:
|
|
@@ -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:
|
|
@@ -2689,27 +2689,42 @@ pub(crate) fn spawn_issue_detail_fetch(
|
|
|
2689
2689
|
) -> std::sync::mpsc::Receiver<Option<String>> {
|
|
2690
2690
|
let (tx, rx) = std::sync::mpsc::channel();
|
|
2691
2691
|
std::thread::spawn(move || {
|
|
2692
|
-
let
|
|
2693
|
-
.timeout_connect(std::time::Duration::from_secs(3))
|
|
2694
|
-
.timeout(std::time::Duration::from_secs(5))
|
|
2695
|
-
.build();
|
|
2696
|
-
let mut req = agent.get(&format!("{base_url}/issue/{repo_name}/{number}"));
|
|
2697
|
-
if let Some(t) = token {
|
|
2698
|
-
req = req.set("Authorization", &format!("Bearer {t}"));
|
|
2699
|
-
}
|
|
2700
|
-
let out = match req.call() {
|
|
2701
|
-
Ok(resp) => resp
|
|
2702
|
-
.into_string()
|
|
2703
|
-
.ok()
|
|
2704
|
-
.and_then(|body| serde_json::from_str::<serde_json::Value>(&body).ok())
|
|
2705
|
-
.and_then(|v| v.get("body").and_then(|f| f.as_str()).map(|s| s.to_string())),
|
|
2706
|
-
Err(_) => None,
|
|
2707
|
-
};
|
|
2692
|
+
let out = fetch_issue_body_blocking(&base_url, token.as_deref(), &repo_name, number);
|
|
2708
2693
|
let _ = tx.send(out);
|
|
2709
2694
|
});
|
|
2710
2695
|
rx
|
|
2711
2696
|
}
|
|
2712
2697
|
|
|
2698
|
+
/// #1939: the synchronous core of [`spawn_issue_detail_fetch`], factored out
|
|
2699
|
+
/// so a one-shot caller that isn't on the render-tick poll loop (e.g.
|
|
2700
|
+
/// [`super::sessions::CoordApp::chat_briefing`]'s Chat-session briefing) can
|
|
2701
|
+
/// block on the same `GET /issue/{repo}/{number}` request inline instead of
|
|
2702
|
+
/// arming a receiver nothing will ever drain. `None` on any HTTP/parse
|
|
2703
|
+
/// failure, same as the async path.
|
|
2704
|
+
pub(crate) fn fetch_issue_body_blocking(
|
|
2705
|
+
base_url: &str,
|
|
2706
|
+
token: Option<&str>,
|
|
2707
|
+
repo_name: &str,
|
|
2708
|
+
number: u64,
|
|
2709
|
+
) -> Option<String> {
|
|
2710
|
+
let agent = ureq::AgentBuilder::new()
|
|
2711
|
+
.timeout_connect(std::time::Duration::from_secs(3))
|
|
2712
|
+
.timeout(std::time::Duration::from_secs(5))
|
|
2713
|
+
.build();
|
|
2714
|
+
let mut req = agent.get(&format!("{base_url}/issue/{repo_name}/{number}"));
|
|
2715
|
+
if let Some(t) = token {
|
|
2716
|
+
req = req.set("Authorization", &format!("Bearer {t}"));
|
|
2717
|
+
}
|
|
2718
|
+
match req.call() {
|
|
2719
|
+
Ok(resp) => resp
|
|
2720
|
+
.into_string()
|
|
2721
|
+
.ok()
|
|
2722
|
+
.and_then(|body| serde_json::from_str::<serde_json::Value>(&body).ok())
|
|
2723
|
+
.and_then(|v| v.get("body").and_then(|f| f.as_str()).map(|s| s.to_string())),
|
|
2724
|
+
Err(_) => None,
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
|
|
2713
2728
|
/// #584: fetch the read-only board projection from the `coord serve` daemon
|
|
2714
2729
|
/// over HTTP and assemble it into a [`BoardData`] via the shared
|
|
2715
2730
|
/// [`assemble_board_data`] tail (so the machine probes still run exactly as the
|
|
@@ -1626,15 +1626,23 @@ impl CoordApp {
|
|
|
1626
1626
|
/// layered lookup as `board_issue_body_list` (`render.rs:1754`) — this
|
|
1627
1627
|
/// exists so a fetch stays a last resort, not the common path:
|
|
1628
1628
|
///
|
|
1629
|
-
/// 1. Synced row in `data.open_issues` — fast path, no I/O.
|
|
1630
|
-
///
|
|
1631
|
-
///
|
|
1629
|
+
/// 1. Synced row in `data.open_issues` — fast path, no I/O. **#1939:**
|
|
1630
|
+
/// `/board` now truncates an open (non-epic) issue's body to its
|
|
1631
|
+
/// machine-parsed residue, same as it has long done for closed
|
|
1632
|
+
/// issues, so this step now mirrors `board_issue_body_list`'s
|
|
1633
|
+
/// `body_truncated` check instead of assuming the synced row always
|
|
1634
|
+
/// carries the full text.
|
|
1635
|
+
/// 2. `issue_detail_cache`, hydrated by the `GET /issue/{repo}/{number}`
|
|
1636
|
+
/// background fetch `issue_body_fetch_target` arms for this tab too
|
|
1637
|
+
/// (#1939) — consulted only when step 1's row is `body_truncated`.
|
|
1638
|
+
/// 3. In-memory `fetched_issues_cache`, populated by a prior background
|
|
1632
1639
|
/// `gh issue view` for this session (shared with Board/Pipeline — one
|
|
1633
|
-
/// fetch of an issue serves every panel that shows it).
|
|
1634
|
-
///
|
|
1640
|
+
/// fetch of an issue serves every panel that shows it). Only reached
|
|
1641
|
+
/// when the issue has no synced row at all.
|
|
1642
|
+
/// 4. An in-flight background fetch — show a "Fetching…" placeholder and
|
|
1635
1643
|
/// let the next render pick up the result.
|
|
1636
|
-
///
|
|
1637
|
-
/// once per issue: step
|
|
1644
|
+
/// 5. No data yet — spawn `gh issue view` in the background (at most
|
|
1645
|
+
/// once per issue: step 4's in-flight check makes every subsequent
|
|
1638
1646
|
/// frame a no-op fetch-wise until it resolves) and show a placeholder.
|
|
1639
1647
|
pub(crate) fn queue_issue_body_list(&self) -> ListView {
|
|
1640
1648
|
// #1867: use the pane width stashed at draw time for word-wrapping.
|
|
@@ -1673,8 +1681,26 @@ impl CoordApp {
|
|
|
1673
1681
|
.iter()
|
|
1674
1682
|
.find(|oi| oi.repo_name == repo && oi.number == number)
|
|
1675
1683
|
{
|
|
1684
|
+
// #1939: the /board wire now truncates an open (non-epic)
|
|
1685
|
+
// issue's body too (previously only closed ones) — mirror
|
|
1686
|
+
// `board_issue_body_list`'s hydration check so this pane
|
|
1687
|
+
// doesn't regress to showing the truncation notice forever.
|
|
1688
|
+
// `issue_body_fetch_target` arms the same
|
|
1689
|
+
// GET /issue/{repo}/{number} fetch for the Queue tab.
|
|
1690
|
+
let hydrated: Option<&str> = if oi.body_truncated {
|
|
1691
|
+
self.issue_detail_cache
|
|
1692
|
+
.get(&key)
|
|
1693
|
+
.and_then(|e| e.full.as_deref())
|
|
1694
|
+
} else {
|
|
1695
|
+
None
|
|
1696
|
+
};
|
|
1676
1697
|
return issue_body_list(
|
|
1677
|
-
Some((
|
|
1698
|
+
Some((
|
|
1699
|
+
oi.number,
|
|
1700
|
+
oi.title.as_str(),
|
|
1701
|
+
hydrated.unwrap_or(oi.body.as_str()),
|
|
1702
|
+
&oi.labels[..],
|
|
1703
|
+
)),
|
|
1678
1704
|
self.queue_detail_scroll,
|
|
1679
1705
|
"queue-issue-body",
|
|
1680
1706
|
wrap_width,
|