> ## 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.

# Database Patterns

> Reference and agent guide for indexing strategies, query optimization, transaction patterns, connection pooling, and read/write architecture.

# Database Patterns

Reference and agent guide for indexing strategies, query optimization, transaction patterns, connection pooling, and read/write architecture.

## Agent Trigger

**Apply when:** Writing or reviewing schema, queries, indexes, transactions, or connection pooling.
**Rule of thumb:** Read the query plan, index for access patterns, kill N+1s, pick the right isolation level.

***

## Indexing Strategies

An index is a separate data structure that maps indexed column values to row locations, enabling the database to skip full table scans.

**Cost:** Every index adds write overhead (insert/update/delete must also update the index) and disk space. Over-indexing slows writes more than it helps reads.

### B-Tree Index (default)

Self-balancing tree. All major RDBMS (PostgreSQL, MySQL, SQL Server) use B+ tree variants where all data values live in leaf nodes.

**Supports:** Equality (`=`), range (`<`, `>`, `BETWEEN`), `ORDER BY`, prefix `LIKE 'foo%'`.

**Does not support:** `LIKE '%foo'` (trailing wildcard), non-orderable types.

**When to use:** Default choice for any column in a `WHERE`, `JOIN`, or `ORDER BY` clause with reasonable cardinality.

### Hash Index

Maps keys to bucket locations via a hash function. O(1) lookup.

**Supports:** Equality only (`=`).

**Does not support:** Range queries, sorting.

**When to use:** Exact-match-only lookups on very high cardinality columns where range is never needed (UUIDs, session tokens). PostgreSQL builds hash indexes; MySQL InnoDB does not.

### Composite (Multi-Column) Index

Index on two or more columns together: `(a, b, c)`.

**Key rule — leftmost prefix:** The index can be used by queries that filter on `(a)`, `(a, b)`, or `(a, b, c)` — but NOT on `(b)` or `(c)` alone.

**When to use:** Queries that always filter on multiple columns together. Column order matters: put the most selective / most frequently filtered column first.

**Anti-pattern:** Creating `(a, b)` and `(b, a)` separately when one order covers all queries; having many single-column indexes when a composite would serve the actual query patterns.

### Covering Index

An index that includes all columns a query needs, so the database never touches the underlying table (index-only scan).

```sql theme={null}
-- Query: SELECT email FROM users WHERE last_name = 'Smith'
-- Covering index: (last_name, email)
-- DB reads only the index; no table access needed
```

**When to use:** Hot queries that select a small, predictable set of columns. Large performance gain for read-heavy tables.

**Anti-pattern:** Including too many columns in the covering index — defeats the write-overhead trade-off.

### Bitmap Index

Stores a bit vector per distinct value. Bitwise AND/OR operations filter multiple conditions simultaneously.

**When to use:** Low cardinality columns (status, gender, country) in analytical / OLAP workloads with complex multi-condition filters.

**When NOT to use:** OLTP tables with frequent writes (bitmap index locks rows on update; high contention).

### Filtered / Partial Index

Indexes only a subset of rows matching a `WHERE` condition.

```sql theme={null}
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';
```

**When to use:** When queries almost always filter on a specific value (active records, unprocessed queue items). Smaller index = faster lookup + less write overhead.

### Full-Text Index

Inverted index for text search. Tokenizes text, indexes individual words.

**When to use:** Free-text search over document content. Not a substitute for Elasticsearch for complex search — but adequate for moderate use cases.

### Smart indexing rules

1. Index columns used in `WHERE`, `JOIN ON`, and `ORDER BY` clauses of frequent queries.
2. Prefer high-cardinality columns (unique values spread widely). Indexing a boolean column with 50/50 split rarely helps.
3. Analyze query patterns before creating indexes — don't guess.
4. Remove unused indexes. `pg_stat_user_indexes` (PostgreSQL) shows index usage counts.
5. Don't index every column — writes pay for every index on the table.

***

## Query Optimization

### EXPLAIN / EXPLAIN ANALYZE

`EXPLAIN` shows the query plan the optimizer chose. `EXPLAIN ANALYZE` actually runs the query and shows real execution times.

**Key things to look for:**

* `Seq Scan` on a large table — likely missing an index
* `Nested Loop` with large row estimates — may indicate N+1 or missing join index
* High `rows` estimates that diverge from `actual rows` — stale statistics; run `ANALYZE`
* Sort / Hash operations on large datasets — may need an index to support `ORDER BY`

### N+1 Problem

**Pattern:** Fetch N parent records, then issue one query per parent to fetch related children. Results in N+1 round trips.

```sql theme={null}
-- 1 query: SELECT * FROM posts  (returns 100 posts)
-- 100 queries: SELECT * FROM comments WHERE post_id = ?  (one per post)
```

**Fix:** Use a JOIN or an ORM eager-load mechanism.

```sql theme={null}
SELECT posts.*, comments.*
FROM posts
LEFT JOIN comments ON comments.post_id = posts.id
WHERE posts.author_id = ?
```

Or in ORMs: `Post.includes(:comments)` (Rails), `.prefetch_related('comments')` (Django), `query.options(joinedload(Post.comments))` (SQLAlchemy).

**Detection:** Log slow queries; look for patterns of repeated identical queries with different IDs. Tools like Bullet (Rails) or Django Debug Toolbar flag N+1 automatically.

### Query Plan Reading

* `Index Scan` — good; uses index to find rows, then fetches from table
* `Index Only Scan` — best; covering index, no table access
* `Seq Scan` — full table scan; bad on large tables (acceptable on small ones)
* `Hash Join` — efficient for joining large sets
* `Nested Loop` — efficient when inner set is small; bad when outer set is large and inner is un-indexed

***

## Connection Pooling

Each database connection is a TCP connection + server-side process/thread. Creating connections per request is slow and resource-intensive.

A connection pool maintains a set of pre-established connections shared across application instances.

**Key parameters:**

* `min_connections` — connections kept alive even when idle (warmup)
* `max_connections` — hard ceiling; must be \< DB server's `max_connections`
* `connection_timeout` — how long to wait for a free connection before erroring
* `idle_timeout` — close connections idle longer than this

**Common tools:** PgBouncer (PostgreSQL), HikariCP (Java), pgpool-II, application-level pools (SQLAlchemy, ActiveRecord, Prisma).

**Anti-patterns:**

* No pool at all (new connection per request)
* Pool max > DB server max (connections queue or error)
* Not returning connections to pool on error paths (pool exhaustion)

**PgBouncer modes:**

* Session mode — one client gets one server connection for the entire session (safe, minimal savings)
* Transaction mode — connection returned to pool after each transaction (more efficient; incompatible with session-level state like `SET LOCAL`)
* Statement mode — returned after each statement (very restrictive; rarely used)

***

## Transaction Patterns

### ACID Properties

* **Atomicity** — all operations in a transaction succeed or all are rolled back
* **Consistency** — transaction brings the database from one valid state to another
* **Isolation** — concurrent transactions don't see each other's intermediate state
* **Durability** — committed transactions survive crashes

### Isolation Levels

| Level                             | Dirty Read | Non-Repeatable Read | Phantom Read |
| --------------------------------- | ---------- | ------------------- | ------------ |
| Read Uncommitted                  | yes        | yes                 | yes          |
| Read Committed (default most DBs) | no         | yes                 | yes          |
| Repeatable Read                   | no         | no                  | yes          |
| Serializable                      | no         | no                  | no           |

**Practical guidance:**

* `Read Committed` is the PostgreSQL default and sufficient for most OLTP workloads.
* `Repeatable Read` when you need consistent reads across multiple statements in a transaction (e.g., report generation).
* `Serializable` for financial transactions where phantom reads would cause correctness problems. Higher contention cost.

### Optimistic Locking

Read a row with a version field. Before updating, check that the version hasn't changed. Retry if it has (conflict detected).

**When to use:** Low-contention workloads; scenarios where most transactions succeed without conflict. Avoids holding locks during user think-time.

```sql theme={null}
-- Read
SELECT id, balance, version FROM accounts WHERE id = ?
-- Update (fails if another transaction changed version)
UPDATE accounts SET balance = ?, version = version + 1
WHERE id = ? AND version = ?
-- If 0 rows updated → conflict → retry
```

### Pessimistic Locking

Lock the row on read to prevent other transactions from modifying it.

```sql theme={null}
SELECT * FROM accounts WHERE id = ? FOR UPDATE;
```

**When to use:** High-contention resources where conflicts are frequent and retrying is expensive; when correctness is critical and retries are unacceptable.

**Anti-pattern:** Holding a `FOR UPDATE` lock while doing external I/O (HTTP call, file write) — starves other transactions.

### Short Transactions

Keep transactions as short as possible. Long-running transactions hold locks, block vacuuming (PostgreSQL), and increase the chance of conflict.

**Anti-pattern:** Opening a transaction, calling an external API, then committing — the lock is held for the entire API round-trip.

***

## Read / Write Splitting

Route write operations to a primary replica and read operations to one or more read replicas.

**When to use:** Read-heavy workloads where the primary is CPU/IO bound; reporting queries that would slow down OLTP primary.

**Caveats:**

* Replication lag — reads from replica may see stale data. For writes that must immediately read their own writes, route to primary.
* Failover complexity — application must handle primary failure and replica promotion.

**Implementation:** Application-level (connection routing in ORM), middleware (ProxySQL, PgBouncer with routing), or cloud managed (AWS RDS read replicas).

***

## When to Denormalize

Normalized (3NF) schema reduces redundancy and makes writes clean. Denormalized schema duplicates data to speed reads.

**Reasons to denormalize:**

* A JOIN across multiple large tables is too slow even with indexes
* A derived value (total\_count, last\_activity\_at) is queried on every request but expensive to compute
* Read throughput vastly exceeds write throughput (OLAP, dashboards)

**Patterns:**

* Precomputed aggregate columns (`orders.total_item_count` updated on order item insert/delete)
* Materialized views (DB-native precomputed JOIN result, refreshed on schedule or on change)
* Event sourcing with a read model (separate read-optimized projection updated from events)

**Anti-patterns:**

* Denormalizing prematurely before measuring the query performance problem
* Denormalizing without a clear consistency strategy (how is the redundant data kept in sync?)

***

## Cross-references

* [Data Modeling](/systems/data-modeling) — normalization, schema design, entity relationships
* [Scalability and Reliability](/systems/scalability-reliability) — sharding, replication, caching layers, CAP trade-offs
* [Software Design Principles](/patterns/principles) — trade-offs between write overhead and read performance are a general engineering principle

<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;patterns/database&#x22;,&#x22;label&#x22;:&#x22;Database Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3},{&#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;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;patterns/backend&#x22;,&#x22;label&#x22;:&#x22;Backend Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.6457513110645907},{&#x22;id&#x22;:&#x22;systems/data-modeling&#x22;,&#x22;label&#x22;:&#x22;Data Modeling&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:3},{&#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;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/distributed-systems&#x22;,&#x22;label&#x22;:&#x22;Distributed Systems&#x22;,&#x22;group&#x22;:&#x22;systems&#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;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;patterns/design-patterns-behavioral&#x22;,&#x22;label&#x22;:&#x22;Behavioral Design Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;label&#x22;:&#x22;Deep Modules&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;entities/ponytail&#x22;,&#x22;label&#x22;:&#x22;Ponytail&#x22;,&#x22;group&#x22;:&#x22;entities&#x22;,&#x22;val&#x22;:3.449489742783178},{&#x22;id&#x22;:&#x22;patterns/api-design&#x22;,&#x22;label&#x22;:&#x22;API Design Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;patterns/error-handling&#x22;,&#x22;label&#x22;:&#x22;Error Handling Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;patterns/code-quality&#x22;,&#x22;label&#x22;:&#x22;Code Quality Heuristics&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;patterns/design-patterns-structural&#x22;,&#x22;label&#x22;:&#x22;Structural Design Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3.23606797749979},{&#x22;id&#x22;:&#x22;patterns/concurrency&#x22;,&#x22;label&#x22;:&#x22;Concurrency and Parallelism Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3},{&#x22;id&#x22;:&#x22;systems/system-design-process&#x22;,&#x22;label&#x22;:&#x22;System Design Process&#x22;,&#x22;group&#x22;:&#x22;systems&#x22;,&#x22;val&#x22;:3},{&#x22;id&#x22;:&#x22;patterns/frontend&#x22;,&#x22;label&#x22;:&#x22;Frontend Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:3},{&#x22;id&#x22;:&#x22;patterns/design-patterns-creational&#x22;,&#x22;label&#x22;:&#x22;Creational Design Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:2.732050807568877},{&#x22;id&#x22;:&#x22;patterns/refactoring&#x22;,&#x22;label&#x22;:&#x22;Refactoring Techniques&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:2.732050807568877},{&#x22;id&#x22;:&#x22;patterns/algorithmic&#x22;,&#x22;label&#x22;:&#x22;Algorithmic Patterns&#x22;,&#x22;group&#x22;:&#x22;patterns&#x22;,&#x22;val&#x22;:2.414213562373095},{&#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;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;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/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;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;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/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/agent-subagents&#x22;,&#x22;label&#x22;:&#x22;Agent Subagents&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.741657386773941},{&#x22;id&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;label&#x22;:&#x22;Context Degradation Patterns&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.60555127546399},{&#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/context-engineering&#x22;,&#x22;label&#x22;:&#x22;Context Engineering&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:4.464101615137754},{&#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/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;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;concepts/agent-teams&#x22;,&#x22;label&#x22;:&#x22;Agent Teams&#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/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/llm-eval-pipeline&#x22;,&#x22;label&#x22;:&#x22;LLM Eval Pipeline&#x22;,&#x22;group&#x22;:&#x22;concepts&#x22;,&#x22;val&#x22;:3.449489742783178}],LINKS=[{&#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-degradation&#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-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/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-subagents&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-teams&#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-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/agent-teams&#x22;,&#x22;target&#x22;:&#x22;concepts/worktree-isolation&#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/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-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;concepts/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;entities/ponytail&#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/owasp-security-checklist&#x22;},{&#x22;source&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-degradation&#x22;,&#x22;target&#x22;:&#x22;concepts/ralph-loop&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/context-engineering&#x22;,&#x22;target&#x22;:&#x22;concepts/context-degradation&#x22;},{&#x22;source&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;concepts/deep-modules&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-context-instructions&#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/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/verification-pipeline&#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/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/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/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/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/llm-eval-pipeline&#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;concepts/agent-subagents&#x22;},{&#x22;source&#x22;:&#x22;patterns/algorithmic&#x22;,&#x22;target&#x22;:&#x22;patterns/code-quality&#x22;},{&#x22;source&#x22;:&#x22;patterns/algorithmic&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/api-design&#x22;,&#x22;target&#x22;:&#x22;patterns/error-handling&#x22;},{&#x22;source&#x22;:&#x22;patterns/api-design&#x22;,&#x22;target&#x22;:&#x22;systems/distributed-systems&#x22;},{&#x22;source&#x22;:&#x22;patterns/api-design&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/api-design&#x22;,&#x22;target&#x22;:&#x22;systems/system-design-process&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;patterns/api-design&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;systems/distributed-systems&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;systems/architectural-patterns&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;patterns/database&#x22;},{&#x22;source&#x22;:&#x22;patterns/backend&#x22;,&#x22;target&#x22;:&#x22;patterns/error-handling&#x22;},{&#x22;source&#x22;:&#x22;patterns/code-quality&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/code-quality&#x22;,&#x22;target&#x22;:&#x22;patterns/refactoring&#x22;},{&#x22;source&#x22;:&#x22;patterns/code-quality&#x22;,&#x22;target&#x22;:&#x22;concepts/deep-modules&#x22;},{&#x22;source&#x22;:&#x22;patterns/concurrency&#x22;,&#x22;target&#x22;:&#x22;systems/distributed-systems&#x22;},{&#x22;source&#x22;:&#x22;patterns/concurrency&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;patterns/concurrency&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/database&#x22;,&#x22;target&#x22;:&#x22;systems/data-modeling&#x22;},{&#x22;source&#x22;:&#x22;patterns/database&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;patterns/database&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-creational&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-structural&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-creational&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-creational&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-structural&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-creational&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-structural&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-structural&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-creational&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-structural&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;},{&#x22;source&#x22;:&#x22;patterns/design-patterns-structural&#x22;,&#x22;target&#x22;:&#x22;concepts/deep-modules&#x22;},{&#x22;source&#x22;:&#x22;patterns/error-handling&#x22;,&#x22;target&#x22;:&#x22;concepts/error-budget&#x22;},{&#x22;source&#x22;:&#x22;patterns/error-handling&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#x22;},{&#x22;source&#x22;:&#x22;patterns/error-handling&#x22;,&#x22;target&#x22;:&#x22;patterns/api-design&#x22;},{&#x22;source&#x22;:&#x22;patterns/error-handling&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/frontend&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;},{&#x22;source&#x22;:&#x22;patterns/frontend&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-structural&#x22;},{&#x22;source&#x22;:&#x22;patterns/frontend&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/principles&#x22;,&#x22;target&#x22;:&#x22;concepts/deep-modules&#x22;},{&#x22;source&#x22;:&#x22;patterns/principles&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-behavioral&#x22;},{&#x22;source&#x22;:&#x22;patterns/principles&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-structural&#x22;},{&#x22;source&#x22;:&#x22;patterns/principles&#x22;,&#x22;target&#x22;:&#x22;patterns/code-quality&#x22;},{&#x22;source&#x22;:&#x22;patterns/principles&#x22;,&#x22;target&#x22;:&#x22;patterns/refactoring&#x22;},{&#x22;source&#x22;:&#x22;patterns/refactoring&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;patterns/refactoring&#x22;,&#x22;target&#x22;:&#x22;patterns/code-quality&#x22;},{&#x22;source&#x22;:&#x22;patterns/refactoring&#x22;,&#x22;target&#x22;:&#x22;patterns/design-patterns-behavioral&#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/context-engineering&#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/context-degradation&#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/agent-teams&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;concepts/verification-pipeline&#x22;},{&#x22;source&#x22;:&#x22;systems/ai-ml&#x22;,&#x22;target&#x22;:&#x22;systems/data-modeling&#x22;},{&#x22;source&#x22;:&#x22;systems/architectural-patterns&#x22;,&#x22;target&#x22;:&#x22;systems/distributed-systems&#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;systems/system-design-process&#x22;},{&#x22;source&#x22;:&#x22;systems/architectural-patterns&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;systems/data-modeling&#x22;,&#x22;target&#x22;:&#x22;systems/architectural-patterns&#x22;},{&#x22;source&#x22;:&#x22;systems/data-modeling&#x22;,&#x22;target&#x22;:&#x22;patterns/database&#x22;},{&#x22;source&#x22;:&#x22;systems/data-modeling&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;systems/distributed-systems&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;systems/distributed-systems&#x22;,&#x22;target&#x22;:&#x22;systems/architectural-patterns&#x22;},{&#x22;source&#x22;:&#x22;systems/distributed-systems&#x22;,&#x22;target&#x22;:&#x22;patterns/concurrency&#x22;},{&#x22;source&#x22;:&#x22;systems/distributed-systems&#x22;,&#x22;target&#x22;:&#x22;concepts/error-budget&#x22;},{&#x22;source&#x22;:&#x22;systems/distributed-systems&#x22;,&#x22;target&#x22;:&#x22;concepts/self-healing-loop&#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;systems/distributed-systems&#x22;},{&#x22;source&#x22;:&#x22;systems/scalability-reliability&#x22;,&#x22;target&#x22;:&#x22;patterns/database&#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;systems/system-design-process&#x22;,&#x22;target&#x22;:&#x22;systems/scalability-reliability&#x22;},{&#x22;source&#x22;:&#x22;systems/system-design-process&#x22;,&#x22;target&#x22;:&#x22;systems/architectural-patterns&#x22;},{&#x22;source&#x22;:&#x22;systems/system-design-process&#x22;,&#x22;target&#x22;:&#x22;systems/distributed-systems&#x22;},{&#x22;source&#x22;:&#x22;systems/system-design-process&#x22;,&#x22;target&#x22;:&#x22;patterns/api-design&#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/agent-teams&#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;entities/opencode&#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/opencode&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-harness&#x22;},{&#x22;source&#x22;:&#x22;entities/pi-agent&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;entities/opencode&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;entities/pi-agent&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;concepts/ai-specific-pitfalls&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;patterns/principles&#x22;},{&#x22;source&#x22;:&#x22;entities/ponytail&#x22;,&#x22;target&#x22;:&#x22;concepts/agent-skills&#x22;}],CUR=&#x22;patterns/database&#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"}}
/>
