code-coordinator 0.5.222__tar.gz → 0.5.224__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.222 → code_coordinator-0.5.224}/PKG-INFO +1 -1
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.222 → code_coordinator-0.5.224/coord}/deploy/coord-notify.service +16 -0
- {code_coordinator-0.5.222/coord → code_coordinator-0.5.224}/deploy/coord-notify.service +16 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/coord-test-runner.sh +26 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_baseline.py +77 -0
- code_coordinator-0.5.224/tests/test_deploy_notify_unit.py +119 -0
- code_coordinator-0.5.224/tests/test_packaged_deploy_units.py +179 -0
- code_coordinator-0.5.222/tests/test_packaged_deploy_units.py +0 -89
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/.gitignore +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/CLAUDE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/GOAL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/LICENSE +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/MANIFEST.in +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/README.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/block_log.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_service.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/brain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/claim.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/client.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/comments.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/config.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dao.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/db.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/deps.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/events.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/filelock.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/freshness.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/gates.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/goal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/context.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/models.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/render.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/health/units.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/hooks.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/interactive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/models.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/network.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/notify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/openapi.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/parentage.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/plans.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/progress.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/release_window.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/reports.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/review.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/self_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/smoke.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/split_work.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_author.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/test_report.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/install-agent.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/pyproject.toml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/setup.cfg +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/__init__.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/conftest.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_db.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_events.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_init.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_models.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_network.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_session.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_split.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_state.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.222 → code_coordinator-0.5.224}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -483,6 +483,7 @@ tests/test_deploy_coord_web_dist.py
|
|
|
483
483
|
tests/test_deploy_coord_web_rollback.py
|
|
484
484
|
tests/test_deploy_drive_queue_unit.py
|
|
485
485
|
tests/test_deploy_manifest.py
|
|
486
|
+
tests/test_deploy_notify_unit.py
|
|
486
487
|
tests/test_deploy_units_lane.py
|
|
487
488
|
tests/test_deploy_web_unit.py
|
|
488
489
|
tests/test_deps.py
|
{code_coordinator-0.5.222 → code_coordinator-0.5.224}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -553,6 +553,7 @@
|
|
|
553
553
|
"tests/test_deploy_coord_web_rollback.py",
|
|
554
554
|
"tests/test_deploy_drive_queue_unit.py",
|
|
555
555
|
"tests/test_deploy_manifest.py",
|
|
556
|
+
"tests/test_deploy_notify_unit.py",
|
|
556
557
|
"tests/test_deploy_units_lane.py",
|
|
557
558
|
"tests/test_deploy_web_unit.py",
|
|
558
559
|
"tests/test_deps.py",
|
|
@@ -48,6 +48,22 @@ Wants=network-online.target
|
|
|
48
48
|
|
|
49
49
|
[Service]
|
|
50
50
|
Type=oneshot
|
|
51
|
+
# #2561: this unit carried NO Environment=PATH= at all, so every subprocess
|
|
52
|
+
# `coord notify` spawns — the #2464 out-of-band confirmation pass
|
|
53
|
+
# (coord/confirm_test.py) re-running the repo's real build+test, and any
|
|
54
|
+
# `coord_argv()` (coord/drive.py) escalation resolving `shutil.which("coord")`
|
|
55
|
+
# — ran under systemd's bare user-manager PATH
|
|
56
|
+
# (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
|
|
57
|
+
# /usr/local/games:/snap/bin), which does NOT contain ~/.local/bin (where the
|
|
58
|
+
# pinned `coord` shim lives) or ~/.cargo/bin (where rustup puts `cargo`). That
|
|
59
|
+
# let this daemon's confirmation runs resolve a *different* toolchain than a
|
|
60
|
+
# dev shell or coord-serve.service would for the identical command — and cost
|
|
61
|
+
# a real dispatch when it refuted a genuinely clean CC#2556 branch over a
|
|
62
|
+
# PATH-dependent test assertion having nothing to do with the diff under
|
|
63
|
+
# review. Byte-identical to coord-serve.service's line (same host, same role
|
|
64
|
+
# family, same #1831/#1117 reasoning — see that unit's comment for why each
|
|
65
|
+
# entry is there and why the ordering matters).
|
|
66
|
+
Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
|
|
51
67
|
ExecStart=%h/.coord-venv/bin/coord notify --config %h/.coord/coordinator.yml
|
|
52
68
|
# #2464: sized off `coord.confirm_test.notify_client_timeout_seconds()` — the
|
|
53
69
|
# HTTP timeout the CLI gives its `/notify` POST — plus slack, because this is
|
|
@@ -48,6 +48,22 @@ Wants=network-online.target
|
|
|
48
48
|
|
|
49
49
|
[Service]
|
|
50
50
|
Type=oneshot
|
|
51
|
+
# #2561: this unit carried NO Environment=PATH= at all, so every subprocess
|
|
52
|
+
# `coord notify` spawns — the #2464 out-of-band confirmation pass
|
|
53
|
+
# (coord/confirm_test.py) re-running the repo's real build+test, and any
|
|
54
|
+
# `coord_argv()` (coord/drive.py) escalation resolving `shutil.which("coord")`
|
|
55
|
+
# — ran under systemd's bare user-manager PATH
|
|
56
|
+
# (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
|
|
57
|
+
# /usr/local/games:/snap/bin), which does NOT contain ~/.local/bin (where the
|
|
58
|
+
# pinned `coord` shim lives) or ~/.cargo/bin (where rustup puts `cargo`). That
|
|
59
|
+
# let this daemon's confirmation runs resolve a *different* toolchain than a
|
|
60
|
+
# dev shell or coord-serve.service would for the identical command — and cost
|
|
61
|
+
# a real dispatch when it refuted a genuinely clean CC#2556 branch over a
|
|
62
|
+
# PATH-dependent test assertion having nothing to do with the diff under
|
|
63
|
+
# review. Byte-identical to coord-serve.service's line (same host, same role
|
|
64
|
+
# family, same #1831/#1117 reasoning — see that unit's comment for why each
|
|
65
|
+
# entry is there and why the ordering matters).
|
|
66
|
+
Environment=PATH=%h/.cargo/bin:%h/.local/bin:%h/src/code-coordinator/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
|
|
51
67
|
ExecStart=%h/.coord-venv/bin/coord notify --config %h/.coord/coordinator.yml
|
|
52
68
|
# #2464: sized off `coord.confirm_test.notify_client_timeout_seconds()` — the
|
|
53
69
|
# HTTP timeout the CLI gives its `/notify` POST — plus slack, because this is
|
|
@@ -829,6 +829,32 @@ run_python() {
|
|
|
829
829
|
return $?
|
|
830
830
|
fi
|
|
831
831
|
|
|
832
|
+
# #2562: the isolation re-run above is not all-or-nothing evidence — its
|
|
833
|
+
# own `FAILED ` lines say EXACTLY which node ids survived. Rebuild
|
|
834
|
+
# $failed from those before doing anything else: a test that dropped out
|
|
835
|
+
# PASSED in isolation and is by definition the flake case this whole
|
|
836
|
+
# block exists to catch. Handing the ORIGINAL (unpruned) set to the
|
|
837
|
+
# baseline comparison below is the bug this closes — one genuine failure
|
|
838
|
+
# was keeping a flake in the set, and the baseline comparison is itself
|
|
839
|
+
# all-or-nothing (#2170's unanimity), so the flake alone could suppress a
|
|
840
|
+
# correct BASELINE-RED downgrade.
|
|
841
|
+
local still_failed
|
|
842
|
+
still_failed="$(grep '^FAILED ' "$rerun" | awk '{print $2}' | sort -u || true)"
|
|
843
|
+
if [[ -z "$still_failed" ]]; then
|
|
844
|
+
# Non-zero exit but no parseable FAILED lines — e.g. a collection/
|
|
845
|
+
# import error on the isolated re-run. Nothing to prune against;
|
|
846
|
+
# fall back to the original set rather than claim a pruning that
|
|
847
|
+
# did not happen.
|
|
848
|
+
still_failed="$failed"
|
|
849
|
+
fi
|
|
850
|
+
local pruned_count; pruned_count="$(printf '%s\n' "$still_failed" | grep -c . || true)"
|
|
851
|
+
if [[ "$pruned_count" -lt "$count" ]]; then
|
|
852
|
+
log "$((count - pruned_count)) of $count failing test(s) passed in isolation — treating as flakes, comparing the remaining $pruned_count against the baseline"
|
|
853
|
+
FLAKES+=("python:$((count - pruned_count))")
|
|
854
|
+
fi
|
|
855
|
+
failed="$still_failed"
|
|
856
|
+
count="$pruned_count"
|
|
857
|
+
|
|
832
858
|
# Not a flake. Before calling it the branch's fault, ask the question the
|
|
833
859
|
# Test gate is actually asked: is this worse than $BASE_REF on THIS machine?
|
|
834
860
|
# (#2170 — see the baseline section above for why this only ever downgrades
|
{code_coordinator-0.5.222 → code_coordinator-0.5.224}/tests/test_coord_test_runner_baseline.py
RENAMED
|
@@ -97,6 +97,15 @@ if [[ "$1" == "-m" && "$2" == "pytest" ]]; then
|
|
|
97
97
|
printf '%s passed\n' "2"
|
|
98
98
|
exit 0
|
|
99
99
|
fi
|
|
100
|
+
# #2562: a PARTIAL isolation re-run — one node id genuinely still
|
|
101
|
+
# fails, the rest passed. Distinct from FAKE_RERUN_PASSES (all pass,
|
|
102
|
+
# exit 0) and from the "no override" default (everything in
|
|
103
|
+
# FAKE_BRANCH_FAILED fails again, as if isolation changed nothing).
|
|
104
|
+
if [[ "$_targeted" -eq 1 && -n "${FAKE_RERUN_STILL_FAILING:-}" ]]; then
|
|
105
|
+
_emit_failed "$FAKE_RERUN_STILL_FAILING"
|
|
106
|
+
printf '1 failed, 1 passed\n'
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
100
109
|
_emit_failed "${FAKE_BRANCH_FAILED:-}"
|
|
101
110
|
printf '2 failed\n'
|
|
102
111
|
exit 1
|
|
@@ -393,6 +402,74 @@ def test_a_flake_is_still_a_flake_and_never_consults_the_baseline(repo: Path) ->
|
|
|
393
402
|
assert "baseline:" not in result.stdout + result.stderr
|
|
394
403
|
|
|
395
404
|
|
|
405
|
+
# ── #2562: partial-flake pruning feeds baseline comparison ──────────────────
|
|
406
|
+
#
|
|
407
|
+
# The all-or-nothing bug: `pytest $failed` re-ran the whole failing set
|
|
408
|
+
# together, so ONE genuine failure alongside a flake kept the flake in
|
|
409
|
+
# `$failed` — and that poisoned set then went to `python_baseline_is_red`,
|
|
410
|
+
# itself unanimity-gated, where the flake (which passes on the baseline same
|
|
411
|
+
# as everywhere else) short-circuited a correct BASELINE-RED downgrade. The
|
|
412
|
+
# fix rebuilds `$failed` from the isolation re-run's own `FAILED ` lines
|
|
413
|
+
# before doing anything else with it.
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def test_mixed_flake_and_genuine_prunes_to_baseline_red(repo: Path) -> None:
|
|
417
|
+
"""{genuine, flake} prunes to {genuine}, and BASELINE-RED fires on just
|
|
418
|
+
that remainder — the exact CC#2556 shape from the issue: a real flake
|
|
419
|
+
sitting next to a test that fails identically on the merge-base must not
|
|
420
|
+
suppress the downgrade.
|
|
421
|
+
"""
|
|
422
|
+
result = _run(
|
|
423
|
+
repo,
|
|
424
|
+
# Isolation re-run: test_one still fails, test_two (the flake) passed
|
|
425
|
+
# and dropped out.
|
|
426
|
+
FAKE_RERUN_STILL_FAILING="tests/test_ambient.py::test_one",
|
|
427
|
+
# Baseline reproduces the one that's left.
|
|
428
|
+
FAKE_BASELINE_FAILED="tests/test_ambient.py::test_one",
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
assert result.returncode == 4, (result.returncode, result.stdout, result.stderr)
|
|
432
|
+
assert "RESULT: BASELINE-RED (python)" in result.stdout
|
|
433
|
+
assert "1 of 2 failing test(s) passed in isolation" in result.stdout
|
|
434
|
+
assert "comparing the remaining 1 against the baseline" in result.stdout
|
|
435
|
+
assert "BASELINE-RED(python): all 1 failing test(s) fail identically" in result.stdout
|
|
436
|
+
# The pruned flake must not appear as part of the (now genuine-only) set.
|
|
437
|
+
assert "tests/test_ambient.py::test_one" in result.stdout
|
|
438
|
+
assert "RESULT: FAIL" not in result.stdout
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def test_mixed_flake_and_genuine_prunes_to_a_smaller_genuine_fail(repo: Path) -> None:
|
|
442
|
+
"""Same pruning, but the remainder is NOT baseline-red: still a FAIL, but
|
|
443
|
+
for the pruned count and node id only — the reported list must match
|
|
444
|
+
what actually failed on the isolation re-run, not the original set.
|
|
445
|
+
"""
|
|
446
|
+
result = _run(
|
|
447
|
+
repo,
|
|
448
|
+
FAKE_RERUN_STILL_FAILING="tests/test_ambient.py::test_one",
|
|
449
|
+
# FAKE_BASELINE_FAILED unset ⇒ baseline is green for test_one too.
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
assert result.returncode == 1
|
|
453
|
+
assert "RESULT: FAIL (python)" in result.stdout
|
|
454
|
+
assert "BASELINE-RED" not in result.stdout
|
|
455
|
+
assert "1 of 2 failing test(s) passed in isolation" in result.stdout
|
|
456
|
+
assert "FAIL(python): 1 test(s) fail on re-run — genuine" in result.stdout
|
|
457
|
+
assert "tests/test_ambient.py::test_one" in result.stdout
|
|
458
|
+
assert "tests/test_ambient.py::test_two" not in (
|
|
459
|
+
result.stdout.split("FAIL(python): 1 test(s) fail on re-run — genuine")[1]
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
def test_all_genuine_failing_set_is_unaffected_by_pruning(repo: Path) -> None:
|
|
464
|
+
"""Both failures still fail in isolation ⇒ nothing pruned, and behaviour
|
|
465
|
+
matches the pre-#2562 baseline-red path exactly (no pruning log line)."""
|
|
466
|
+
result = _run(repo, FAKE_BASELINE_FAILED=BRANCH_FAILED)
|
|
467
|
+
|
|
468
|
+
assert result.returncode == 4
|
|
469
|
+
assert "RESULT: BASELINE-RED (python)" in result.stdout
|
|
470
|
+
assert "passed in isolation" not in result.stdout
|
|
471
|
+
|
|
472
|
+
|
|
396
473
|
# ── #2180 review fix: the Test stage must agree with CI on tests/acceptance ─
|
|
397
474
|
#
|
|
398
475
|
# Before this fix, `--ignore=tests/acceptance` dropped the sealed cli-pytest
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Regression guard for `deploy/coord-notify.service` (#2561 `Environment=PATH`).
|
|
2
|
+
|
|
3
|
+
Mirrors `tests/test_deploy_drive_queue_unit.py`'s `Environment=PATH=` section
|
|
4
|
+
for `coord-notify.service`'s own #2561 fix: this unit carried NO
|
|
5
|
+
`Environment=PATH=` at all, so every subprocess it spawns —
|
|
6
|
+
`coord_argv()`-resolved escalation dispatch, and the #2464 out-of-band
|
|
7
|
+
confirmation pass (`coord.confirm_test`) re-running the repo's own build/test
|
|
8
|
+
commands — ran under systemd's bare user-manager PATH instead of the pinned
|
|
9
|
+
release. That silent divergence refuted a genuinely clean branch (CC#2556)
|
|
10
|
+
over a PATH-dependent test assertion having nothing to do with the diff under
|
|
11
|
+
review. See `deploy/coord-notify.service`'s own header comment for the full
|
|
12
|
+
story, and `deploy/coord-serve.service`'s for why each PATH entry is there —
|
|
13
|
+
this unit's line is byte-identical to that one's (same host, same daemon
|
|
14
|
+
family), unlike `coord-drive-queue.service`'s bespoke #2314 ordering.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import configparser
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
23
|
+
UNIT_PATH = REPO_ROOT / "deploy" / "coord-notify.service"
|
|
24
|
+
SERVE_UNIT_PATH = REPO_ROOT / "deploy" / "coord-serve.service"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _parse_unit(path: Path) -> configparser.RawConfigParser:
|
|
28
|
+
# RawConfigParser (not ConfigParser): systemd's `%h`/`%%` specifiers
|
|
29
|
+
# collide with configparser's default `%`-interpolation syntax and raise
|
|
30
|
+
# otherwise (e.g. the `ExecStart=` line below).
|
|
31
|
+
cp = configparser.RawConfigParser(strict=False)
|
|
32
|
+
cp.read(path)
|
|
33
|
+
return cp
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _unit_path_entries(path: Path) -> list[str]:
|
|
37
|
+
"""*path*'s `Environment=PATH=` value, split into entries.
|
|
38
|
+
|
|
39
|
+
Asserts its presence first: an absent directive is the exact #2561
|
|
40
|
+
regression (the unit then silently inherits the user manager's default),
|
|
41
|
+
and a bare KeyError from configparser would not say so.
|
|
42
|
+
"""
|
|
43
|
+
unit = _parse_unit(path)
|
|
44
|
+
assert unit.has_option("Service", "Environment"), (
|
|
45
|
+
f"{path.name} declares no Environment=PATH= — it will inherit the "
|
|
46
|
+
"systemd user manager's default PATH, which has neither "
|
|
47
|
+
"~/.local/bin (the pinned `coord` shim) nor ~/.cargo/bin, so every "
|
|
48
|
+
"coord_argv()-resolved subprocess it spawns silently resolves a "
|
|
49
|
+
"different toolchain than a dev shell would (#2561)."
|
|
50
|
+
)
|
|
51
|
+
value = unit.get("Service", "Environment")
|
|
52
|
+
assert value.startswith("PATH="), value
|
|
53
|
+
return value[len("PATH=") :].split(":")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_still_a_oneshot_unit() -> None:
|
|
57
|
+
"""The fix's reasoning (systemd's default PATH, not a login shell's)
|
|
58
|
+
assumes `Type=oneshot`. If this ever changes, re-derive rather than
|
|
59
|
+
silently carry the assumption forward."""
|
|
60
|
+
unit = _parse_unit(UNIT_PATH)
|
|
61
|
+
assert unit.get("Service", "Type") == "oneshot"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_local_bin_is_on_the_path() -> None:
|
|
65
|
+
"""The actual #2561 fix. `~/.local/bin/coord` is the pinned-release
|
|
66
|
+
shim (a symlink onto `~/.coord-venv/bin/coord`); without it on PATH,
|
|
67
|
+
`coord_argv()`'s `shutil.which("coord")` falls back to
|
|
68
|
+
`[sys.executable, "-m", "coord.cli"]`, a different argv shape that
|
|
69
|
+
downstream code (and tests asserting on it) do not expect."""
|
|
70
|
+
assert "%h/.local/bin" in _unit_path_entries(UNIT_PATH)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def test_cargo_bin_is_on_the_path() -> None:
|
|
74
|
+
"""rustup installs `cargo` at ~/.cargo/bin and nowhere else — the #2464
|
|
75
|
+
confirmation pass this unit runs re-executes the repo's own
|
|
76
|
+
`build_command`/`test_command`, which is `cargo build`/`cargo test` for a
|
|
77
|
+
`tui/**`-touching branch."""
|
|
78
|
+
assert "%h/.cargo/bin" in _unit_path_entries(UNIT_PATH)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_path_is_a_superset_of_the_systemd_user_default() -> None:
|
|
82
|
+
"""Declaring an explicit PATH *replaces* the inherited one, so anything
|
|
83
|
+
this unit reaches today via the user manager's default must be carried
|
|
84
|
+
over explicitly or the fix trades one silent breakage for another."""
|
|
85
|
+
entries = set(_unit_path_entries(UNIT_PATH))
|
|
86
|
+
# `systemctl --user show-environment` default, minus the games dirs.
|
|
87
|
+
inherited = [
|
|
88
|
+
"/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin",
|
|
89
|
+
"/sbin", "/bin", "/snap/bin",
|
|
90
|
+
]
|
|
91
|
+
missing = [e for e in inherited if e not in entries]
|
|
92
|
+
assert not missing, f"PATH drops inherited entries: {missing}"
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def test_path_has_no_editable_checkout_shadow() -> None:
|
|
96
|
+
"""Enforce #1831's rule with #1831's own detector rather than by eye: no
|
|
97
|
+
`.venv/bin` entry may precede ~/.local/bin or ~/.coord-venv/bin, or the
|
|
98
|
+
`unit_drift` health check goes CRIT on this unit the moment it installs."""
|
|
99
|
+
from coord.health.checks.unit_drift import find_path_shadow
|
|
100
|
+
|
|
101
|
+
assert find_path_shadow(UNIT_PATH.read_text()) is None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_path_matches_coord_serve_byte_for_byte() -> None:
|
|
105
|
+
"""#2561 asked for byte-identity with `coord-serve.service`'s line —
|
|
106
|
+
same host, same daemon family, same #1831/#1117 reasoning for each entry.
|
|
107
|
+
Unlike `coord-drive-queue.service` (a deliberately different, #2314-driven
|
|
108
|
+
ordering), there is no reason for this unit's PATH to diverge from
|
|
109
|
+
`coord-serve.service`'s."""
|
|
110
|
+
assert _unit_path_entries(UNIT_PATH) == _unit_path_entries(SERVE_UNIT_PATH)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def test_path_comment_names_the_issue() -> None:
|
|
114
|
+
"""Same rationale as `test_deploy_drive_queue_unit.py`'s comment guard —
|
|
115
|
+
the reasoning for why this line must never be dropped stays attached to
|
|
116
|
+
it."""
|
|
117
|
+
text = UNIT_PATH.read_text()
|
|
118
|
+
assert "#2561" in text
|
|
119
|
+
assert "Environment=PATH=" in text
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"""`coord/deploy/` must stay byte-identical to the repo-root `deploy/` (#1927).
|
|
2
|
+
|
|
3
|
+
The unit-drift check (`coord/health/checks/unit_drift.py`) diffs each host's
|
|
4
|
+
installed systemd unit against the units *packaged with the installed
|
|
5
|
+
release*. Those live under `coord/deploy/` so they ship in the wheel — a
|
|
6
|
+
reference that cannot drift with the host's git checkout.
|
|
7
|
+
|
|
8
|
+
The reviewed source of truth is still the repo-root `deploy/`: it is what
|
|
9
|
+
every unit header, doc and provisioning script names, and what the other
|
|
10
|
+
`tests/test_deploy_*.py` modules read. The packaged copy is exactly that,
|
|
11
|
+
copied. This module is what stops the copy from going stale — the failure
|
|
12
|
+
mode is silent and nasty, because a stale packaged unit would make the
|
|
13
|
+
release *look* verified while comparing against the wrong file.
|
|
14
|
+
|
|
15
|
+
Nothing here needs a fleet, a config or a clock: it is a repo-layout
|
|
16
|
+
assertion.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import re
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
import pytest
|
|
25
|
+
|
|
26
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
27
|
+
SOURCE_DIR = REPO_ROOT / "deploy"
|
|
28
|
+
PACKAGED_DIR = REPO_ROOT / "coord" / "deploy"
|
|
29
|
+
|
|
30
|
+
UNIT_GLOBS = ("*.service", "*.timer")
|
|
31
|
+
|
|
32
|
+
# #2561: units whose ExecStart runs a `coord` subcommand that itself launches
|
|
33
|
+
# FURTHER `coord` subprocesses via `coord_argv()` (coord/drive.py) —
|
|
34
|
+
# `shutil.which("coord")`, i.e. resolved from *this unit's own* PATH, not a
|
|
35
|
+
# login shell's. `coord-notify.service` runs the #2464 out-of-band
|
|
36
|
+
# confirmation pass and escalation dispatch; `coord-drive-queue.service`
|
|
37
|
+
# launches `coord drive --tmux` / `coord merge --only` from
|
|
38
|
+
# coord/commands/drive_queue.py. Both went a release cycle with NO
|
|
39
|
+
# `Environment=PATH=` at all, so that resolution silently fell through
|
|
40
|
+
# systemd's bare user-manager PATH (no ~/.local/bin, no ~/.cargo/bin) instead
|
|
41
|
+
# of the pinned release — a real dispatch got refuted over it (#2561's CC#2556
|
|
42
|
+
# incident). `coord-serve.service` and `coord-agent.service` are the other two
|
|
43
|
+
# daemons already on this list; they got their PATH fix in earlier issues
|
|
44
|
+
# (#1831/#1671) and are included here so this test guards them too, not just
|
|
45
|
+
# the two #2561 named.
|
|
46
|
+
#
|
|
47
|
+
# `coord-web.service`, `coord-db-backup.service`,
|
|
48
|
+
# `coord-release-propagate.service` and `coord-release-window.service` are
|
|
49
|
+
# DELIBERATELY not in this set — #2561 asked that the other four units get a
|
|
50
|
+
# considered "does this need it" rather than an accident, not that this test
|
|
51
|
+
# assume the answer. Auditing them is follow-up work, not something to fold in
|
|
52
|
+
# here silently.
|
|
53
|
+
_COORD_ARGV_SPAWNING_UNITS = frozenset(
|
|
54
|
+
{
|
|
55
|
+
"coord-notify.service",
|
|
56
|
+
"coord-drive-queue.service",
|
|
57
|
+
"coord-serve.service",
|
|
58
|
+
"coord-agent.service",
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
_PATH_LINE_RE = re.compile(r"^Environment\s*=\s*PATH=(.*)$", re.MULTILINE)
|
|
63
|
+
|
|
64
|
+
# A PATH entry resolving to the pinned release — `~/.local/bin/coord` is a
|
|
65
|
+
# symlink onto `~/.coord-venv/bin/coord` (see deploy/coord-serve.service's
|
|
66
|
+
# header comment). Either makes `shutil.which("coord")` find the real binary
|
|
67
|
+
# instead of coord_argv()'s `python -m coord.cli` fallback.
|
|
68
|
+
_RELEASE_MARKERS = ("/.local/bin", "/.coord-venv/bin")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _units(directory: Path) -> dict[str, Path]:
|
|
72
|
+
out: dict[str, Path] = {}
|
|
73
|
+
for pattern in UNIT_GLOBS:
|
|
74
|
+
for path in directory.glob(pattern):
|
|
75
|
+
out[path.name] = path
|
|
76
|
+
return out
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
SOURCE_UNITS = _units(SOURCE_DIR)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_source_deploy_dir_has_units() -> None:
|
|
83
|
+
"""Guards the guard: an empty source dir would make every other
|
|
84
|
+
assertion here vacuously true."""
|
|
85
|
+
assert "coord-serve.service" in SOURCE_UNITS
|
|
86
|
+
assert "coord-agent.service" in SOURCE_UNITS
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_packaged_dir_covers_every_source_unit() -> None:
|
|
90
|
+
missing = sorted(set(SOURCE_UNITS) - set(_units(PACKAGED_DIR)))
|
|
91
|
+
assert not missing, (
|
|
92
|
+
f"deploy/ has units the wheel would not ship: {missing}. "
|
|
93
|
+
"Run: cp deploy/*.service deploy/*.timer coord/deploy/"
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_packaged_dir_has_no_units_of_its_own() -> None:
|
|
98
|
+
extra = sorted(set(_units(PACKAGED_DIR)) - set(SOURCE_UNITS))
|
|
99
|
+
assert not extra, (
|
|
100
|
+
f"coord/deploy/ carries units deploy/ does not: {extra}. The "
|
|
101
|
+
"repo-root deploy/ is the reviewed source of truth; delete these or "
|
|
102
|
+
"add them there."
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@pytest.mark.parametrize("name", sorted(SOURCE_UNITS))
|
|
107
|
+
def test_packaged_unit_is_byte_identical(name: str) -> None:
|
|
108
|
+
"""A drifted copy is worse than no copy: the check would report a
|
|
109
|
+
confident green against the wrong reference."""
|
|
110
|
+
packaged = PACKAGED_DIR / name
|
|
111
|
+
assert packaged.exists(), f"missing coord/deploy/{name}"
|
|
112
|
+
assert packaged.read_bytes() == (SOURCE_DIR / name).read_bytes(), (
|
|
113
|
+
f"coord/deploy/{name} has drifted from deploy/{name}. deploy/ is the "
|
|
114
|
+
f"source of truth — run: cp deploy/{name} coord/deploy/{name}"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def test_pyproject_ships_the_packaged_units() -> None:
|
|
119
|
+
"""The copy is only worth having if setuptools puts it in the wheel."""
|
|
120
|
+
import tomllib
|
|
121
|
+
|
|
122
|
+
data = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text())
|
|
123
|
+
patterns = data["tool"]["setuptools"]["package-data"]["coord"]
|
|
124
|
+
assert any(p.startswith("deploy/") for p in patterns), (
|
|
125
|
+
"coord/deploy/ is not in [tool.setuptools.package-data]; the wheel "
|
|
126
|
+
"would ship no reference units and every host would fall back to its "
|
|
127
|
+
"own unverified checkout (#1927)"
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_coord_argv_spawning_units_are_known_source_units() -> None:
|
|
132
|
+
"""Guards the guard: a typo'd/renamed entry in the set below would make
|
|
133
|
+
every assertion in :func:`test_coord_argv_spawning_unit_declares_path`
|
|
134
|
+
vacuously true for that unit."""
|
|
135
|
+
missing = sorted(_COORD_ARGV_SPAWNING_UNITS - set(SOURCE_UNITS))
|
|
136
|
+
assert not missing, (
|
|
137
|
+
f"_COORD_ARGV_SPAWNING_UNITS names units deploy/ does not have: {missing}"
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@pytest.mark.parametrize("name", sorted(_COORD_ARGV_SPAWNING_UNITS))
|
|
142
|
+
def test_coord_argv_spawning_unit_declares_path(name: str) -> None:
|
|
143
|
+
"""#2561: `coord-notify.service` and `coord-drive-queue.service` carried
|
|
144
|
+
NO `Environment=PATH=` at all, so `coord_argv()`'s `shutil.which("coord")`
|
|
145
|
+
(coord/drive.py) resolved every subprocess they spawn — the #2464
|
|
146
|
+
confirmation pass, escalation dispatch, `coord drive --tmux` — under
|
|
147
|
+
systemd's bare user-manager PATH instead of the pinned release. That
|
|
148
|
+
silent divergence refuted a genuinely clean branch (CC#2556) over a
|
|
149
|
+
PATH-dependent test assertion unrelated to the diff under review.
|
|
150
|
+
|
|
151
|
+
This is a byte-existence/marker check, not a byte-identity one: unlike
|
|
152
|
+
`test_packaged_unit_is_byte_identical`, the units in
|
|
153
|
+
`_COORD_ARGV_SPAWNING_UNITS` do NOT all carry the same PATH= value as each
|
|
154
|
+
other (coord-drive-queue.service's #2314 pin ordering is deliberately
|
|
155
|
+
different from coord-serve.service's #1117 repo-venv entry) — only that
|
|
156
|
+
each one HAS a PATH= line, and that line lets `shutil.which("coord")`
|
|
157
|
+
reach the pinned release rather than falling through to it.
|
|
158
|
+
"""
|
|
159
|
+
text = (SOURCE_DIR / name).read_text()
|
|
160
|
+
matches = _PATH_LINE_RE.findall(text)
|
|
161
|
+
assert matches, (
|
|
162
|
+
f"deploy/{name} declares no Environment=PATH= — every subprocess it "
|
|
163
|
+
"spawns via coord_argv() falls back to systemd's bare user-manager "
|
|
164
|
+
"PATH, which does not contain ~/.local/bin or ~/.cargo/bin (#2561). "
|
|
165
|
+
"Add one — see deploy/coord-serve.service's line for the reasoning."
|
|
166
|
+
)
|
|
167
|
+
# Only the LAST directive takes effect if the unit repeats the key,
|
|
168
|
+
# mirroring coord.health.checks.unit_drift.find_path_shadow.
|
|
169
|
+
entries = [e for e in matches[-1].split(":") if e]
|
|
170
|
+
has_release_marker = any(
|
|
171
|
+
entry.rstrip("/").endswith(marker)
|
|
172
|
+
for entry in entries
|
|
173
|
+
for marker in _RELEASE_MARKERS
|
|
174
|
+
)
|
|
175
|
+
assert has_release_marker, (
|
|
176
|
+
f"deploy/{name}'s Environment=PATH= ({matches[-1]!r}) contains none of "
|
|
177
|
+
f"{_RELEASE_MARKERS} — shutil.which(\"coord\") in subprocesses this "
|
|
178
|
+
"unit spawns cannot resolve the pinned release (#2561)."
|
|
179
|
+
)
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"""`coord/deploy/` must stay byte-identical to the repo-root `deploy/` (#1927).
|
|
2
|
-
|
|
3
|
-
The unit-drift check (`coord/health/checks/unit_drift.py`) diffs each host's
|
|
4
|
-
installed systemd unit against the units *packaged with the installed
|
|
5
|
-
release*. Those live under `coord/deploy/` so they ship in the wheel — a
|
|
6
|
-
reference that cannot drift with the host's git checkout.
|
|
7
|
-
|
|
8
|
-
The reviewed source of truth is still the repo-root `deploy/`: it is what
|
|
9
|
-
every unit header, doc and provisioning script names, and what the other
|
|
10
|
-
`tests/test_deploy_*.py` modules read. The packaged copy is exactly that,
|
|
11
|
-
copied. This module is what stops the copy from going stale — the failure
|
|
12
|
-
mode is silent and nasty, because a stale packaged unit would make the
|
|
13
|
-
release *look* verified while comparing against the wrong file.
|
|
14
|
-
|
|
15
|
-
Nothing here needs a fleet, a config or a clock: it is a repo-layout
|
|
16
|
-
assertion.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
from __future__ import annotations
|
|
20
|
-
|
|
21
|
-
from pathlib import Path
|
|
22
|
-
|
|
23
|
-
import pytest
|
|
24
|
-
|
|
25
|
-
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
26
|
-
SOURCE_DIR = REPO_ROOT / "deploy"
|
|
27
|
-
PACKAGED_DIR = REPO_ROOT / "coord" / "deploy"
|
|
28
|
-
|
|
29
|
-
UNIT_GLOBS = ("*.service", "*.timer")
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def _units(directory: Path) -> dict[str, Path]:
|
|
33
|
-
out: dict[str, Path] = {}
|
|
34
|
-
for pattern in UNIT_GLOBS:
|
|
35
|
-
for path in directory.glob(pattern):
|
|
36
|
-
out[path.name] = path
|
|
37
|
-
return out
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
SOURCE_UNITS = _units(SOURCE_DIR)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def test_source_deploy_dir_has_units() -> None:
|
|
44
|
-
"""Guards the guard: an empty source dir would make every other
|
|
45
|
-
assertion here vacuously true."""
|
|
46
|
-
assert "coord-serve.service" in SOURCE_UNITS
|
|
47
|
-
assert "coord-agent.service" in SOURCE_UNITS
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def test_packaged_dir_covers_every_source_unit() -> None:
|
|
51
|
-
missing = sorted(set(SOURCE_UNITS) - set(_units(PACKAGED_DIR)))
|
|
52
|
-
assert not missing, (
|
|
53
|
-
f"deploy/ has units the wheel would not ship: {missing}. "
|
|
54
|
-
"Run: cp deploy/*.service deploy/*.timer coord/deploy/"
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def test_packaged_dir_has_no_units_of_its_own() -> None:
|
|
59
|
-
extra = sorted(set(_units(PACKAGED_DIR)) - set(SOURCE_UNITS))
|
|
60
|
-
assert not extra, (
|
|
61
|
-
f"coord/deploy/ carries units deploy/ does not: {extra}. The "
|
|
62
|
-
"repo-root deploy/ is the reviewed source of truth; delete these or "
|
|
63
|
-
"add them there."
|
|
64
|
-
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@pytest.mark.parametrize("name", sorted(SOURCE_UNITS))
|
|
68
|
-
def test_packaged_unit_is_byte_identical(name: str) -> None:
|
|
69
|
-
"""A drifted copy is worse than no copy: the check would report a
|
|
70
|
-
confident green against the wrong reference."""
|
|
71
|
-
packaged = PACKAGED_DIR / name
|
|
72
|
-
assert packaged.exists(), f"missing coord/deploy/{name}"
|
|
73
|
-
assert packaged.read_bytes() == (SOURCE_DIR / name).read_bytes(), (
|
|
74
|
-
f"coord/deploy/{name} has drifted from deploy/{name}. deploy/ is the "
|
|
75
|
-
f"source of truth — run: cp deploy/{name} coord/deploy/{name}"
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def test_pyproject_ships_the_packaged_units() -> None:
|
|
80
|
-
"""The copy is only worth having if setuptools puts it in the wheel."""
|
|
81
|
-
import tomllib
|
|
82
|
-
|
|
83
|
-
data = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text())
|
|
84
|
-
patterns = data["tool"]["setuptools"]["package-data"]["coord"]
|
|
85
|
-
assert any(p.startswith("deploy/") for p in patterns), (
|
|
86
|
-
"coord/deploy/ is not in [tool.setuptools.package-data]; the wheel "
|
|
87
|
-
"would ship no reference units and every host would fall back to its "
|
|
88
|
-
"own unverified checkout (#1927)"
|
|
89
|
-
)
|
|
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
|