---
name: multi-agent-tournament-scorecard
description: 'Use when agent strategies need a reproducible finite tournament under a frozen evaluation protocol. Not for open-ended or infinite matchups: use a continuous benchmark.'
---

# Multi-agent tournament scorecard

## Contract

| Field | Bound contract |
|---|---|
| Trigger | Agent strategies need a reproducible finite tournament under a frozen evaluation protocol. |
| Authority | Reversible local writes only. Run records and receipts under `.outline/loops/`; rollback is deletion. No VCS, credential, paid, published, deployed, or remote mutation. |
| Side effect | A reproducible tournament scorecard persisted as a run record. |
| Done | The fixed matrix completes with saved move records, scores, and hidden-identity validation. |

## Inputs

- Matchup matrix (required): the explicit finite set of agent pairings and rounds, frozen before the tournament begins.
- Evaluation protocol (required): the frozen rules that govern each matchup: move validation, scoring, and identity disclosure.
- Agent strategies (required): the strategies under test, each identified and version-pinned.

## Procedure

1. Bind the declared matchup matrix and freeze it before any run. Done when: the matrix is recorded in writing and no matchup has been executed yet.
2. Execute the tournament inside the bound: run each matchup in the frozen matrix, record every move, and compute scores per the evaluation protocol. Done when: every matchup in the matrix has a recorded outcome or a non-success terminal applies.
3. Stop at the first of: matrix complete (`success`), a non-success terminal (`stalled` for an incomplete matchup, `blocked` for an invalid run or hidden-identity mismatch, `exhausted` for budget exhaustion), or budget exhausted. Budget exhaustion is never success unless it was the predeclared success predicate. Done when: exactly one terminal class is selected and recorded.
4. Validate hidden-identity assignments: confirm each assignment is consistent across the matrix and no identity leaked before disclosure. Done when: every identity assignment is verified or the mismatch is named.
5. Persist the result: write the run record to `.outline/loops/<slug>/<run_id>/` when durable, and emit `receipt.json` before returning. Done when: the receipt file exists and contains every required field.

## Failure and recovery

- Incomplete matchup: a matchup in the matrix did not finish. Terminal `stalled`. Name the matchup and the stopping reason.
- Invalid run: the evaluation protocol was violated during a matchup. Terminal `blocked`. Name the violation and the affected matchup.
- Budget exhausted before matrix completes: terminal `exhausted`. Report the matchups completed and the remainder. Do not claim success.
- Hidden-identity mismatch: an identity assignment is inconsistent or leaked. Terminal `blocked`. Name the mismatch; do not publish the scorecard.

## Output

A tournament scorecard: terminal class (success, stalled, blocked, exhausted), completed matchups, move records, scores, identity validation, and the receipt path, ordered by the procedure steps that produced them.
