code-coordinator 0.5.573__tar.gz → 0.5.574__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.573 → code_coordinator-0.5.574}/PKG-INFO +1 -1
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/bugbash.py +196 -28
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/bugbash.py +15 -3
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_bugbash.py +151 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/.gitignore +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/CLAUDE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/GOAL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/LICENSE +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/MANIFEST.in +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/README.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agent.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/backup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/block_log.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/board_service.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/brain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/claim.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/client.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/codegen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/comments.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dao.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/reports.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/db.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/deps.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/drive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/events.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/filelock.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/freshness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gates.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/goal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/gtk_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/context.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/models.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/render.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/health/units.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/hooks.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/interactive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/mac_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/models.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/network.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/notify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/openapi.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/parentage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/plans.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/progress.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/release_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/release_window.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/reports.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/review.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/self_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/smoke.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/split_work.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/sql.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/test_author.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/test_report.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/usage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/win_native_bridge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/win_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/install-agent.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/pyproject.toml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/setup.cfg +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/__init__.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/backends.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/conftest.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_client.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_reports.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_db.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_events.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_gtk_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_init.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_install_agent_capabilities_3515.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_mac_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_models.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_network.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_gate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_report_public_export.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_session.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_split.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_state.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_win_native_bridge.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_win_native_driver.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.573 → code_coordinator-0.5.574}/tests/write_parity.py +0 -0
|
@@ -405,7 +405,17 @@ def _best_match(
|
|
|
405
405
|
issue_platform = _platform_from_title(title)
|
|
406
406
|
if issue_platform is not None and issue_platform != finding.platform:
|
|
407
407
|
continue
|
|
408
|
-
score
|
|
408
|
+
# #3546: score against the TAG-STRIPPED title, not the raw one — the
|
|
409
|
+
# platform gate above already accounts for the ``[bugbash:<platform>]``
|
|
410
|
+
# prefix, so scoring the untouched title made its own extra tokens
|
|
411
|
+
# ("bugbash", the platform name) dilute the Jaccard score against a
|
|
412
|
+
# short real-world title. "Caption buttons unclickable" (3 words) vs.
|
|
413
|
+
# "[bugbash:win-native] Caption buttons unclickable" scored only 0.5
|
|
414
|
+
# — BELOW :data:`DEFAULT_DEDUPE_THRESHOLD` — purely because of the
|
|
415
|
+
# tag's own 3 extra words, which is exactly the "titles differing
|
|
416
|
+
# enough to defeat matching" root cause behind vimcode#1656/#1660
|
|
417
|
+
# being filed as two separate issues for one bug.
|
|
418
|
+
score = _title_similarity(finding.title, _strip_platform_tag(title))
|
|
409
419
|
if score >= threshold and (best is None or score > best[1]):
|
|
410
420
|
best = (issue, score)
|
|
411
421
|
return best
|
|
@@ -416,6 +426,54 @@ def _platform_from_title(title: str) -> str | None:
|
|
|
416
426
|
return m.group(1) if m else None
|
|
417
427
|
|
|
418
428
|
|
|
429
|
+
def _strip_platform_tag(title: str) -> str:
|
|
430
|
+
"""Remove a leading ``[bugbash:<platform>]`` tag (if present) before
|
|
431
|
+
scoring title similarity — see :func:`_best_match`'s comment for why
|
|
432
|
+
leaving it in place made the score sensitive to the platform name
|
|
433
|
+
itself rather than just the bug description."""
|
|
434
|
+
return re.sub(r"^\[bugbash:[^\]]+\]\s*", "", title)
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
def _dedupe_round_findings(
|
|
438
|
+
findings: Sequence[Finding],
|
|
439
|
+
open_issues: list[dict],
|
|
440
|
+
closed_issues: list[dict],
|
|
441
|
+
*,
|
|
442
|
+
threshold: float = DEFAULT_DEDUPE_THRESHOLD,
|
|
443
|
+
) -> list[DedupeResult]:
|
|
444
|
+
"""Dedupe every finding from ONE round, in order, against *open_issues*/
|
|
445
|
+
*closed_issues* — AND against every finding already decided NEW or
|
|
446
|
+
REGRESSION earlier in this SAME call (#3546).
|
|
447
|
+
|
|
448
|
+
The bugbash run that filed vimcode#1656/#1660/#1669/#1675 as four
|
|
449
|
+
separate issues for one bug did so partly because two lanes reporting
|
|
450
|
+
the identical symptom in the SAME round were each deduped only against
|
|
451
|
+
issues that existed BEFORE the round started — neither lane's finding
|
|
452
|
+
could see the other's. This function fixes that: a finding is matched
|
|
453
|
+
not just against *open_issues* but against a running list seeded with
|
|
454
|
+
every PRIOR finding in *findings* that this same walk already decided
|
|
455
|
+
was new/a regression, so the second lane's identical report comes back
|
|
456
|
+
:attr:`DedupeVerdict.DUPLICATE` instead of also being judged new.
|
|
457
|
+
|
|
458
|
+
A within-round match's :attr:`DedupeResult.matched_number` is ``None``
|
|
459
|
+
here — the sibling finding it matches has not actually been filed
|
|
460
|
+
through ``coord issue create`` yet at dedupe time, so there is no real
|
|
461
|
+
issue number to report. :func:`run_bugbash`'s filing loop resolves this
|
|
462
|
+
to the sibling's real number once that sibling is actually filed,
|
|
463
|
+
rather than leaving every within-round duplicate permanently numberless.
|
|
464
|
+
"""
|
|
465
|
+
results: list[DedupeResult] = []
|
|
466
|
+
running_open = list(open_issues)
|
|
467
|
+
for finding in findings:
|
|
468
|
+
result = dedupe_finding(finding, running_open, closed_issues, threshold=threshold)
|
|
469
|
+
results.append(result)
|
|
470
|
+
if result.verdict is not DedupeVerdict.DUPLICATE:
|
|
471
|
+
running_open.append(
|
|
472
|
+
{"number": None, "title": compose_finding_issue_title(finding)}
|
|
473
|
+
)
|
|
474
|
+
return results
|
|
475
|
+
|
|
476
|
+
|
|
419
477
|
def dedupe_finding(
|
|
420
478
|
finding: Finding,
|
|
421
479
|
open_issues: list[dict],
|
|
@@ -548,7 +606,11 @@ def build_exploration_briefing(
|
|
|
548
606
|
"When done, end your final message with a fenced "
|
|
549
607
|
f"```{FINDINGS_FENCE}``` block containing a JSON array of finding "
|
|
550
608
|
"objects, each with: title, expected, actual, repro, evidence, "
|
|
551
|
-
"suspected_repo (the
|
|
609
|
+
"suspected_repo (the repo the FIX belongs in — the app, its UI "
|
|
610
|
+
"framework, e.g. quadraui, OR the coordinator tooling itself, e.g. "
|
|
611
|
+
"claude-coordinator, if the bug is actually in this bugbash driver "
|
|
612
|
+
"or its WSL/native bridge rather than in the app under test), "
|
|
613
|
+
"captures (list of "
|
|
552
614
|
"capture paths/descriptions, may be empty). An empty array means "
|
|
553
615
|
"zero findings this round.",
|
|
554
616
|
]
|
|
@@ -700,6 +762,24 @@ class FilingResult:
|
|
|
700
762
|
preview_body: str | None = None
|
|
701
763
|
|
|
702
764
|
|
|
765
|
+
def finding_target_repo(finding: Finding) -> str:
|
|
766
|
+
"""Which repo a finding's issue should be filed into (#3546 requirement
|
|
767
|
+
2): :attr:`Finding.suspected_repo` when the worker reported one, else
|
|
768
|
+
*finding.repo* (the app the lane actually ran against) as the fallback.
|
|
769
|
+
|
|
770
|
+
Three coord/win-native-driver/WSL-bridge bugs from the first real
|
|
771
|
+
vimcode bugbash run were filed (and queued) in vimcode anyway, where no
|
|
772
|
+
worker could ever fix them, because filing unconditionally targeted
|
|
773
|
+
*finding.repo*. ``suspected_repo`` already carries the worker's best
|
|
774
|
+
guess at the actually-at-fault repo (the app itself, its UI framework,
|
|
775
|
+
or coord's own driver/bridge — see :func:`build_exploration_briefing`)
|
|
776
|
+
and defaults to *repo* in :func:`_finding_from_entry` when a lane
|
|
777
|
+
worker doesn't name one explicitly, so this is a one-line fallback, not
|
|
778
|
+
a guess of its own.
|
|
779
|
+
"""
|
|
780
|
+
return finding.suspected_repo or finding.repo
|
|
781
|
+
|
|
782
|
+
|
|
703
783
|
def file_finding(
|
|
704
784
|
finding: Finding,
|
|
705
785
|
dedupe: DedupeResult,
|
|
@@ -720,6 +800,11 @@ def file_finding(
|
|
|
720
800
|
success, queued through ``coord drive-queue add --machine
|
|
721
801
|
<lane.machine>``.
|
|
722
802
|
|
|
803
|
+
Both calls target :func:`finding_target_repo` (#3546) — NOT always
|
|
804
|
+
*finding.repo* — so a finding whose ``suspected_repo`` names coord's
|
|
805
|
+
own driver/bridge or the app's UI framework lands where a worker can
|
|
806
|
+
actually fix it, rather than in the app repo where nobody can.
|
|
807
|
+
|
|
723
808
|
``dry_run=True`` skips BOTH calls entirely and returns a preview —
|
|
724
809
|
this is the sole mechanism backing "a dry run files nothing": there is
|
|
725
810
|
no code path from ``dry_run=True`` to the runner being invoked.
|
|
@@ -732,6 +817,7 @@ def file_finding(
|
|
|
732
817
|
filed=False, queued=False, issue_number=dedupe.matched_number,
|
|
733
818
|
)
|
|
734
819
|
|
|
820
|
+
target_repo = finding_target_repo(finding)
|
|
735
821
|
title = compose_finding_issue_title(finding)
|
|
736
822
|
body = format_bug_report(
|
|
737
823
|
expected=finding.expected,
|
|
@@ -755,7 +841,7 @@ def file_finding(
|
|
|
755
841
|
|
|
756
842
|
create_out = runner(
|
|
757
843
|
[
|
|
758
|
-
"issue", "create",
|
|
844
|
+
"issue", "create", target_repo,
|
|
759
845
|
"--title", title,
|
|
760
846
|
"--expected", finding.expected,
|
|
761
847
|
"--actual", finding.actual,
|
|
@@ -771,7 +857,7 @@ def file_finding(
|
|
|
771
857
|
issue_number = int(match.group(1))
|
|
772
858
|
|
|
773
859
|
runner(
|
|
774
|
-
["drive-queue", "add",
|
|
860
|
+
["drive-queue", "add", target_repo, str(issue_number), "--machine", lane.machine]
|
|
775
861
|
)
|
|
776
862
|
|
|
777
863
|
return FilingResult(
|
|
@@ -811,6 +897,14 @@ class RoundReport:
|
|
|
811
897
|
filings: list[FilingResult] = field(default_factory=list)
|
|
812
898
|
lane_cost: dict[str, float] = field(default_factory=dict)
|
|
813
899
|
skipped_lanes: list[str] = field(default_factory=list)
|
|
900
|
+
#: ``{platform: reason}`` for every entry in :attr:`skipped_lanes`
|
|
901
|
+
#: (#3546) — a skip must be as explainable as a failure or an
|
|
902
|
+
#: unavailability, never a bare platform name with no reason attached.
|
|
903
|
+
#: Currently populated with the per-lane cost-cap detail (the only
|
|
904
|
+
#: engine-level skip reason today); kept as its own dict (rather than
|
|
905
|
+
#: folded into ``skipped_lanes`` itself) so ``skipped_lanes``'s existing
|
|
906
|
+
#: ``list[str]`` shape — already read by callers — never has to change.
|
|
907
|
+
skip_reasons: dict[str, str] = field(default_factory=dict)
|
|
814
908
|
#: Findings this round that were NOT duplicates of an already-tracked
|
|
815
909
|
#: open issue — i.e. what actually moved the round-cap/zero-findings
|
|
816
910
|
#: termination decision. Computed from the SAME dedupe verdicts stored
|
|
@@ -886,6 +980,25 @@ class RoundReport:
|
|
|
886
980
|
set(self.lane_failures) | set(self.unavailable_lanes)
|
|
887
981
|
)
|
|
888
982
|
|
|
983
|
+
@property
|
|
984
|
+
def all_lanes_skipped(self) -> bool:
|
|
985
|
+
"""``True`` when at least one lane was skipped this round (its
|
|
986
|
+
per-lane cost cap was already blown) AND NOT A SINGLE lane was
|
|
987
|
+
actually explored (#3546) — i.e. the round asked nothing, got no
|
|
988
|
+
answer from anyone, yet :attr:`new_count` still reads ``0`` the same
|
|
989
|
+
way a genuine clean pass does.
|
|
990
|
+
|
|
991
|
+
The first real vimcode bugbash run's round 4 skipped every
|
|
992
|
+
configured lane this way and the CLI still printed
|
|
993
|
+
``terminated='zero_findings'`` — a release gate reading that output
|
|
994
|
+
would conclude "last bugbash clean" about a round that tested
|
|
995
|
+
nothing at all. Distinct from :attr:`all_explored_lanes_failed` /
|
|
996
|
+
:attr:`all_explored_lanes_unavailable_or_failed`, both of which
|
|
997
|
+
require ``explored_lanes`` to be non-empty (a lane that was asked
|
|
998
|
+
and answered badly) — this property is specifically the "nobody was
|
|
999
|
+
even asked" case."""
|
|
1000
|
+
return bool(self.skipped_lanes) and not self.explored_lanes
|
|
1001
|
+
|
|
889
1002
|
|
|
890
1003
|
@dataclass
|
|
891
1004
|
class BugbashReport:
|
|
@@ -949,17 +1062,24 @@ def run_bugbash(
|
|
|
949
1062
|
|
|
950
1063
|
Each round: every lane is explored (unless it has already exceeded
|
|
951
1064
|
``cost_cap_per_lane``, in which case it is skipped and recorded in
|
|
952
|
-
``skipped_lanes`` — never silently dropped), findings
|
|
953
|
-
against a FRESH fetch of
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1065
|
+
``skipped_lanes``/``skip_reasons`` — never silently dropped), findings
|
|
1066
|
+
are deduped via :func:`_dedupe_round_findings` against a FRESH fetch of
|
|
1067
|
+
open/closed issues MERGED with every issue THIS RUN has already filed
|
|
1068
|
+
(#3546: a finding filed earlier in the same run — this round or an
|
|
1069
|
+
earlier one — must be recognised by its real issue number, not just by
|
|
1070
|
+
whatever a fresh ``gh issue list`` happens to already reflect, and two
|
|
1071
|
+
lanes reporting the same bug in the SAME round must collapse to one
|
|
1072
|
+
filing too), and non-duplicates are filed via :func:`file_finding` —
|
|
1073
|
+
gated by *confirm* for the first ``config.confirm_rounds`` rounds when
|
|
1074
|
+
not a dry run. Termination is checked AFTER filing, from the round's own
|
|
1075
|
+
observed ``new_count``/cost, never inferred from "no exception was
|
|
1076
|
+
raised":
|
|
959
1077
|
|
|
960
1078
|
- ``"zero_findings"`` — this round's non-duplicate finding count is 0,
|
|
961
|
-
AND at least one
|
|
962
|
-
|
|
1079
|
+
AND at least one lane was actually explored this round (not every
|
|
1080
|
+
lane was skipped on its cost cap — ``RoundReport.all_lanes_skipped``
|
|
1081
|
+
is ``False``), AND that explored lane actually completed its
|
|
1082
|
+
checklist (neither ``RoundReport.all_explored_lanes_failed`` nor
|
|
963
1083
|
``RoundReport.all_explored_lanes_unavailable_or_failed`` is ``True``),
|
|
964
1084
|
AND no lane reported a protocol error (``RoundReport
|
|
965
1085
|
.protocol_error_lanes`` is empty) — a genuine observed clean pass.
|
|
@@ -979,13 +1099,16 @@ def run_bugbash(
|
|
|
979
1099
|
.protocol_error_lanes`` for which lane and why.
|
|
980
1100
|
- ``"lanes_unavailable"`` — this round's non-duplicate finding count is
|
|
981
1101
|
ALSO 0, no lane came back a dispatch/poll/log failure or a protocol
|
|
982
|
-
error,
|
|
983
|
-
display unavailable (#3510: locked or absent, e.g. a locked
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
1102
|
+
error, and either (a) every lane explored this round reported its GUI
|
|
1103
|
+
session/display unavailable (#3510: locked or absent, e.g. a locked
|
|
1104
|
+
dell64), or (b) EVERY configured lane was skipped on its cost cap and
|
|
1105
|
+
none was explored at all this round (#3546: a round that asked
|
|
1106
|
+
nothing must never read as a clean pass either) — a different reason
|
|
1107
|
+
from ``"lane_failure"`` (the explorer DID run and DID get a verified
|
|
1108
|
+
answer, or nothing was even asked), and still not a clean pass either,
|
|
1109
|
+
since nothing was actually exercised against the app. Check
|
|
1110
|
+
``BugbashReport.rounds[-1].unavailable_lanes``/``skip_reasons`` for
|
|
1111
|
+
which host needs unlocking or budget needs raising.
|
|
989
1112
|
- ``"cost_cap"`` — cumulative cost has reached ``cost_cap_total``.
|
|
990
1113
|
- ``"round_cap"`` — ``config.max_rounds`` rounds ran without either of
|
|
991
1114
|
the above firing.
|
|
@@ -995,6 +1118,17 @@ def run_bugbash(
|
|
|
995
1118
|
total_cost = 0.0
|
|
996
1119
|
rounds: list[RoundReport] = []
|
|
997
1120
|
reason = "round_cap"
|
|
1121
|
+
# #3546: every issue THIS RUN has actually filed into config.repo,
|
|
1122
|
+
# across every round so far — consulted alongside each round's FRESH
|
|
1123
|
+
# open-issues fetch so a finding matching an issue this run itself
|
|
1124
|
+
# already created reads as a duplicate by NUMBER, never depending on a
|
|
1125
|
+
# `gh issue list` snapshot having caught up with this process's own
|
|
1126
|
+
# recent write. `run_filed_by_title` is the same data keyed for O(1)
|
|
1127
|
+
# resolution when a within-round duplicate (see
|
|
1128
|
+
# `_dedupe_round_findings`) needs its placeholder `matched_number=None`
|
|
1129
|
+
# upgraded to the sibling's real number once that sibling is filed.
|
|
1130
|
+
run_filed_issues: list[dict] = []
|
|
1131
|
+
run_filed_by_title: dict[str, int] = {}
|
|
998
1132
|
|
|
999
1133
|
for round_num in range(1, config.max_rounds + 1):
|
|
1000
1134
|
report = RoundReport(round_num=round_num)
|
|
@@ -1002,6 +1136,10 @@ def run_bugbash(
|
|
|
1002
1136
|
for lane in config.lanes:
|
|
1003
1137
|
if lane_cost[lane.platform] >= config.cost_cap_per_lane:
|
|
1004
1138
|
report.skipped_lanes.append(lane.platform)
|
|
1139
|
+
report.skip_reasons[lane.platform] = (
|
|
1140
|
+
f"cumulative cost {lane_cost[lane.platform]:.2f} already "
|
|
1141
|
+
f">= per-lane cap {config.cost_cap_per_lane:.2f}"
|
|
1142
|
+
)
|
|
1005
1143
|
continue
|
|
1006
1144
|
outcome = explorer(lane, round_num)
|
|
1007
1145
|
lane_cost[lane.platform] += outcome.cost
|
|
@@ -1032,15 +1170,21 @@ def run_bugbash(
|
|
|
1032
1170
|
# finding disappear and pass the #3488 release gate).
|
|
1033
1171
|
report.protocol_error_lanes[lane.platform] = outcome.protocol_error
|
|
1034
1172
|
|
|
1035
|
-
|
|
1173
|
+
# #3546: merge the fresh fetch with every issue THIS RUN has already
|
|
1174
|
+
# filed — a finding matching one of this run's own earlier filings
|
|
1175
|
+
# must be recognised by number even if the fresh fetch hasn't (yet)
|
|
1176
|
+
# caught up with this process's own recent write.
|
|
1177
|
+
open_issues = list(open_issues_fetcher(config.repo)) + run_filed_issues
|
|
1036
1178
|
closed_issues = closed_issues_fetcher(config.repo)
|
|
1037
1179
|
|
|
1038
1180
|
# Dedupe every finding exactly once (one question, one answer) —
|
|
1039
1181
|
# everything below (the confirm gate's candidate list, new_count,
|
|
1040
1182
|
# and the actual filing decision) reads off this SAME verdict per
|
|
1041
|
-
# finding rather than re-asking
|
|
1042
|
-
#
|
|
1043
|
-
|
|
1183
|
+
# finding rather than re-asking dedupe with a chance to disagree
|
|
1184
|
+
# with itself. `_dedupe_round_findings` also catches two lanes
|
|
1185
|
+
# reporting the same bug in THIS round against each other, not just
|
|
1186
|
+
# against issues that existed before the round started.
|
|
1187
|
+
dedupes = _dedupe_round_findings(report.findings, open_issues, closed_issues)
|
|
1044
1188
|
|
|
1045
1189
|
require_confirm = (not config.dry_run) and round_num <= config.confirm_rounds
|
|
1046
1190
|
candidates = [
|
|
@@ -1071,17 +1215,39 @@ def run_bugbash(
|
|
|
1071
1215
|
)
|
|
1072
1216
|
)
|
|
1073
1217
|
continue
|
|
1218
|
+
if dedupe.verdict is DedupeVerdict.DUPLICATE and dedupe.matched_number is None:
|
|
1219
|
+
# #3546: a within-round duplicate from `_dedupe_round_findings`
|
|
1220
|
+
# — its sibling finding may have already been filed earlier
|
|
1221
|
+
# in THIS loop (in which case its real issue number is now in
|
|
1222
|
+
# `run_filed_by_title`). Resolve it so the report/CLI shows
|
|
1223
|
+
# the real number instead of a permanent "duplicate of
|
|
1224
|
+
# #None".
|
|
1225
|
+
resolved = run_filed_by_title.get(dedupe.matched_title or "")
|
|
1226
|
+
if resolved is not None:
|
|
1227
|
+
dedupe = DedupeResult(
|
|
1228
|
+
verdict=dedupe.verdict, matched_number=resolved,
|
|
1229
|
+
matched_title=dedupe.matched_title, score=dedupe.score,
|
|
1230
|
+
)
|
|
1074
1231
|
# An unresolvable lane (finding.platform not in this run's
|
|
1075
1232
|
# config.lanes) is only a problem when it would actually be
|
|
1076
1233
|
# queued — file_finding raises in that case, never silently
|
|
1077
1234
|
# drops the machine target (#2096: a gate must be able to fail).
|
|
1078
1235
|
result = file_finding(finding, dedupe, lane, runner, dry_run=config.dry_run)
|
|
1079
1236
|
report.filings.append(result)
|
|
1237
|
+
if result.filed and result.issue_number is not None:
|
|
1238
|
+
# Only track filings that landed in config.repo's own
|
|
1239
|
+
# namespace — a finding routed elsewhere via
|
|
1240
|
+
# `finding_target_repo` (#3546 requirement 2) dedupes
|
|
1241
|
+
# against THAT repo's issues, not this one's.
|
|
1242
|
+
if finding_target_repo(finding) == config.repo:
|
|
1243
|
+
filed_title = compose_finding_issue_title(finding)
|
|
1244
|
+
run_filed_issues.append({"number": result.issue_number, "title": filed_title})
|
|
1245
|
+
run_filed_by_title[filed_title] = result.issue_number
|
|
1080
1246
|
|
|
1081
1247
|
rounds.append(report)
|
|
1082
1248
|
|
|
1083
1249
|
if report.new_count == 0:
|
|
1084
|
-
# #2096/#3517: "zero findings" is only a genuine clean-pass
|
|
1250
|
+
# #2096/#3517/#3546: "zero findings" is only a genuine clean-pass
|
|
1085
1251
|
# verdict when at least one lane was actually verified to have
|
|
1086
1252
|
# RUN THE CHECKLIST this round AND every lane that did complete
|
|
1087
1253
|
# produced a trustworthy report. A round where every explored
|
|
@@ -1092,13 +1258,15 @@ def run_bugbash(
|
|
|
1092
1258
|
# below since a bad answer is a stronger "don't trust this round"
|
|
1093
1259
|
# signal than a lane simply being locked out; a round where every
|
|
1094
1260
|
# explored lane instead reported its session/display unavailable
|
|
1095
|
-
# (#3510 — locked or absent, never a dispatch failure)
|
|
1096
|
-
#
|
|
1261
|
+
# (#3510 — locked or absent, never a dispatch failure), OR every
|
|
1262
|
+
# configured lane was skipped on its cost cap with NONE explored
|
|
1263
|
+
# at all (#3546), gets the same "lanes_unavailable" reason —
|
|
1264
|
+
# neither is a verified clean pass.
|
|
1097
1265
|
if report.all_explored_lanes_failed:
|
|
1098
1266
|
reason = "lane_failure"
|
|
1099
1267
|
elif report.protocol_error_lanes:
|
|
1100
1268
|
reason = "protocol_error"
|
|
1101
|
-
elif report.all_explored_lanes_unavailable_or_failed:
|
|
1269
|
+
elif report.all_explored_lanes_unavailable_or_failed or report.all_lanes_skipped:
|
|
1102
1270
|
reason = "lanes_unavailable"
|
|
1103
1271
|
else:
|
|
1104
1272
|
reason = "zero_findings"
|
|
@@ -50,6 +50,7 @@ from coord.bugbash import (
|
|
|
50
50
|
ExploreOutcome,
|
|
51
51
|
build_exploration_briefing,
|
|
52
52
|
discover_lanes,
|
|
53
|
+
finding_target_repo,
|
|
53
54
|
parse_findings_block,
|
|
54
55
|
run_bugbash,
|
|
55
56
|
subprocess_coord_runner,
|
|
@@ -228,6 +229,11 @@ def _print_round(report: BugbashReport) -> None:
|
|
|
228
229
|
f"{r.new_count} new/regression, {sum(1 for f in r.filings if f.filed)} filed"
|
|
229
230
|
+ (f" (lanes skipped: {', '.join(r.skipped_lanes)})" if r.skipped_lanes else "")
|
|
230
231
|
)
|
|
232
|
+
# #3546: a skip must be as explainable as a lane failure/
|
|
233
|
+
# unavailability — never a bare platform name with no reason.
|
|
234
|
+
for platform in r.skipped_lanes:
|
|
235
|
+
reason = r.skip_reasons.get(platform, "no reason recorded")
|
|
236
|
+
click.secho(f" lane SKIPPED ({platform}): {reason}", fg="yellow")
|
|
231
237
|
# #2096: a lane failure must be as visible as a filed finding — never
|
|
232
238
|
# let a fleet-wide dispatch outage hide behind a quiet "0 finding(s)"
|
|
233
239
|
# line that reads identically to a genuinely clean round.
|
|
@@ -241,12 +247,18 @@ def _print_round(report: BugbashReport) -> None:
|
|
|
241
247
|
click.secho(f" lane PROTOCOL ERROR ({platform}): {note}", fg="red")
|
|
242
248
|
for f in r.filings:
|
|
243
249
|
incomplete = " [INCOMPLETE REPORT]" if f.finding.incomplete else ""
|
|
250
|
+
# #3546: a finding routed by `suspected_repo` away from the app
|
|
251
|
+
# repo this round explored must say so here — an operator
|
|
252
|
+
# scanning "filed+queued: #42" has no way to tell it landed in
|
|
253
|
+
# coord's own repo rather than the app's without this.
|
|
254
|
+
target_repo = finding_target_repo(f.finding)
|
|
255
|
+
routed = f" [{target_repo}]" if target_repo != f.finding.repo else ""
|
|
244
256
|
if f.filed:
|
|
245
|
-
click.echo(f" filed+queued: #{f.issue_number} — {f.finding.title}{incomplete}")
|
|
257
|
+
click.echo(f" filed+queued: #{f.issue_number}{routed} — {f.finding.title}{incomplete}")
|
|
246
258
|
elif f.verdict.value == "duplicate":
|
|
247
|
-
click.echo(f" duplicate of #{f.issue_number}: {f.finding.title}{incomplete}")
|
|
259
|
+
click.echo(f" duplicate of #{f.issue_number}{routed}: {f.finding.title}{incomplete}")
|
|
248
260
|
elif f.preview_title is not None:
|
|
249
|
-
click.echo(f" would file ({f.verdict.value}): {f.preview_title}{incomplete}")
|
|
261
|
+
click.echo(f" would file ({f.verdict.value}){routed}: {f.preview_title}{incomplete}")
|
|
250
262
|
|
|
251
263
|
|
|
252
264
|
@click.command(
|
|
@@ -100,6 +100,20 @@ class TestDedupeFinding:
|
|
|
100
100
|
result = dedupe_finding(finding, open_issues=open_issues, closed_issues=[])
|
|
101
101
|
assert result.verdict is DedupeVerdict.NEW
|
|
102
102
|
|
|
103
|
+
def test_short_title_matches_tagged_issue_despite_tag_word_dilution(self):
|
|
104
|
+
# #3546: a short real-world title ("Caption buttons unclickable", 3
|
|
105
|
+
# words) scored only 0.5 Jaccard similarity against the tagged issue
|
|
106
|
+
# title BEFORE the tag's own 3 extra tokens ("bugbash", "win",
|
|
107
|
+
# "native") were stripped for comparison — below the 0.6 threshold,
|
|
108
|
+
# so the exact same bug reported twice was never recognised as a
|
|
109
|
+
# duplicate. This is the "titles differing enough to defeat
|
|
110
|
+
# matching" root cause behind vimcode#1656/#1660 being filed twice.
|
|
111
|
+
finding = _finding(title="Caption buttons unclickable", platform="win-native")
|
|
112
|
+
open_issues = [{"number": 1656, "title": "[bugbash:win-native] Caption buttons unclickable"}]
|
|
113
|
+
result = dedupe_finding(finding, open_issues=open_issues, closed_issues=[])
|
|
114
|
+
assert result.verdict is DedupeVerdict.DUPLICATE
|
|
115
|
+
assert result.matched_number == 1656
|
|
116
|
+
|
|
103
117
|
def test_untagged_open_issue_matches_regardless_of_platform(self):
|
|
104
118
|
# A hand-filed issue carries no [bugbash:<platform>] tag — still
|
|
105
119
|
# eligible to match on title alone.
|
|
@@ -363,6 +377,36 @@ class TestFileFinding:
|
|
|
363
377
|
assert result.preview_title is not None
|
|
364
378
|
assert runner.calls == []
|
|
365
379
|
|
|
380
|
+
def test_suspected_repo_routes_filing_to_a_different_repo(self):
|
|
381
|
+
# #3546: three findings whose fault was in coord's own win-native
|
|
382
|
+
# driver / WSL bridge were filed into vimcode anyway, where no
|
|
383
|
+
# worker could fix them. `suspected_repo` must route BOTH
|
|
384
|
+
# `coord issue create` and `coord drive-queue add` to the repo at
|
|
385
|
+
# fault, not unconditionally to the app repo the lane ran against.
|
|
386
|
+
finding = _finding(
|
|
387
|
+
title="win-native launch() leaks the shell's PID",
|
|
388
|
+
repo="vimcode", suspected_repo="claude-coordinator",
|
|
389
|
+
)
|
|
390
|
+
dedupe = dedupe_finding(finding, [], [])
|
|
391
|
+
runner = FakeRunner(next_issue_number=3542)
|
|
392
|
+
result = file_finding(finding, dedupe, _lane(), runner, dry_run=False)
|
|
393
|
+
|
|
394
|
+
assert result.filed is True
|
|
395
|
+
assert result.issue_number == 3542
|
|
396
|
+
assert runner.calls[0][:3] == ["issue", "create", "claude-coordinator"]
|
|
397
|
+
assert runner.calls[1] == [
|
|
398
|
+
"drive-queue", "add", "claude-coordinator", "3542", "--machine", "pc1",
|
|
399
|
+
]
|
|
400
|
+
|
|
401
|
+
def test_suspected_repo_defaults_to_the_app_repo(self):
|
|
402
|
+
# No suspected_repo override (the common case) still files into the
|
|
403
|
+
# app repo the lane actually ran against.
|
|
404
|
+
finding = _finding(repo="vimcode", suspected_repo="vimcode")
|
|
405
|
+
dedupe = dedupe_finding(finding, [], [])
|
|
406
|
+
runner = FakeRunner(next_issue_number=1)
|
|
407
|
+
file_finding(finding, dedupe, _lane(), runner, dry_run=False)
|
|
408
|
+
assert runner.calls[0][:3] == ["issue", "create", "vimcode"]
|
|
409
|
+
|
|
366
410
|
def test_filed_issue_title_carries_platform_tag(self):
|
|
367
411
|
finding = _finding(platform="mac-native")
|
|
368
412
|
assert compose_finding_issue_title(finding) == "[bugbash:mac-native] " + finding.title
|
|
@@ -694,6 +738,113 @@ class TestRunBugbashTermination:
|
|
|
694
738
|
assert report.total_filed == 0
|
|
695
739
|
assert report.rounds[0].filings[0].verdict is DedupeVerdict.DUPLICATE
|
|
696
740
|
|
|
741
|
+
def test_cross_round_dedupe_recognizes_own_earlier_filing_even_with_stale_fetch(self):
|
|
742
|
+
# #3546: the real vimcode run filed "caption buttons unclickable" as
|
|
743
|
+
# vimcode#1656 in round 1, then AGAIN as #1660 in the SAME round and
|
|
744
|
+
# #1669/#1675 in later rounds — dedupe never saw its own earlier
|
|
745
|
+
# filings. Simulate the worst case: the open-issues fetch is
|
|
746
|
+
# permanently stale (never reflects anything this run itself just
|
|
747
|
+
# filed, as a lagging `gh issue list` would) — the SAME finding
|
|
748
|
+
# reported again in round 2 must still be recognised as a duplicate
|
|
749
|
+
# of round 1's real issue number, not filed a second time.
|
|
750
|
+
config = _config(max_rounds=3)
|
|
751
|
+
finding = _finding(title="Caption buttons unclickable")
|
|
752
|
+
explorer = _make_explorer([[finding], [finding]])
|
|
753
|
+
runner = FakeRunner(next_issue_number=1656)
|
|
754
|
+
report = run_bugbash(
|
|
755
|
+
config, explorer=explorer, runner=runner,
|
|
756
|
+
open_issues_fetcher=lambda r: [], # stale: never updates
|
|
757
|
+
closed_issues_fetcher=lambda r: [],
|
|
758
|
+
)
|
|
759
|
+
assert report.total_filed == 1
|
|
760
|
+
assert report.rounds[0].filings[0].filed is True
|
|
761
|
+
assert report.rounds[0].filings[0].issue_number == 1656
|
|
762
|
+
assert report.rounds[1].filings[0].verdict is DedupeVerdict.DUPLICATE
|
|
763
|
+
assert report.rounds[1].filings[0].filed is False
|
|
764
|
+
assert report.rounds[1].filings[0].issue_number == 1656
|
|
765
|
+
create_calls = [c for c in runner.calls if c[:2] == ["issue", "create"]]
|
|
766
|
+
assert len(create_calls) == 1
|
|
767
|
+
|
|
768
|
+
def test_two_lanes_reporting_same_bug_one_round_files_once(self):
|
|
769
|
+
# #3546: two lane instances sharing the SAME platform (the real run
|
|
770
|
+
# had two "win-native" lanes from a coordinator.yml route + top-level
|
|
771
|
+
# driver both naming that kind) each independently reported the
|
|
772
|
+
# identical bug in round 1 — dedupe must collapse them to one filing,
|
|
773
|
+
# not two, even though neither finding existed as an open issue
|
|
774
|
+
# before the round started.
|
|
775
|
+
lane_a = _lane(platform="win-native", machine="pc1")
|
|
776
|
+
lane_b = _lane(platform="win-native", machine="pc2")
|
|
777
|
+
config = _config(lanes=[lane_a, lane_b], max_rounds=1)
|
|
778
|
+
|
|
779
|
+
def explorer(lane, round_num):
|
|
780
|
+
return ExploreOutcome(
|
|
781
|
+
findings=(_finding(title="Caption buttons unclickable", platform="win-native"),)
|
|
782
|
+
)
|
|
783
|
+
|
|
784
|
+
runner = FakeRunner(next_issue_number=1656)
|
|
785
|
+
report = run_bugbash(
|
|
786
|
+
config, explorer=explorer, runner=runner,
|
|
787
|
+
open_issues_fetcher=lambda r: [], closed_issues_fetcher=lambda r: [],
|
|
788
|
+
)
|
|
789
|
+
create_calls = [c for c in runner.calls if c[:2] == ["issue", "create"]]
|
|
790
|
+
assert len(create_calls) == 1
|
|
791
|
+
filings = report.rounds[0].filings
|
|
792
|
+
assert sum(1 for f in filings if f.filed) == 1
|
|
793
|
+
duplicate_filing = next(f for f in filings if not f.filed)
|
|
794
|
+
assert duplicate_filing.verdict is DedupeVerdict.DUPLICATE
|
|
795
|
+
# The duplicate resolves to the sibling's REAL issue number — not a
|
|
796
|
+
# permanent "duplicate of #None" placeholder.
|
|
797
|
+
assert duplicate_filing.issue_number == 1656
|
|
798
|
+
|
|
799
|
+
def test_all_lanes_skipped_reports_lanes_unavailable_not_zero_findings(self):
|
|
800
|
+
# #3546: round 4 of the real run skipped every configured lane (both
|
|
801
|
+
# had already blown their per-lane cost cap) and the CLI still
|
|
802
|
+
# printed `terminated='zero_findings'` — a release gate reading that
|
|
803
|
+
# would conclude "last bugbash clean" about a round that tested
|
|
804
|
+
# nothing at all.
|
|
805
|
+
lane = _lane(platform="win-native", machine="pc1")
|
|
806
|
+
config = _config(lanes=[lane], max_rounds=3, cost_cap_per_lane=1.0)
|
|
807
|
+
|
|
808
|
+
def explorer(lane, round_num):
|
|
809
|
+
# Round 1 finds something (so the loop doesn't already stop
|
|
810
|
+
# there) and spends enough to blow the per-lane cap for round 2.
|
|
811
|
+
if round_num == 1:
|
|
812
|
+
return ExploreOutcome(findings=(_finding(title="Bug A"),), cost=5.0)
|
|
813
|
+
return ExploreOutcome(findings=(), cost=5.0)
|
|
814
|
+
|
|
815
|
+
runner = FakeRunner()
|
|
816
|
+
report = run_bugbash(
|
|
817
|
+
config, explorer=explorer, runner=runner,
|
|
818
|
+
open_issues_fetcher=lambda r: [], closed_issues_fetcher=lambda r: [],
|
|
819
|
+
)
|
|
820
|
+
assert report.rounds[0].skipped_lanes == []
|
|
821
|
+
assert report.rounds[1].skipped_lanes == ["win-native"]
|
|
822
|
+
assert report.rounds[1].all_lanes_skipped is True
|
|
823
|
+
assert "cumulative cost" in report.rounds[1].skip_reasons["win-native"]
|
|
824
|
+
assert report.termination_reason == "lanes_unavailable"
|
|
825
|
+
assert report.termination_reason != "zero_findings"
|
|
826
|
+
|
|
827
|
+
def test_some_lanes_skipped_some_explored_is_not_all_skipped(self):
|
|
828
|
+
# A partial skip (one lane over its cap, the other still running)
|
|
829
|
+
# must still report a genuine "zero_findings" clean pass if the
|
|
830
|
+
# surviving lane found nothing — distinct from the all-skipped case
|
|
831
|
+
# above.
|
|
832
|
+
expensive_lane = _lane(platform="win-native", machine="pc1")
|
|
833
|
+
cheap_lane = _lane(platform="mac-native", machine="mac1")
|
|
834
|
+
config = _config(lanes=[expensive_lane, cheap_lane], max_rounds=3, cost_cap_per_lane=2.0)
|
|
835
|
+
|
|
836
|
+
def explorer(lane, round_num):
|
|
837
|
+
cost = 5.0 if lane.platform == "win-native" else 0.5
|
|
838
|
+
return ExploreOutcome(findings=(), cost=cost, ok=True)
|
|
839
|
+
|
|
840
|
+
runner = FakeRunner()
|
|
841
|
+
report = run_bugbash(
|
|
842
|
+
config, explorer=explorer, runner=runner,
|
|
843
|
+
open_issues_fetcher=lambda r: [], closed_issues_fetcher=lambda r: [],
|
|
844
|
+
)
|
|
845
|
+
assert report.termination_reason == "zero_findings"
|
|
846
|
+
assert report.rounds[0].all_lanes_skipped is False
|
|
847
|
+
|
|
697
848
|
|
|
698
849
|
class TestRunBugbashDryRun:
|
|
699
850
|
def test_dry_run_files_nothing_across_multiple_rounds(self):
|
|
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
|