# RFC 0050: Graduated Panel Rotation

| | |
|---|---|
| **Status** | Draft |
| **Date** | 2026-02-01 |
| **ADRs** | 0014 (Alignment Dialogue Agents) |
| **Extends** | RFC 0048 (Alignment Expert Pools) |

---

## Summary

The current alignment dialogue system samples a fixed panel from the expert pool for Round 0 and uses **the same panel for all rounds**. This wastes the larger pool and misses opportunities for fresh perspectives. This RFC introduces **graduated panel rotation**: the Judge evolves the panel each round based on dialogue dynamics, with freedom to retain high performers, bring in fresh perspectives, and even create new experts to address emerging tensions.

## Problem

In the NVIDIA Investment Decision dialogue:
- **Pool size**: 22 experts across Core/Adjacent/Wildcard tiers
- **Panel size**: 12 experts
- **Actual behavior**: Same 12 experts for all 3 rounds
- **Expected behavior**: Panel evolves based on dialogue needs

The dialogue converged with contributions from Strudel (Automotive Tech Analyst) and Brioche (Options Strategist). But 10 experts in the pool **never participated**: Value Analyst, Data Center Specialist, Supply Chain Analyst, ESG Analyst, Quant Strategist, Behavioral Finance Expert, Energy Sector Analyst, Retail Investor Advocate, Regulatory Expert, and Gaming Industry Analyst.

Worse: when a tension emerged around regulatory risk, there was no mechanism to pull in the Regulatory Expert specifically to address it.

## Design

### Judge-Driven Panel Evolution

Instead of algorithmic rotation with fixed parameters, the **Judge decides** how to evolve the panel each round. The MCP server provides infrastructure; the Judge provides judgment.

### Rotation Mode: `graduated`

```json
{
  "rotation": "graduated"
}
```

That's it. No `rotation_config`. The Judge receives guidelines in the skill prompt.

### Judge Guidelines (in alignment-play skill)

The skill prompt instructs the Judge on panel evolution principles:

```markdown
## Panel Evolution Guidelines

Between rounds, you decide how to evolve the panel. Consider:

### Retention Criteria
- **High scorers**: Experts who contributed sharp insights should continue
- **Unresolved advocates**: Experts defending positions with open tensions
- **Core relevance**: Experts central to the domain should anchor continuity

### Fresh Perspective Triggers
- **Stale consensus**: If the panel is converging too easily, bring challengers
- **Unexplored angles**: Pull in experts whose focus hasn't been represented
- **Low-scoring experts**: Consider rotating out experts who aren't contributing

### Targeted Expert Injection
When a specific tension emerges that no current expert can address:
1. Check if the pool has a relevant expert → pull them in
2. If not, **create a new expert** with the needed focus

Example: Tension T03 raises supply chain concentration risk, but no Supply Chain
Analyst is on the panel. Either pull from pool or create:
```json
{ "role": "Supply Chain Analyst", "tier": "adjacent", "focus": "Geographic concentration, single-source risk" }
```

### Panel Size Flexibility
- Target panel size is a guideline, not a constraint
- You may run a smaller panel if the dialogue is converging
- You may expand briefly to address a complex tension

### Expert Creation
You are not limited to the initial pool. If the dialogue surfaces a perspective
that no pooled expert covers, create one. The pool was your starting point,
not your ceiling.
```

### MCP Server Role

The server provides:
1. **Panel tracking**: Record which experts participated in which rounds
2. **Context briefs**: Generate summaries for fresh experts joining mid-dialogue
3. **Expert registry**: Accept new experts created by the Judge
4. **History persistence**: Store panel evolution for post-hoc analysis

The server does **not**:
- Decide which experts to retain
- Calculate overlap ratios
- Enforce tier-based rules

### API

#### `blue_dialogue_round_prompt`

When the Judge requests the next round, they specify the panel:

```json
{
  "round": 1,
  "panel": [
    { "name": "Muffin", "role": "Value Analyst", "retained": true },
    { "name": "Scone", "role": "Data Center Specialist", "source": "pool" },
    { "name": "Palmier", "role": "Supply Chain Risk Analyst", "source": "created", "focus": "Geographic concentration" }
  ]
}
```

The server:
- Validates expert names are unique
- Generates context briefs for non-retained experts
- Records the panel composition
- Returns prompts for each expert

#### Response

```json
{
  "round": 1,
  "panel_size": 12,
  "retained": 6,
  "from_pool": 5,
  "created": 1,
  "context_brief": "## Round 0 Summary\n...",
  "expert_prompts": [...]
}
```

### Persistence

```
{output_dir}/
├── expert-pool.json          # Initial pool (Judge's starting point)
├── round-0/
│   └── panel.json            # { "experts": [...] }
├── round-1/
│   └── panel.json            # { "experts": [...], "retained": [...], "fresh": [...], "created": [...] }
└── round-2/
    └── panel.json
```

## Dialogue Continuity

Fresh experts (from pool or created) receive a context brief:

```markdown
## Context for Round 1

You are joining this dialogue in Round 1. Here's what happened:

### Key Tensions Raised (Round 0)
- T01: Growth mandate vs. valuation discipline
- T02: Hedging income vs. conviction allocation

### Current Panel Position (Round 0)
- 10 experts: Don't Add
- 1 expert (Brioche): Options Reframe
- 1 expert (Strudel): Automotive Differentiation

### Your Task
Review these positions and contribute your perspective as {role}.
```

## Example: 3-Round Dialogue with Targeted Injection

**Initial Pool**: 22 experts
**Round 0 Panel**: 12 sampled experts

```
Round 0:
├── Panel deliberates
├── Tension T03 emerges: "What about Taiwan concentration risk?"
└── No Supply Chain expert on panel

Judge decision for Round 1:
├── Retain: 7 experts (high scorers + tension advocates)
├── Rotate out: 5 experts (low contribution)
├── Pull from pool: 4 experts including Supply Chain Analyst
├── Create: 1 new expert "Geopolitical Risk Analyst" (not in original pool)
└── New panel size: 12

Round 1:
├── Supply Chain Analyst addresses T03 directly
├── Geopolitical Risk Analyst adds Taiwan Strait context
├── T03 marked [RESOLVED] with synthesis
└── New tension T04 emerges around AI chip export controls

Judge decision for Round 2:
├── Retain: 8 experts (T04 is complex, needs continuity)
├── Pull from pool: 2 experts
├── Create: "Export Control Specialist" for T04
└── Smaller panel: 11 (dialogue converging)
```

**Result**:
- 18 of 22 pool experts participated
- 2 experts created on-demand
- All tensions addressed by relevant expertise

## Comparison to Current Modes

| Aspect | `none` | `wildcards` | `full` | `graduated` (new) |
|--------|--------|-------------|--------|-------------------|
| Pool utilization | ~50% | ~65% | 100% | High (Judge discretion) |
| Dialogue continuity | High | High | Low | High (retained experts) |
| Fresh perspectives | None | Some | All | As needed |
| Targeted expertise | No | No | No | **Yes** |
| Expert creation | No | No | No | **Yes** |
| Configurable | No | No | No | Via guidelines |

## Implementation

### Changes to `dialogue.rs`

1. Accept `panel` specification in `round_prompt` request
2. Track expert sources: `retained`, `pool`, `created`
3. Generate context briefs for non-retained experts
4. Persist panel history per round

### Changes to `alignment-play` skill

Add Judge guidelines for panel evolution (see above).

### No New Config Structs

The Judge's judgment replaces configuration. The server just records what the Judge decides.

## Test Plan

- [ ] Judge can specify panel composition in round prompt
- [ ] Fresh experts receive context briefs
- [ ] Created experts are registered and tracked
- [ ] Panel history persists across rounds
- [ ] Backward compatibility: `rotation: "none"` still works

## Philosophy

> "The Judge sees the elephant. The Judge summons the right blind men. And when a new part of the elephant emerges, the Judge can summon someone who wasn't in the original room."

The pool is a starting point, not a constraint. The Judge's job is to ensure every relevant perspective touches the elephant. Sometimes that means pulling from the pool. Sometimes that means creating a new expert on the spot.

This is ALIGNMENT by design: **responsive expertise** rather than **fixed sampling**.

---

*"The elephant is larger than we thought. Let me get someone who knows about tusks."*

— The Judge

