code-coordinator 0.5.227__tar.gz → 0.5.229__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.227 → code_coordinator-0.5.229}/PKG-INFO +1 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/block_log.py +192 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/drive_queue.py +136 -6
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/conflict_fix.py +295 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/models.py +10 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notify.py +73 -39
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/AGENT_OPERATIONS.md +51 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_block_log.py +113 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_drive_queue.py +165 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_conflict_fix.py +354 -1
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stalled_pipeline.py +109 -3
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/CLAUDE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/GOAL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/LICENSE +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/MANIFEST.in +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/brain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/claim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/client.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/comments.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dao.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/db.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/deps.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/filelock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/freshness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/goal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/context.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/render.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/health/units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/hooks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/interactive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/openapi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/parentage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/progress.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/reports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/self_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/smoke.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/split_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/test_report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/install-agent.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/pyproject.toml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/setup.cfg +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/__init__.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/contract.md +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/manifest.yml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/conftest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_db.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_init.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_models.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_network.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_session.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_split.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_state.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/approved.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.227 → code_coordinator-0.5.229}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -35,6 +35,28 @@ cause later agreed with how the episode actually resolved
|
|
|
35
35
|
one that abstains, which is why ``unknown`` is counted separately from
|
|
36
36
|
``disagreed`` and never folded into it.
|
|
37
37
|
|
|
38
|
+
**#2540 fills the column that neither Phase counts: operator effort that never
|
|
39
|
+
touched the queue's own command surface.** ``human_acted`` was, until #2540,
|
|
40
|
+
true only for the narrow set of releases the queue itself can attribute to a
|
|
41
|
+
person — an operator's ``remove``, a Gate-A sign-off. Real recovery routinely
|
|
42
|
+
happens elsewhere entirely: a manual git rebase and force-with-lease push, a
|
|
43
|
+
direct ``coord test``/``coord merge --only``/``coord pr``/``coord fix``
|
|
44
|
+
against the assignment underneath an entry, a ``systemctl``/``coord agent
|
|
45
|
+
update``/``coord diagnose --reset`` on the machine running it. None of that
|
|
46
|
+
is visible to a tick, so none of it was ever counted — a night of real manual
|
|
47
|
+
recovery could read as ``0 needed a human``, which is the exact failure this
|
|
48
|
+
module exists to prevent, just relocated one layer down. This module cannot
|
|
49
|
+
detect that kind of intervention after the fact (recording must not probe live
|
|
50
|
+
state — see above), so :func:`intervention_event` gives an operator a place to
|
|
51
|
+
say so, in real time or shortly after: ``coord drive-queue log-intervention``
|
|
52
|
+
appends a record that :func:`episodes` folds onto whichever episode was open
|
|
53
|
+
for that key, or — if it had already resolved by the time the operator got to
|
|
54
|
+
logging it — the most recently closed one. It flips ``human_acted`` to
|
|
55
|
+
``True`` the same as an ``operator_resolution_event`` does, and is kept
|
|
56
|
+
separately visible (``intervention_categories``) so the report can still say
|
|
57
|
+
*how* it knows, rather than asserting a single flat "a human acted" with no
|
|
58
|
+
paper trail behind it.
|
|
59
|
+
|
|
38
60
|
**Recording must never change a decision.** Every public entry point here is
|
|
39
61
|
best-effort and swallows its own exceptions (:func:`record`), for the same
|
|
40
62
|
reason :mod:`coord.audit` does: the tick's merge/dispatch/attempt accounting
|
|
@@ -95,7 +117,9 @@ __all__ = [
|
|
|
95
117
|
"BY_DESIGN_CAUSES",
|
|
96
118
|
"EVENT_DIAGNOSIS",
|
|
97
119
|
"EVENT_ENTER",
|
|
120
|
+
"EVENT_INTERVENTION",
|
|
98
121
|
"EVENT_RESOLVE",
|
|
122
|
+
"INTERVENTION_CATEGORIES",
|
|
99
123
|
"OUTCOME_BUCKETS",
|
|
100
124
|
"RESCUE_SOURCES",
|
|
101
125
|
"STALL_STATES",
|
|
@@ -107,6 +131,7 @@ __all__ = [
|
|
|
107
131
|
"episode_bucket",
|
|
108
132
|
"episode_category",
|
|
109
133
|
"episodes",
|
|
134
|
+
"intervention_event",
|
|
110
135
|
"is_by_design",
|
|
111
136
|
"log_location",
|
|
112
137
|
"merge_only_event",
|
|
@@ -133,6 +158,11 @@ EVENT_RESOLVE = "resolve"
|
|
|
133
158
|
#: no read-modify-write race, and a later diagnosis that contradicts an earlier
|
|
134
159
|
#: one stays visible instead of overwriting it.
|
|
135
160
|
EVENT_DIAGNOSIS = "diagnosis"
|
|
161
|
+
#: #2540. An operator saying, out of band, "I acted on this key" — the
|
|
162
|
+
#: durable record for intervention that never touches the drive-queue command
|
|
163
|
+
#: surface (`remove`/`resume`) and so was invisible to `human_acted` before
|
|
164
|
+
#: this. See `intervention_event` and the module docstring's #2540 section.
|
|
165
|
+
EVENT_INTERVENTION = "intervention"
|
|
136
166
|
|
|
137
167
|
# Rotate at 4 MiB — comfortably more than two weeks at this fleet's rate
|
|
138
168
|
# (single-digit stalls a night, ~400 bytes a record), and small enough that
|
|
@@ -615,6 +645,71 @@ def operator_resolution_event(
|
|
|
615
645
|
return record
|
|
616
646
|
|
|
617
647
|
|
|
648
|
+
#: Documented common buckets for `coord drive-queue log-intervention
|
|
649
|
+
#: --category`. Deliberately NOT a closed enum enforced anywhere — same
|
|
650
|
+
#: reasoning as `episode_category`'s open vocabulary: a kind of intervention
|
|
651
|
+
#: this build has never named must still be recordable as itself, not
|
|
652
|
+
#: coerced into "other" and lost. This tuple exists purely so the CLI help
|
|
653
|
+
#: text and this module agree on the suggested starting set from #2540's own
|
|
654
|
+
#: evidence (a manual git rebase/conflict-resolution/force-push, a direct
|
|
655
|
+
#: `coord test`/`coord merge --only`/`coord pr`/`coord fix` against the
|
|
656
|
+
#: assignment, and infra-level recovery like `systemctl`/`coord agent
|
|
657
|
+
#: update`/`coord diagnose --reset`).
|
|
658
|
+
INTERVENTION_CATEGORIES: tuple[str, ...] = (
|
|
659
|
+
"git-recovery",
|
|
660
|
+
"cli-recheck",
|
|
661
|
+
"infra",
|
|
662
|
+
"other",
|
|
663
|
+
)
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
def intervention_event(
|
|
667
|
+
*,
|
|
668
|
+
key: str,
|
|
669
|
+
category: str,
|
|
670
|
+
note: str = "",
|
|
671
|
+
host: str = "",
|
|
672
|
+
now: float | None = None,
|
|
673
|
+
) -> dict[str, Any]:
|
|
674
|
+
"""A #2540 record: a human acted on *key* outside the queue's own commands.
|
|
675
|
+
|
|
676
|
+
The other half of #2235's metric that :func:`operator_resolution_event`
|
|
677
|
+
cannot reach. That function fires only from inside a command
|
|
678
|
+
(``remove``) that IS the resolution — a board mutation this process just
|
|
679
|
+
performed. A manual git rebase, a direct ``coord test``/``coord merge
|
|
680
|
+
--only``/``coord pr``/``coord fix``, or a ``systemctl``/``coord agent
|
|
681
|
+
update`` on the host underneath an entry are real operator effort that
|
|
682
|
+
touches none of this process's own write paths, so nothing here can see
|
|
683
|
+
them happen. What it CAN do is give the operator a place to say so —
|
|
684
|
+
this is that place, called from ``coord drive-queue log-intervention``.
|
|
685
|
+
|
|
686
|
+
Deliberately not a ``resolve``: unlike an operator's ``remove``, logging
|
|
687
|
+
an intervention does not by itself mean the stall is over — the entry may
|
|
688
|
+
still be blocked, may have already resolved by the time the operator gets
|
|
689
|
+
around to typing the command, or may resolve later still by an ordinary
|
|
690
|
+
auto mechanism. :func:`episodes` folds this onto whichever episode was
|
|
691
|
+
open for *key* at the time, or, failing that, the most recently closed
|
|
692
|
+
one — never inventing an episode, and never guessing at *why* the entry
|
|
693
|
+
was stalled, the same restraint :func:`operator_resolution_event` already
|
|
694
|
+
keeps.
|
|
695
|
+
|
|
696
|
+
*category* is free text, not validated against
|
|
697
|
+
:data:`INTERVENTION_CATEGORIES` — the same "open vocabulary, never
|
|
698
|
+
coerced" contract :func:`episode_category` documents. An empty string
|
|
699
|
+
normalises to ``"other"`` so the report always has something to show
|
|
700
|
+
rather than a blank category column.
|
|
701
|
+
"""
|
|
702
|
+
return {
|
|
703
|
+
"event": EVENT_INTERVENTION,
|
|
704
|
+
"ts": time.time() if now is None else now,
|
|
705
|
+
"key": key,
|
|
706
|
+
"category": str(category or "other"),
|
|
707
|
+
"note": note,
|
|
708
|
+
"host": host,
|
|
709
|
+
"source": "operator",
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
|
|
618
713
|
# ── #2276 Phase 1: the diagnosis record, and scoring it ──────────────────────
|
|
619
714
|
|
|
620
715
|
|
|
@@ -806,6 +901,60 @@ def read_events(
|
|
|
806
901
|
# ── reading (pairing + summary) ──────────────────────────────────────────────
|
|
807
902
|
|
|
808
903
|
|
|
904
|
+
def _fold_intervention(
|
|
905
|
+
open_by_key: dict[str, dict[str, Any]],
|
|
906
|
+
out: list[dict[str, Any]],
|
|
907
|
+
key: str,
|
|
908
|
+
event: Mapping[str, Any],
|
|
909
|
+
) -> None:
|
|
910
|
+
"""Attach one #2540 ``intervention`` record to the episode it happened
|
|
911
|
+
during — mutating the episode dict in place, exactly like the
|
|
912
|
+
``EVENT_DIAGNOSIS`` branch of :func:`episodes` does for ``true_cause``.
|
|
913
|
+
|
|
914
|
+
Preferred target is the OPEN episode for *key* — the common case, an
|
|
915
|
+
operator logging what they are doing while the entry is still stalled.
|
|
916
|
+
Failing that, the most recently CLOSED episode for *key* in *out*:
|
|
917
|
+
``coord drive-queue log-intervention`` very often runs minutes AFTER the
|
|
918
|
+
fix already landed (the operator ran ``coord merge --only``, it worked,
|
|
919
|
+
then they typed the log line), and by then :func:`episodes` has already
|
|
920
|
+
popped that episode out of ``open_by_key``. Searched from the end of
|
|
921
|
+
``out`` because that list is built in the same time order *events* is
|
|
922
|
+
iterated in, so the last match for *key* is the most recent past episode
|
|
923
|
+
— never an older one a later re-block would make ambiguous.
|
|
924
|
+
|
|
925
|
+
A *key* with no episode at all yet (logged before this host ever recorded
|
|
926
|
+
a stall for it) is dropped, the same convention an orphan ``resolve`` or
|
|
927
|
+
``diagnosis`` already follows: there is nothing here to attach evidence
|
|
928
|
+
to, and it is better to say so (`coord drive-queue log-intervention`
|
|
929
|
+
warns) than to silently fabricate one.
|
|
930
|
+
"""
|
|
931
|
+
episode = open_by_key.get(key)
|
|
932
|
+
if episode is None:
|
|
933
|
+
for candidate in reversed(out):
|
|
934
|
+
if candidate.get("key") == key:
|
|
935
|
+
episode = candidate
|
|
936
|
+
break
|
|
937
|
+
if episode is None:
|
|
938
|
+
return
|
|
939
|
+
category = str(event.get("category") or "other")
|
|
940
|
+
episode.setdefault("interventions", []).append(
|
|
941
|
+
{
|
|
942
|
+
"ts": float(event.get("ts") or 0.0),
|
|
943
|
+
"category": category,
|
|
944
|
+
"note": str(event.get("note") or ""),
|
|
945
|
+
"host": str(event.get("host") or ""),
|
|
946
|
+
}
|
|
947
|
+
)
|
|
948
|
+
categories = episode.setdefault("intervention_categories", [])
|
|
949
|
+
if category not in categories:
|
|
950
|
+
categories.append(category)
|
|
951
|
+
# The whole point: this is the signal `human_acted` was blind to before
|
|
952
|
+
# #2540. Set unconditionally, whether the episode is still open (the
|
|
953
|
+
# eventual `resolve` branch above ORs it back in rather than clobbering
|
|
954
|
+
# it) or already closed (there is no later write to clobber it).
|
|
955
|
+
episode["human_acted"] = True
|
|
956
|
+
|
|
957
|
+
|
|
809
958
|
def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
810
959
|
"""Pair ``enter`` records with the ``resolve`` that closed them.
|
|
811
960
|
|
|
@@ -828,6 +977,16 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
828
977
|
resolution's own account of what happened and the derived one is kept
|
|
829
978
|
beside it as ``diagnosed_cause``, so ``agreement`` scores two independent
|
|
830
979
|
claims rather than one claim against itself.
|
|
980
|
+
|
|
981
|
+
An ``intervention`` (#2540) folds onto an episode the same way — see
|
|
982
|
+
:func:`_fold_intervention` — except it targets a CLOSED episode too, not
|
|
983
|
+
only an open one: unlike a diagnosis, an operator very often logs an
|
|
984
|
+
intervention after the fact, once the fix they made by hand has already
|
|
985
|
+
let the entry auto-resolve. It sets ``human_acted`` true and appends to
|
|
986
|
+
``intervention_categories``/``interventions`` without touching
|
|
987
|
+
``true_cause`` — what mechanically flipped the state is still whatever
|
|
988
|
+
the resolution said; #2540 only means the record also captures that a
|
|
989
|
+
human was in the loop, in a way the pre-#2540 log could not see at all.
|
|
831
990
|
"""
|
|
832
991
|
open_by_key: dict[str, dict[str, Any]] = {}
|
|
833
992
|
out: list[dict[str, Any]] = []
|
|
@@ -866,7 +1025,13 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
866
1025
|
"diagnosis_evidence": [],
|
|
867
1026
|
"diagnosis_contradicts_stated": False,
|
|
868
1027
|
"agreement": "",
|
|
1028
|
+
# #2540. Populated only by `intervention_event` records
|
|
1029
|
+
# folded on below — a fresh episode has neither.
|
|
1030
|
+
"interventions": [],
|
|
1031
|
+
"intervention_categories": [],
|
|
869
1032
|
}
|
|
1033
|
+
elif kind == EVENT_INTERVENTION:
|
|
1034
|
+
_fold_intervention(open_by_key, out, key, event)
|
|
870
1035
|
elif kind == EVENT_DIAGNOSIS:
|
|
871
1036
|
episode = open_by_key.get(key)
|
|
872
1037
|
if episode is None:
|
|
@@ -897,7 +1062,14 @@ def episodes(events: Sequence[Mapping[str, Any]]) -> list[dict[str, Any]]:
|
|
|
897
1062
|
"resolved": True,
|
|
898
1063
|
"resolution": event.get("resolution", ""),
|
|
899
1064
|
"true_cause": resolution_cause,
|
|
900
|
-
|
|
1065
|
+
# #2540: OR in whatever an earlier `intervention_event`
|
|
1066
|
+
# already set. Without the `or`, an ordinary auto
|
|
1067
|
+
# resolution's own `human_acted=False` would blindly
|
|
1068
|
+
# overwrite the `True` a logged intervention just
|
|
1069
|
+
# earned — exactly the undercount this issue is about,
|
|
1070
|
+
# relocated one line down instead of fixed.
|
|
1071
|
+
"human_acted": bool(event.get("human_acted"))
|
|
1072
|
+
or bool(episode.get("human_acted")),
|
|
901
1073
|
"resolved_at": resolved_at,
|
|
902
1074
|
"stalled_seconds": max(0.0, resolved_at - episode["entered_at"]),
|
|
903
1075
|
"source": event.get("source", ""),
|
|
@@ -937,11 +1109,27 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
|
|
|
937
1109
|
counts the episodes where the live evidence positively ruled the queue's
|
|
938
1110
|
stated reason out — the five-of-seven number, finally measured instead of
|
|
939
1111
|
reconstructed by hand.
|
|
1112
|
+
|
|
1113
|
+
``human_acted_logged`` (#2540) is the subset of ``human_acted`` this build
|
|
1114
|
+
can actually SHOW ITS WORK for: episodes carrying at least one
|
|
1115
|
+
``coord drive-queue log-intervention`` record. The rest of ``human_acted``
|
|
1116
|
+
still comes from the pre-#2540 queue-command surface (an operator's
|
|
1117
|
+
``remove``, a Gate-A sign-off) — real, but with no evidence trail beyond
|
|
1118
|
+
"the resolve record said so". Neither of those two is a claim that
|
|
1119
|
+
*nothing else* happened: a night with ``human_acted_logged == 0`` means
|
|
1120
|
+
no intervention was LOGGED, not that none occurred — this module still
|
|
1121
|
+
cannot see a git rebase or a direct ``coord test`` call that nobody typed
|
|
1122
|
+
the one extra command for. That is the honest limit of what an
|
|
1123
|
+
append-only log fed only by this process's own choke points can claim,
|
|
1124
|
+
and it is why the CLI help for ``log-intervention`` asks operators to run
|
|
1125
|
+
it as a matter of habit rather than treating the count as automatically
|
|
1126
|
+
complete.
|
|
940
1127
|
"""
|
|
941
1128
|
by_state: dict[str, int] = {}
|
|
942
1129
|
by_cause: dict[str, int] = {}
|
|
943
1130
|
seen_pairs: dict[tuple[str, str], int] = {}
|
|
944
1131
|
human = 0
|
|
1132
|
+
human_logged = 0
|
|
945
1133
|
auto = 0
|
|
946
1134
|
still_open = 0
|
|
947
1135
|
diagnosed = 0
|
|
@@ -961,6 +1149,8 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
|
|
|
961
1149
|
still_open += 1
|
|
962
1150
|
elif item.get("human_acted"):
|
|
963
1151
|
human += 1
|
|
1152
|
+
if item.get("intervention_categories"):
|
|
1153
|
+
human_logged += 1
|
|
964
1154
|
else:
|
|
965
1155
|
auto += 1
|
|
966
1156
|
cause = episode_category(item)
|
|
@@ -986,6 +1176,7 @@ def summarize(items: Sequence[Mapping[str, Any]]) -> dict[str, Any]:
|
|
|
986
1176
|
"by_state": by_state,
|
|
987
1177
|
"by_cause": by_cause,
|
|
988
1178
|
"human_acted": human,
|
|
1179
|
+
"human_acted_logged": human_logged,
|
|
989
1180
|
"auto_released": auto,
|
|
990
1181
|
"open": still_open,
|
|
991
1182
|
"repeat_causes": repeats,
|
|
@@ -38,7 +38,7 @@ from typing import Any, Mapping
|
|
|
38
38
|
|
|
39
39
|
import click
|
|
40
40
|
|
|
41
|
-
from coord.block_log import STALL_STATES
|
|
41
|
+
from coord.block_log import INTERVENTION_CATEGORIES, STALL_STATES
|
|
42
42
|
from coord.commands._common import _CONFIG_OPTION
|
|
43
43
|
from coord.drive_state import WORK_LIKE
|
|
44
44
|
from coord.drive_queue import (
|
|
@@ -807,7 +807,7 @@ def _hold_lines(entry: QueueEntry) -> list[str]:
|
|
|
807
807
|
# ── #2235 Phase 0 stall log ──────────────────────────────────────────────────
|
|
808
808
|
|
|
809
809
|
|
|
810
|
-
def _record_block_log(events: list[dict[str, Any]]) ->
|
|
810
|
+
def _record_block_log(events: list[dict[str, Any]]) -> int:
|
|
811
811
|
"""Append #2235's Phase-0 stall records. Observability only.
|
|
812
812
|
|
|
813
813
|
Best-effort by construction (:func:`coord.block_log.record` swallows its
|
|
@@ -817,12 +817,19 @@ def _record_block_log(events: list[dict[str, Any]]) -> None:
|
|
|
817
817
|
dispatch or attempt-accounting decision, and the cheapest way to guarantee
|
|
818
818
|
that is for the log to sit downstream of every decision and be read by
|
|
819
819
|
none of them.
|
|
820
|
+
|
|
821
|
+
Returns how many events actually landed — :func:`coord.block_log.record`'s
|
|
822
|
+
own count, ``0`` on a full disk / read-only ``$HOME`` / unserialisable
|
|
823
|
+
event. Every tick call site treats this as fire-and-forget and ignores
|
|
824
|
+
the count; ``drive_queue_log_intervention`` is the one caller that must
|
|
825
|
+
not (#2540 review) — printing "logged" on the strength of "did not raise"
|
|
826
|
+
alone is the "unconfirmed success" shape epic #2096's checklist forbids.
|
|
820
827
|
"""
|
|
821
828
|
if not events:
|
|
822
|
-
return
|
|
829
|
+
return 0
|
|
823
830
|
from coord import block_log # noqa: PLC0415
|
|
824
831
|
|
|
825
|
-
block_log.record(events)
|
|
832
|
+
return block_log.record(events)
|
|
826
833
|
|
|
827
834
|
|
|
828
835
|
def _record_operator_release(row: Mapping[str, Any] | None, *, resolution: str) -> None:
|
|
@@ -852,6 +859,102 @@ def _record_operator_release(row: Mapping[str, Any] | None, *, resolution: str)
|
|
|
852
859
|
)
|
|
853
860
|
|
|
854
861
|
|
|
862
|
+
# ── log-intervention (#2540) ─────────────────────────────────────────────────
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
@drive_queue_group.command("log-intervention")
|
|
866
|
+
@click.argument("repo")
|
|
867
|
+
@click.argument("issue", type=int)
|
|
868
|
+
@click.option(
|
|
869
|
+
"--category",
|
|
870
|
+
default="other",
|
|
871
|
+
show_default=True,
|
|
872
|
+
help=(
|
|
873
|
+
"What kind of intervention this was. Free text, not a closed set — "
|
|
874
|
+
"the documented starting buckets are: "
|
|
875
|
+
+ ", ".join(INTERVENTION_CATEGORIES)
|
|
876
|
+
+ "."
|
|
877
|
+
),
|
|
878
|
+
)
|
|
879
|
+
@click.option(
|
|
880
|
+
"--note",
|
|
881
|
+
default="",
|
|
882
|
+
help="Optional free-text detail — what you actually did.",
|
|
883
|
+
)
|
|
884
|
+
@_CONFIG_OPTION
|
|
885
|
+
def drive_queue_log_intervention(
|
|
886
|
+
repo: str, issue: int, category: str, note: str, config_path: Path
|
|
887
|
+
) -> None:
|
|
888
|
+
"""Record that a human acted on REPO ISSUE, outside the queue's own commands (#2540).
|
|
889
|
+
|
|
890
|
+
`human_acted` in `coord drive-queue block-log` only ever recognised
|
|
891
|
+
`remove`/`resume` and a Gate-A sign-off — the drive-queue command surface.
|
|
892
|
+
Real recovery routinely happens elsewhere entirely: a manual git rebase /
|
|
893
|
+
conflict resolution / `git push --force-with-lease`, a direct `coord
|
|
894
|
+
test`/`coord merge --only`/`coord pr`/`coord fix` against the assignment
|
|
895
|
+
underneath this entry, a `systemctl`/`coord agent update`/`coord diagnose
|
|
896
|
+
--reset` on the machine running it. None of that touches this process's
|
|
897
|
+
own write paths, so none of it was ever counted — a night of real manual
|
|
898
|
+
recovery could read as `0 needed a human`.
|
|
899
|
+
|
|
900
|
+
This command does not try to detect that after the fact (block-log
|
|
901
|
+
recording never probes live state — see `coord/block_log.py`). It gives
|
|
902
|
+
you a place to say so. Run it once per intervention, whenever you do one
|
|
903
|
+
— during the recovery or shortly after, either is fine — and `block-log`
|
|
904
|
+
folds it onto whichever episode was open for this key at the time, or, if
|
|
905
|
+
it had already resolved by the time you got to logging it, the most
|
|
906
|
+
recently closed one. It never guesses at *why* the entry was stalled or
|
|
907
|
+
what specifically you fixed — `--note` is where that goes, verbatim.
|
|
908
|
+
|
|
909
|
+
A REPO ISSUE this host has never recorded a stall for has nothing to
|
|
910
|
+
attach this to — the record is still written (append-only, never lost),
|
|
911
|
+
but this warns rather than pretending it landed somewhere.
|
|
912
|
+
|
|
913
|
+
Runs against **this host's** block log only — it is per-host by design
|
|
914
|
+
(see `coord/block_log.py`). Run it on the same host that recorded the
|
|
915
|
+
original stall (usually the daemon host that ran the tick), not e.g. your
|
|
916
|
+
laptop, or the write lands in a log `coord drive-queue block-log` on the
|
|
917
|
+
host that actually stalled will never read.
|
|
918
|
+
"""
|
|
919
|
+
from coord.block_log import episodes, intervention_event, read_events # noqa: PLC0415
|
|
920
|
+
|
|
921
|
+
key = entry_key(repo, issue)
|
|
922
|
+
event = intervention_event(
|
|
923
|
+
key=key, category=category, note=note, host=_local_host_id()
|
|
924
|
+
)
|
|
925
|
+
written = _record_block_log([event])
|
|
926
|
+
if written < 1:
|
|
927
|
+
raise click.ClickException(
|
|
928
|
+
f"failed to log intervention against {key} — the block log did "
|
|
929
|
+
"not accept the write (full disk, read-only $HOME, or an "
|
|
930
|
+
"unserialisable record); nothing was recorded, try again"
|
|
931
|
+
)
|
|
932
|
+
|
|
933
|
+
# #2540 review: "did not raise" is not "landed" — read the log back and
|
|
934
|
+
# confirm the record we just wrote is actually in it before telling the
|
|
935
|
+
# operator it's logged. This reuses the same `read_events()` call
|
|
936
|
+
# `episodes()` below already needs for the attach-to-episode check (one
|
|
937
|
+
# membership check against it), rather than a second pass over the log.
|
|
938
|
+
all_events = read_events()
|
|
939
|
+
if event not in all_events:
|
|
940
|
+
raise click.ClickException(
|
|
941
|
+
f"failed to log intervention against {key} — the write reported "
|
|
942
|
+
"success but the record could not be read back afterward; "
|
|
943
|
+
"nothing is confirmed logged, try again"
|
|
944
|
+
)
|
|
945
|
+
|
|
946
|
+
matches = [ep for ep in episodes(all_events) if ep.get("key") == key]
|
|
947
|
+
if not matches:
|
|
948
|
+
click.echo(
|
|
949
|
+
f"logged, but {key} has no recorded stall on this host's block "
|
|
950
|
+
"log yet — it will not attach to an episode until one exists "
|
|
951
|
+
"(see `coord drive-queue block-log`)",
|
|
952
|
+
err=True,
|
|
953
|
+
)
|
|
954
|
+
return
|
|
955
|
+
click.echo(f"logged a {category!r} intervention against {key}")
|
|
956
|
+
|
|
957
|
+
|
|
855
958
|
# ── remove / move ────────────────────────────────────────────────────────────
|
|
856
959
|
|
|
857
960
|
|
|
@@ -999,8 +1102,15 @@ def _episode_line(item: Mapping[str, Any]) -> str:
|
|
|
999
1102
|
stated = " ".join(str(item.get("stated_reason") or "(none)").split())
|
|
1000
1103
|
if len(stated) > 90:
|
|
1001
1104
|
stated = stated[:87] + "..."
|
|
1105
|
+
# #2540: whatever `coord drive-queue log-intervention` has recorded
|
|
1106
|
+
# against this episode, open or resolved — rendered the same way in
|
|
1107
|
+
# both branches below so an operator sees it whether the entry is still
|
|
1108
|
+
# stalled (they logged it live) or already closed (they logged it after).
|
|
1109
|
+
intervened = ", ".join(str(c) for c in (item.get("intervention_categories") or []))
|
|
1002
1110
|
if not item.get("resolved"):
|
|
1003
1111
|
line = f"{key:<28} {state:<8} STILL STALLED stated: {stated}"
|
|
1112
|
+
if intervened:
|
|
1113
|
+
line += f"\n{'':<28} {'':<8} intervened: {intervened}"
|
|
1004
1114
|
# #2276 Phase 1. An open episode used to have nothing in the `cause`
|
|
1005
1115
|
# column at all — `summarize` bucketed it as `(unresolved)`. When the
|
|
1006
1116
|
# diagnostician has been round, it does, and the CONTRADICTS marker is
|
|
@@ -1024,10 +1134,16 @@ def _episode_line(item: Mapping[str, Any]) -> str:
|
|
|
1024
1134
|
held = item.get("stalled_seconds")
|
|
1025
1135
|
age = _age_str(float(held)) if held is not None else "?"
|
|
1026
1136
|
cause = " ".join(str(item.get("true_cause") or "").split())
|
|
1027
|
-
|
|
1137
|
+
line = (
|
|
1028
1138
|
f"{key:<28} {state:<8} {mark} {age:>6} stated: {stated}\n"
|
|
1029
1139
|
f"{'':<28} {'':<8} cause: {cause}"
|
|
1030
1140
|
)
|
|
1141
|
+
if intervened:
|
|
1142
|
+
# `cause` is still the auto mechanism's own account of what flipped
|
|
1143
|
+
# the state (#2540 never rewrites it) — this line is the separate,
|
|
1144
|
+
# explicit claim that a human was ALSO in the loop.
|
|
1145
|
+
line += f"\n{'':<28} {'':<8} logged: {intervened}"
|
|
1146
|
+
return line
|
|
1031
1147
|
|
|
1032
1148
|
|
|
1033
1149
|
@drive_queue_group.command("block-log")
|
|
@@ -1068,6 +1184,14 @@ def drive_queue_block_log(output_json: bool, days: float, config_path: Path) ->
|
|
|
1068
1184
|
everything stalled forever shows up as `open` climbing, not as success.
|
|
1069
1185
|
`repeats` is the tripwire — the same repo stalling on the same stated
|
|
1070
1186
|
reason twice is a bug report, not a rescue.
|
|
1187
|
+
|
|
1188
|
+
`human_acted` folds in both how it always could tell (an operator's
|
|
1189
|
+
`remove`, a Gate-A sign-off) and #2540's `coord drive-queue
|
|
1190
|
+
log-intervention` records — the ones logged are called out separately in
|
|
1191
|
+
the summary line, because that count is the only one with an actual paper
|
|
1192
|
+
trail behind it (see `human_acted_logged` / `_episode_line`'s `logged:`
|
|
1193
|
+
row). It is still not a ceiling: an intervention nobody ran
|
|
1194
|
+
`log-intervention` for is invisible to this command by construction.
|
|
1071
1195
|
"""
|
|
1072
1196
|
from coord.block_log import block_log_path, episodes, read_events, summarize # noqa: PLC0415
|
|
1073
1197
|
|
|
@@ -1098,9 +1222,15 @@ def drive_queue_block_log(output_json: bool, days: float, config_path: Path) ->
|
|
|
1098
1222
|
for item in items:
|
|
1099
1223
|
click.echo(_episode_line(item))
|
|
1100
1224
|
click.echo("")
|
|
1225
|
+
# #2540: call out how many of `human_acted` are backed by an actual
|
|
1226
|
+
# `log-intervention` record, but only when there is one to show — the
|
|
1227
|
+
# base sentence stays exactly what it always was otherwise, so a fleet
|
|
1228
|
+
# that has never run the new command reads no different than before.
|
|
1229
|
+
logged = stats.get("human_acted_logged") or 0
|
|
1230
|
+
human_note = f" ({logged} logged)" if logged else ""
|
|
1101
1231
|
click.echo(
|
|
1102
1232
|
f"{stats['episodes']} stall(s) in {days:g}d — "
|
|
1103
|
-
f"{stats['human_acted']} needed a human · "
|
|
1233
|
+
f"{stats['human_acted']} needed a human{human_note} · "
|
|
1104
1234
|
f"{stats['auto_released']} released themselves · "
|
|
1105
1235
|
f"{stats['open']} still stalled"
|
|
1106
1236
|
)
|