diff --git a/docs/architecture/ADP_UX_Composition_Kernel_v0.1.md b/docs/architecture/ADP_UX_Composition_Kernel_v0.1.md
index 4285b2c..ec2a227 100644
--- a/docs/architecture/ADP_UX_Composition_Kernel_v0.1.md
+++ b/docs/architecture/ADP_UX_Composition_Kernel_v0.1.md
@@ -71,8 +71,14 @@ Slots sind **stabil benannte Flächen** — unabhängig von React-Page-Struktur.
| `plan.inbox.proposals` | plan | inbox | Triage-Vorschläge |
| `plan.sprint.proposals` | plan | sprint | Sprint-Commit-Vorschläge |
| `plan.gates.proposals` | plan | gates | Gate-Vorschläge |
+| `work.today.primary` | work | today | Next Action (Steuerung) |
+| `work.today.actions` | work | today | Arbeitspakete (Drill-down) |
+| `work.sprint.primary` | work | sprint | Next Action im Sprint |
+| `work.sprint.backlog` | work | sprint | Sprint-Backlog (Drill-down) |
-**Erweiterung (post-MVP):** `control.plan-ist.read_models`, `plan.inbox.read_models`, Work-Modus-Slots.
+**Erweiterung (post-MVP):** `control.plan-ist.read_models`, `plan.inbox.read_models`.
+
+**AP1.9d (2026-07-27):** Work-Modus-Slots `work.today.*`, `work.sprint.*` — Next Action als Hauptbild, Arbeitspaket-Listen als Drill-down. Layout-neutral für späteres UI-Redesign; Provider-Vertrag bleibt stabil.
---
diff --git a/docs/product/Kairo_Implementation_Truth_Table_v0.1.md b/docs/product/Kairo_Implementation_Truth_Table_v0.1.md
index e90aea6..00e3f59 100644
--- a/docs/product/Kairo_Implementation_Truth_Table_v0.1.md
+++ b/docs/product/Kairo_Implementation_Truth_Table_v0.1.md
@@ -232,6 +232,7 @@ Details: `Kairo_Status_Review_and_Next_Steps_v0.1.md` §2.1
| Steering Kernel Proposals | ✓ | sprint_commit · gate_next_actions · intake_triage (Kernel v0.4) |
| AP2.2b | A2 Linear E2E ✓ (2026-07-27) |
| AP2.2c | A1 Reifegrad E2E ✓ (2026-07-27) |
+| AP1.9d | Work-Composition + Drill-down ◐→✓ (2026-07-27) |
| AP2.2c–e | Referenz-Archetypen End-to-End ◐→✓ |
| AP2.1 | MVP-Abnahfe ✗→✓ |
| AP1.7b | Op-API Parität |
diff --git a/docs/product/Kairo_MVP_Execution_Plan_v0.2.md b/docs/product/Kairo_MVP_Execution_Plan_v0.2.md
index 4dfbe59..e8cd9a3 100644
--- a/docs/product/Kairo_MVP_Execution_Plan_v0.2.md
+++ b/docs/product/Kairo_MVP_Execution_Plan_v0.2.md
@@ -78,7 +78,7 @@ Phase 0 DOC + Kurskorrektur (dieses Dokument) ✓
Phase 0b AP2.3/AP2.4 Plugin-Architektur (Archetyp ↔ Methode) ✓
Phase 1 AP2.2a Archetyp-geführte Anlage + Starter-Kits ✓
Phase 1b Specs Welle 1 finalisieren (A1,A2,B2a,B2b,B3) ◐
-Phase 2 AP1.9d Methoden-Default-Ansichten (Anti-Todo-Wand) ◐ (Hints + Recurring)
+Phase 2 AP1.9d Methoden-Default-Ansichten (Anti-Todo-Wand) ◐→✓ (Work-Composition + Drill-down)
Phase 3 AP2.2b A2 Linear End-to-End ✓
AP2.2c A1 Reifegrad + AP2.0e ✓
AP2.2d B2b Product + B3 Sprint ✓
diff --git a/frontend/src/components/BacklogSection.jsx b/frontend/src/components/BacklogSection.jsx
index 548679e..f14f9af 100644
--- a/frontend/src/components/BacklogSection.jsx
+++ b/frontend/src/components/BacklogSection.jsx
@@ -42,6 +42,8 @@ export function BacklogSection({
busy,
sectionTitle = 'Product Backlog',
sectionLead = 'Eingang vor dem Commit — triagieren, dann in den Sprint planen.',
+ defaultSprintTargetId = null,
+ lockSprintTarget = false,
}) {
const { operatingContext, steeringElements, steeringSnapshot } = useInitiativeOperations()
const [modalMode, setModalMode] = useState(null)
@@ -74,6 +76,13 @@ export function BacklogSection({
if (!showSprintPlanning || !initiativeId) {
return
}
+ if (
+ defaultSprintTargetId
+ && planableSprints.some((cycle) => cycle.id === defaultSprintTargetId)
+ ) {
+ setSprintTargetId(defaultSprintTargetId)
+ return
+ }
const stored = sessionStorage.getItem(SPRINT_TARGET_STORAGE_PREFIX + initiativeId)
if (stored && planableSprints.some((cycle) => cycle.id === stored)) {
setSprintTargetId(stored)
@@ -84,7 +93,13 @@ export function BacklogSection({
}
const preferred = activeWorkCycle?.id || planableSprints[0]?.id || ''
setSprintTargetId(preferred)
- }, [showSprintPlanning, initiativeId, planableSprints, activeWorkCycle?.id])
+ }, [
+ showSprintPlanning,
+ initiativeId,
+ planableSprints,
+ activeWorkCycle?.id,
+ defaultSprintTargetId,
+ ])
useEffect(() => {
if (!initiativeId || !sprintTargetId) return
@@ -292,21 +307,36 @@ export function BacklogSection({
{showSprintPlanning && canManage && (
-
+ {lockSprintTarget && selectedSprint ? (
+
+ Ziel-Sprint: {selectedSprint.title}
+ {selectedSprint.status === 'active'
+ ? ' (aktiv)'
+ : selectedSprint.status === 'planned'
+ ? ' (geplant)'
+ : ''}
+
+ ) : (
+
+ )}
{selectedCommittable.length > 0 && (
}
footer={
- actions.length > 0 ? (
+ actions.length > 0 || hasMoreHint ? (
- Alle meine Maßnahmen →
+ Alle {PRODUCT_TERMS.actionPossessive} →
) : null
}
@@ -65,7 +68,7 @@ export function WorkspaceTodayWidget() {
{loading &&
}
{!loading && error &&
}
{!loading && !error && actions.length === 0 && (
-
+
)}
{!loading && !error && actions.length > 0 && (