# SPEC-D — `program_delivery` ## Steuerungsmethode — Spec-Tiefe D v0.1 **Status:** vorläufig freigegeben (PO 2026-07-26) — mit zugehöriger Archetyp-Vollspec; Implementierungsausreichendheit noch offen **Stand:** 2026-07-26 **Prozess:** `M1_Hybrid_Path_and_Depth_D_v0.1.md` **Quellen:** Decision-Lock B2a, `SPEC_B2a_program_v0.1.md`, Fit-Analyse, Ist-Code `ProgramDeliveryStrategy` (⚠ Gap) **OM/UI:** Archetyp-Vollspec B2a --- ## D1 Identität | Feld | Wert | |------|------| | `method_key` | `program_delivery` | | Rolle | primary (**Meta** — Kernel §6; kein Ausführungs-Leading der Kinder) | | Label (DE) | Programm-Lieferung / Programm-Controlling | | Zweck | Steuert den **Schirm** über Kind-Kontexte: Lagebild, Kreuz-Abhängigkeiten, Roadblocker, Priorisierungsimpulse, Programm-Horizont/Closure. **Ersetzt nicht** die Next Action der Kinder. | --- ## D2 Geltung | Feld | Wert | |------|------| | Default für | B2a `initiative.program` | | kompatibel | `initiative.program` | | nicht | als Default für A2-Einzelprojekt (dort `sequential_dependency`); nicht für dauerhaftes Product ohne Abschluss-Natur | --- ## D3 Horizon | Ebene | Horizont | |-------|----------| | **Programm-Plan** | übergreifende Zielzustände / Phasen-Meilensteine des Programms | | **Programm-Steuerung** | Menge der Kind-Kontexte + deren Blockade-/Fortschrittslage | | **Nicht** | Sprint der Kinder als Programm-Horizon (Kinder behalten eigene Modifier) | --- ## D4 Leading Work Item **Zielbild (Decision-Lock):** Leading Object auf Programmebene = **`ProgramImpulse`** (Priorisierungs-/Roadblocker-Empfehlung), **nicht** die konkrete Child-Action. | Objekt | Ebene | |--------|-------| | `ProgramImpulse` | Parent — „Kind X zuerst entblocken / Priorität verschieben“ | | Child Next Action (`Action` / …) | Kind-Methode — unverändert | **Ist-Code (Abweichung):** Strategy liefert heute ready **Actions am Programm-Initiative** + Gate-Reviews — als wäre das Programm ein flaches A2/B2. Das unterläuft Nested-Entscheidung. --- ## D5 Lifecycle-Pfad | Schritt | Status | Bedeutung Programm | |---------|--------|-------------------| | intake | active | Programmziel, Scope, Abschlussabsicht | | method_selection | active | Default `program_delivery` | | structure_setup | active | Programm-Meilensteine + **Kind-Kontexte** anbinden (Initiativen/Projects mit eigenem Archetyp/Methode) | | planning | active | übergeordnete Priorisierung / Reihenfolge der Kinder-Horizonte — nicht AP-Feinplanung der Kinder | | action_selection | **umgedeutet** | wählt **Impulse**, nicht Child-AP als „die“ Next Action des Programms | | assignment | skip/optional | selten auf Meta-Ebene; Arbeit liegt in Kindern | | waiting | active | auf Kind-Fortschritt / externe Programm-Lage | | result_intake | active | Kind-Statusänderungen, Programm-Meilenstein-Evidence | | validation | active | Programm-Gate/Meilenstein-Kriterien | | review | active | Programm-Reviews, Go/No-Go zwischen Phasen | | adaptation | active | Kinder umpriorisieren, Scope des Programms anpassen | | closure | active | **erwartet** — Programm hat Ende (≠ Product) | --- ## D6 Next Action / Impulse — konkrete Regeln (Zielbild) **Auf dem Programm-Kontext zeigt die Steuerung zwei getrennte Kanäle:** | Kanal | Inhalt | UI/API-Semantik | |-------|--------|-----------------| | **A — Child Next Actions** | unverändert von Kind-Methode | Scope = Kind; Programm listet/aggregiert höchstens | | **B — Program Impulse** | Empfehlung mit reason_code | Scope = Programm; **kein** Ersatz für A | **Impulse-Ranking (Ziel):** 1. Kreuz-Abhängigkeit / Roadblocker, der ≥2 Kinder oder Programm-Meilenstein blockiert 2. Kind auf kritischem Programm-Pfad ohne Fortschritt 3. Priorisierungsempfehlung (Portfolio-/Programm-Rang zwischen Kindern) 4. Programm-Meilenstein mit offenen Kriterien ohne zurechenbares Kind **reason_codes (Ziel):** `program_roadblocker`, `program_cross_dependency`, `program_child_stalled`, `program_priority_shift`, `program_milestone_risk` **Leerer Fall:** keine Impulse und Kinder ohne Attention → Programm-Lage „stabil“; trotzdem Child-NAs in Kindern sichtbar — Programm zeigt nicht „nichts zu tun“ indem es Child-APs als eigene NA ausgibt. **Verboten (Zielbild):** - Programm-`action_selection` gibt Child-Action als *die* Next Action des Programms aus und suggeriert, das Programm steuere die AP-Reihenfolge restriktiv wie A2 --- ## D7 Attention | Code (Ziel) | Wann | |-------------|------| | `program_roadblocker` | Blocker/Dep über Kinder hinweg | | `program_milestone_at_risk` | Programm-Gate gefährdet | | `program_child_stalled` | Kind ohne Fortschritt am kritischen Programm-Pfad | | `program_orphan_work` | Arbeit ohne Zuordnung zu Kind/Meilenstein | | `program_closure_ready` | alle Kinder/Meilensteine closure-fähig | --- ## D8 Events | Event | Wirkung | |-------|---------| | Kind Next Action / Statusänderung | Programm-Lage + Impulse neu | | Kreuz-Dep angelegt/gelöst | Impulse + Attention | | Programm-Meilenstein verify | Horizont | | Kind Archetyp/Methode gewechselt | Hybrid bleibt erlaubt; Impulse neu bewerten | | Kind closure | Programm-Closure-Prüfung | --- ## D9 Nested — Kernanker (Härtetest) ```text Program Context (method = program_delivery) ├── Impulse / Attention / Programm-Horizont / Closure └── Child Context 1 (eigene Methode, z. B. sequential_dependency) └── Child Context 2 (eigene Methode, z. B. continuous_product oder A2 Content) └── deren Next Action unverändert ``` **PO ✓ Decision-Lock:** konkrete Next Action auf Projektebene; Programm = übergeordnete Impulse. **Kern-Konsequenz:** Kandidat-Anker **D Nested Steering** und **polymorphes Work Item (`ProgramImpulse`)** sind für diese Methode **nicht optional**. --- ## D10 OM-Voraussetzungen | Minimal | Optional | |---------|----------| | Programm-Initiative + `program_delivery` | Programm-Backlog (Eingang) | | ≥1 Programm-Meilenstein/Phase | work_cycle nur wenn Modifier auf Kind oder explizit am Programm gewünscht | | ≥1 Kind-Kontext (Initiative oder Project mit eigenem Steering) | Kreuz-Deps als Graph-Kanten zwischen Kind-Horizonten / Programm-Items | | Lagebild-Read-Model über Kinder | | **Offen modellseitig:** Sind Kinder **eigene Initiativen** unter einem Programm-Portfolio-Link, oder **Projects** mit eigenem `method_key`-Override unter einer Programm-Initiative? Decision-Lock erlaubt hybrid inhaltlich — **Datenmodell muss in D12 entschieden werden**. --- ## D11 Extension Points | Art | Ziel | |-----|------| | next_action_strategy | `program_delivery` → Impulse-Kanal; Aggregation Child-NA getrennt | | steering_elements | `next_action_primary` (Impulse), `gate_fulfillment` (Programm), neu z. B. `program_child_lage` / `cross_dependency` | | graph_profile | Programm-Meilensteine; Kreuz-Deps | | ui_features | Programm-Lage vs. Child-Drilldown getrennt | | hooks | `on_next_action_requested` (Impulse), `on_replan_required`, `on_closure_requested`, Kind-Status-Hooks | --- ## D12 Spannungen — Ist vs. Ziel · offene PO-Punkte | Spannung | Detail | |----------|--------| | **Ist-Code ≠ Decision-Lock** | `ProgramDeliveryStrategy` ≈ Gate-ready Actions auf derselben Initiative — **kein** Nested/Impulse-Modell | | **Katalog v0.2 veraltet** | „Next Action: nächstes Gate/AP am Programm-Horizont“ widerspricht Interview | | **Kern** | Ohne Nested + ProgramImpulse bricht diese Methode den Kandidat-Kern | **PO ✓ (2026-07-25):** 1. **Kind-Modell:** beides erlaubt; Logik adressiert Child SteeringContext; Primärbild Projects + `method_key`-Override, verlinkte Initiativen optional später. 2. **Programm-Widget:** Impulse primär; Child-NAs als klar getrennter zweiter Block. 3. **Programm-Büro-Actions:** erlaubt, sekundär — dürfen Impulse-NA nicht ersetzen/tarnen. --- ## Bezug sequential_dependency Als Kind-Methode unverändert (`SPEC_D_sequential_dependency`). Programm darf Kind-NA nicht überschreiben. ## Nächste Methode Härtetest Multi-Leading-Object: **`care_navigation`**.