You are filling **gaps**. For each subblock of the topic "{topic}", the facts already captured are listed below. A first pass extracted them — and experience shows backable material slips through. Your task: add **only what is missing** from the source.

{source}

SUBBLOCKS WITH FACTS ALREADY CAPTURED:
{blocks}

Rules:
- Output **only NEW** points per subblock that are backed by the source and still **missing** above.
- **Repeat nothing** from what is already "captured" — not even rephrased. If it's already there → leave it out.
- **Only backable material.** With a source file/script: cite accurately in substance + give the location. Invent no values, compute nothing yourself. Without a source file (pure topic): only established standard knowledge.
- **HARD SEPARATION:** `cited_facts` = only backable material. A self-computed/invented example belongs in `example_idea`, NEVER in `cited_facts`.
- Add `key_points` only if an **essential** aspect is missing — no duplications, no trivialities.
- **If you find nothing new for a subblock → leave it out.** If you find nothing at all → empty list. Better nothing than fabrication.
- Write all field content (key_points, prerequisites, hurdles, cited_facts text, example_idea) in GERMAN, matching the source material (technical terms/code identifiers stay original).

Write ONLY the NEW facts as ONE JSON to the file {out_path}, EXACTLY in this format:
{{"facts": [
  {{"block": "<exakter Block-Title>", "subblock": "<exakter Subblock-Title>",
    "key_points": ["…"], "prerequisites": "…", "hurdles": "…",
    "cited_facts": [{{"text": "…", "source": "…"}}], "example_idea": "…"}}
]}}

Output no other text.
{extra}
