code-coordinator 0.5.322__tar.gz → 0.5.323__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.322 → code_coordinator-0.5.323}/PKG-INFO +1 -1
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/approved_work.py +41 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/portal.py +39 -2
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/decomposition_chat.py +69 -4
- code_coordinator-0.5.323/tests/test_approved_work_2996.py +163 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_portal.py +108 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/.gitignore +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/CLAUDE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/GOAL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/LICENSE +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/MANIFEST.in +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/README.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agent.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/block_log.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/board_service.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/brain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/claim.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/client.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/comments.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dao.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/db.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/deps.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/drive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/events.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/filelock.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/freshness.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/gates.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/goal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/context.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/models.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/render.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/health/units.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/hooks.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/interactive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/models.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/network.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/notify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/openapi.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/parentage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/plans.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/progress.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/release_window.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/reports.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/review.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/self_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/smoke.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/split_work.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/sql.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/test_author.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/test_report.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/usage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/install-agent.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/pyproject.toml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/setup.cfg +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/__init__.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/backends.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/conftest.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_db.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_events.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_init.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_models.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_network.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_session.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_split.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_state.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.322 → code_coordinator-0.5.323}/tests/write_parity.py +0 -0
|
@@ -403,6 +403,7 @@ tests/test_approve_dependency_busy_2804.py
|
|
|
403
403
|
tests/test_approve_reject_plan.py
|
|
404
404
|
tests/test_approve_usage_gate.py
|
|
405
405
|
tests/test_approved_work_2532.py
|
|
406
|
+
tests/test_approved_work_2996.py
|
|
406
407
|
tests/test_assignment_already_recorded_daemon.py
|
|
407
408
|
tests/test_audit_log.py
|
|
408
409
|
tests/test_audit_outcome.py
|
{code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -429,6 +429,7 @@
|
|
|
429
429
|
"tests/test_approve_reject_plan.py",
|
|
430
430
|
"tests/test_approve_usage_gate.py",
|
|
431
431
|
"tests/test_approved_work_2532.py",
|
|
432
|
+
"tests/test_approved_work_2996.py",
|
|
432
433
|
"tests/test_assignment_already_recorded_daemon.py",
|
|
433
434
|
"tests/test_audit_log.py",
|
|
434
435
|
"tests/test_audit_outcome.py",
|
|
@@ -256,6 +256,47 @@ def approved_submission_ids() -> set[str]:
|
|
|
256
256
|
return {sid for sid, verdict in _fold_signoff_verdicts().items() if verdict == "approved"}
|
|
257
257
|
|
|
258
258
|
|
|
259
|
+
def is_pulled_status(status: str) -> bool:
|
|
260
|
+
"""Whether *status* is one of :data:`_PULLED_STATUSES` — the public,
|
|
261
|
+
non-underscore way for another module (:mod:`coord.commands.portal`,
|
|
262
|
+
#2996) to ask "would pushing this status withdraw a submission from
|
|
263
|
+
:func:`approved_submissions`?" without reaching into this module's
|
|
264
|
+
private constant.
|
|
265
|
+
"""
|
|
266
|
+
return status in _PULLED_STATUSES
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def disqualifying_status(submission_id: str) -> str | None:
|
|
270
|
+
"""The ``last_status`` responsible for *submission_id* being missing
|
|
271
|
+
from :func:`approved_submissions` despite an ``approved`` sign-off
|
|
272
|
+
verdict on file — or ``None`` when that is not why it is missing (never
|
|
273
|
+
approved, no record at all, or genuinely not pulled) (#2996).
|
|
274
|
+
|
|
275
|
+
Reads local :mod:`coord.portal_store` directly, same as
|
|
276
|
+
:func:`approved_submissions` itself — so, like that function, this is
|
|
277
|
+
only meaningful when called on the daemon host (the caller is
|
|
278
|
+
responsible for that; see :func:`coord.commands.portal.
|
|
279
|
+
_refuse_if_thin_client` and :func:`coord.decomposition_chat.
|
|
280
|
+
resolve_approved_submission`'s own thin-client routing).
|
|
281
|
+
|
|
282
|
+
Exists so a "why isn't this on the queue" failure message
|
|
283
|
+
(:func:`coord.decomposition_chat.resolve_approved_submission`'s callers)
|
|
284
|
+
can name the actual cause — a status an operator pushed by hand, most
|
|
285
|
+
often via ``coord portal enqueue-status`` — instead of the generic
|
|
286
|
+
"is not a currently-approved portal submission", which names neither.
|
|
287
|
+
"""
|
|
288
|
+
from coord import portal_store # noqa: PLC0415 — avoid import cycle
|
|
289
|
+
|
|
290
|
+
record = portal_store.get_submission(submission_id)
|
|
291
|
+
if record is None:
|
|
292
|
+
return None
|
|
293
|
+
if record.submission_id not in approved_submission_ids():
|
|
294
|
+
return None
|
|
295
|
+
if record.last_status in _PULLED_STATUSES:
|
|
296
|
+
return record.last_status
|
|
297
|
+
return None
|
|
298
|
+
|
|
299
|
+
|
|
259
300
|
def approved_submissions(config: "Config") -> list[dict[str, Any]]:
|
|
260
301
|
"""The ``/board`` ``approved_submissions`` payload, **oldest first**.
|
|
261
302
|
|
|
@@ -612,6 +612,7 @@ def _run_decompose_chat_interactive(
|
|
|
612
612
|
)
|
|
613
613
|
from coord.decomposition_chat import ( # noqa: PLC0415
|
|
614
614
|
build_decomposition_chat_briefing,
|
|
615
|
+
describe_unapproved_submission,
|
|
615
616
|
fetch_running_context,
|
|
616
617
|
render_running_context_section,
|
|
617
618
|
repo_topology_context,
|
|
@@ -633,8 +634,7 @@ def _run_decompose_chat_interactive(
|
|
|
633
634
|
submission = resolve_approved_submission(cfg, submission_id)
|
|
634
635
|
if submission is None:
|
|
635
636
|
click.secho(
|
|
636
|
-
f"error:
|
|
637
|
-
"portal submission — nothing to decompose",
|
|
637
|
+
f"error: {describe_unapproved_submission(cfg, submission_id)}",
|
|
638
638
|
fg="red",
|
|
639
639
|
)
|
|
640
640
|
raise SystemExit(1)
|
|
@@ -1343,11 +1343,48 @@ def portal_enqueue_status(submission_id: str, status: str) -> None:
|
|
|
1343
1343
|
Unlike `push`, this allocates the revision for you and refuses a status
|
|
1344
1344
|
that would summon the customer to an empty screen — `awaiting-signoff`
|
|
1345
1345
|
with no design round queued, `needs-input` with no question (#835).
|
|
1346
|
+
|
|
1347
|
+
**#2996: warns, never refuses, before a `_PULLED_STATUSES` push that
|
|
1348
|
+
would silently withdraw SUBMISSION_ID from decomposition.**
|
|
1349
|
+
`coord.approved_work.approved_submissions` (the "Approved work items"
|
|
1350
|
+
panel's data source) drops any submission whose `last_status` moves to
|
|
1351
|
+
`planned` / `in-progress` / `quality-check` / `shipped` — those four
|
|
1352
|
+
values are only ever supposed to mean "already pulled into a linked
|
|
1353
|
+
milestone/issue and dispatch has begun". Pushing one of them here on a
|
|
1354
|
+
submission with no `coord portal link` on file does that removal anyway,
|
|
1355
|
+
with nothing to say so — the observed failure mode (#2996's own filing)
|
|
1356
|
+
was a status pushed purely to update the customer-facing wording, which
|
|
1357
|
+
happened to also empty the queue and only surfaced later as an unrelated
|
|
1358
|
+
"not a currently-approved portal submission" error. This command still
|
|
1359
|
+
sends the push regardless — there are legitimate reasons to set any of
|
|
1360
|
+
these by hand (a correction, a re-sync, an out-of-band delivery) — it
|
|
1361
|
+
only makes the consequence visible first.
|
|
1346
1362
|
"""
|
|
1347
1363
|
_refuse_if_thin_client("enqueue-status")
|
|
1348
1364
|
|
|
1365
|
+
from coord.approved_work import is_pulled_status # noqa: PLC0415
|
|
1349
1366
|
from coord.portal_sync import PortalSyncError, enqueue_status # noqa: PLC0415
|
|
1350
1367
|
|
|
1368
|
+
if is_pulled_status(status):
|
|
1369
|
+
from coord import portal_store # noqa: PLC0415
|
|
1370
|
+
|
|
1371
|
+
if portal_store.get_link_by_submission(submission_id) is None:
|
|
1372
|
+
click.secho(
|
|
1373
|
+
f"warning: {submission_id} has no linked milestone/issue on "
|
|
1374
|
+
"file (no `coord portal link` recorded) and no decomposition "
|
|
1375
|
+
f"on record — pushing status={status!r} will still be sent, "
|
|
1376
|
+
"but coord treats that status as \"already pulled into "
|
|
1377
|
+
f"decomposition and delivery\": {submission_id} will vanish "
|
|
1378
|
+
"from the TUI's Approved work items panel, and `coord portal "
|
|
1379
|
+
"decompose-chat` will refuse it as no longer approved. If "
|
|
1380
|
+
"the work has not actually been decomposed yet and you just "
|
|
1381
|
+
"want an honest \"we know what's next\" status for the "
|
|
1382
|
+
f"customer, use `coord portal enqueue-status {submission_id} "
|
|
1383
|
+
"in-design` instead — it stays on the queue and announces "
|
|
1384
|
+
"nobody.",
|
|
1385
|
+
fg="yellow",
|
|
1386
|
+
)
|
|
1387
|
+
|
|
1351
1388
|
try:
|
|
1352
1389
|
row = enqueue_status(submission_id, status)
|
|
1353
1390
|
except PortalSyncError as exc:
|
|
@@ -38,6 +38,7 @@ posture every other dispatcher in this file already uses.
|
|
|
38
38
|
from __future__ import annotations
|
|
39
39
|
|
|
40
40
|
import datetime
|
|
41
|
+
import logging
|
|
41
42
|
import time
|
|
42
43
|
import uuid
|
|
43
44
|
from typing import TYPE_CHECKING, Any
|
|
@@ -46,6 +47,8 @@ if TYPE_CHECKING: # pragma: no cover - typing only
|
|
|
46
47
|
from coord.config import Config
|
|
47
48
|
from coord.models import Machine
|
|
48
49
|
|
|
50
|
+
_log = logging.getLogger(__name__)
|
|
51
|
+
|
|
49
52
|
#: Sentinel `issue_title` this module writes onto the dispatched assignment
|
|
50
53
|
#: — mirrors `dispatch_new_issue_chat`'s own `"(new issue draft)"` sentinel
|
|
51
54
|
#: for a chat type with no real GitHub issue yet. The TUI's own bind path
|
|
@@ -546,6 +549,71 @@ def resolve_approved_submission(config: "Config", submission_id: str) -> dict[st
|
|
|
546
549
|
)
|
|
547
550
|
|
|
548
551
|
|
|
552
|
+
def describe_unapproved_submission(config: "Config", submission_id: str) -> str:
|
|
553
|
+
"""Human-readable reason :func:`resolve_approved_submission` returned
|
|
554
|
+
``None`` for *submission_id* (#2996).
|
|
555
|
+
|
|
556
|
+
Names the disqualifying ``last_status`` when that is actually why — most
|
|
557
|
+
often an operator's own ``coord portal enqueue-status`` push to a
|
|
558
|
+
:data:`coord.approved_work._PULLED_STATUSES` value on a submission that
|
|
559
|
+
had not, in fact, been decomposed yet — instead of the generic "is not a
|
|
560
|
+
currently-approved portal submission", which names neither the cause nor
|
|
561
|
+
the status that caused it (the whole complaint in #2996's issue body).
|
|
562
|
+
|
|
563
|
+
Best-effort: the disqualifying-status lookup
|
|
564
|
+
(:func:`coord.approved_work.disqualifying_status`) needs to read the
|
|
565
|
+
daemon's own local :mod:`coord.portal_store` directly, so it is skipped
|
|
566
|
+
(falling back to the plain generic message) when this machine is a thin
|
|
567
|
+
client — the same constraint :func:`resolve_approved_submission` itself
|
|
568
|
+
already works around by routing through the daemon's ``/board`` instead
|
|
569
|
+
of reading the wrong box's empty tables.
|
|
570
|
+
|
|
571
|
+
**This function must never raise.** It exists only to phrase a failure
|
|
572
|
+
its callers have already decided on — ``dispatch_decomposition_chat``
|
|
573
|
+
raises ``RuntimeError(describe_unapproved_submission(...))`` and
|
|
574
|
+
``_run_decompose_chat_interactive`` prints it — so an exception escaping
|
|
575
|
+
the *enrichment* lookup would replace a clear, actionable error with a
|
|
576
|
+
traceback about a completely different subsystem. The store read is
|
|
577
|
+
therefore best-effort: any failure (an unreadable/locked portal store, a
|
|
578
|
+
schema older than :func:`coord.approved_work.disqualifying_status`
|
|
579
|
+
expects, a thin client that slipped past the ``board_service`` check)
|
|
580
|
+
degrades to the plain generic message, which is exactly the pre-#2996
|
|
581
|
+
behaviour and still correct — just less specific.
|
|
582
|
+
"""
|
|
583
|
+
base = f"submission {submission_id!r} is not a currently-approved portal submission"
|
|
584
|
+
|
|
585
|
+
reason: str | None = None
|
|
586
|
+
try:
|
|
587
|
+
from coord import board_service # noqa: PLC0415
|
|
588
|
+
|
|
589
|
+
if board_service.resolve() is None:
|
|
590
|
+
from coord.approved_work import disqualifying_status # noqa: PLC0415
|
|
591
|
+
|
|
592
|
+
reason = disqualifying_status(submission_id)
|
|
593
|
+
except Exception: # noqa: BLE001 — best-effort enrichment, never break the message
|
|
594
|
+
_log.debug(
|
|
595
|
+
"describe_unapproved_submission: disqualifying-status lookup failed "
|
|
596
|
+
"for %s; falling back to the generic message",
|
|
597
|
+
submission_id,
|
|
598
|
+
exc_info=True,
|
|
599
|
+
)
|
|
600
|
+
reason = None
|
|
601
|
+
|
|
602
|
+
if reason:
|
|
603
|
+
return (
|
|
604
|
+
f"{base} — its last_status is {reason!r}, which coord already treats "
|
|
605
|
+
"as pulled into decomposition/delivery (coord.approved_work."
|
|
606
|
+
"_PULLED_STATUSES), so it no longer shows up in the TUI's Approved "
|
|
607
|
+
"work items panel and this command refuses it. If it was pushed to "
|
|
608
|
+
f"that status before decomposition actually happened, `coord portal "
|
|
609
|
+
f"enqueue-status {submission_id} in-design` puts it back on the "
|
|
610
|
+
"queue without re-mailing the customer. Nothing to decompose."
|
|
611
|
+
)
|
|
612
|
+
return (
|
|
613
|
+
f"{base} (coord.approved_work.approved_submissions) — nothing to decompose"
|
|
614
|
+
)
|
|
615
|
+
|
|
616
|
+
|
|
549
617
|
def dispatch_decomposition_chat(
|
|
550
618
|
submission_id: str,
|
|
551
619
|
config: "Config",
|
|
@@ -576,10 +644,7 @@ def dispatch_decomposition_chat(
|
|
|
576
644
|
"""
|
|
577
645
|
submission = resolve_approved_submission(config, submission_id)
|
|
578
646
|
if submission is None:
|
|
579
|
-
raise RuntimeError(
|
|
580
|
-
f"submission {submission_id!r} is not a currently-approved portal "
|
|
581
|
-
"submission (coord.approved_work.approved_submissions) — nothing to decompose"
|
|
582
|
-
)
|
|
647
|
+
raise RuntimeError(describe_unapproved_submission(config, submission_id))
|
|
583
648
|
|
|
584
649
|
repos: list[str] = submission.get("repos") or []
|
|
585
650
|
if not repos:
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"""#2996: `enqueue-status planned` silently withdraws a submission from
|
|
2
|
+
decomposition, with no warning and an unhelpful error later.
|
|
3
|
+
|
|
4
|
+
Covers the two new, non-underscore seams `coord.approved_work` gained so
|
|
5
|
+
callers elsewhere (`coord.commands.portal`, `coord.decomposition_chat`) can
|
|
6
|
+
reason about `_PULLED_STATUSES` without reaching into a private constant:
|
|
7
|
+
|
|
8
|
+
* :func:`coord.approved_work.is_pulled_status` — the public "would this
|
|
9
|
+
status withdraw a submission?" predicate `enqueue-status` warns on.
|
|
10
|
+
* :func:`coord.approved_work.disqualifying_status` — "why is this submission
|
|
11
|
+
missing from `approved_submissions`", used to make `resolve_approved_
|
|
12
|
+
submission`'s failure message name the actual cause instead of the
|
|
13
|
+
generic, unhelpful "is not a currently-approved portal submission".
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
|
|
20
|
+
from coord.approved_work import disqualifying_status, is_pulled_status
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _signoff(event_id: str, submission_id: str, verdict: str) -> dict:
|
|
24
|
+
return {
|
|
25
|
+
"id": event_id,
|
|
26
|
+
"submission_id": submission_id,
|
|
27
|
+
"type": f"signoff.{verdict}",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _approve(submission_id: str, *, now: float = 100.0) -> None:
|
|
32
|
+
from coord import portal_store
|
|
33
|
+
|
|
34
|
+
portal_store.record_events(
|
|
35
|
+
[_signoff(f"ev-{submission_id}", submission_id, "approved")], now=now
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _set_last_status(submission_id: str, status: str, *, now: float) -> None:
|
|
40
|
+
"""Confirm *status* as the submission's `last_status`, bypassing the real
|
|
41
|
+
push round-trip — mirrors `tests/test_approved_work_2532.py`'s own
|
|
42
|
+
helper of the same name/shape."""
|
|
43
|
+
from coord import portal_store
|
|
44
|
+
|
|
45
|
+
row = portal_store.enqueue(submission_id, "status", {"status": status}, now=now)
|
|
46
|
+
portal_store.mark_applied(row, now=now)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class TestIsPulledStatus:
|
|
50
|
+
@pytest.mark.parametrize(
|
|
51
|
+
"status", ["planned", "in-progress", "quality-check", "shipped"]
|
|
52
|
+
)
|
|
53
|
+
def test_true_for_every_pulled_status(self, status: str) -> None:
|
|
54
|
+
assert is_pulled_status(status) is True
|
|
55
|
+
|
|
56
|
+
@pytest.mark.parametrize(
|
|
57
|
+
"status",
|
|
58
|
+
["", "describing", "in-design", "awaiting-signoff", "needs-input", "on-hold"],
|
|
59
|
+
)
|
|
60
|
+
def test_false_for_every_pre_decomposition_or_interrupt_status(
|
|
61
|
+
self, status: str
|
|
62
|
+
) -> None:
|
|
63
|
+
assert is_pulled_status(status) is False
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class TestDisqualifyingStatus:
|
|
67
|
+
def test_none_for_a_submission_never_seen_at_all(self, coord_db) -> None:
|
|
68
|
+
assert disqualifying_status("sub_never_seen") is None
|
|
69
|
+
|
|
70
|
+
def test_none_when_the_submission_was_never_approved(self, coord_db) -> None:
|
|
71
|
+
"""`last_status` alone is never enough — only an approved sign-off
|
|
72
|
+
that has ALSO moved to a pulled status is disqualified for that
|
|
73
|
+
reason. A submission that just happens to carry `planned` with no
|
|
74
|
+
signoff at all was never a candidate for the panel in the first
|
|
75
|
+
place, so this must not misreport `planned` as the cause."""
|
|
76
|
+
_set_last_status("sub_unapproved", "planned", now=1.0)
|
|
77
|
+
assert disqualifying_status("sub_unapproved") is None
|
|
78
|
+
|
|
79
|
+
def test_none_when_approved_and_not_pulled(self, coord_db) -> None:
|
|
80
|
+
_approve("sub_waiting")
|
|
81
|
+
_set_last_status("sub_waiting", "in-design", now=2.0)
|
|
82
|
+
assert disqualifying_status("sub_waiting") is None
|
|
83
|
+
|
|
84
|
+
@pytest.mark.parametrize(
|
|
85
|
+
"status", ["planned", "in-progress", "quality-check", "shipped"]
|
|
86
|
+
)
|
|
87
|
+
def test_names_the_pulled_status_when_that_is_the_cause(
|
|
88
|
+
self, status: str, coord_db
|
|
89
|
+
) -> None:
|
|
90
|
+
_approve("sub_pulled")
|
|
91
|
+
_set_last_status("sub_pulled", status, now=2.0)
|
|
92
|
+
assert disqualifying_status("sub_pulled") == status
|
|
93
|
+
|
|
94
|
+
def test_a_walked_back_approval_is_not_reported_as_disqualified(
|
|
95
|
+
self, coord_db
|
|
96
|
+
) -> None:
|
|
97
|
+
"""A `changes_requested` verdict after an earlier `approved` one
|
|
98
|
+
means the LATEST verdict is not `approved` at all — this function's
|
|
99
|
+
job is narrower than "was ever approved", so it must not report a
|
|
100
|
+
`_PULLED_STATUSES` value here as the reason (there is a more
|
|
101
|
+
fundamental one: it was never approved to begin with)."""
|
|
102
|
+
from coord import portal_store
|
|
103
|
+
|
|
104
|
+
portal_store.record_events(
|
|
105
|
+
[_signoff("e1", "sub_walked_back", "approved")], now=1.0
|
|
106
|
+
)
|
|
107
|
+
portal_store.record_events(
|
|
108
|
+
[_signoff("e2", "sub_walked_back", "changes_requested")], now=2.0
|
|
109
|
+
)
|
|
110
|
+
_set_last_status("sub_walked_back", "planned", now=3.0)
|
|
111
|
+
assert disqualifying_status("sub_walked_back") is None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class TestDescribeUnapprovedSubmissionNeverRaises:
|
|
115
|
+
"""`describe_unapproved_submission` only *phrases* a failure its callers
|
|
116
|
+
have already decided on, so an exception escaping its best-effort
|
|
117
|
+
enrichment lookup would replace a clear, actionable error with a
|
|
118
|
+
traceback about an unrelated subsystem (an unreadable/locked portal
|
|
119
|
+
store, a schema older than `disqualifying_status` expects). It must
|
|
120
|
+
degrade to the plain generic message instead."""
|
|
121
|
+
|
|
122
|
+
def test_falls_back_to_the_generic_message_when_the_store_read_raises(
|
|
123
|
+
self, coord_db, monkeypatch
|
|
124
|
+
) -> None:
|
|
125
|
+
from coord import approved_work, decomposition_chat
|
|
126
|
+
|
|
127
|
+
def _boom(_submission_id: str) -> str | None:
|
|
128
|
+
raise RuntimeError("portal store unreadable")
|
|
129
|
+
|
|
130
|
+
monkeypatch.setattr(approved_work, "disqualifying_status", _boom)
|
|
131
|
+
|
|
132
|
+
msg = decomposition_chat.describe_unapproved_submission(None, "sub_boom")
|
|
133
|
+
|
|
134
|
+
assert "is not a currently-approved portal submission" in msg
|
|
135
|
+
assert "its last_status is" not in msg
|
|
136
|
+
assert "portal store unreadable" not in msg
|
|
137
|
+
|
|
138
|
+
def test_falls_back_when_board_service_resolution_itself_raises(
|
|
139
|
+
self, coord_db, monkeypatch
|
|
140
|
+
) -> None:
|
|
141
|
+
from coord import board_service, decomposition_chat
|
|
142
|
+
|
|
143
|
+
def _boom():
|
|
144
|
+
raise RuntimeError("client.toml is corrupt")
|
|
145
|
+
|
|
146
|
+
monkeypatch.setattr(board_service, "resolve", _boom)
|
|
147
|
+
|
|
148
|
+
msg = decomposition_chat.describe_unapproved_submission(None, "sub_boom")
|
|
149
|
+
|
|
150
|
+
assert "is not a currently-approved portal submission" in msg
|
|
151
|
+
assert "client.toml is corrupt" not in msg
|
|
152
|
+
|
|
153
|
+
def test_still_names_the_status_on_the_happy_path(self, coord_db) -> None:
|
|
154
|
+
"""The fallback must not have swallowed the enrichment itself."""
|
|
155
|
+
from coord import decomposition_chat
|
|
156
|
+
|
|
157
|
+
_approve("sub_enriched")
|
|
158
|
+
_set_last_status("sub_enriched", "planned", now=2.0)
|
|
159
|
+
|
|
160
|
+
msg = decomposition_chat.describe_unapproved_submission(None, "sub_enriched")
|
|
161
|
+
|
|
162
|
+
assert "its last_status is 'planned'" in msg
|
|
163
|
+
assert "in-design" in msg
|
|
@@ -414,6 +414,44 @@ def test_decompose_chat_reports_a_dispatch_failure_cleanly(config_path):
|
|
|
414
414
|
assert "no single machine claims every repo" in result.output
|
|
415
415
|
|
|
416
416
|
|
|
417
|
+
def test_decompose_chat_names_the_pulled_status_that_disqualified_it(config_path):
|
|
418
|
+
"""#2996: the generic "is not a currently-approved portal submission"
|
|
419
|
+
error named neither the cause nor the status that caused it. When the
|
|
420
|
+
real cause is a `_PULLED_STATUSES` push on a submission with an
|
|
421
|
+
`approved` sign-off — e.g. an operator's own `enqueue-status planned`
|
|
422
|
+
pushed before the submission was actually decomposed — the failure now
|
|
423
|
+
names that status and the `in-design` recovery, with no mock standing in
|
|
424
|
+
for `dispatch_decomposition_chat` this time."""
|
|
425
|
+
from coord import portal_store
|
|
426
|
+
|
|
427
|
+
portal_store.record_events(
|
|
428
|
+
[{"id": "e1", "submission_id": "sub_2f6a1c", "type": "signoff.approved"}],
|
|
429
|
+
now=1.0,
|
|
430
|
+
)
|
|
431
|
+
row = portal_store.enqueue("sub_2f6a1c", "status", {"status": "planned"}, now=2.0)
|
|
432
|
+
portal_store.mark_applied(row, now=2.0)
|
|
433
|
+
|
|
434
|
+
result = run("portal", "decompose-chat", "--config", config_path, "sub_2f6a1c")
|
|
435
|
+
assert result.exit_code != 0
|
|
436
|
+
assert "'planned'" in result.output
|
|
437
|
+
assert "in-design" in result.output
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def test_decompose_chat_generic_message_when_never_approved_at_all(config_path):
|
|
441
|
+
"""No disqualifying status to name here — the submission simply has no
|
|
442
|
+
approved sign-off on record, so the generic message stays generic.
|
|
443
|
+
|
|
444
|
+
Matches the enrichment clause's own wording rather than the bare token
|
|
445
|
+
"last_status" for the same reason as `WITHDRAWAL_WARNING` below: click
|
|
446
|
+
`Result.output` interleaves stderr, so a loose token can be satisfied by
|
|
447
|
+
unrelated CLI chatter that only appears in some environments.
|
|
448
|
+
"""
|
|
449
|
+
result = run("portal", "decompose-chat", "--config", config_path, "sub_never_seen")
|
|
450
|
+
assert result.exit_code != 0
|
|
451
|
+
assert "is not a currently-approved portal submission" in result.output
|
|
452
|
+
assert "its last_status is" not in result.output
|
|
453
|
+
|
|
454
|
+
|
|
417
455
|
# ── #2743: --wait blocks and prints the closing summary ────────────────────
|
|
418
456
|
#
|
|
419
457
|
# A CLI-dispatched decomposition-chat is issue_number=0 — no GitHub thread to
|
|
@@ -713,6 +751,76 @@ def test_enqueue_preview_rejects_an_empty_url():
|
|
|
713
751
|
assert "non-empty" in result.output
|
|
714
752
|
|
|
715
753
|
|
|
754
|
+
# ── #2996: `enqueue-status` warns before a `_PULLED_STATUSES` push that ────
|
|
755
|
+
# would silently withdraw a submission from decomposition, on a submission
|
|
756
|
+
# with no linked milestone/issue and (so, by construction here) no
|
|
757
|
+
# decomposition on record. It must never refuse — only warn.
|
|
758
|
+
|
|
759
|
+
#: The #2996 warning's own distinctive opening clause.
|
|
760
|
+
#:
|
|
761
|
+
#: Assertions below match on THIS rather than on the bare token "warning",
|
|
762
|
+
#: because under click >= 8.2 ``Result.output`` is no longer a proxy for
|
|
763
|
+
#: stdout — it is an interleaved stdout+stderr stream (see
|
|
764
|
+
#: ``click.testing.Result.output``). A bare ``"warning" not in
|
|
765
|
+
#: result.output.lower()`` therefore also asserts the absence of every
|
|
766
|
+
#: *unrelated* advisory the CLI may write to stderr in some other
|
|
767
|
+
#: environment: ``coord/cli.py``'s "warning: coord CLI is running from a
|
|
768
|
+
#: non-editable install …" banner, ``coord/commands/portal.py``'s "warning:
|
|
769
|
+
#: backstop failed to record intake-session exit", a best-effort store
|
|
770
|
+
#: failure line, and so on. None of those are under test here, and none of
|
|
771
|
+
#: them fire on a developer box while several can fire on a CI runner — so
|
|
772
|
+
#: the loose form is green locally and red in CI for no product reason.
|
|
773
|
+
#: Matching the specific clause keeps the assertion about the behaviour the
|
|
774
|
+
#: test names.
|
|
775
|
+
WITHDRAWAL_WARNING = "has no linked milestone/issue on file"
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
@pytest.mark.parametrize("status", ["planned", "in-progress", "shipped"])
|
|
779
|
+
def test_enqueue_status_warns_before_withdrawing_an_unlinked_submission(status):
|
|
780
|
+
result = run("portal", "enqueue-status", "sub_1", status)
|
|
781
|
+
assert result.exit_code == 0, result.output
|
|
782
|
+
assert WITHDRAWAL_WARNING in result.output
|
|
783
|
+
assert "warning:" in result.output
|
|
784
|
+
# Names the consequence in operator terms, not just the constant's name.
|
|
785
|
+
assert "Approved work items" in result.output
|
|
786
|
+
assert "decompose-chat" in result.output
|
|
787
|
+
# Names the alternative for the "not started yet" case.
|
|
788
|
+
assert "in-design" in result.output
|
|
789
|
+
# And the push still went through.
|
|
790
|
+
assert "queued:" in result.output
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
def test_enqueue_status_does_not_warn_for_a_non_pulled_status():
|
|
794
|
+
result = run("portal", "enqueue-status", "sub_1", "in-design")
|
|
795
|
+
assert result.exit_code == 0, result.output
|
|
796
|
+
assert WITHDRAWAL_WARNING not in result.output
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
def test_enqueue_status_does_not_warn_once_a_link_is_on_file(config_path):
|
|
800
|
+
"""A linked submission has actually been pulled into decomposition — the
|
|
801
|
+
#2996 warning exists for the case where it has NOT, so it must not fire
|
|
802
|
+
once `coord portal link` is on record."""
|
|
803
|
+
from coord import portal_store
|
|
804
|
+
|
|
805
|
+
portal_store.link_milestone(
|
|
806
|
+
repo_name="coord", milestone_number=1, submission_id="sub_linked", actor="tester"
|
|
807
|
+
)
|
|
808
|
+
result = run("portal", "enqueue-status", "sub_linked", "planned")
|
|
809
|
+
assert result.exit_code == 0, result.output
|
|
810
|
+
assert WITHDRAWAL_WARNING not in result.output
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
def test_enqueue_status_still_warns_even_when_the_push_itself_is_refused():
|
|
814
|
+
"""The warning is about the *consequence of applying* the status, which
|
|
815
|
+
is independent of the #835 ordering guard's own separate refusal
|
|
816
|
+
(`quality-check` with no preview queued yet) — both fire together
|
|
817
|
+
rather than the ordering guard's exit code swallowing the warning."""
|
|
818
|
+
result = run("portal", "enqueue-status", "sub_1", "quality-check")
|
|
819
|
+
assert result.exit_code != 0
|
|
820
|
+
assert WITHDRAWAL_WARNING in result.output
|
|
821
|
+
assert "preview" in result.output
|
|
822
|
+
|
|
823
|
+
|
|
716
824
|
def test_outbox_is_empty_by_default():
|
|
717
825
|
result = run("portal", "outbox")
|
|
718
826
|
assert result.exit_code == 0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.322 → code_coordinator-0.5.323}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|