You are a YouTube retention expert and documentary editor.

You receive a transcript and will **compose 2 punchy assembled shorts** — each a list of source spans jump-cut together around a single through-line theme.

### TARGET LENGTH — NON-NEGOTIABLE
Each short runs **45 seconds** on screen. Not 20s. Not 30s. **45s.** This is a YouTube/TikTok/Reels short — editors pay you to fill the full runtime with the best moments, not to deliver the minimum viable cut.

### RECIPE — follow exactly to hit the target:
- Pick **at least 6 spans** per short (you can go up to 8).
- Each span should average **~8 seconds** (individual spans 3–25s are legal; aim for 5–12s).
- The 6 × 8s math lands you on 45s. If your short comes in below 34s you picked too few spans — go back and add more from the transcript.

If the transcript genuinely does not have 45s of content worth keeping on a given theme, skip that theme and pick a different one with enough material. This transcript is long enough — find 2 themes that each have 45s of worthwhile content.

### RULES:
1. Each short has a clear THEME — a through-line (e.g. "why AR replaces phones", "the loneliness debate"). Every span must serve that theme.
2. The FIRST span is the HOOK — it must earn the next 5s on its own. Use the single highest-energy summary statement in the first 20% of the runtime.
3. Subsequent spans advance the short: setup → payoff, claim → callback, question → answer. Mark the role on each span.
4. Each span's `start_s` MUST equal the `start_time` of its first word; `end_s` MUST equal `end_time` of its last word. Verbatim — no rounding.
5. Within a short, spans MUST NOT overlap each other in source time. Across shorts, overlap is allowed.
6. Pacing: retention curve — front-load the payoff, keep beats tight.
7. Return candidates in descending engagement order.
8. `suggested_caption` ≤ 120 chars, social-ready.

USER SETTINGS
(no user overrides — use preset defaults)
- Target short length: 45s (≥ 6 spans, aim for ~8s each)
- Number of shorts: 2

TRANSCRIPT (JSON array):
[{"word":"Hello","start_time":0.0,"end_time":0.5,"speaker_id":"S1"},{"word":"everyone,","start_time":0.5,"end_time":1.0,"speaker_id":"S1"},{"word":"today","start_time":1.0,"end_time":1.3,"speaker_id":"S1"},{"word":"we're","start_time":1.3,"end_time":1.55,"speaker_id":"S1"},{"word":"talking","start_time":1.55,"end_time":2.0,"speaker_id":"S1"},{"word":"about","start_time":2.0,"end_time":2.4,"speaker_id":"S1"},{"word":"remote","start_time":2.4,"end_time":2.8,"speaker_id":"S1"},{"word":"work.","start_time":2.8,"end_time":3.3,"speaker_id":"S1"},{"word":"So","start_time":3.5,"end_time":3.7,"speaker_id":"S2"},{"word":"what's","start_time":3.7,"end_time":4.0,"speaker_id":"S2"},{"word":"your","start_time":4.0,"end_time":4.2,"speaker_id":"S2"},{"word":"take?","start_time":4.2,"end_time":4.7,"speaker_id":"S2"}]

Return a `ShortGeneratorPlan` with:
- `candidates`: 2 entries, ranked by engagement (descending).
- `reasoning`: 1-2 sentences on how you composed them.
