# Format Registry

> Formats are self-contained directory packages. A format exists if `formats/{name}/FORMAT.md` exists.
> Projects declare their format in `project_config.json` → `"format": "kill_box"`.

## Available Formats

| Format | Duration | Episodes | Status | Description |
|--------|----------|----------|--------|-------------|
| `kill_box` | 90s | 61 | Production-ready | V12 action format. 5-beat Kill Box structure. Pulp velocity. |
| `kill_box_micro` | 30s | 16 | Draft | 30-second Kill Box adaptation. CONSEQUENCE → PIVOT → FREEZE. |
| `puzzle_box` | 30s | 16 | In development | Mood/mystery format. ENTRY IMAGE → VOICE → LINGER. Atmospheric. |

## Format Directory Structure

Each format directory must contain:

```
formats/{name}/
  FORMAT.md       # Complete format specification (loaded into LLM context)
  CONSTANTS.md    # Numeric values (parsed by engine_constants.py)
  CONTEXT.md      # Declares what files to load per pipeline mode
  validate.py     # Format-specific episode and batch validation
  examples/       # Gold-standard episode examples for few-shot prompting
```

## Adding a New Format

1. Create `formats/{name}/` with all required files
2. No engine code changes needed — discovery is convention-based
3. Point a project at it: `"format": "{name}"` in project_config.json
4. Run `/develop` to validate the project against the new format

## Format Selection Flow

```
project_config.json → "format": "puzzle_box"
  → engine_constants.py reads formats/puzzle_box/CONSTANTS.md
  → /load-context reads formats/puzzle_box/CONTEXT.md
  → batch_agent loads formats/puzzle_box/FORMAT.md
  → validate_episode.py dispatches to formats/puzzle_box/validate.py
```
