code-coordinator 0.5.553__tar.gz → 0.5.554__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.553 → code_coordinator-0.5.554}/PKG-INFO +1 -1
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/acceptance.py +16 -1
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/acceptance_drivers.py +26 -3
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/bugbash.py +108 -10
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/release.py +19 -2
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gtk_native_driver.py +73 -15
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/mac_native_driver.py +64 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_gate.py +51 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reports.py +5 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/win_native_driver.py +121 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_acceptance.py +40 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_acceptance_drivers.py +50 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_bugbash.py +71 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gtk_native_driver.py +69 -3
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_mac_native_driver.py +35 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_gate.py +112 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_win_native_driver.py +64 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/.gitignore +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/CLAUDE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/GOAL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/LICENSE +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/MANIFEST.in +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/README.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/backup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/block_log.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_service.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/brain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/claim.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/client.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/codegen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/bugbash.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/comments.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dao.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/db.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/deps.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/events.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/filelock.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/freshness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gates.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/goal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/context.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/models.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/render.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/health/units.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/hooks.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/interactive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/models.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/network.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/notify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/openapi.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/parentage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/plans.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/progress.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/release_window.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/review.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/self_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/smoke.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/split_work.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/sql.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_author.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/test_report.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/tui_pty_driver.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/install-agent.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/pyproject.toml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/setup.cfg +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/__init__.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/backends.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/conftest.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_db.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_events.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_init.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_models.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_network.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_session.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_split.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_state.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_tui_pty_driver.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.553 → code_coordinator-0.5.554}/tests/write_parity.py +0 -0
|
@@ -957,13 +957,22 @@ def build_verdict(
|
|
|
957
957
|
passed = sum(1 for t in tests if t.get("status") == "pass")
|
|
958
958
|
failed = sum(1 for t in tests if t.get("status") == "fail")
|
|
959
959
|
skipped = sum(1 for t in tests if t.get("status") == "skip")
|
|
960
|
+
# #3510: a session precheck (win-native/mac-native/gtk-native) that
|
|
961
|
+
# finds a locked/absent GUI reports a distinct "unavailable" status,
|
|
962
|
+
# not "fail" — it's an environment condition, not an app bug. It must
|
|
963
|
+
# still block `green`/`ci_green`: an unconfirmed result is not a pass
|
|
964
|
+
# (epic #2096's "a gate must be able to fail" / "unconfirmed success
|
|
965
|
+
# is a defect"). Counted and reported separately so callers can tell
|
|
966
|
+
# "the app is broken" apart from "go unlock the host".
|
|
967
|
+
unavailable = sum(1 for t in tests if t.get("status") == "unavailable")
|
|
960
968
|
payload: dict[str, Any] = {
|
|
961
969
|
"scope": scope,
|
|
962
970
|
"total": len(tests),
|
|
963
971
|
"passed": passed,
|
|
964
972
|
"failed": failed,
|
|
965
973
|
"skipped": skipped,
|
|
966
|
-
"
|
|
974
|
+
"unavailable": unavailable,
|
|
975
|
+
"green": failed == 0 and unavailable == 0 and len(tests) > 0,
|
|
967
976
|
"tests": tests,
|
|
968
977
|
}
|
|
969
978
|
if issue_number is not None:
|
|
@@ -1038,12 +1047,18 @@ def apply_expected_red(verdict: dict[str, Any], expected_red_ids: "set[str]") ->
|
|
|
1038
1047
|
real_failures = sum(
|
|
1039
1048
|
1 for t in tests if t.get("status") == "fail" and t["id"] not in expected_red_ids
|
|
1040
1049
|
)
|
|
1050
|
+
# #3510: an `unavailable` entry (locked/absent GUI session) is never
|
|
1051
|
+
# expected-red-eligible — it isn't a test failure to excuse, it's a
|
|
1052
|
+
# precheck that never ran anything — so it always counts against
|
|
1053
|
+
# `ci_green` just like it does against `green` in build_verdict.
|
|
1054
|
+
unavailable = verdict.get("unavailable", 0)
|
|
1041
1055
|
verdict["unexpected_green"] = unexpected_green
|
|
1042
1056
|
verdict["expected_red_still_red"] = expected_red_still_red
|
|
1043
1057
|
verdict["missing_expected_red_ids"] = missing_expected_red_ids
|
|
1044
1058
|
verdict["ci_green"] = (
|
|
1045
1059
|
len(tests) > 0
|
|
1046
1060
|
and real_failures == 0
|
|
1061
|
+
and unavailable == 0
|
|
1047
1062
|
and not unexpected_green
|
|
1048
1063
|
and not missing_expected_red_ids
|
|
1049
1064
|
)
|
|
@@ -782,7 +782,15 @@ def _run_win_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
|
|
|
782
782
|
except WinNativeRuntimeError as e:
|
|
783
783
|
raise DriverError(f"win-native driver could not run: {e}") from e
|
|
784
784
|
|
|
785
|
-
|
|
785
|
+
# #3510: a locked/absent interactive session reports a distinct
|
|
786
|
+
# "unavailable" status (coord.win_native_driver's session precheck),
|
|
787
|
+
# not "fail" — it must still fail this exit code rather than read as a
|
|
788
|
+
# silent pass. An unconfirmed result is not a pass.
|
|
789
|
+
exit_code = (
|
|
790
|
+
0
|
|
791
|
+
if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
|
|
792
|
+
else 1
|
|
793
|
+
)
|
|
786
794
|
raw_output = "\n".join(
|
|
787
795
|
f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
|
|
788
796
|
for t in tests
|
|
@@ -843,7 +851,14 @@ def _run_mac_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
|
|
|
843
851
|
except MacNativeRuntimeError as e:
|
|
844
852
|
raise DriverError(f"mac-native driver could not run: {e}") from e
|
|
845
853
|
|
|
846
|
-
|
|
854
|
+
# #3510: a locked/absent GUI session reports a distinct "unavailable"
|
|
855
|
+
# status (coord.mac_native_driver's session precheck), not "fail" —
|
|
856
|
+
# it must still fail this exit code rather than read as a silent pass.
|
|
857
|
+
exit_code = (
|
|
858
|
+
0
|
|
859
|
+
if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
|
|
860
|
+
else 1
|
|
861
|
+
)
|
|
847
862
|
raw_output = "\n".join(
|
|
848
863
|
f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
|
|
849
864
|
for t in tests
|
|
@@ -904,7 +919,15 @@ def _run_gtk_native(run_command: str, cwd: str, entrypoint: str, *, timeout: int
|
|
|
904
919
|
except GtkNativeRuntimeError as e:
|
|
905
920
|
raise DriverError(f"gtk-native driver could not run: {e}") from e
|
|
906
921
|
|
|
907
|
-
|
|
922
|
+
# #3510: a missing $DISPLAY/$WAYLAND_DISPLAY reports a distinct
|
|
923
|
+
# "unavailable" status (coord.gtk_native_driver's session precheck),
|
|
924
|
+
# not "fail" — it must still fail this exit code rather than read as a
|
|
925
|
+
# silent pass.
|
|
926
|
+
exit_code = (
|
|
927
|
+
0
|
|
928
|
+
if tests and all(t.get("status") not in ("fail", "unavailable") for t in tests)
|
|
929
|
+
else 1
|
|
930
|
+
)
|
|
908
931
|
raw_output = "\n".join(
|
|
909
932
|
f"{t.get('status')}: {t.get('id')} {t.get('message', '')}".rstrip()
|
|
910
933
|
for t in tests
|
|
@@ -45,6 +45,20 @@ routing does — a lane only exists when some configured machine actually
|
|
|
45
45
|
carries the driver's declared ``capability``, so a repo with no capable
|
|
46
46
|
machine for a platform silently gets no lane rather than a lane that can
|
|
47
47
|
never run.
|
|
48
|
+
|
|
49
|
+
**#3510: an unavailable lane is not a bug finding.** When a win-native/
|
|
50
|
+
mac-native/gtk-native lane's own driver reports a locked or absent GUI
|
|
51
|
+
session (or no usable display), an explorer that sets
|
|
52
|
+
:attr:`ExploreOutcome.unavailable` causes :func:`run_bugbash` to skip that
|
|
53
|
+
lane for the round (:attr:`RoundReport.unavailable_lanes`) rather than
|
|
54
|
+
running the exploration checklist against it or filing any finding from it
|
|
55
|
+
— a locked desktop is an environment condition for the operator to fix,
|
|
56
|
+
not evidence of an app bug. This engine-level behavior is unit-tested
|
|
57
|
+
against a fake explorer in ``tests/test_bugbash.py``; the production
|
|
58
|
+
explorer (:func:`coord.commands.bugbash._dispatch_and_await_lane`) does
|
|
59
|
+
not itself set ``unavailable`` yet — see its own module docstring's
|
|
60
|
+
"KNOWN GAP" note — so a live ``coord bugbash`` run does not currently
|
|
61
|
+
benefit from this skip until that wiring lands.
|
|
48
62
|
"""
|
|
49
63
|
|
|
50
64
|
from __future__ import annotations
|
|
@@ -426,12 +440,31 @@ class ExploreOutcome:
|
|
|
426
440
|
there were findings," the second means "we looked, and there weren't
|
|
427
441
|
any" — :func:`run_bugbash` keeps them distinguishable in
|
|
428
442
|
:attr:`RoundReport.lane_failures` and its termination reason, rather
|
|
429
|
-
than collapsing both into "zero findings".
|
|
443
|
+
than collapsing both into "zero findings".
|
|
444
|
+
|
|
445
|
+
``unavailable`` is a THIRD, separate outcome (#3510): the lane's own
|
|
446
|
+
native driver observed a locked/absent GUI session (win-native/
|
|
447
|
+
mac-native) or no usable display (gtk-native) and ran no exploration at
|
|
448
|
+
all — a host/environment condition, never a bug finding and never a
|
|
449
|
+
dispatch/poll failure. An explorer that sets ``unavailable=True`` (as
|
|
450
|
+
the fake explorers in ``tests/test_bugbash.py`` do, modeling a
|
|
451
|
+
dispatched worker whose Tier-2 lane result came back
|
|
452
|
+
``status="unavailable"`` — see ``coord.win_native_driver``'s/
|
|
453
|
+
``coord.mac_native_driver``'s/``coord.gtk_native_driver``'s own
|
|
454
|
+
precheck) causes :func:`run_bugbash` to skip that lane for the round —
|
|
455
|
+
recording it in :attr:`RoundReport.unavailable_lanes` instead of
|
|
456
|
+
:attr:`RoundReport.lane_failures` — and never file findings from it
|
|
457
|
+
this round, even defensively, regardless of what ``findings`` carries.
|
|
458
|
+
The production explorer,
|
|
459
|
+
:func:`coord.commands.bugbash._dispatch_and_await_lane`, does not yet
|
|
460
|
+
set this flag (tracked as a KNOWN GAP in that module's docstring) —
|
|
461
|
+
today this is exercised only at the engine/unit-test level."""
|
|
430
462
|
|
|
431
463
|
findings: tuple[Finding, ...] = ()
|
|
432
464
|
cost: float = 0.0
|
|
433
465
|
notes: str = ""
|
|
434
466
|
ok: bool = True
|
|
467
|
+
unavailable: bool = False
|
|
435
468
|
|
|
436
469
|
|
|
437
470
|
#: ``(lane, round_num) -> ExploreOutcome`` — "go run this lane's
|
|
@@ -628,6 +661,16 @@ class RoundReport:
|
|
|
628
661
|
#: a lane skipped for having blown its per-lane cost cap was never
|
|
629
662
|
#: asked a question this round, so it can't have failed to answer one).
|
|
630
663
|
lane_failures: dict[str, str] = field(default_factory=dict)
|
|
664
|
+
#: ``{platform: notes}`` for every lane explored this round whose
|
|
665
|
+
#: :attr:`ExploreOutcome.unavailable` was ``True`` (#3510) — a locked or
|
|
666
|
+
#: absent GUI session (win-native/mac-native) or no usable display
|
|
667
|
+
#: (gtk-native). Distinct from :attr:`lane_failures`: this is a verified
|
|
668
|
+
#: observation (the native driver's own session precheck ran and
|
|
669
|
+
#: reported it), not a dispatch/poll/log failure — but it is ALSO not a
|
|
670
|
+
#: verified "ran the checklist and found nothing" either, so it is
|
|
671
|
+
#: tracked separately rather than folded into either bucket. No
|
|
672
|
+
#: findings are ever filed from a lane recorded here this round.
|
|
673
|
+
unavailable_lanes: dict[str, str] = field(default_factory=dict)
|
|
631
674
|
|
|
632
675
|
@property
|
|
633
676
|
def explored_lanes(self) -> set[str]:
|
|
@@ -643,10 +686,27 @@ class RoundReport:
|
|
|
643
686
|
not a clean pass" signal (#2096). A round with nothing explored at
|
|
644
687
|
all (e.g. every lane skipped on its cost cap) is NOT reported as
|
|
645
688
|
"all failed" — there is nothing to distrust, just nothing that
|
|
646
|
-
ran.
|
|
689
|
+
ran. Does NOT count an ``unavailable`` lane as failed — see
|
|
690
|
+
:attr:`all_explored_lanes_unavailable_or_failed` for the combined
|
|
691
|
+
check."""
|
|
647
692
|
explored = self.explored_lanes
|
|
648
693
|
return bool(explored) and explored <= set(self.lane_failures)
|
|
649
694
|
|
|
695
|
+
@property
|
|
696
|
+
def all_explored_lanes_unavailable_or_failed(self) -> bool:
|
|
697
|
+
"""``True`` when every lane explored this round either failed to
|
|
698
|
+
dispatch/poll/log OR reported its GUI session/display unavailable
|
|
699
|
+
(#3510) — i.e. NONE of them actually ran the exploration checklist.
|
|
700
|
+
Used by :func:`run_bugbash` to pick the ``"lanes_unavailable"``
|
|
701
|
+
termination reason over a false ``"zero_findings"`` clean-pass read
|
|
702
|
+
when every lane this round was simply locked/absent rather than
|
|
703
|
+
genuinely explored (#2096: zero findings is only a clean pass when
|
|
704
|
+
something was actually observed to run)."""
|
|
705
|
+
explored = self.explored_lanes
|
|
706
|
+
return bool(explored) and explored <= (
|
|
707
|
+
set(self.lane_failures) | set(self.unavailable_lanes)
|
|
708
|
+
)
|
|
709
|
+
|
|
650
710
|
|
|
651
711
|
@dataclass
|
|
652
712
|
class BugbashReport:
|
|
@@ -677,6 +737,15 @@ class BugbashReport:
|
|
|
677
737
|
part of what it observed along the way was unverified (#2096)."""
|
|
678
738
|
return any(r.lane_failures for r in self.rounds)
|
|
679
739
|
|
|
740
|
+
@property
|
|
741
|
+
def any_lane_unavailable(self) -> bool:
|
|
742
|
+
"""``True`` if ANY round recorded a lane as unavailable (#3510) —
|
|
743
|
+
surfaced regardless of whether it happened to be the terminating
|
|
744
|
+
round, so an operator glancing at a run that otherwise filed/found
|
|
745
|
+
plenty still sees that one platform was locked/absent the whole
|
|
746
|
+
time and needs attention, not a bug report."""
|
|
747
|
+
return any(r.unavailable_lanes for r in self.rounds)
|
|
748
|
+
|
|
680
749
|
|
|
681
750
|
def run_bugbash(
|
|
682
751
|
config: BugbashConfig,
|
|
@@ -701,14 +770,24 @@ def run_bugbash(
|
|
|
701
770
|
``new_count``/cost, never inferred from "no exception was raised":
|
|
702
771
|
|
|
703
772
|
- ``"zero_findings"`` — this round's non-duplicate finding count is 0,
|
|
704
|
-
AND at least one explored lane actually completed
|
|
705
|
-
(``RoundReport.all_explored_lanes_failed``
|
|
706
|
-
|
|
773
|
+
AND at least one explored lane actually completed its checklist
|
|
774
|
+
(neither ``RoundReport.all_explored_lanes_failed`` nor
|
|
775
|
+
``RoundReport.all_explored_lanes_unavailable_or_failed`` is ``True``)
|
|
776
|
+
— a genuine observed clean pass.
|
|
707
777
|
- ``"lane_failure"`` — this round's non-duplicate finding count is ALSO
|
|
708
778
|
0, but every lane explored this round came back ``ok=False``
|
|
709
779
|
(dispatch/poll/log failure) — #2096: a fleet-wide dispatch outage
|
|
710
780
|
must never be reported identically to a clean bugbash pass. Check
|
|
711
781
|
``BugbashReport.rounds[-1].lane_failures`` for what actually broke.
|
|
782
|
+
- ``"lanes_unavailable"`` — this round's non-duplicate finding count is
|
|
783
|
+
ALSO 0, no lane came back a dispatch/poll/log failure, but every lane
|
|
784
|
+
explored this round reported its GUI session/display unavailable
|
|
785
|
+
(#3510: locked or absent, e.g. a locked dell64) — a different reason
|
|
786
|
+
from ``"lane_failure"`` (the explorer DID run and DID get a verified
|
|
787
|
+
answer, it's just "the host is locked", not "I don't know"), and
|
|
788
|
+
still not a clean pass either, since nothing was actually exercised
|
|
789
|
+
against the app. Check ``BugbashReport.rounds[-1].unavailable_lanes``
|
|
790
|
+
for which host needs unlocking.
|
|
712
791
|
- ``"cost_cap"`` — cumulative cost has reached ``cost_cap_total``.
|
|
713
792
|
- ``"round_cap"`` — ``config.max_rounds`` rounds ran without either of
|
|
714
793
|
the above firing.
|
|
@@ -730,6 +809,16 @@ def run_bugbash(
|
|
|
730
809
|
lane_cost[lane.platform] += outcome.cost
|
|
731
810
|
report.lane_cost[lane.platform] = lane_cost[lane.platform]
|
|
732
811
|
total_cost += outcome.cost
|
|
812
|
+
if outcome.unavailable:
|
|
813
|
+
# #3510: a locked/absent GUI session (or missing display)
|
|
814
|
+
# is a host condition, not a finding — recorded separately
|
|
815
|
+
# from both a clean pass and a dispatch/poll failure, and
|
|
816
|
+
# NEVER contributes findings this round, even defensively
|
|
817
|
+
# if the explorer happened to also hand some back.
|
|
818
|
+
report.unavailable_lanes[lane.platform] = (
|
|
819
|
+
outcome.notes or "lane unavailable — no usable GUI session/display"
|
|
820
|
+
)
|
|
821
|
+
continue
|
|
733
822
|
report.findings.extend(outcome.findings)
|
|
734
823
|
if not outcome.ok:
|
|
735
824
|
# #2096: this lane's "findings" (almost certainly empty) are
|
|
@@ -788,11 +877,20 @@ def run_bugbash(
|
|
|
788
877
|
|
|
789
878
|
if report.new_count == 0:
|
|
790
879
|
# #2096: "zero findings" is only a genuine clean-pass verdict
|
|
791
|
-
# when at least one lane was actually verified to have
|
|
792
|
-
# round. A round where every explored lane failed
|
|
793
|
-
# poll
|
|
794
|
-
#
|
|
795
|
-
|
|
880
|
+
# when at least one lane was actually verified to have RUN THE
|
|
881
|
+
# CHECKLIST this round. A round where every explored lane failed
|
|
882
|
+
# to dispatch/poll/fetch its log gets "lane_failure"; a round
|
|
883
|
+
# where every explored lane instead reported its session/display
|
|
884
|
+
# unavailable (#3510 — locked or absent, never a dispatch
|
|
885
|
+
# failure) gets its own distinct "lanes_unavailable" reason, in
|
|
886
|
+
# that priority order since a round can't be "all failed" AND
|
|
887
|
+
# "all unavailable" (each lane only sets one of the two).
|
|
888
|
+
if report.all_explored_lanes_failed:
|
|
889
|
+
reason = "lane_failure"
|
|
890
|
+
elif report.all_explored_lanes_unavailable_or_failed:
|
|
891
|
+
reason = "lanes_unavailable"
|
|
892
|
+
else:
|
|
893
|
+
reason = "zero_findings"
|
|
796
894
|
break
|
|
797
895
|
if total_cost >= config.cost_cap_total:
|
|
798
896
|
reason = "cost_cap"
|
|
@@ -4551,6 +4551,12 @@ def _load_release_gate_observations(
|
|
|
4551
4551
|
passed=_require_bool(entry["passed"], field_name="lanes[].passed"),
|
|
4552
4552
|
detail=entry.get("detail", ""),
|
|
4553
4553
|
checked_at=entry.get("checked_at"),
|
|
4554
|
+
# #3510: a locked/absent GUI session or missing display, as
|
|
4555
|
+
# reported by the native driver's own session precheck — never
|
|
4556
|
+
# coerced from a truthy non-bool, same discipline as `passed`.
|
|
4557
|
+
unavailable=_require_bool(
|
|
4558
|
+
entry.get("unavailable", False), field_name="lanes[].unavailable",
|
|
4559
|
+
),
|
|
4554
4560
|
)
|
|
4555
4561
|
for entry in payload.get("lanes", []) or []
|
|
4556
4562
|
]
|
|
@@ -4576,7 +4582,10 @@ def _gate_verdict_to_dict(verdict: "Any") -> dict[str, Any]:
|
|
|
4576
4582
|
"gate_passed": verdict.gate_passed,
|
|
4577
4583
|
"effective_passed": verdict.effective_passed,
|
|
4578
4584
|
"steps": [
|
|
4579
|
-
{
|
|
4585
|
+
{
|
|
4586
|
+
"name": s.name, "passed": s.passed, "detail": s.detail,
|
|
4587
|
+
"unavailable": s.unavailable,
|
|
4588
|
+
}
|
|
4580
4589
|
for s in verdict.steps
|
|
4581
4590
|
],
|
|
4582
4591
|
"override": None if verdict.override is None else {
|
|
@@ -4590,7 +4599,15 @@ def _gate_verdict_to_dict(verdict: "Any") -> dict[str, Any]:
|
|
|
4590
4599
|
def _render_gate_verdict(verdict: "Any") -> str:
|
|
4591
4600
|
lines = [f"release gate: {verdict.repo} @ {verdict.release_sha}"]
|
|
4592
4601
|
for step in verdict.steps:
|
|
4593
|
-
|
|
4602
|
+
# #3510: a locked/absent GUI session is blocking but is NOT the app
|
|
4603
|
+
# failing — labeled distinctly so an operator knows to unlock the
|
|
4604
|
+
# host rather than go debug the app.
|
|
4605
|
+
if step.unavailable:
|
|
4606
|
+
marker = "UNAVAILABLE"
|
|
4607
|
+
elif step.passed:
|
|
4608
|
+
marker = "PASS"
|
|
4609
|
+
else:
|
|
4610
|
+
marker = "FAIL"
|
|
4594
4611
|
lines.append(f" [{marker}] {step.name}: {step.detail}")
|
|
4595
4612
|
if verdict.override is not None:
|
|
4596
4613
|
lines.append(
|
|
@@ -106,6 +106,18 @@ child. See ``tests/test_gtk_native_driver.py``'s
|
|
|
106
106
|
regression guard, mirroring :mod:`coord.win_native_driver`'s
|
|
107
107
|
``test_no_image_name_kill_path_exists_in_the_module`` and
|
|
108
108
|
:mod:`coord.mac_native_driver`'s own equivalent.
|
|
109
|
+
|
|
110
|
+
**Missing-display precheck (#3510).** Unlike ``win-native``/``mac-native``,
|
|
111
|
+
a missing display here means no ``$DISPLAY``/``$WAYLAND_DISPLAY`` at all —
|
|
112
|
+
no Xvfb/compositor session is up on this host. That's a host-provisioning
|
|
113
|
+
condition, not an app bug, so before :meth:`NativeRunner.run` launches
|
|
114
|
+
anything it calls :meth:`GtkCalls.session_available`. When unavailable, the
|
|
115
|
+
run returns a single ``status="unavailable"`` result — never a ``"fail"``
|
|
116
|
+
— and no step (not even ``launch``) runs. ``LinuxGtkCalls`` itself no
|
|
117
|
+
longer raises at construction time for a missing display (that check moved
|
|
118
|
+
into :meth:`LinuxGtkCalls.session_available` so it's always reachable
|
|
119
|
+
through the seam, including from a fake in tests) — only a non-Linux host
|
|
120
|
+
is still a construction-time :class:`GtkNativeRuntimeError`.
|
|
109
121
|
"""
|
|
110
122
|
|
|
111
123
|
from __future__ import annotations
|
|
@@ -129,10 +141,12 @@ class GtkNativeSpecError(Exception):
|
|
|
129
141
|
|
|
130
142
|
|
|
131
143
|
class GtkNativeRuntimeError(Exception):
|
|
132
|
-
"""Raised when the native driver itself can't run: not on Linux,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
144
|
+
"""Raised when the native driver itself can't run: not on Linux, a
|
|
145
|
+
missing ``xdotool``/``xwd`` binary or AT-SPI binding, the launched
|
|
146
|
+
process/window never appearing, or a step referencing a window before
|
|
147
|
+
any ``launch`` step ran. A missing ``$DISPLAY``/``$WAYLAND_DISPLAY`` is
|
|
148
|
+
NOT one of these (#3510) — that is an "unavailable" lane verdict via
|
|
149
|
+
:meth:`GtkCalls.session_available`, never a raised exception."""
|
|
136
150
|
|
|
137
151
|
|
|
138
152
|
# ── native spec model ───────────────────────────────────────────────────────
|
|
@@ -314,6 +328,16 @@ class GtkCalls(Protocol):
|
|
|
314
328
|
|
|
315
329
|
def kill(self, pid: int) -> None: ...
|
|
316
330
|
|
|
331
|
+
def session_available(self) -> tuple[bool, str]:
|
|
332
|
+
"""``(True, "")`` when a usable display is present for this driver
|
|
333
|
+
to launch into; ``(False, reason)`` when neither ``$DISPLAY`` nor
|
|
334
|
+
``$WAYLAND_DISPLAY`` is set (#3510) — checked by
|
|
335
|
+
:meth:`NativeRunner.run` BEFORE any step (including ``launch``)
|
|
336
|
+
runs, so a missing display is reported as ``status="unavailable"``
|
|
337
|
+
rather than a failed step. Never raises — a probe failure here is
|
|
338
|
+
itself an "unavailable" verdict, not a crash."""
|
|
339
|
+
...
|
|
340
|
+
|
|
317
341
|
|
|
318
342
|
def _find_a11y_match(elements: list[dict], role: str, name: str) -> dict | None:
|
|
319
343
|
"""The first *elements* entry whose ``role`` matches exactly
|
|
@@ -368,7 +392,19 @@ class NativeRunner:
|
|
|
368
392
|
self._window_id: int | None = None
|
|
369
393
|
|
|
370
394
|
def run(self, spec: NativeSpec) -> list[dict]:
|
|
395
|
+
"""Run *spec*, first checking :meth:`GtkCalls.session_available`
|
|
396
|
+
(#3510). A missing display is a host-provisioning condition, not an
|
|
397
|
+
app bug: when unavailable, this returns a single
|
|
398
|
+
``status="unavailable"`` entry and runs NO step at all (not even
|
|
399
|
+
``launch``) — never folding it into an ordinary ``"fail"``."""
|
|
371
400
|
self._spec = spec
|
|
401
|
+
available, reason = self._calls.session_available()
|
|
402
|
+
if not available:
|
|
403
|
+
return [{
|
|
404
|
+
"id": "session",
|
|
405
|
+
"status": "unavailable",
|
|
406
|
+
"message": reason or "no usable display is available",
|
|
407
|
+
}]
|
|
372
408
|
results: list[dict] = []
|
|
373
409
|
try:
|
|
374
410
|
for step in spec.steps:
|
|
@@ -557,12 +593,14 @@ class LinuxGtkCalls:
|
|
|
557
593
|
``python3-gi``) for the accessibility tree, and ``xwd`` (ships with every
|
|
558
594
|
X11 install) for window captures.
|
|
559
595
|
|
|
560
|
-
Linux-only
|
|
561
|
-
:class:`
|
|
562
|
-
:class:`coord.
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
596
|
+
Linux-only: raises :class:`GtkNativeRuntimeError` at construction on any
|
|
597
|
+
other platform, mirroring :class:`coord.mac_native_driver.MacOSCalls`'s/
|
|
598
|
+
:class:`coord.win_native_driver.Win32Calls`'s own platform guards. A
|
|
599
|
+
missing ``$DISPLAY``/``$WAYLAND_DISPLAY`` is NOT a construction-time
|
|
600
|
+
raise (#3510) — see :meth:`session_available`, checked by
|
|
601
|
+
:class:`NativeRunner` before any step runs. This driver never starts its
|
|
602
|
+
own ``Xvfb`` — see the module docstring's "headless by construction"
|
|
603
|
+
note.
|
|
566
604
|
"""
|
|
567
605
|
|
|
568
606
|
def __init__(self) -> None:
|
|
@@ -572,11 +610,25 @@ class LinuxGtkCalls:
|
|
|
572
610
|
"runs on a real Linux host with a display (e.g. a fleet "
|
|
573
611
|
"host running a persistent Xvfb session)"
|
|
574
612
|
)
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
613
|
+
# Deliberately NOT a construction-time raise for a missing display
|
|
614
|
+
# (#3510) — that is an "unavailable" lane verdict, not a driver
|
|
615
|
+
# construction failure, and is checked (and reachable through the
|
|
616
|
+
# same `GtkCalls` seam a test's fake implements) via
|
|
617
|
+
# :meth:`session_available`, called by `NativeRunner.run` before any
|
|
618
|
+
# step — see the module docstring's "missing-display precheck".
|
|
619
|
+
|
|
620
|
+
# -- session precheck (#3510) --
|
|
621
|
+
|
|
622
|
+
def session_available(self) -> tuple[bool, str]:
|
|
623
|
+
"""Real check: either ``$DISPLAY`` (X11) or ``$WAYLAND_DISPLAY``
|
|
624
|
+
(Wayland) must be set — no headless compositor or Xvfb session
|
|
625
|
+
appears to be running on this host otherwise."""
|
|
626
|
+
if os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY"):
|
|
627
|
+
return True, ""
|
|
628
|
+
return False, (
|
|
629
|
+
"neither $DISPLAY nor $WAYLAND_DISPLAY is set — no headless "
|
|
630
|
+
"compositor or Xvfb session appears to be running on this host"
|
|
631
|
+
)
|
|
580
632
|
|
|
581
633
|
# -- process lifecycle --
|
|
582
634
|
|
|
@@ -772,6 +824,12 @@ def run_native_spec(
|
|
|
772
824
|
assertion fails) do NOT raise — they're folded into the returned list
|
|
773
825
|
as a ``status="fail"`` entry, the same "partial results, not a crash"
|
|
774
826
|
contract :func:`coord.mac_native_driver.run_native_spec` already gives.
|
|
827
|
+
|
|
828
|
+
When *calls* reports no usable display
|
|
829
|
+
(:meth:`GtkCalls.session_available`, #3510), the returned list is a
|
|
830
|
+
single ``status="unavailable"`` entry and no step runs — a distinct
|
|
831
|
+
verdict from ``"fail"``, since a missing display is a host-provisioning
|
|
832
|
+
condition, not an app bug.
|
|
775
833
|
"""
|
|
776
834
|
spec = parse_native_spec(spec_text)
|
|
777
835
|
resolved_calls = calls if calls is not None else LinuxGtkCalls()
|
|
@@ -84,6 +84,16 @@ own child. See ``tests/test_mac_native_driver.py``'s
|
|
|
84
84
|
``test_no_name_based_kill_path_exists_in_the_module`` — a source-level
|
|
85
85
|
regression guard, mirroring :mod:`coord.win_native_driver`'s own
|
|
86
86
|
``test_no_image_name_kill_path_exists_in_the_module``.
|
|
87
|
+
|
|
88
|
+
**Locked/absent session precheck (#3510).** The same vimcode#1629 class of
|
|
89
|
+
problem applies here: a locked screen or no GUI session (headless/SSH-only)
|
|
90
|
+
is an environment condition, not an app bug. Before :meth:`NativeRunner.run`
|
|
91
|
+
launches anything it calls :meth:`MacCalls.session_available` — real check:
|
|
92
|
+
``CGSessionCopyCurrentDictionary`` must return a session, with
|
|
93
|
+
``CGSSessionScreenIsLocked`` false and ``kCGSessionOnConsoleKey`` true. When
|
|
94
|
+
unavailable, the run returns a single ``status="unavailable"`` result —
|
|
95
|
+
never a ``"fail"`` — and no step (not even ``launch``) runs. See
|
|
96
|
+
:mod:`coord.win_native_driver`'s own module docstring for the same shape.
|
|
87
97
|
"""
|
|
88
98
|
|
|
89
99
|
from __future__ import annotations
|
|
@@ -293,6 +303,17 @@ class MacCalls(Protocol):
|
|
|
293
303
|
|
|
294
304
|
def kill(self, pid: int) -> None: ...
|
|
295
305
|
|
|
306
|
+
def session_available(self) -> tuple[bool, str]:
|
|
307
|
+
"""``(True, "")`` when an unlocked GUI session is present for this
|
|
308
|
+
driver to launch into; ``(False, reason)`` when the screen is
|
|
309
|
+
locked or no GUI session exists (#3510) — checked by
|
|
310
|
+
:meth:`NativeRunner.run` BEFORE any step (including ``launch``)
|
|
311
|
+
runs, so a locked/absent session is reported as
|
|
312
|
+
``status="unavailable"`` rather than a failed step. Never raises —
|
|
313
|
+
a probe failure here is itself an "unavailable" verdict, not a
|
|
314
|
+
crash."""
|
|
315
|
+
...
|
|
316
|
+
|
|
296
317
|
|
|
297
318
|
def _find_a11y_match(elements: list[dict], role: str, name: str) -> dict | None:
|
|
298
319
|
"""The first *elements* entry whose ``role`` matches exactly
|
|
@@ -345,7 +366,19 @@ class NativeRunner:
|
|
|
345
366
|
self._window_id: int | None = None
|
|
346
367
|
|
|
347
368
|
def run(self, spec: NativeSpec) -> list[dict]:
|
|
369
|
+
"""Run *spec*, first checking :meth:`MacCalls.session_available`
|
|
370
|
+
(#3510). A locked screen or absent GUI session is an environment
|
|
371
|
+
condition, not an app bug: when unavailable, this returns a single
|
|
372
|
+
``status="unavailable"`` entry and runs NO step at all (not even
|
|
373
|
+
``launch``) — never folding it into an ordinary ``"fail"``."""
|
|
348
374
|
self._spec = spec
|
|
375
|
+
available, reason = self._calls.session_available()
|
|
376
|
+
if not available:
|
|
377
|
+
return [{
|
|
378
|
+
"id": "session",
|
|
379
|
+
"status": "unavailable",
|
|
380
|
+
"message": reason or "no unlocked GUI session is available",
|
|
381
|
+
}]
|
|
349
382
|
results: list[dict] = []
|
|
350
383
|
try:
|
|
351
384
|
for step in spec.steps:
|
|
@@ -577,6 +610,31 @@ class MacOSCalls:
|
|
|
577
610
|
except ProcessLookupError:
|
|
578
611
|
pass
|
|
579
612
|
|
|
613
|
+
# -- session precheck (#3510) --
|
|
614
|
+
|
|
615
|
+
def session_available(self) -> tuple[bool, str]:
|
|
616
|
+
"""Real check: ``CGSessionCopyCurrentDictionary`` must return an
|
|
617
|
+
actual session dictionary (``None``/empty means no GUI session is
|
|
618
|
+
logged in at all — headless or SSH-only), its
|
|
619
|
+
``CGSSessionScreenIsLocked`` key must be false, and its
|
|
620
|
+
``kCGSessionOnConsoleKey`` must be true (fast-user-switched-away
|
|
621
|
+
sessions are not on the console)."""
|
|
622
|
+
quartz = self._quartz
|
|
623
|
+
session_info = quartz.CGSessionCopyCurrentDictionary()
|
|
624
|
+
if not session_info:
|
|
625
|
+
return False, (
|
|
626
|
+
"CGSessionCopyCurrentDictionary returned no session — no "
|
|
627
|
+
"GUI session is active on this host (headless, SSH-only, "
|
|
628
|
+
"or nobody logged in)"
|
|
629
|
+
)
|
|
630
|
+
if bool(session_info.get("CGSSessionScreenIsLocked", False)):
|
|
631
|
+
return False, "the screen is locked (CGSSessionScreenIsLocked)"
|
|
632
|
+
if not bool(session_info.get("kCGSessionOnConsoleKey", True)):
|
|
633
|
+
return False, (
|
|
634
|
+
"the session is not on the console (fast user switched away)"
|
|
635
|
+
)
|
|
636
|
+
return True, ""
|
|
637
|
+
|
|
580
638
|
def find_top_window(self, pid: int, timeout_s: float) -> int:
|
|
581
639
|
quartz = self._quartz
|
|
582
640
|
deadline = time.monotonic() + timeout_s
|
|
@@ -785,6 +843,12 @@ def run_native_spec(
|
|
|
785
843
|
assertion fails) do NOT raise — they're folded into the returned list
|
|
786
844
|
as a ``status="fail"`` entry, the same "partial results, not a crash"
|
|
787
845
|
contract :func:`coord.win_native_driver.run_native_spec` already gives.
|
|
846
|
+
|
|
847
|
+
When *calls* reports a locked screen or no GUI session
|
|
848
|
+
(:meth:`MacCalls.session_available`, #3510), the returned list is a
|
|
849
|
+
single ``status="unavailable"`` entry and no step runs — a distinct
|
|
850
|
+
verdict from ``"fail"``, since a locked screen is an environment
|
|
851
|
+
condition, not an app bug.
|
|
788
852
|
"""
|
|
789
853
|
spec = parse_native_spec(spec_text)
|
|
790
854
|
resolved_calls = calls if calls is not None else MacOSCalls()
|