fix(agent): align log loop blocker with harbor remote control

This commit is contained in:
Your Name
2026-07-01 09:56:38 +08:00
parent a9567cbc26
commit 0ed2017a4d
9 changed files with 98 additions and 72 deletions

View File

@@ -405,25 +405,27 @@ def _harbor_recovery_receipt_inputs() -> list[dict[str, Any]]:
"required_when": "before_and_after_110_controlled_recovery",
"purpose": (
"classify cd run status, harbor repair waiting state, "
"awoooi-host no-matching runner, and stale job payloads"
"remote control channel availability, no-matching runners, "
"and stale job payloads"
),
**metadata_boundary,
},
{
"input_id": "ssh_publickey_diagnosis_output",
"source": "diagnose-110-ssh-publickey-auth.sh",
"required_when": "diagnose_ssh_publickey_phase",
"input_id": "remote_control_channel_readback",
"source": "read-public-gitea-actions-queue.py --json plus bounded 110 ssh probe",
"required_when": "diagnose_remote_control_channel_phase",
"purpose": (
"classify TCP banner, node load, and publickey auth timeout "
"without reading authorized_keys or asking for passwords"
"classify 110 TCP/SSH reachability, bounded timeout, node load, "
"and remote-control blocker without reading key material or "
"asking for passwords"
),
**metadata_boundary,
},
{
"input_id": "ssh_local_repair_output",
"input_id": "local_console_recovery_output",
"source": "recover-110-control-path-and-harbor-local.sh --check/apply",
"required_when": "after_diagnose_ssh_publickey_phase",
"purpose": "prove 110 ssh control-channel metadata and permissions",
"required_when": "after_remote_control_channel_diagnosis_phase",
"purpose": "prove 110 ssh control path, Harbor, and local console repair results",
**metadata_boundary,
},
{
@@ -596,6 +598,14 @@ def _queue_readback_normalizer_contract() -> list[dict[str, Any]]:
],
"learning_targets": ["km", "rag", "playbook", "mcp", "verifier"],
},
{
"field_id": "latest_visible_harbor_110_repair_remote_control_channel_unavailable",
"purpose": "classify whether 110 rejects or times out the bounded Harbor repair control channel",
"writes_blockers": [
"gitea_queue_harbor_110_remote_control_channel_unavailable",
],
"learning_targets": ["km", "rag", "playbook", "mcp", "verifier", "ai_agent"],
},
{
"field_id": "current_cd_workflow_runner_readiness",
"purpose": "classify whether current CD is waiting on a non110 runner label",

View File

@@ -220,9 +220,11 @@ def _current_blocker_recovery(receipt: dict[str, Any]) -> dict[str, Any] | None:
),
"post_apply_verifier": str(classification.get("post_apply_verifier") or ""),
"safe_next_step": str(classification.get("safe_next_step") or ""),
"runtime_apply_required_on_110_local_console": (
blocker_id == "harbor_110_repair_no_matching_runner"
),
"runtime_apply_required_on_110_local_console": blocker_id
in {
"harbor_110_repair_no_matching_runner",
"harbor_110_remote_control_channel_unavailable",
},
"external_control_path_blocker": str(
classification.get("ssh_auth_classification") or ""
),