# Dual-lock promotion queue

Auto-generated by `tools/dual_lock_queue.py`. Do not hand-edit.

Regenerate: `python packages/hatchi-maxchi/tools/dual_lock_queue.py --write`

Consumed by: `/improve hm-convergence` → strategy `dual_lock_expand`.

## How to run a cycle

1. `python packages/hatchi-maxchi/tools/dual_lock_queue.py --top 5`
2. Pick the **lowest priority** row that is not BLOCKED (prefer `emitter_uncontracted` / `contract_none` with emitters).
3. Follow `.claude/commands/improve/strategies/dual_lock_expand.md`.
4. Ship with Tier 0; re-run this tool — the promoted stem must leave the queue.

| # | stem | kind | pri | dual-lock | contract | css | gallery | emitters | action |
|--:|------|------|----:|-----------|:--------:|:---:|:-------:|----------|--------|

## Kind legend

| kind | meaning |
|------|---------|
| `contract_none` | `contracts/<stem>.py` exists, not dual-locked |
| `schema_promote` | DOM-only contract already has a Pydantic model |
| `emitter_uncontracted` | FragmentRenderer `_emit_*` ready, no contract |
| `gallery_uncontracted` | Registry Hyperpart without `contracts=` |

**Queue depth:** 0 candidates (showing 0).
