Jede Branch-Variable in `BRANCHES.sh` hat eine entsprechende `__ROOT`-Variable, die den Rebase-Elternbranch definiert — eine gerichtete Abhängigkeitskette von Übungen.
+### Branch-Hierarchie (vollständige ROOT-Tabelle)
+
+**Vor jedem Rebase den ROOT aus dieser Tabelle nachschlagen** — nicht raten, denn einige ROOTs sind nicht intuitiv (z.B. hat `springkafka/spring-consumer--kafkalistener` den ROOT `consumer/spring-consumer`, nicht `springkafka/supersimple-consumer`).
+
+Vier Branches sind in `BRANCHES.sh` definiert, aber **nicht** in der `$BRANCHES`-Iterationsliste (werden von Skripten übersprungen): `config/flawed-setup--zookeeper`, `springkafka/technik-check--vorlage`, `springkafka/supersimple-producer--vorlage`, `consumer/spring-consumer--assign--vorlage`.
+
+| Branch | ROOT |
+|--------|------|
+| `config/flawed-setup--zookeeper` | `grundlagen/docker` |
+| `consumer/nodlt` | `consumer/spring-consumer` |
+| `consumer/simple-consumer--megagroup--vorlage` | `grundlagen/simple-consumer` |
+| `consumer/spring-consumer` | `grundlagen/simple-consumer` |
+| `consumer/spring-consumer--assign` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--assign--vorlage` | `consumer/spring-consumer--assign` |
+| `consumer/spring-consumer--deserialization-error` | `consumer/spring-consumer--long` |
+| `consumer/spring-consumer--deserialization-error--vorlage` | `consumer/spring-consumer--deserialization-error` |
+| `consumer/spring-consumer--error-handling` | `consumer/spring-consumer--record-handler` |
+| `consumer/spring-consumer--generics` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--health-indicator` | `consumer/spring-consumer--record-handler` |
+| `consumer/spring-consumer--livecoding` | `grundlagen/simple-consumer` |
+| `consumer/spring-consumer--livecoding--schritte` | `consumer/spring-consumer--livecoding` |
+| `consumer/spring-consumer--log-compaction` | `consumer/spring-consumer--rebalance-listener` |
+| `consumer/spring-consumer--logic-error` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--logic-error--vorlage` | `consumer/spring-consumer--logic-error` |
+| `consumer/spring-consumer--long` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--rebalance-listener` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--rebalance-listener--vorlage` | `consumer/spring-consumer--rebalance-listener` |
+| `consumer/spring-consumer--record-handler` | `consumer/spring-consumer--generics` |
+| `consumer/spring-consumer--seek` | `consumer/spring-consumer` |
+| `consumer/spring-consumer--seek--vorlage` | `consumer/spring-consumer--seek` |
+| `consumer/spring-consumer--vorlage` | `consumer/spring-consumer` |
+| `grundlagen/docker` | *(Wurzel, ROOT = sich selbst)* |
+| `grundlagen/simple-consumer` | `grundlagen/simple-producer` |
+| `grundlagen/simple-consumer--image--vorlage` | `grundlagen/simple-consumer` |
+| `grundlagen/simple-consumer--livecoding` | `grundlagen/simple-consumer` |
+| `grundlagen/simple-consumer--livecoding--schritte` | `grundlagen/simple-consumer--livecoding` |
+| `grundlagen/simple-consumer--vorlage` | `grundlagen/simple-consumer` |
+| `grundlagen/simple-producer` | `grundlagen/docker` |
+| `grundlagen/simple-producer--completablefuture` | `grundlagen/simple-producer` |
+| `grundlagen/simple-producer--fire+forget--vorlage` | `grundlagen/simple-producer--image--vorlage` |
+| `grundlagen/simple-producer--image--vorlage` | `grundlagen/simple-producer` |
+| `grundlagen/simple-producer--livecoding` | `grundlagen/simple-producer` |
+| `grundlagen/simple-producer--livecoding--schritte` | `grundlagen/simple-producer--livecoding` |
+| `grundlagen/simple-producer--vorlage` | `grundlagen/simple-producer` |
+| `producer/batch-size--vorlage` | `grundlagen/docker` |
+| `producer/rest-producer` | `producer/spring-producer` |
+| `producer/simple-producer--auditheaders` | `grundlagen/simple-producer` |
+| `producer/simple-producer--delivery-timeout` | `grundlagen/simple-producer` |
+| `producer/spring-producer` | `grundlagen/simple-producer` |
+| `producer/spring-producer--auditheaders` | `producer/spring-producer--backpressure` |
+| `producer/spring-producer--auditheaders--vorlage` | `producer/spring-producer--auditheaders` |
+| `producer/spring-producer--backpressure` | `producer/spring-producer--delivery-timeout` |
+| `producer/spring-producer--backpressure--vorlage` | `producer/spring-producer--backpressure` |
+| `producer/spring-producer--delivery-timeout` | `producer/spring-producer` |
+| `producer/spring-producer--delivery-timeout--vorlage` | `producer/spring-producer--delivery-timeout` |
+| `producer/spring-producer--fixedsharding` | `producer/spring-producer` |
+| `producer/spring-producer--fixedsharding--vorlage` | `producer/spring-producer--fixedsharding` |
+| `producer/spring-producer--generics` | `producer/spring-producer` |
+| `producer/spring-producer--vorlage` | `producer/spring-producer` |
+| `springkafka/spring-consumer--json` | `consumer/spring-consumer` |
+| `springkafka/spring-consumer--json--messages` | `springkafka/spring-consumer--json` |
+| `springkafka/spring-consumer--json--messages--vorlage` | `springkafka/spring-consumer--json--messages` |
+| `springkafka/spring-consumer--json--vorlage` | `springkafka/spring-consumer--json` |
+| `springkafka/spring-consumer--kafkahandler` | `springkafka/spring-consumer--json` |
+| `springkafka/spring-consumer--kafkalistener` | `consumer/spring-consumer` ⚠️ *(nicht supersimple-consumer!)* |
+| `springkafka/spring-consumer--kafkalistener--concurrency` | `springkafka/spring-consumer--kafkalistener` |
+| `springkafka/spring-consumer--kafkalistener--logic-error` | `springkafka/spring-consumer--kafkalistener` |
+| `springkafka/spring-consumer--kafkalistener--long` | `springkafka/spring-consumer--kafkalistener` |
+| `springkafka/spring-consumer--kafkalistener--long--deserialization-error` | `springkafka/spring-consumer--kafkalistener--long` |
+| `springkafka/spring-consumer--kafkalistener--long--dlt` | `springkafka/spring-consumer--kafkalistener--long--deserialization-error` |
+| `springkafka/spring-consumer--messageconverter` | `springkafka/spring-consumer--kafkahandler` |
+| `springkafka/spring-consumer--messageconverter--dlt` | `springkafka/spring-consumer--messageconverter` |
+| `springkafka/spring-producer` | `producer/spring-producer` |
+| `springkafka/spring-producer--json` | `springkafka/spring-producer` |
+| `springkafka/spring-producer--json--messages` | `springkafka/spring-producer--json` |
+| `springkafka/spring-producer--json--messages--vorlage` | `springkafka/spring-producer--json--messages` |
+| `springkafka/spring-producer--json--vorlage` | `springkafka/spring-producer--json` |
+| `springkafka/spring-producer--kafkatemplate` | `springkafka/spring-producer` |
+| `springkafka/spring-producer--kafkatemplate--vorlage` | `springkafka/spring-producer--kafkatemplate` |
+| `springkafka/spring-producer--livecoding` | `producer/spring-producer` |
+| `springkafka/spring-producer--livecoding--schritte` | `springkafka/spring-producer--livecoding` |
+| `springkafka/spring-producer--long` | `springkafka/spring-producer` |
+| `springkafka/spring-producer--long--vorlage` | `springkafka/spring-producer--long` |
+| `springkafka/spring-producer--messageconverter` | `springkafka/spring-producer--json` |
+| `springkafka/sumup-messages--vorlage` | `springkafka/spring-consumer--json` |
+| `springkafka/supersimple-consumer` | `consumer/spring-consumer` |
+| `springkafka/supersimple-consumer--vorlage` | `springkafka/supersimple-consumer` |
+| `springkafka/supersimple-producer` | `producer/spring-producer` |
+| `springkafka/supersimple-producer--vorlage` | `springkafka/supersimple-producer` |
+| `springkafka/technik-check--vorlage` | `springkafka/spring-producer--kafkatemplate` |
+
## Technische Übergänge zwischen den Übungsgruppen
Gemeinsame Aspekte aller Übungsgruppen: