code-coordinator 0.5.204__tar.gz → 0.5.206__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.204 → code_coordinator-0.5.206}/PKG-INFO +1 -1
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/SOURCES.txt +4 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/scm_file_list.json +4 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/scm_version.json +2 -2
- code_coordinator-0.5.206/coord/ci_fix.py +209 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/merge.py +88 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/db.py +9 -1
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/merge_queue.py +30 -3
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/mock_author.py +49 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ORACLE_LOOP.md +29 -0
- code_coordinator-0.5.206/scripts/gen_mock_index.py +107 -0
- code_coordinator-0.5.206/tests/test_ci_fix.py +335 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_db.py +53 -0
- code_coordinator-0.5.206/tests/test_gen_mock_index.py +124 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_mock_author.py +58 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_thin_client_board_audit.py +13 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/tests/fixtures/board_sample.json +1 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/.gitignore +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/CLAUDE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/GOAL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/LICENSE +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/MANIFEST.in +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/README.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agent.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/audit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/block_log.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/board_service.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/brain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/claim.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/client.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/comments.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/config.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dao.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/deps.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/drive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/events.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/filelock.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/freshness.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/gates.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/goal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/context.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/models.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/render.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/health/units.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/hooks.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/interactive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/models.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/network.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/notify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/openapi.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/parentage.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/plans.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/progress.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/release_window.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/reports.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/review.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/self_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/smoke.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/split_work.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/test_author.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/test_report.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/usage.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/install-agent.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/pyproject.toml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/setup.cfg +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/__init__.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/conftest.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_events.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_init.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_models.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_network.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_session.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_split.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_state.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.204 → code_coordinator-0.5.206}/tui/tests/cli.rs +0 -0
|
@@ -46,6 +46,7 @@ coord/brain.py
|
|
|
46
46
|
coord/branch_model.py
|
|
47
47
|
coord/bug_intake.py
|
|
48
48
|
coord/cargo_cache.py
|
|
49
|
+
coord/ci_fix.py
|
|
49
50
|
coord/ci_github.py
|
|
50
51
|
coord/ci_gitlab.py
|
|
51
52
|
coord/ci_store.py
|
|
@@ -315,6 +316,7 @@ scripts/codegen.py
|
|
|
315
316
|
scripts/coord-test-runner.sh
|
|
316
317
|
scripts/drive-batch.sh
|
|
317
318
|
scripts/gen_board_fixture.py
|
|
319
|
+
scripts/gen_mock_index.py
|
|
318
320
|
scripts/next_release_tag.py
|
|
319
321
|
scripts/run_tests_in_populated_home.sh
|
|
320
322
|
scripts/run_tests_without_gh.sh
|
|
@@ -383,6 +385,7 @@ tests/test_build_worker_image_env_update.py
|
|
|
383
385
|
tests/test_cargo_cache.py
|
|
384
386
|
tests/test_check_gh_argv_containment.py
|
|
385
387
|
tests/test_ci_acceptance_gate_1950.py
|
|
388
|
+
tests/test_ci_fix.py
|
|
386
389
|
tests/test_ci_gitlab.py
|
|
387
390
|
tests/test_ci_parity_2091.py
|
|
388
391
|
tests/test_ci_store.py
|
|
@@ -509,6 +512,7 @@ tests/test_gate_b.py
|
|
|
509
512
|
tests/test_gate_snapshot_staleness.py
|
|
510
513
|
tests/test_gates.py
|
|
511
514
|
tests/test_gather_fleet_tmux_sessions.py
|
|
515
|
+
tests/test_gen_mock_index.py
|
|
512
516
|
tests/test_generated_types_fixture.py
|
|
513
517
|
tests/test_github_ops.py
|
|
514
518
|
tests/test_goal.py
|
{code_coordinator-0.5.204 → code_coordinator-0.5.206}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"coord/branch_model.py",
|
|
41
41
|
"coord/bug_intake.py",
|
|
42
42
|
"coord/cargo_cache.py",
|
|
43
|
+
"coord/ci_fix.py",
|
|
43
44
|
"coord/ci_github.py",
|
|
44
45
|
"coord/ci_gitlab.py",
|
|
45
46
|
"coord/ci_store.py",
|
|
@@ -319,6 +320,7 @@
|
|
|
319
320
|
"scripts/coord-test-runner.sh",
|
|
320
321
|
"scripts/drive-batch.sh",
|
|
321
322
|
"scripts/gen_board_fixture.py",
|
|
323
|
+
"scripts/gen_mock_index.py",
|
|
322
324
|
"scripts/next_release_tag.py",
|
|
323
325
|
"scripts/run_tests_in_populated_home.sh",
|
|
324
326
|
"scripts/run_tests_without_gh.sh",
|
|
@@ -445,6 +447,7 @@
|
|
|
445
447
|
"tests/test_cargo_cache.py",
|
|
446
448
|
"tests/test_check_gh_argv_containment.py",
|
|
447
449
|
"tests/test_ci_acceptance_gate_1950.py",
|
|
450
|
+
"tests/test_ci_fix.py",
|
|
448
451
|
"tests/test_ci_gitlab.py",
|
|
449
452
|
"tests/test_ci_parity_2091.py",
|
|
450
453
|
"tests/test_ci_store.py",
|
|
@@ -571,6 +574,7 @@
|
|
|
571
574
|
"tests/test_gate_snapshot_staleness.py",
|
|
572
575
|
"tests/test_gates.py",
|
|
573
576
|
"tests/test_gather_fleet_tmux_sessions.py",
|
|
577
|
+
"tests/test_gen_mock_index.py",
|
|
574
578
|
"tests/test_generated_types_fixture.py",
|
|
575
579
|
"tests/test_github_ops.py",
|
|
576
580
|
"tests/test_goal.py",
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"""Auto-dispatch a fix worker for a CONFIRMED CI check failure at the Merge
|
|
2
|
+
gate (#2510).
|
|
3
|
+
|
|
4
|
+
``coord/merge_queue.py``'s CI gate already classifies a failing check into
|
|
5
|
+
three shapes: a verdictless (infra) failure auto-reruns up to
|
|
6
|
+
``MAX_CI_INFRA_RERUNS``; a verdicted failure gets one flake re-check up to
|
|
7
|
+
``MAX_CI_FLAKY_RERUNS``; and once both budgets are exhausted/inapplicable the
|
|
8
|
+
failure is CONFIRMED — real, not infra, not (as far as one re-run can tell)
|
|
9
|
+
flaky. Both exhaustion points emit a ``"checks_failed"`` :class:`~coord.
|
|
10
|
+
merge_queue.MergeEvent`. Before this module existed that event did nothing
|
|
11
|
+
but set ``entry.error`` — the entry stayed ``PENDING`` in the merge queue
|
|
12
|
+
forever, invisible to any status view that only surfaces ``HUMAN_REQUIRED``
|
|
13
|
+
rows, with no automated path back to a fix.
|
|
14
|
+
|
|
15
|
+
Why a separate module, following ``coord/conflict_fix.py``'s lead: triggered
|
|
16
|
+
by a merge_queue event, not a planner proposal, so it shares little with
|
|
17
|
+
``coord.dispatch``.
|
|
18
|
+
|
|
19
|
+
Unlike a merge CONFLICT (mechanical, content-preserving, handled by a
|
|
20
|
+
dedicated ``type="conflict-fix"`` worker whose success needs no fresh
|
|
21
|
+
Test/Review since the diff is unchanged), a confirmed CI failure needs a
|
|
22
|
+
worker that can genuinely change code — the same shape as a review
|
|
23
|
+
``request-changes`` bounce. So this dispatches via
|
|
24
|
+
:func:`coord.auto_loop._dispatch_fix` itself (not a bespoke HTTP POST): the
|
|
25
|
+
new commit lands on the SAME branch/PR, and the existing generic Work→Test→
|
|
26
|
+
Review pipeline (already built to re-drive Test then Review for any bounced
|
|
27
|
+
``WORK_LIKE_TYPES`` fix) picks the new commit up on its own — no separate
|
|
28
|
+
re-review wiring needed here. The merge queue's own ``branch_head_sha``/
|
|
29
|
+
``branch_patch_id`` staleness check (see ``has_approved_review``) already
|
|
30
|
+
invalidates the stale approval once the new commit lands, so the PR
|
|
31
|
+
naturally cannot merge again until it clears Test + Review + CI fresh.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
from __future__ import annotations
|
|
35
|
+
|
|
36
|
+
import logging
|
|
37
|
+
|
|
38
|
+
import httpx
|
|
39
|
+
|
|
40
|
+
from coord.config import Config
|
|
41
|
+
from coord.merge_queue import QueuedMerge, _chain_work_ids
|
|
42
|
+
from coord.models import Assignment, Board
|
|
43
|
+
|
|
44
|
+
_log = logging.getLogger(__name__)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# #2510: bounded the same shape as MAX_CI_INFRA_RERUNS/MAX_CI_FLAKY_RERUNS —
|
|
48
|
+
# a couple of genuine attempts is enough to tell "this is fixable by a
|
|
49
|
+
# worker" from "this needs a human"; a higher cap just burns more of the
|
|
50
|
+
# same exhausted budget the way an unbounded conflict-fix retry would.
|
|
51
|
+
MAX_CI_FIX_DISPATCHES = 2
|
|
52
|
+
|
|
53
|
+
# Prefix on the dispatched fix worker's issue_title — mirrors
|
|
54
|
+
# `conflict_fix.SEMANTIC_FIX_TITLE_PREFIX`'s visibility purpose: the TUI
|
|
55
|
+
# Pipeline row and the fix briefing itself both make it obvious WHY this
|
|
56
|
+
# round was dispatched (a CI failure, not a review request-changes bounce).
|
|
57
|
+
CI_FIX_TITLE_PREFIX = "[ci-fix]"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def build_ci_fix_briefing(
|
|
61
|
+
*,
|
|
62
|
+
entry: QueuedMerge,
|
|
63
|
+
checks_summary: str,
|
|
64
|
+
attempt: int,
|
|
65
|
+
) -> str:
|
|
66
|
+
"""Assemble the CI-fix worker's briefing. Pure function — testable."""
|
|
67
|
+
lines: list[str] = [
|
|
68
|
+
f"# CI failure fix: {entry.repo_github} branch `{entry.branch}`",
|
|
69
|
+
"",
|
|
70
|
+
f"Issue #{entry.issue_number} — {entry.issue_title}",
|
|
71
|
+
"",
|
|
72
|
+
"Review already approved this PR and it reached the Merge gate, "
|
|
73
|
+
"where GitHub Actions CI reported a REAL failure (not infra, and "
|
|
74
|
+
"not resolved by one automatic re-run) on the checks below:",
|
|
75
|
+
"",
|
|
76
|
+
f" {checks_summary}",
|
|
77
|
+
"",
|
|
78
|
+
f"This is fix attempt {attempt}/{MAX_CI_FIX_DISPATCHES} for this "
|
|
79
|
+
"failure streak — the coordinator will escalate to a human if this "
|
|
80
|
+
"many attempts don't produce a green run.",
|
|
81
|
+
"",
|
|
82
|
+
"## What to do",
|
|
83
|
+
"",
|
|
84
|
+
"1. You are already on this issue's existing branch — continue on "
|
|
85
|
+
"it, do NOT start a fresh branch.",
|
|
86
|
+
"2. Reproduce the failure locally if the project's test command "
|
|
87
|
+
"covers it (`coord`'s Test stage already runs the same diff-scoped "
|
|
88
|
+
"suite CI reruns in full — a failure CI alone caught may live in a "
|
|
89
|
+
"suite that only runs in CI, e.g. a sealed acceptance suite).",
|
|
90
|
+
"3. Fix the actual regression. Do not edit the failing check's "
|
|
91
|
+
"workflow config to make it pass without fixing the underlying "
|
|
92
|
+
"issue, and do not skip/xfail the failing test unless the test "
|
|
93
|
+
"itself is proven wrong.",
|
|
94
|
+
"4. Commit and push to the SAME branch. The coordinator re-runs "
|
|
95
|
+
"Test, Review, and CI from scratch on the new commit — this is not "
|
|
96
|
+
"a force-merge shortcut.",
|
|
97
|
+
"",
|
|
98
|
+
"You will NOT use `gh` — the coordinator owns PR/issue interaction "
|
|
99
|
+
"and CI status reads.",
|
|
100
|
+
"",
|
|
101
|
+
f"Last merge-gate error: {entry.error or checks_summary}",
|
|
102
|
+
]
|
|
103
|
+
return "\n".join(lines)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _has_active_fix(board: Board, entry: QueuedMerge) -> bool:
|
|
107
|
+
"""True when a WORK_LIKE fix for *entry*'s chain is already running or
|
|
108
|
+
pending — regardless of whether it was dispatched for this CI failure or
|
|
109
|
+
an unrelated review bounce; either way a second dispatch here would race
|
|
110
|
+
it onto the same branch.
|
|
111
|
+
"""
|
|
112
|
+
pool = list(board.completed) + list(board.active)
|
|
113
|
+
chain_ids = _chain_work_ids(entry, pool)
|
|
114
|
+
active_ids = {
|
|
115
|
+
getattr(a, "assignment_id", None) for a in board.active
|
|
116
|
+
} - {None}
|
|
117
|
+
for a in pool:
|
|
118
|
+
aid = getattr(a, "assignment_id", None)
|
|
119
|
+
if aid is None or aid not in chain_ids or aid == entry.assignment_id:
|
|
120
|
+
continue
|
|
121
|
+
if aid in active_ids and getattr(a, "status", None) in ("running", "pending"):
|
|
122
|
+
return True
|
|
123
|
+
return False
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def dispatch_ci_fix(
|
|
127
|
+
entry: QueuedMerge,
|
|
128
|
+
board: Board,
|
|
129
|
+
config: Config,
|
|
130
|
+
*,
|
|
131
|
+
checks_summary: str | None = None,
|
|
132
|
+
http_client: httpx.Client | None = None,
|
|
133
|
+
) -> Assignment | None:
|
|
134
|
+
"""Dispatch a fix worker for *entry*'s confirmed CI failure.
|
|
135
|
+
|
|
136
|
+
Returns the new ``Assignment``, or ``None`` when dispatch couldn't
|
|
137
|
+
proceed: the retry cap (:data:`MAX_CI_FIX_DISPATCHES`) is already spent,
|
|
138
|
+
a fix for this chain is already in flight, the original work assignment
|
|
139
|
+
can't be found on *board*, or the underlying ``_dispatch_fix`` call
|
|
140
|
+
itself declined (no capable machine, agent unreachable, …). The caller
|
|
141
|
+
(``coord.commands.merge._dispatch_ci_fixes``) is responsible for
|
|
142
|
+
promoting *entry* to ``HUMAN_REQUIRED`` when this returns ``None`` with
|
|
143
|
+
the retry cap exhausted, and for persisting the board/queue.
|
|
144
|
+
|
|
145
|
+
Does NOT increment ``entry.ci_fix_dispatches`` on a ``None`` return —
|
|
146
|
+
only a successful dispatch spends the budget, mirroring how
|
|
147
|
+
``ci_infra_reruns``/``ci_flaky_reruns`` are only bumped when their
|
|
148
|
+
respective remedy actually fired.
|
|
149
|
+
"""
|
|
150
|
+
if entry.ci_fix_dispatches >= MAX_CI_FIX_DISPATCHES:
|
|
151
|
+
return None
|
|
152
|
+
if _has_active_fix(board, entry):
|
|
153
|
+
return None
|
|
154
|
+
if entry.assignment_id is None:
|
|
155
|
+
return None
|
|
156
|
+
work = board.find_by_id(entry.assignment_id)
|
|
157
|
+
if work is None:
|
|
158
|
+
_log.warning(
|
|
159
|
+
"ci_fix: cannot find original work assignment %s for %s#%d — "
|
|
160
|
+
"no fix dispatched",
|
|
161
|
+
entry.assignment_id, entry.repo_name, entry.issue_number,
|
|
162
|
+
)
|
|
163
|
+
return None
|
|
164
|
+
|
|
165
|
+
summary = checks_summary or entry.error or "CI checks failed"
|
|
166
|
+
briefing = build_ci_fix_briefing(
|
|
167
|
+
entry=entry, checks_summary=summary, attempt=entry.ci_fix_dispatches + 1,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
from coord.auto_loop import _dispatch_fix # noqa: PLC0415
|
|
171
|
+
|
|
172
|
+
fix = _dispatch_fix(
|
|
173
|
+
work, briefing, board, config, entry.ci_fix_dispatches + 1,
|
|
174
|
+
http_client=http_client,
|
|
175
|
+
)
|
|
176
|
+
if fix is None:
|
|
177
|
+
return None
|
|
178
|
+
|
|
179
|
+
# #2510 visibility: mark the row so the TUI/board can tell a CI-triggered
|
|
180
|
+
# round apart from an ordinary review-bounce fix at a glance, same
|
|
181
|
+
# purpose as conflict_fix's SEMANTIC_FIX_TITLE_PREFIX.
|
|
182
|
+
fix.issue_title = f"{CI_FIX_TITLE_PREFIX} {work.issue_title}"
|
|
183
|
+
|
|
184
|
+
entry.ci_fix_dispatches += 1
|
|
185
|
+
|
|
186
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
187
|
+
|
|
188
|
+
record_audit(
|
|
189
|
+
tier="operational",
|
|
190
|
+
category="merge",
|
|
191
|
+
event_type="ci_fix_dispatched",
|
|
192
|
+
actor="daemon",
|
|
193
|
+
summary=(
|
|
194
|
+
f"ci-fix dispatched ({entry.ci_fix_dispatches}/"
|
|
195
|
+
f"{MAX_CI_FIX_DISPATCHES}): {entry.repo_name}#{entry.issue_number} "
|
|
196
|
+
f"-> {fix.machine_name}"
|
|
197
|
+
),
|
|
198
|
+
repo=entry.repo_name,
|
|
199
|
+
issue=entry.issue_number,
|
|
200
|
+
assignment_id=fix.assignment_id,
|
|
201
|
+
machine=fix.machine_name,
|
|
202
|
+
details={
|
|
203
|
+
"merge_entry_id": entry.assignment_id,
|
|
204
|
+
"ci_fix_dispatches": entry.ci_fix_dispatches,
|
|
205
|
+
"checks_summary": summary,
|
|
206
|
+
},
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
return fix
|
|
@@ -539,6 +539,85 @@ def _dispatch_conflict_fixes(events, config, *, dry_run: bool) -> None:
|
|
|
539
539
|
save_board(fix_board)
|
|
540
540
|
|
|
541
541
|
|
|
542
|
+
def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
|
|
543
|
+
"""#2510: classify any CONFIRMED ``checks_failed`` events and dispatch a
|
|
544
|
+
bounded CI-fix worker for the eligible ones, escalating to
|
|
545
|
+
``HUMAN_REQUIRED`` once the retry cap (``coord.ci_fix.
|
|
546
|
+
MAX_CI_FIX_DISPATCHES``) is spent.
|
|
547
|
+
|
|
548
|
+
Mutates each qualifying event's ``ev.entry.state``/``ev.entry.error`` in
|
|
549
|
+
place — same shape as :func:`_dispatch_conflict_fixes` — so the caller's
|
|
550
|
+
own subsequent save-queue step picks the mutation up naturally.
|
|
551
|
+
|
|
552
|
+
``process()`` emits a bare ``"checks_failed"`` event kind at exactly two
|
|
553
|
+
points, both reached only once the OTHER auto-remedies (the #1892 infra
|
|
554
|
+
rerun budget, the #2252 one-shot flake re-check) are exhausted or
|
|
555
|
+
inapplicable — i.e. both ARE the "confirmed real failure" case this leg
|
|
556
|
+
exists for (see ``coord.ci_fix``'s module docstring). Every other CI
|
|
557
|
+
outcome (``checks_pending``, ``ci_infra_rerun``, ``ci_flaky_rerun``,
|
|
558
|
+
``checks_unreadable``, ``checks_stale``) is still self-healing or
|
|
559
|
+
mid-retry and must not be touched here.
|
|
560
|
+
|
|
561
|
+
Shared by the whole-queue path and the ``--only`` surgical path, same
|
|
562
|
+
reasoning as ``_dispatch_conflict_fixes``: a bare ``checks_failed`` entry
|
|
563
|
+
is never reprocessed by a later ``process()`` call (it only acts on
|
|
564
|
+
``PENDING`` entries) so whichever caller sees the event first must also
|
|
565
|
+
be the one to act on it.
|
|
566
|
+
"""
|
|
567
|
+
ci_events = [ev for ev in events if ev.kind == "checks_failed"]
|
|
568
|
+
if not ci_events or dry_run:
|
|
569
|
+
return
|
|
570
|
+
|
|
571
|
+
from coord.audit import record_audit # noqa: PLC0415
|
|
572
|
+
from coord.ci_fix import MAX_CI_FIX_DISPATCHES, dispatch_ci_fix # noqa: PLC0415
|
|
573
|
+
from coord.merge_queue import HUMAN_REQUIRED # noqa: PLC0415
|
|
574
|
+
from coord.state import load_board, save_board # noqa: PLC0415
|
|
575
|
+
|
|
576
|
+
fix_board = load_board()
|
|
577
|
+
if fix_board is None:
|
|
578
|
+
return
|
|
579
|
+
dispatched_any = False
|
|
580
|
+
for ev in ci_events:
|
|
581
|
+
entry = ev.entry
|
|
582
|
+
fix = dispatch_ci_fix(entry, fix_board, config, checks_summary=ev.message)
|
|
583
|
+
if fix is not None:
|
|
584
|
+
click.echo(
|
|
585
|
+
f" {entry.repo_name} #{entry.issue_number}: "
|
|
586
|
+
f"ci-fix dispatched to {fix.machine_name} "
|
|
587
|
+
f"({entry.ci_fix_dispatches}/{MAX_CI_FIX_DISPATCHES})"
|
|
588
|
+
)
|
|
589
|
+
dispatched_any = True
|
|
590
|
+
continue
|
|
591
|
+
if entry.ci_fix_dispatches >= MAX_CI_FIX_DISPATCHES:
|
|
592
|
+
entry.state = HUMAN_REQUIRED
|
|
593
|
+
click.echo(
|
|
594
|
+
f" {entry.repo_name} #{entry.issue_number}: "
|
|
595
|
+
f"ci-fix retry cap hit ({entry.ci_fix_dispatches}/"
|
|
596
|
+
f"{MAX_CI_FIX_DISPATCHES}) — manual resolution required"
|
|
597
|
+
)
|
|
598
|
+
record_audit(
|
|
599
|
+
tier="operational",
|
|
600
|
+
category="merge",
|
|
601
|
+
event_type="ci_fix_human_required",
|
|
602
|
+
actor="daemon",
|
|
603
|
+
summary=(
|
|
604
|
+
f"ci-fix retry cap hit: {entry.repo_name}#"
|
|
605
|
+
f"{entry.issue_number} — manual resolution required"
|
|
606
|
+
),
|
|
607
|
+
repo=entry.repo_name,
|
|
608
|
+
issue=entry.issue_number,
|
|
609
|
+
assignment_id=entry.assignment_id,
|
|
610
|
+
details={"reason": "ci_fix_retry_cap", "error": entry.error},
|
|
611
|
+
)
|
|
612
|
+
dispatched_any = True # the HUMAN_REQUIRED mutation needs saving
|
|
613
|
+
# else: budget remains but dispatch declined for another reason (no
|
|
614
|
+
# machine, an unrelated fix already in flight, agent unreachable) —
|
|
615
|
+
# leave the entry PENDING for the next tick to retry, exactly like a
|
|
616
|
+
# declined conflict-fix dispatch does.
|
|
617
|
+
if dispatched_any:
|
|
618
|
+
save_board(fix_board)
|
|
619
|
+
|
|
620
|
+
|
|
542
621
|
@click.command(
|
|
543
622
|
"verify-merge",
|
|
544
623
|
help=(
|
|
@@ -1927,6 +2006,10 @@ def merge(
|
|
|
1927
2006
|
# before the save below so a retry-cap/non-rebaseable HUMAN_REQUIRED
|
|
1928
2007
|
# mutation on only_entry.state is persisted, not lost.
|
|
1929
2008
|
_dispatch_conflict_fixes(events_only, cfg_only, dry_run=dry_run)
|
|
2009
|
+
# #2510: same reasoning, for a CONFIRMED checks_failed event — dispatch
|
|
2010
|
+
# a bounded ci-fix worker or escalate to HUMAN_REQUIRED before the
|
|
2011
|
+
# save below, so the mutation on only_entry.state is persisted too.
|
|
2012
|
+
_dispatch_ci_fixes(events_only, cfg_only, dry_run=dry_run)
|
|
1930
2013
|
# #2246: `--only` merges one entry, but the branch it just moved is
|
|
1931
2014
|
# shared — every OTHER queued PR based on it may have become
|
|
1932
2015
|
# CONFLICTING a second ago. This is the drive-queue's path (`coord
|
|
@@ -2251,6 +2334,11 @@ def merge(
|
|
|
2251
2334
|
# review, so the --only path below can share it).
|
|
2252
2335
|
_dispatch_conflict_fixes(events, cfg, dry_run=dry_run)
|
|
2253
2336
|
|
|
2337
|
+
# #2510: classify any CONFIRMED checks_failed events and dispatch a
|
|
2338
|
+
# bounded ci-fix worker for the eligible ones, escalating to
|
|
2339
|
+
# HUMAN_REQUIRED once the retry cap is spent.
|
|
2340
|
+
_dispatch_ci_fixes(events, cfg, dry_run=dry_run)
|
|
2341
|
+
|
|
2254
2342
|
# #2246: whatever just landed may have invalidated its siblings — ask
|
|
2255
2343
|
# GitHub now, while the merge that caused it is still the obvious
|
|
2256
2344
|
# explanation, rather than letting the next drive attempt discover it as
|
|
@@ -192,7 +192,8 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
192
192
|
ci_stale_reruns INTEGER NOT NULL DEFAULT 0,
|
|
193
193
|
ci_flaky_reruns INTEGER NOT NULL DEFAULT 0,
|
|
194
194
|
ci_flaky_pending TEXT NOT NULL DEFAULT '',
|
|
195
|
-
ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0
|
|
195
|
+
ci_unreadable_reruns INTEGER NOT NULL DEFAULT 0,
|
|
196
|
+
ci_fix_dispatches INTEGER NOT NULL DEFAULT 0
|
|
196
197
|
);
|
|
197
198
|
|
|
198
199
|
CREATE TABLE IF NOT EXISTS plans (
|
|
@@ -934,6 +935,13 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
934
935
|
# NULL for a hand dispatch, a coordinator/brain-proposed dispatch,
|
|
935
936
|
# and every row predating this column.
|
|
936
937
|
"ALTER TABLE assignments ADD COLUMN dispatched_by_assignment_id TEXT",
|
|
938
|
+
# #2510: count of `coord.ci_fix.dispatch_ci_fix` fix-worker dispatches
|
|
939
|
+
# issued for this entry's CURRENT confirmed (non-infra, non-first-
|
|
940
|
+
# flake) `checks_failed` streak — see `QueuedMerge.ci_fix_dispatches`'s
|
|
941
|
+
# docstring and `coord.ci_fix.MAX_CI_FIX_DISPATCHES`. 0 for every row
|
|
942
|
+
# predating this migration, same as the column's own default for a
|
|
943
|
+
# freshly-enqueued entry.
|
|
944
|
+
"ALTER TABLE merge_queue ADD COLUMN ci_fix_dispatches INTEGER NOT NULL DEFAULT 0",
|
|
937
945
|
]
|
|
938
946
|
for sql in migrations:
|
|
939
947
|
try:
|
|
@@ -2524,6 +2524,29 @@ class QueuedMerge:
|
|
|
2524
2524
|
# any of the other three ("what did CI say?"). 0 for every entry that
|
|
2525
2525
|
# has never hit a fetch failure, and for rows predating this column.
|
|
2526
2526
|
ci_unreadable_reruns: int = 0
|
|
2527
|
+
# #2510: count of `type="ci-fix"`-shaped fix-worker dispatches the
|
|
2528
|
+
# coordinator has issued for this entry's confirmed (non-infra,
|
|
2529
|
+
# non-first-flake) `checks_failed` streak — capped at
|
|
2530
|
+
# `coord.ci_fix.MAX_CI_FIX_DISPATCHES`. A CONFIRMED failure (see
|
|
2531
|
+
# `process()`'s `msg = f"checks failed: {summary}"` block, reached only
|
|
2532
|
+
# once the infra/flaky retry budgets above are exhausted or
|
|
2533
|
+
# inapplicable) used to just leave the entry `PENDING` forever with no
|
|
2534
|
+
# path back to a fix — this is the durable ceiling that lets
|
|
2535
|
+
# `coord.commands.merge._dispatch_ci_fixes` dispatch a bounded number of
|
|
2536
|
+
# fix attempts before giving up and promoting the entry to
|
|
2537
|
+
# `HUMAN_REQUIRED`, mirroring how `ci_infra_reruns`/`ci_flaky_reruns`
|
|
2538
|
+
# bound their own auto-remedies. 0 for every entry that has never hit a
|
|
2539
|
+
# confirmed CI failure, and for rows predating this column. Unlike the
|
|
2540
|
+
# rerun counters above (which reset once CI resolves cleanly — see the
|
|
2541
|
+
# "genuinely resolved" reset block later in `process()`), this one is
|
|
2542
|
+
# intentionally NOT auto-reset there: a fix dispatch's payoff is a FUTURE
|
|
2543
|
+
# green run on a NEW commit, which as a side effect also resets
|
|
2544
|
+
# ci_infra_reruns/ci_flaky_reruns/ci_unreadable_reruns — so by the time
|
|
2545
|
+
# this entry could reach that reset block again, the fix either worked
|
|
2546
|
+
# (merge proceeds, entry leaves the queue) or the retry budget is what
|
|
2547
|
+
# stopped the loop; resetting it on an unrelated green tick would just
|
|
2548
|
+
# reopen a budget a still-broken PR could re-exhaust forever.
|
|
2549
|
+
ci_fix_dispatches: int = 0
|
|
2527
2550
|
|
|
2528
2551
|
|
|
2529
2552
|
class GhOps(Protocol):
|
|
@@ -2848,6 +2871,10 @@ def load_queue() -> list[QueuedMerge]:
|
|
|
2848
2871
|
# #2347: same NULL-to-0 decoding as ci_infra_reruns above, for
|
|
2849
2872
|
# rows predating this column.
|
|
2850
2873
|
ci_unreadable_reruns=row["ci_unreadable_reruns"] or 0,
|
|
2874
|
+
# #2510: column added via migration; NULL (pre-migration rows)
|
|
2875
|
+
# decodes to 0 — no CI-fix dispatches spent yet, same as a fresh
|
|
2876
|
+
# entry.
|
|
2877
|
+
ci_fix_dispatches=row["ci_fix_dispatches"] or 0,
|
|
2851
2878
|
)
|
|
2852
2879
|
for row in rows
|
|
2853
2880
|
]
|
|
@@ -2866,8 +2893,8 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
2866
2893
|
pr_number, pr_url, size, last_attempt, error, enqueued_at,
|
|
2867
2894
|
assignment_type, required_gates, ci_infra_reruns,
|
|
2868
2895
|
ci_stale_reruns, ci_flaky_reruns, ci_flaky_pending,
|
|
2869
|
-
ci_unreadable_reruns
|
|
2870
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
|
2896
|
+
ci_unreadable_reruns, ci_fix_dispatches
|
|
2897
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
|
2871
2898
|
(
|
|
2872
2899
|
item.assignment_id, item.repo_name, item.repo_github,
|
|
2873
2900
|
item.branch, item.target_branch, item.issue_number,
|
|
@@ -2876,7 +2903,7 @@ def save_queue(items: list[QueuedMerge]) -> None:
|
|
|
2876
2903
|
item.assignment_type, json.dumps(list(item.required_gates or [])),
|
|
2877
2904
|
item.ci_infra_reruns, item.ci_stale_reruns,
|
|
2878
2905
|
item.ci_flaky_reruns, item.ci_flaky_pending,
|
|
2879
|
-
item.ci_unreadable_reruns,
|
|
2906
|
+
item.ci_unreadable_reruns, item.ci_fix_dispatches,
|
|
2880
2907
|
),
|
|
2881
2908
|
)
|
|
2882
2909
|
|
|
@@ -49,6 +49,32 @@ from coord.milestone_dispatch import pick_machine
|
|
|
49
49
|
from coord.models import Machine, Proposal
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
def _wants_mock_index(driver_mock_glob: str) -> bool:
|
|
53
|
+
"""#2512: the navigation-index post-render step only makes sense for
|
|
54
|
+
HTML mocks — an `index.html` full of `<a href>`s to `.screen` text-grid
|
|
55
|
+
dumps (tui-tuidriver) or whatever cli-pytest renders isn't navigable in
|
|
56
|
+
a browser anyway. Gate on the mock glob rather than the driver name so
|
|
57
|
+
this stays correct if a future driver also renders `.html`."""
|
|
58
|
+
return driver_mock_glob.strip().lower().endswith(".html")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _mock_index_instruction(ms_dir: str) -> str:
|
|
62
|
+
"""#2512: the instruction text both briefing builders below hand the
|
|
63
|
+
mock-author worker, verbatim — a *provided script* the worker runs as
|
|
64
|
+
its last step before committing, not something it free-hands per
|
|
65
|
+
milestone (see `scripts/gen_mock_index.py`'s docstring for why: every
|
|
66
|
+
Gate-A mock set should look the same, and nothing should drift by
|
|
67
|
+
taste)."""
|
|
68
|
+
return (
|
|
69
|
+
f"As your LAST step before committing, run `python "
|
|
70
|
+
f"scripts/gen_mock_index.py {ms_dir}/mocks` to (re)generate "
|
|
71
|
+
f"`{ms_dir}/mocks/index.html` — a plain navigation page linking "
|
|
72
|
+
"every mock by its own `<title>` tag (#2512). Do not hand-write "
|
|
73
|
+
"this file yourself; the script is the single source of truth so "
|
|
74
|
+
"every milestone's mock set gets the same glue page."
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
52
78
|
def build_mock_author_briefing(
|
|
53
79
|
*,
|
|
54
80
|
repo_slug: str,
|
|
@@ -94,6 +120,8 @@ def build_mock_author_briefing(
|
|
|
94
120
|
"not authoring it from scratch — read it first and edit in place. "
|
|
95
121
|
"Commit and push both to this branch when done."
|
|
96
122
|
)
|
|
123
|
+
if _wants_mock_index(driver_mock_glob):
|
|
124
|
+
parts.append(_mock_index_instruction(ms_dir))
|
|
97
125
|
return "\n".join(parts)
|
|
98
126
|
|
|
99
127
|
|
|
@@ -104,6 +132,7 @@ def build_mock_author_amend_briefing(
|
|
|
104
132
|
milestone_number: int,
|
|
105
133
|
tracking_issue_number: int,
|
|
106
134
|
amend_text: str,
|
|
135
|
+
driver_mock_glob: str,
|
|
107
136
|
) -> str:
|
|
108
137
|
"""#1315: seed briefing for a *targeted* Gate-A contract amendment.
|
|
109
138
|
|
|
@@ -120,6 +149,15 @@ def build_mock_author_amend_briefing(
|
|
|
120
149
|
the ``tests/acceptance/**`` sealing guard — see ``coord/dispatch.py``
|
|
121
150
|
and #1315's ``_sealed_write_guard_tools`` in ``coord/agent.py``), so a
|
|
122
151
|
contract correction never needs to fall back to ``type="work"`` again.
|
|
152
|
+
|
|
153
|
+
*driver_mock_glob* (#2512) is the repo's resolved acceptance-driver mock
|
|
154
|
+
glob (e.g. ``"*.html"``, ``"*.screen"``) — already resolved by the
|
|
155
|
+
caller (:func:`dispatch_acceptance_mock` always resolves ``driver_cfg``
|
|
156
|
+
before either briefing builder runs). Threaded through purely to gate
|
|
157
|
+
whether the mock-navigation-index instruction below is worth including;
|
|
158
|
+
an amendment that only touches ``contract.md`` still gets the
|
|
159
|
+
instruction, phrased conditionally, since this function has no way to
|
|
160
|
+
know in advance whether the correction will touch ``mocks/``.
|
|
123
161
|
"""
|
|
124
162
|
ms_dir = f"tests/acceptance/{ms_dirname(milestone_number)}"
|
|
125
163
|
|
|
@@ -137,6 +175,16 @@ def build_mock_author_amend_briefing(
|
|
|
137
175
|
f"do not touch any file outside `{ms_dir}/`. Commit and push both "
|
|
138
176
|
"to this branch when done."
|
|
139
177
|
)
|
|
178
|
+
if _wants_mock_index(driver_mock_glob):
|
|
179
|
+
parts.append(
|
|
180
|
+
f"If this correction touches any file under `{ms_dir}/mocks/`, "
|
|
181
|
+
f"regenerate `{ms_dir}/mocks/index.html` before committing by "
|
|
182
|
+
f"running `python scripts/gen_mock_index.py {ms_dir}/mocks` "
|
|
183
|
+
"(#2512) — a plain navigation page linking every mock by its "
|
|
184
|
+
"own `<title>` tag. Do not hand-write this file yourself; the "
|
|
185
|
+
"script is the single source of truth so every milestone's "
|
|
186
|
+
"mock set gets the same glue page."
|
|
187
|
+
)
|
|
140
188
|
parts.append("")
|
|
141
189
|
parts.append("--- Requested correction ---")
|
|
142
190
|
parts.append(amend_text.strip())
|
|
@@ -260,6 +308,7 @@ def dispatch_acceptance_mock(
|
|
|
260
308
|
milestone_number=milestone_number,
|
|
261
309
|
tracking_issue_number=tracking_issue_number,
|
|
262
310
|
amend_text=amend_briefing,
|
|
311
|
+
driver_mock_glob=driver_cfg.mock,
|
|
263
312
|
)
|
|
264
313
|
proposal = Proposal(
|
|
265
314
|
id=0,
|
|
@@ -141,11 +141,40 @@ One command, framework-agnostic above the driver:
|
|
|
141
141
|
tests/acceptance/ms-NN/
|
|
142
142
|
contract.md # the black-box surface: CLI names, key screen text, API field shapes
|
|
143
143
|
mocks/ # the viewable mocks == the assertion fixtures (*.screen / *.html / …)
|
|
144
|
+
index.html # HTML drivers only — navigation glue, see below
|
|
144
145
|
<suite files> # red at Gate A, extended JIT per issue; SEALED to the worker
|
|
145
146
|
manifest.(yml|json) # test-id → issue-slice mapping (drives --issue N)
|
|
146
147
|
# + optional expected_red: {issue: [test-id, ...]} — see below
|
|
147
148
|
```
|
|
148
149
|
|
|
150
|
+
**`mocks/index.html` — navigation glue between the flat mock files (#2512).**
|
|
151
|
+
A rendered mock set for an HTML driver (`web-playwright` and any future
|
|
152
|
+
HTML-based driver — gated on the mock glob ending `.html`, not the driver
|
|
153
|
+
name) is a pile of disconnected files: `reports-grid.html`,
|
|
154
|
+
`reports-chart.html`, and so on, each self-contained and each only
|
|
155
|
+
reachable if you already know its name. This is deliberately **not** the
|
|
156
|
+
"clickable mocks" question (deferred — `docs/CUSTOMER_PORTAL.md:152-157`
|
|
157
|
+
still holds: mocks stay self-contained static HTML, no build step, no
|
|
158
|
+
framework, no live data). It is pure navigation: a plain `<ul>` of
|
|
159
|
+
`<a href>` links, one per mock file, labelled from that mock's own
|
|
160
|
+
`<title>` tag.
|
|
161
|
+
|
|
162
|
+
This index is generated by a **deterministic script**
|
|
163
|
+
(`scripts/gen_mock_index.py`), not hand-authored by the mock-author LLM —
|
|
164
|
+
the same "run a provided script, don't freehand it" posture this repo
|
|
165
|
+
already uses for sealed-suite tooling, so every milestone's mock set gets
|
|
166
|
+
the identical glue page and nothing drifts by taste between renders.
|
|
167
|
+
`coord/mock_author.py`'s seed briefings (`build_mock_author_briefing` for a
|
|
168
|
+
fresh render, `build_mock_author_amend_briefing` for `--amend`) tell the
|
|
169
|
+
mock-author worker to run it as the last step before committing, whenever
|
|
170
|
+
the resolved driver's mock glob is HTML. Because it is a plain `.html` file
|
|
171
|
+
under `mocks/`, it needs no special-casing anywhere downstream:
|
|
172
|
+
`collect_mock_bundle_files` (PDR-3, #2508) already picks up every
|
|
173
|
+
`mocks/*.html` file when reading a merged Gate-A branch back into a design
|
|
174
|
+
round, so `index.html` rides along into the portal bundle for free. It is
|
|
175
|
+
also what the local-view TUI action (#2501) should open instead of a single
|
|
176
|
+
mock file, once that lands.
|
|
177
|
+
|
|
149
178
|
## A sealed slice is red by design — the `expected_red` registry (#2164)
|
|
150
179
|
|
|
151
180
|
A sealed acceptance slice is **red by design** the moment it's authored — its fix doesn't exist yet.
|