agentsclimarketplace

Istio validation debugger

Skill omonuj/claude-horizon-skills/skills/variation-istio-split-brain/istio-validation-debugger

Claude Code Agent Skills for building, red-teaming and tuning agentic RL evaluation environments — a four-skill pattern (guardian, validation-debugger, score-tuner, iteration-loop) plus a 24-point adversarial reviewer.

Install
npx -y skills add omonuj/claude-horizon-skills --skill istio-validation-debugger

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 16 days oldThe repository was created 16 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Fetches and interprets validation logs (No-Op and Oracle) for the variation-istio-split-brain task (<TASK_ID>). Maps observed log patterns to root causes and the smallest safe fix. Use after a validation fails to understand why it failed before editing anything.

SKILL.md

14.2 KB, ~3.8k tokens by cl100k_base, as published. Nobody here has run it

istio-validation-debugger

Execution Mode — FULLY AUTONOMOUS

NEVER ask the user for confirmation. Fetch logs, interpret, propose and apply fixes immediately. The only user-facing handoff in the loop is triggering rollouts (owned by istio-iteration-loop). This skill never has user-facing handoffs.

Goal

Turn an Oracle or No-Op failure into a specific root cause with a specific fix, from log evidence — not guesswork. If you cannot map the pattern to a row below with confidence, investigate manually from the output.txt setup log + a re-read of setup.sh/solution.sh/grader.py before changing any file. (The live red-team / horizon-agentic-reviewer is DISABLED for this task — do not invoke it.)

Trigger

Oracle ≠ 1.0/passed; No-Op score > 0 (false positive); grader exception; feedback: null (setup crash); or you are about to edit setup/solution/grader after a validation failure. NOT for rollout failures — use istio-score-tuner.

Task Identity

FieldValue
Task UUID<TASK_ID>
Slug / pathvariation-istio-split-brain / tasks/variation-istio-split-brain/
Subscoresrouting_restored (0.5) + mesh_governance (0.5), both binary
Venvsource /Users/mac/Documents/tasks/horizon_env/bin/activate
Grader versionv2 — includes the admission webhook, the bleater-env drift, the HPA/finalizer protections, and the two /etc/bleater decorrelating gates

v2 root-only files the grader reads: /opt/grader-scenario.json (keys vs_reconciler, ef_reconciler, env_reconciler), /opt/<grader-artefact>.txt, /opt/<grader-artefact>.txt. Agent-readable mirrors: /etc/bleater/<artefact>.txt, /etc/bleater/<artefact>.txt. If a /opt/grader-*.txt artefact is missing the grader SKIPS that gate (no deadweight) — so a "governance/routing always-1" with the value-gate silently skipped means the setup write failed; check output.txt.

Grader feedback is routing: <detail>; governance: <detail> — read both halves; each names the layer that fired.

Result shapes

scorepassedfeedbackmeaning
0falsenullcontainer/setup crash before grader ran → output.txt
0falsenon-nullboth subscores failed (grader ran)
0.5falsenon-nullone passed, one failed
1.0truenon-nullboth passed

For No-Op, anything but score: 0 is a problem.

Step 1 — Fetch + read result

cd /Users/mac/Documents/tasks && source horizon_env/bin/activate
horizon tasks validate-logs -a oracle tasks/variation-istio-split-brain 2>&1
cat tasks/variation-istio-split-brain/.validation/*/result.json 2>/dev/null | python3 -m json.tool

Logs: tasks/variation-istio-split-brain/.validation/<build_id>/{output.txt,result.json}.

Step 2 — Map symptom → cause → fix

Branch A. feedback: null / score: 0 — setup crash (istio-specific causes first)

Pattern in output.txtRoot causeFix
error: unable to recognize ... no matches for kind "VirtualService" / EnvoyFilter etc.The minimal Istio CRDs didn't install or didn't establish before the CR appliesConfirm the 6 install_open_crd calls run AND the kubectl wait --for=condition=established loop precedes the first mesh-object apply. The faults apply too early if the wait is missing.
timed out waiting for the condition on a crdestablish-wait too short or apiserver slowThe wait is --timeout=60s with `
k3s is not ready after 180 secondsENABLE_ISTIO_BLEATER=true in DockerfileRemove it entirely
Error from server (Forbidden) on kubectl get nodesrbac yaml not copied / wrong pathRestore COPY data/ubuntu-user-rbac.yaml ...
failed to pull image for a drift/backend/webhook podexternal registry referencedUse ${SIDECAR_IMAGE} (air-gapped)
setup aborts during the webhook/cert/HPA blocka command failed under set -eThe webhook block is wrapped in set +e ... set -e and the HPA apply ends in `
webhook pod CrashLoopBackOff / logs python3 unavailable; webhook inertno python3 in ${SIDECAR_IMAGE}Expected-tolerable: failurePolicy: Ignore means writes pass unmutated; the webhook is inert but its config still must be removed (Layer 6 still gates). Not a setup failure
setup.sh: line N: syntax errorbash errorbash -n setup.sh

Branch B. No-Op score > 0 — false positive

Subscore passed on No-OpWhy wrongFix
routing_restored=1The faults didn't apply (CRD race) OR drift didn't deploy so the broken objects were never (re)written OR the route-policy gate silently SKIPPED (/opt/<grader-artefact>.txt missing)Confirm the broken VS/EF/SE applied (Branch A CRD check), the reconcilers exist, and /opt/<grader-artefact>.txt was written (the /etc/bleater block ran)
mesh_governance=1Drift didn't deploy, OR the broken RA/authz weren't injected, OR the VS already has <metadata-key>/<metadata-key> at setup time, OR the <metadata-key> gate silently SKIPPED (/opt/<grader-artefact>.txt missing), OR the broken VS already happens to satisfy a gateConfirm setup sets the wrong VS metadata (<metadata-key>=experimental, no <metadata-key>/<metadata-key>), Service has NO <metadata-key>, attacker JWKS, blanket-deny authz, all FOUR drift deploys (incl. bleater-env) + the webhook deployed, and /opt/<grader-artefact>.txt was written

Branch C. Oracle 0.5routing_restored=0 (governance passed)

Read the routing: half of feedback:

Feedback fragmentCauseFix in solution.sh
edge EnvoyFilter ... still clamps route timeoutEnvoyFilter re-applied mid-windowStop BOTH re-appliers before deleting it: the EF kube-system reconciler (sweep EF_RECONCILER_POOL) AND the canary envoy-patcher (delete the canary). Then kubectl delete envoyfilter bleater-edge-timeout -n bleater
routes to host ... with no backing Service (blackhole)VS reconciler re-applied the broken VSStop the VS kube-system reconciler (sweep VS_RECONCILER_POOL) before re-applying the corrected VS pointing at bleater-timeline-service
delegates to namespace ... that does not existcorrected VS still has the bleater-routes-ext delegate, OR the webhook re-mutated the VS, OR the ENV reconciler (bleater-env) re-applied the broken VSRe-apply VS without the delegate route; delete the bleater-mesh-guard MutatingWebhookConfiguration FIRST; stop the ENV reconciler (sweep ENV_RECONCILER_POOL in bleater-env) AND the VS reconciler
mirrors traffic to ... blackhole sinkcorrected VS still has the devnull mirror, OR webhook/ENV/VS reconciler re-broke itRe-apply VS without mirror/mirrorPercentage; ensure webhook deleted + both VS re-appliers stopped
ServiceEntry ... hijacks in-cluster hostnamebleater-mesh-operator re-applied the SEStop bleater-mesh-operator (bleater) — delete its HPA bleater-mesh-operator-hpa first (or it bounces back) — before kubectl delete serviceentry bleater-timeline-resolution -n bleater
does not bind the platform route-policy token from /etc/bleater/<artefact>.txt to its route via a DestinationRule subset[v4 routing-only multi-step gate] route isn't pinned to a subset, or no DestinationRule defines that subset with the token labelRead /etc/bleater/<artefact>.txt; create a DestinationRule on the timeline host with a subset labelled <anykey>=<token> AND set the VS primary route destination.subset to that subset name. If this is the ONLY routing failure and Oracle should be 1.0, solution.sh is missing the DR or the subset wiring (check Step 8/8b)

Branch D. Oracle 0.5mesh_governance=0 (routing passed)

Feedback fragmentCauseFix in solution.sh
VirtualService missing required label <metadata-key>=stable / annotation <metadata-key>=enforcingcorrected VS lacks the baseline metadataAdd label bleater.io/<metadata-key>: stable + annotation bleater.io/<metadata-key>: enforcing to the VS
does not anchor to the current platform install id from /etc/bleater/<artefact>.txt[v2 governance-only gate] VS has no annotation whose value == the install idRead /etc/bleater/<artefact>.txt; add an annotation with that value (solution uses bleater.io/<metadata-key>). If this is the only governance failure and Oracle should be 1.0, solution.sh dropped the annotation
timeline Service missing required annotation <metadata-key>=internal[v2] Service not annotatedkubectl annotate service bleater-timeline-service -n bleater bleater.io/<metadata-key>=internal --overwrite
bleater-jwt ... does not validate against documented issuer/jwks or still trusts attacker JWKSRA not reconciledApply RA with issuer=https://auth.devops.local, jwksUri=http://auth.devops.local/.well-known/jwks.json
AuthorizationPolicy ... is a blanket DENYauthz still deny-allDelete bleater-edge-authz or set action ALLOW
active drift ... <name>@kube-systema kube-system reconciler still running (the VS-pool one carries a finalizer — plain delete hangs)Sweep BOTH pools; clear finalizers (kubectl patch ... -p '{"metadata":{"finalizers":[]}}') before delete, or scale to 0
active drift ... <name>@bleater-env[v2] the ENV reconciler still runningSweep ENV_RECONCILER_POOL in bleater-env; delete the bleater-side Role/RoleBinding + bleater-env SA. Needs ALLOWED_NAMESPACES to include bleater-env
active drift ... bleater-mesh-operatorlocal operator running, HPA bounces it back to 1Delete HPA bleater-mesh-operator-hpa FIRST, then delete the deployment
cronjob mesh-config-refresher still activerefresher not stoppeddelete or spec.suspend=true
bleater-timeline-canary mutation capability not fully neutralizedboth sidecar AND runtime RBAC presentdelete the canary deployment OR remove bleater-timeline-canary-runtime SA/Role/RoleBinding
MutatingWebhookConfiguration ... still intercepts mesh-object writes[v2] the admission webhook config not removedkubectl delete mutatingwebhookconfiguration bleater-mesh-guard (solution does this FIRST, before any VS/EF apply, so the fix isn't re-mutated). Needs the ubuntu-user-mesh-admission ClusterRole

Branch E. Oracle 0 non-null — both failed

Read both halves; follow Branch C and Branch D in parallel. If it stays 0 after fixing feedback, re-run No-Op to isolate a setup-side issue.

Branch F. Grader Python exception

json.JSONDecodeError/KeyError/TimeoutExpired — all guarded by kubectl_json/run_kubectl/.get. If one crept past, wrap it; treat failure as subscore=0. Not in the hard-constraint list — fix in place.


Step 3 — Pre-fix safety

  1. Dockerfile + CRD invariants hold (guardian Step 0).
  2. bash -n setup.sh && bash -n solution.sh && python3 -m py_compile grader.py.
  3. If it touches subscore difficulty → diagnose with istio-score-tuner first.
  4. Articulate the why in one sentence.
Fix typeHand off to
setup.sh fault-injection bugistio-task-guardian Step 3 (push)
solution.sh bug (Branch C/D)istio-task-guardian Step 3
grader exception (Branch F)istio-task-guardian Step 3
subscore difficultyistio-score-tuner first
unmappablemanual investigation (read output.txt + setup.sh/solution.sh/grader.py); live red-team is disabled

Known non-issues (do NOT fix)

PatternWhy
v1_feedback section FAILsreviewer can't read heredoc baseline-config; dislikes pool-sweep oracle. Accepted
No-Op score: 0 with feedbackgrader working correctly
governance fails because agents only audited bleaterthe kube-system discovery axis working as intended
behavior_in_tests complaint (graded config not traffic)correct by design — no istiod; grade shape

Verification cheat sheet

HypothesisProbe
"CRDs install + establish before CR apply"grep -n "install_open_crd|--for=condition=established" setup.sh — establish loop must precede the kubectl apply -f of the broken objects
"solution deletes the webhook FIRST, before any VS/EF apply"read solution.sh — delete mutatingwebhookconfiguration must precede the VS/EF deletes and the corrected VS apply (else the apply is re-mutated)
"solution stops EF's TWO re-appliers before deleting EF"read solution.sh — EF reconciler sweep + canary delete must precede delete envoyfilter
"solution stops VS's TWO re-appliers"read solution.sh — both VS reconciler pool sweep AND ENV_RECONCILER_POOL (bleater-env) sweep present
"solution sweeps all three pools"grep -E "VS_RECONCILER_POOL|EF_RECONCILER_POOL|ENV_RECONCILER_POOL" solution.sh
"solution clears finalizers + deletes HPA before the operator"`grep -nE "finalizers
"solution reflects the two /etc/bleater artefacts"grep -nE "<artefact>.txt|<artefact>.txt|<metadata-key>|x-bleater-route-policy" solution.sh
"grader reads root-only mirrors, not /etc/bleater"grep -nE "/opt/grader-(install-id|route-policy).txt|env_reconciler" grader.py
"wait_consistent unchanged"grep -E "wait_consistent" grader.py — routing passes=5,gap=8,timeout=220; governance passes=5,gap=8,timeout=200
"no behavioral check crept into grader"grep -iE "s_client|curl|openssl|http_code|connect" grader.py — must return nothing (config-shape only)
"no specifics leaked to task.yaml"grep -iE "<metadata-key>|<metadata-key>|<metadata-key>|<metadata-key>|x-bleater-route-policy|install-id|route-policy|kube-system|bleater-env|reconciler|mesh-guard" task.yaml — must return nothing

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 327,069. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.