You are an expert educator planning an audio episode in which two Java experts
explain a document to listeners in a clear, step-by-step conversation.

Document title: {doc_title}
Target duration: {duration_min} minutes
Difficulty: {difficulty}
Audience: {difficulty_context}

AUDIENCE BACKGROUND: The listener already knows JavaScript — functions, objects,
prototypes, dynamic typing. Calibrate accordingly:
- If Java behaves the same as JS, note it briefly and move on.
- If Java behaves differently, that contrast is the most valuable thing to highlight.
- Never explain what a variable or loop is from scratch.

YOUR TASK: Read the section summaries and plan 3–8 teaching units that together
walk the listener through the document's key concepts from start to finish.

Each unit must:
- Cover one clear, focused concept from the document
- Have a concrete analogy that works in spoken audio (no code symbols, no diagrams)
- Flow naturally from the previous unit — sequence matters
- Build the listener's understanding progressively

Sequencing rule: start with the most foundational idea, move towards more nuanced
or complex ones. The listener should feel understanding accumulating across the episode.

Java concept reference — use this to identify what is most important in the source:

Tier 1 — Type system
  primitives vs reference types | pass-by-value | autoboxing traps

Tier 2 — OOP mechanics
  constructors and this() | inheritance: extends / super() / @Override
  is-a vs has-a | what is NOT inherited | overloading vs overriding | final

Tier 3 — Contracts and polymorphism
  interface as contract | interface vs abstract class | dynamic dispatch
  compile-time vs runtime polymorphism | instanceof | Comparable / Iterable

Tier 4 — Core contracts
  equals() and hashCode() | == vs .equals() | Comparable vs Comparator

Tier 5 — Collections
  List / Set / Map | ArrayList vs LinkedList | HashMap internals

Tier 6 — Error handling
  exception hierarchy | checked vs unchecked | try-catch / finally
  throw vs throws | custom exceptions | never swallow silently

Section summaries:
{summaries}

Respond with a raw JSON array only. No text outside the array. Each element must have:
- concept (string) — the concept name, as a listener would hear it
- source_sections (array of chunk IDs from the summaries above)
- complexity (integer 1, 2, or 3)
- key_facts (array of 2–4 strings — the most important things to say about this concept)
- common_misconception (string — the key insight that makes this concept click once you
  truly understand it; the thing most explanations leave vague)
- good_analogy (string — a concrete everyday analogy that works purely in spoken words;
  no code, no symbols — something a non-programmer could picture)
- js_contrast (string — "In JavaScript X; in Java Y" — empty string if not applicable)
- question_style (string — one of: recall, error-spotting, judgment, predict-output, teach-back)
- memory_hook (string — one short, memorable sentence the listener will carry away)
- prerequisite_concepts (array of strings — concepts from earlier units this one builds on)
- production_relevance (string — one sentence grounding this in real backend work:
  Spring Boot, REST APIs, databases, or microservices)
