# Compound Docs

Searchable Elixir/Phoenix/Ecto solution documentation system with YAML frontmatter.

- Repository: https://github.com/oliver-kriska/claude-elixir-phoenix (572 stars)
- Category: Writing
- License: MIT
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add oliver-kriska/claude-elixir-phoenix --skill compound-docs -g -a claude-code -y`
Codex: `npx skills add oliver-kriska/claude-elixir-phoenix --skill compound-docs -g -a codex -y`
Cursor: `npx skills add oliver-kriska/claude-elixir-phoenix --skill compound-docs -g -a cursor -y`
Gemini CLI: `npx skills add oliver-kriska/claude-elixir-phoenix --skill compound-docs -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add oliver-kriska/claude-elixir-phoenix`

## Description

Searchable Elixir/Phoenix/Ecto solution documentation system with YAML frontmatter. Builds institutional knowledge from solved problems. Use when consulting past solutions before investigating new issues.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Compound Docs, Institutional Knowledge Base

Searchable, categorized solution documentation that makes each
debugging session easier than the last.

## Directory Structure

```
.claude/solutions/
├── ecto-issues/
├── liveview-issues/
├── oban-issues/
├── otp-issues/
├── security-issues/
├── testing-issues/
├── phoenix-issues/
├── deployment-issues/
├── performance-issues/
└── build-issues/
```

## Iron Laws

1. **ALWAYS search solutions before investigating**, Check
   `.claude/solutions/` for existing fixes before debugging
2. **YAML frontmatter is MANDATORY**, Every solution needs
   validated metadata per `${CLAUDE_SKILL_DIR}/references/schema.md`
3. **One problem per file**, Never combine multiple solutions
4. **Include prevention**, Every solution documents how to
   prevent recurrence

## Solution File Format

```markdown
---
module: "Accounts"
date: "2025-12-01"
problem_type: runtime_error
component: ecto_schema
symptoms:
  - "Ecto.Association.NotLoaded on user.posts"
root_cause: missing_preload
severity: medium
tags: [preload, association, n-plus-one]
---

# Association NotLoaded on User Posts

## Symptoms
Ecto.Association.NotLoaded raised when accessing user.posts
in UserListLive after filtering.

## Root Cause
Query in Accounts context missing preload for :posts.

## Solution
Added `Repo.preload(:posts)` to `list_users/1`.

## Prevention
Use n1-check skill before shipping list views.
```

## Searching Solutions

Use Grep to search `.claude/solutions/` by symptom (e.g., `NotLoaded`), by tag (e.g., `tags:.*preload`), or by component (e.g., `component: ecto`).

## Integration

- `/phx:compound` creates solution docs here
- `/phx:investigate` searches here before debugging
- `/phx:plan` consults for known risks
- `learn-from-fix` feeds into this system

## References

- `${CLAUDE_SKILL_DIR}/references/schema.md`, YAML frontmatter validation schema
- `${CLAUDE_SKILL_DIR}/references/resolution-template.md`, Full solution template

