> ## Documentation Index
> Fetch the complete documentation index at: https://vietbui.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# LLM Eval Pipeline

> A continuous quality system for LLM products consisting of: structured failure discovery → dataset curation → automated evaluation → CI/CD gates → production…

# LLM Eval Pipeline

A continuous quality system for LLM products consisting of: structured failure discovery → dataset curation → automated evaluation → CI/CD gates → production monitoring. The eval pipeline is to LLM products what unit + integration tests are to traditional software — but adapted for non-deterministic outputs.

***

## Why Traditional Testing Fails for LLMs

LLMs have three structural properties that break conventional TDD:

1. **Non-determinism** — the same prompt does not reliably produce the same output.
2. **Infinite valid output space** — "write an email" has thousands of correct answers; there is no single expected string to assert.
3. **Three gulfs** (Hamel Husain): *Comprehension* (can't read every trace at scale), *Specification* (prompts don't fully capture intent), *Generalization* (correct prompts still fail on novel inputs).

The response is not "no testing" but a different discipline: **systematic failure analysis → targeted evaluators → statistical monitoring**.

***

## The Eval Flywheel

```
Error Analysis → Define Metrics → Build Evaluators → CI/CD Gates → Production Monitoring
      ↑                                                                       |
      └───────────────── new failure patterns ←──────────────────────────────┘
```

This loop is continuous: production monitoring surfaces new failure modes; those become new eval examples in CI. The system compounds.

***

## Stage 1: Error Analysis

Error analysis is the highest-ROI activity in LLM development. Spend 60–80% of development time here, not on eval infrastructure.

**Open coding**: review 100+ diverse traces in a custom annotation tool. Write open-ended notes on problems. Focus on the **first upstream failure** in each trace — LLM pipelines are causal systems; downstream failures cascade from one root cause.

**Axial coding**: group notes into 5–10 themes. Use an LLM to suggest initial clusters, but human review is mandatory. Build a pivot table counting frequency per category.

**Custom annotation tool**: purpose-built viewer for your domain, not a generic observability dashboard. Shows all context in one place. Teams with custom tools iterate \~10× faster than those using generic tools.

**Key insight**: let failure modes emerge from your data. Generic pre-built metrics (helpfulness, coherence, hallucination score) rarely correlate with what actually matters for your product.

***

## Stage 2: Dataset Curation

Three named dataset types:

| Dataset            | Size                    | Content                                                     | Purpose                                    |
| ------------------ | ----------------------- | ----------------------------------------------------------- | ------------------------------------------ |
| **Golden set**     | 50–200 examples         | Manually authored, curated; core flows + edge cases         | CI regression gate                         |
| **Eval set**       | 500–5000 examples       | Sampled from production logs, tagged by use case/difficulty | Broad regression + benchmarking            |
| **Regression set** | Unbounded (append-only) | Every confirmed bug from QA or user reports                 | Ensure previously broken things stay fixed |

Build the golden set first (can be synthetic if no traffic yet). Expand to eval set once production traffic exists. Treat the regression set as a first-class engineering artifact: every bug capture → new eval example.

**Labeling strategies**:

* *Deterministic labels*: run the SQL, execute the code, validate JSON schema — the system tells you if it's correct
* *Human labels*: domain expert binary PASS/FAIL + critique; always for subjective dimensions
* *LLM-as-judge*: for scale; calibrate against human labels first; measure TPR/TNR before trusting it

**Binary PASS/FAIL over Likert scales**: binary forces clarity, produces actionable signals, and produces consistent inter-annotator agreement. "Fail" = fix it. "3/5" = fix what?

***

## Stage 3: Evaluator Types

Two types; choose based on failure type:

| Failure type                                                                 | Evaluator                              | When            | Cost   |
| ---------------------------------------------------------------------------- | -------------------------------------- | --------------- | ------ |
| Deterministic (date format, JSON validity, SQL correctness, unit tests pass) | Code assertion                         | Every commit    | Low    |
| Subjective (tone, helpfulness, handoff timing, safety)                       | [LLM-as-Judge](/concepts/llm-as-judge) | Per PR, nightly | Higher |

**Cost hierarchy**: code assertions → regex/rules → reference-based comparison → LLM-judge. Build expensive evaluators only for persistent failures you will iterate on repeatedly.

For [RAG Evaluation](/concepts/rag-evaluation) specifically, split retrieval (IR metrics) and generation (LLM-judge) into separate evaluators.

**RAG eval structure (Jason Liu's 6 RAG Evals)**:

* Tier 1: IR metrics for retrieval (Recall\@k, Precision\@k, MRR)
* Tier 2/3: (C|Q) context relevance, (A|C) faithfulness, (A|Q) answer relevance

Retrieval eval datasets can be built synthetically: take docs from corpus, extract key facts, generate questions those facts would answer — gives query-document pairs without manual annotation. Validate off-the-shelf RAG judge prompts against your human labels before trusting them; once TPR/TNR is known, correct estimates to get actual failure rates.

***

## Stage 4: CI/CD Integration

Gate every model/prompt/pipeline change against evals before production.

**Per-PR eval run**: trigger on any change to prompts, retrieval config, model routing, or business logic. Run against golden set + a sample of eval set.

**Comparison to baseline**: compare metrics against the last production run on the same datasets.

**Gates** (auto-fail):

* Task correctness drops beyond configured delta (e.g., −2 points on 0–100 scale)
* Safety violation rate increases above threshold
* Latency or cost exceed budget

**Regression gate**: always run the regression set; any change that re-breaks a historical bug is auto-blocked.

**Human review gate**: for non-blocking degradations, flag for review. Treat prompt/model changes like schema migrations: require a review step.

***

## Stage 5: Production Monitoring

Offline evals catch regressions before deploy; online monitoring catches drift, new edge cases, and abuse after deploy.

**Structured logging**: every interaction logs prompts, retrieved docs, model outputs, tool calls, latency, token counts, model version, user segment.

**Sampling pipeline**: nightly job samples N% of production interactions and runs the same LLM-judge metrics used in offline eval. Separate job computes retrieval metrics via distant supervision.

**Dashboards + alerts**: time-series of metrics per use case and segment, correlated with release versions. Alert on trend crossing threshold, not individual data point noise (aggregate, don't gate on single scores).

***

## Guardrails vs. Evaluators

Two complementary systems; do not conflate:

|            | Guardrail                                                       | Evaluator                                                   |
| ---------- | --------------------------------------------------------------- | ----------------------------------------------------------- |
| Runs when  | Synchronously in request path                                   | Asynchronously after response                               |
| Speed      | Fast (ms)                                                       | Can be slow                                                 |
| Focus      | Objective, high-impact failures: PII, profanity, invalid format | Subjective quality: correctness, faithfulness, completeness |
| On trigger | Redact/refuse/regenerate before user sees response              | Feed dashboards, regression tests                           |

False positives in guardrails are production bugs (block valid responses). Keep guardrail rules conservative and version-controlled.

***

## Agentic Workflow Evaluation

Two phases:

1. **End-to-end task success** — treat agent as black box; "did we meet user's goal?" Define precise success rule per task type; measure with human or calibrated LLM judge.

2. **Step-level diagnostics** (after error analysis identifies which workflows fail most) — score tool choice, parameter extraction, error handling, context retention, efficiency.

**Transition failure matrices**: rows = last successful state; columns = first failure location. Transforms trace complexity into a quantitative hotspot map for debugging. For multi-turn traces, focus on the first upstream failure — downstream failures cascade from it.

**Abstention ability**: for applications requiring refusal of unanswerable questions, construct a balanced eval set of answerable and unanswerable questions. Binary PASS/FAIL: model must answer answerable AND refuse unanswerable. False positives (hallucinated answer to unanswerable) signal poor calibration. Literature search term: "Abstention Ability."

***

## Safety and Red-Teaming

Maintain a dedicated safety eval pipeline separate from core quality:

* **Attack corpus**: curated prompt-injection and jailbreak examples + domain-specific attacks; see [Indirect Prompt Injection](/concepts/indirect-prompt-injection) and [OWASP Security Checklist](/concepts/owasp-security-checklist)
* **Scheduled red-team runs**: run full attack suite on each release and weekly
* **Safety metrics** tracked over time like correctness metrics, with the same gating rules

***

## Tools Landscape

| Category          | Tools                                                        |
| ----------------- | ------------------------------------------------------------ |
| Eval platforms    | LangSmith, Braintrust, Arize Phoenix, Evidently AI, Galileo  |
| Metric libraries  | Ragas, DeepEval, TruLens                                     |
| Observability     | LangSmith, Arize, Braintrust                                 |
| Traditional tests | pytest (backend), Playwright (UI), Great Expectations (data) |

**Tool selection criteria** (Hamel Husain, panel evaluation mid-2025; features change quickly):

Four criteria: (1) workflow friction between failure observation and iteration, (2) human-in-loop annotation support (key missing feature across tools: axial coding), (3) transparency vs. magic (be skeptical of auto-generated rubrics that immediately score outputs), (4) ecosystem integration (bulk export + write-back annotation APIs required).

Hamel's own preference: use platforms as backend data stores; run annotation from Jupyter notebooks with custom annotation interfaces.

| Tool          | Strengths                                                                        | Weaknesses                                                                                            |
| ------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| LangSmith     | Intuitive UI, smooth trace-to-playground, annotation queues, Prompt Canvas       | Limited side-by-side prompt comparison, AI synthetic examples risk homogeneous datasets               |
| Braintrust    | Clean UI, "money table" for frequency-sorting failures, human-in-loop interfaces | "Loop" AI scorer (rubric + immediate score) creates false confidence; proprietary BTQL query language |
| Arize Phoenix | Notebook-centric (export to DataFrame), open-source/local-first, "hackable"      | Text density UI issues; only point statistics per run, no histogram/distribution views                |

No single tool is superior in every dimension. Over-focusing on tools instead of process is a common mistake.

***

## Relation to Existing Wiki

* [LLM-as-Judge](/concepts/llm-as-judge) — evaluator implementation: bias, calibration, rubric design, failure modes
* [RAG Evaluation](/concepts/rag-evaluation) — retrieval and generation metrics for RAG systems
* [Agentic CI/CD](/concepts/agentic-cicd) — CI as external watchdog when agent is the developer
* [Verification Pipeline](/concepts/verification-pipeline) — four-tier quality ladder for coding agents
* [Indirect Prompt Injection](/concepts/indirect-prompt-injection) — primary attack vector for safety evaluation
* [OWASP Security Checklist](/concepts/owasp-security-checklist) — security eval checklist

<iframe
  srcDoc="<!doctype html><html><head><meta charset=&#x22;utf-8&#x22;><style>
html,body{margin:0;height:100%;background:#0f1117;overflow:hidden;font-family:ui-sans-serif,system-ui,-apple-system,sans-serif}
#g{width:100%;height:100%}
#hd{position:absolute;top:0;left:0;right:30px;height:22px;display:flex;align-items:center;gap:6px;padding:0 10px;color:#aeb3c2;font-size:10px;letter-spacing:.08em;text-transform:uppercase;z-index:6;cursor:move;user-select:none;touch-action:none;background:linear-gradient(#0f1117cc,#0f111700)}
#gear{position:absolute;top:5px;right:7px;z-index:7;cursor:pointer;color:#aeb3c2;background:#1b1e27;border:1px solid #2b2f3a;border-radius:6px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-size:12px;user-select:none}
#panel{position:absolute;top:31px;right:7px;z-index:7;background:rgba(22,25,34,.96);border:1px solid #2b2f3a;border-radius:8px;padding:6px 9px 9px;display:none;width:150px;color:#c9cdd8;font-size:10px}
#panel.open{display:block}
#panel label{display:flex;justify-content:space-between;margin:7px 0 1px;color:#9aa0b0}
#panel input[type=range]{width:100%;margin:0}
#panel .row{display:flex;align-items:center;gap:6px;margin-top:8px;color:#c9cdd8}
</style><script src=&#x22;https://cdn.jsdelivr.net/npm/force-graph@1.51.4/dist/force-graph.min.js&#x22; integrity=&#x22;sha384-Hm6GpQcTNI5VqGgGS7lLxTGtEFcxu/kOVV0B7ozIZRu9blWVvigv5httJQZ2qZmY&#x22; crossorigin=&#x22;anonymous&#x22;></script></head>
<body><div id=&#x22;hd&#x22;>Graph</div><div id=&#x22;gear&#x22;>⚙</div>
<div id=&#x22;panel&#x22;>
<label>Node size<span id=&#x22;vns&#x22;></span></label><input id=&#x22;ns&#x22; type=&#x22;range&#x22; min=&#x22;0.6&#x22; max=&#x22;6&#x22; step=&#x22;0.2&#x22;>
<label>Link width<span id=&#x22;vlw&#x22;></span></label><input id=&#x22;lw&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;3&#x22; step=&#x22;0.1&#x22;>
<label>Label size<span id=&#x22;vts&#x22;></span></label><input id=&#x22;ts&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;8&#x22; step=&#x22;0.5&#x22;>
<label>Label opacity<span id=&#x22;vto&#x22;></span></label><input id=&#x22;to&#x22; type=&#x22;range&#x22; min=&#x22;0&#x22; max=&#x22;1&#x22; step=&#x22;0.05&#x22;>
<div id=&#x22;depthRow&#x22;><label>Depth<span id=&#x22;vd&#x22;></span></label><input id=&#x22;dp&#x22; type=&#x22;range&#x22; min=&#x22;1&#x22; max=&#x22;5&#x22; step=&#x22;1&#x22;></div>
<div class=&#x22;row&#x22;><input id=&#x22;ar&#x22; type=&#x22;checkbox&#x22;><span>Directional arrows</span></div>
</div>
<div id=&#x22;g&#x22;></div>
<script>
const NODES=[{&#x22;id&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;label&#x22;:&#x22;LLM Eval Pipeline&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;label&#x22;:&#x22;Verification Pipeline&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;label&#x22;:&#x22;Agentic CI/CD&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;,&#x22;label&#x22;:&#x22;Indirect Prompt Injection&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/owasp-security-checklist&#x22;,&#x22;label&#x22;:&#x22;OWASP Security Checklist&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/llm-as-judge&#x22;,&#x22;label&#x22;:&#x22;LLM-as-Judge&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;concepts/rag-evaluation&#x22;,&#x22;label&#x22;:&#x22;RAG Evaluation&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:2.732050807568877},{&#x22;id&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;label&#x22;:&#x22;Agent Harness&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:7.48074069840786},{&#x22;id&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;label&#x22;:&#x22;Lean Agentic Coding Workflow&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:5.795831523312719},{&#x22;id&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;label&#x22;:&#x22;Agent Skills&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.795831523312719},{&#x22;id&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;label&#x22;:&#x22;Agent Self-Correction&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;concepts/ralph-loop&#x22;,&#x22;label&#x22;:&#x22;Ralph Loop&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;label&#x22;:&#x22;Multi-Vendor Adversarial Review&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/agent-context-instructions&#x22;,&#x22;label&#x22;:&#x22;Agent Context Instructions&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;label&#x22;:&#x22;Worktree Isolation&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#x22;id&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;label&#x22;:&#x22;Agentic Sandbox Controls&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.464101615137754},{&#x22;id&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;label&#x22;:&#x22;Agent Primitive Selection&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:4.464101615137754},{&#x22;id&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;label&#x22;:&#x22;Control Plane Expansion Plan — Gap Analysis and Phase 0.5 Roadmap&#x22;,&#x22;group&#x22;:&#x22;syntheses&#x22;,&#x22;val&#x22;:4.3166247903554},{&#x22;id&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;label&#x22;:&#x22;AI and ML Engineering&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:4.3166247903554},{&#x22;id&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;label&#x22;:&#x22;Self-Healing Loop&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;systems/scalability-reliability&#x22;,&#x22;label&#x22;:&#x22;Scalability and Reliability&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/contextual-retrieval&#x22;,&#x22;label&#x22;:&#x22;Contextual Retrieval&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;label&#x22;:&#x22;SandCastle&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:4.16227766016838},{&#x22;id&#x22;:&#x22;concepts/agentic-memory-tool&#x22;,&#x22;label&#x22;:&#x22;Agentic Memory Tool&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4},{&#x22;id&#x22;:&#x22;concepts/error-budget&#x22;,&#x22;label&#x22;:&#x22;Error Budget (Agentic)&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;label&#x22;:&#x22;AI-Specific Code Pitfalls&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;label&#x22;:&#x22;Branch Strategy for Agents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.8284271247461903},{&#x22;id&#x22;:&#x22;systems/architectural-patterns&#x22;,&#x22;label&#x22;:&#x22;Architectural Patterns&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;entities/ai-coding-agents&#x22;,&#x22;label&#x22;:&#x22;AI Coding Agents&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;concepts/ai-code-review&#x22;,&#x22;label&#x22;:&#x22;AI Code Review&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;concepts/preference-feedback-loop&#x22;,&#x22;label&#x22;:&#x22;Preference Feedback Loop&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;entities/mnemory&#x22;,&#x22;label&#x22;:&#x22;Mnemory&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;concepts/unit-testing&#x22;,&#x22;label&#x22;:&#x22;Unit Testing&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;concepts/cicd-testing&#x22;,&#x22;label&#x22;:&#x22;CI/CD Testing&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;entities/agentshield&#x22;,&#x22;label&#x22;:&#x22;AgentShield&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;concepts/compound-engineering&#x22;,&#x22;label&#x22;:&#x22;Compound Engineering&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;entities/dspy&#x22;,&#x22;label&#x22;:&#x22;DSPy&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3},{&#x22;id&#x22;:&#x22;concepts/pentest-agent-design&#x22;,&#x22;label&#x22;:&#x22;Pen Test Agent Design&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3},{&#x22;id&#x22;:&#x22;concepts/mobile-design-patterns&#x22;,&#x22;label&#x22;:&#x22;Mobile Design Patterns&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:2.732050807568877},{&#x22;id&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;label&#x22;:&#x22;Context Compression Strategies&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:6.0990195135927845},{&#x22;id&#x22;:&#x22;entities/opencode&#x22;,&#x22;label&#x22;:&#x22;OpenCode&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:5.358898943540674},{&#x22;id&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;label&#x22;:&#x22;Pi Agent (pi-mono)&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:5.123105625617661},{&#x22;id&#x22;:&#x22;patterns/principles&#x22;,&#x22;label&#x22;:&#x22;Software Design Principles&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:4.872983346207417},{&#x22;id&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;label&#x22;:&#x22;Agent Subagents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.741657386773941}],LINKS=[{&#x22;source&#x22;:&#x22;concepts/agent-context-instructions&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-context-instructions&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-harness&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/unit-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/cicd-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-as-judge&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-self-correction&#x22;,&#x22;target&#x22;:&#x22;concepts/preference-feedback-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/compound-engineering&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-skills&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/cicd-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-cicd&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-memory-tool&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-memory-tool&#x22;,&#x22;target&#x22;:&#x22;entities/mnemory&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-memory-tool&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-code-review&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-code-review&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-code-review&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-code-review&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/cicd-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/cicd-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/unit-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/cicd-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/compound-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/compound-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/compound-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-compression&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/error-budget&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/error-budget&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/error-budget&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/error-budget&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-as-judge&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-as-judge&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-as-judge&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-as-judge&#x22;,&#x22;target&#x22;:&#x22;entities/dspy&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-as-judge&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/rag-evaluation&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/mobile-design-patterns&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-as-judge&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;concepts/owasp-security-checklist&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;concepts/owasp-security-checklist&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/owasp-security-checklist&#x22;,&#x22;target&#x22;:&#x22;concepts/error-budget&#x22;},{&#x22;source&#x22;:&#x22;concepts/owasp-security-checklist&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/pentest-agent-design&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/pentest-agent-design&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/preference-feedback-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-as-judge&#x22;},{&#x22;source&#x22;:&#x22;concepts/preference-feedback-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/preference-feedback-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;concepts/preference-feedback-loop&#x22;,&#x22;target&#x22;:&#x22;entities/dspy&#x22;},{&#x22;source&#x22;:&#x22;concepts/rag-evaluation&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-as-judge&#x22;},{&#x22;source&#x22;:&#x22;concepts/rag-evaluation&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/rag-evaluation&#x22;,&#x22;target&#x22;:&#x22;concepts/contextual-retrieval&#x22;},{&#x22;source&#x22;:&#x22;concepts/ralph-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/self-healing-loop&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;concepts/unit-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;concepts/unit-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/cicd-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/unit-testing&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/cicd-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/unit-testing&#x22;},{&#x22;source&#x22;:&#x22;concepts/verification-pipeline&#x22;,&#x22;target&#x22;:&#x22;concepts/llm-eval-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;entities/sandcastle&#x22;},{&#x22;source&#x22;:&#x22;concepts/worktree-isolation&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/contextual-retrieval&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;systems/architectural-patterns&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;systems/architectural-patterns&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;systems/scalability-reliability&#x22;,&#x22;target&#x22;:&#x22;concepts/error-budget&#x22;},{&#x22;source&#x22;:&#x22;systems/scalability-reliability&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;systems/scalability-reliability&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-cicd&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;syntheses/agent-primitive-selection&#x22;},{&#x22;source&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;,&#x22;target&#x22;:&#x22;syntheses/control-plane-expansion-plan&#x22;},{&#x22;source&#x22;:&#x22;entities/agentshield&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;entities/agentshield&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-sandbox-controls&#x22;},{&#x22;source&#x22;:&#x22;entities/agentshield&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;entities/agentshield&#x22;,&#x22;target&#x22;:&#x22;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;entities/ai-coding-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#x22;},{&#x22;source&#x22;:&#x22;entities/ai-coding-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;},{&#x22;source&#x22;:&#x22;entities/ai-coding-agents&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-code-review&#x22;},{&#x22;source&#x22;:&#x22;entities/dspy&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/mnemory&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;entities/mnemory&#x22;,&#x22;target&#x22;:&#x22;concepts/agentic-memory-tool&#x22;},{&#x22;source&#x22;:&#x22;entities/mnemory&#x22;,&#x22;target&#x22;:&#x22;concepts/indirect-prompt-injection&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;concepts/context-compression&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/opencode&#x22;,&#x22;target&#x22;:&#x22;entities/ai-coding-agents&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;concepts/multi-vendor-adversarial-review&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-self-correction&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/branch-strategy-for-agents&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;syntheses/lean-agentic-workflow&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;entities/sandcastle&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;}],CUR=&#x22;concepts/llm-eval-pipeline&#x22;,MAXD=3;
const C={concepts:'#8B7CF6',patterns:'#0D9373',systems:'#E0567C',syntheses:'#E2A03F',comparisons:'#3B82F6',entities:'#14B8A6',guides:'#9CA3AF'};
function lid(x){return (x&&x.id!==undefined)?x.id:x;}
const ADJ=new Map(NODES.map(function(n){return [n.id,new Set()];}));
LINKS.forEach(function(l){var s=lid(l.source),t=lid(l.target);if(ADJ.has(s)&&ADJ.has(t)){ADJ.get(s).add(t);ADJ.get(t).add(s);}});
var opt={ns:1.8,lw:0.6,ts:3.5,to:0.75,dp:2,ar:false};
function visible(){
if(!CUR)return {nodes:NODES,links:LINKS};
var dist=new Map([[CUR,0]]),fr=[CUR];
for(var d=1;d<=opt.dp;d++){var nx=[];fr.forEach(function(u){(ADJ.get(u)||[]).forEach(function(v){if(!dist.has(v)){dist.set(v,d);nx.push(v);}});});fr=nx;}
var keep=new Set(dist.keys());
return {nodes:NODES.filter(function(n){return keep.has(n.id);}),links:LINKS.filter(function(l){return keep.has(lid(l.source))&&keep.has(lid(l.target));})};
}
var el=document.getElementById('g');
var G=ForceGraph()(el).backgroundColor('#0f1117').nodeId('id')
.warmupTicks(24).cooldownTicks(70).autoPauseRedraw(true)
.nodeColor(function(n){return C[n.group]||'#9CA3AF';}).nodeLabel('label').nodeVal(function(n){return n.val;})
.linkColor(function(){return 'rgba(255,255,255,0.12)';})
.nodeRelSize(opt.ns).linkWidth(opt.lw)
.linkDirectionalArrowLength(0).linkDirectionalArrowRelPos(1).linkDirectionalArrowColor(function(){return 'rgba(255,255,255,0.4)';})
.nodeCanvasObjectMode(function(){return 'after';})
.nodeCanvasObject(function(n,ctx,scale){var r=opt.ns*Math.sqrt(n.val||1);
if(n.id===CUR){ctx.beginPath();ctx.arc(n.x,n.y,r+1.6,0,6.283);ctx.strokeStyle='#fff';ctx.lineWidth=1.2/scale;ctx.stroke();}
if(opt.to>0&&opt.ts>0){var t=n.label.length>28?n.label.slice(0,26)+'…':n.label;ctx.globalAlpha=opt.to;ctx.font=((n.id===CUR?opt.ts+1:opt.ts))+'px ui-sans-serif,sans-serif';ctx.fillStyle=(n.id===CUR)?'#ffffff':'#aab0c0';ctx.textAlign='center';ctx.textBaseline='top';ctx.fillText(t,n.x,n.y+r+1.5);ctx.globalAlpha=1;}})
.onNodeClick(function(n){if(window.top){window.top.location.href='/'+n.id;}});
G.graphData(visible());G.d3VelocityDecay(0.4);
function fit(){G.zoomToFit(400,20);}
setTimeout(fit,350);setTimeout(fit,1100);
// Stop the render/sim loop while idle so the fixed widget never repaints during
// parent-page scroll; resume only while the pointer is over the widget.
var pt;function pause(){G.pauseAnimation();}function resume(){G.resumeAnimation();}
function idle(ms){clearTimeout(pt);pt=setTimeout(pause,ms);}
document.body.addEventListener('pointerenter',function(){clearTimeout(pt);resume();});
document.body.addEventListener('pointerleave',function(){idle(250);});
addEventListener('resize',function(){resume();G.zoomToFit(0,20);idle(700);});
idle(2000);
function apply(re){resume();G.nodeRelSize(opt.ns).linkWidth(opt.lw).linkDirectionalArrowLength(opt.ar?2.6:0);if(re){G.graphData(visible());setTimeout(fit,450);}idle(re?2200:1400);}
function bind(id,key,fmt,re){var e=document.getElementById(id),o=document.getElementById('v'+id);e.value=opt[key];if(o)o.textContent=fmt(opt[key]);e.addEventListener('input',function(){opt[key]=parseFloat(e.value);if(o)o.textContent=fmt(opt[key]);apply(re);});}
bind('ns','ns',function(v){return v.toFixed(1);},false);
bind('lw','lw',function(v){return v.toFixed(1);},false);
bind('ts','ts',function(v){return v.toFixed(1);},false);
bind('to','to',function(v){return v.toFixed(2);},false);
var dE=document.getElementById('dp'),dO=document.getElementById('vd');dE.max=MAXD;dE.value=opt.dp;dO.textContent=opt.dp;dE.addEventListener('input',function(){opt.dp=parseInt(dE.value,10);dO.textContent=opt.dp;apply(true);});
if(!CUR)document.getElementById('depthRow').style.display='none';
var aE=document.getElementById('ar');aE.checked=opt.ar;aE.addEventListener('change',function(){opt.ar=aE.checked;apply(false);});
document.getElementById('gear').addEventListener('click',function(){document.getElementById('panel').classList.toggle('open');});
var hd=document.getElementById('hd');hd.textContent='⠿  '+(CUR?'Local graph':'Knowledge graph');
// free-form placement: drag by the header. Default is bottom-right (inline style);
// a moved position is saved per parent-origin and restored on every page.
function clampPos(fe,l,t){var TW=(window.top||window),r=fe.getBoundingClientRect();return [Math.min(Math.max(0,l),Math.max(0,TW.innerWidth-r.width)),Math.min(Math.max(0,t),Math.max(0,TW.innerHeight-r.height))];}
function place(fe,l,t){var p=clampPos(fe,l,t);fe.style.left=p[0]+'px';fe.style.top=p[1]+'px';fe.style.right='auto';fe.style.bottom='auto';}
try{var sp=JSON.parse(localStorage.getItem('llmwiki_graph_pos'));if(sp&&window.frameElement)place(window.frameElement,sp.l,sp.t);}catch(e){if(window.console)console.debug('graph: saved position unavailable',e);}
hd.addEventListener('pointerdown',function(e){var fe=window.frameElement;if(!fe)return;var rect=fe.getBoundingClientRect();var sx=e.screenX,sy=e.screenY,L=rect.left,T=rect.top;place(fe,L,T);hd.setPointerCapture(e.pointerId);
function mv(ev){place(fe,L+ev.screenX-sx,T+ev.screenY-sy);}
function up(){if(hd.hasPointerCapture(e.pointerId))hd.releasePointerCapture(e.pointerId);hd.removeEventListener('pointermove',mv);hd.removeEventListener('pointerup',up);try{localStorage.setItem('llmwiki_graph_pos',JSON.stringify({l:parseFloat(fe.style.left),t:parseFloat(fe.style.top)}));}catch(e2){if(window.console)console.debug('graph: could not persist position',e2);}}
hd.addEventListener('pointermove',mv);hd.addEventListener('pointerup',up);e.preventDefault();});
</script></body></html>"
  title="Knowledge graph"
  loading="lazy"
  style={{position:"fixed",right:"18px",bottom:"18px",width:"320px",height:"340px",border:0,borderRadius:"14px",boxShadow:"0 6px 28px rgba(0,0,0,0.38)",zIndex:50,background:"#0f1117"}}
/>
