docs: PO-Freigabe AP1.4b — Kriterien, Reopen-Rollen, Audit

Waive/defer per Decision; Reopen active mit unveraenderten Kriterien; Sprint-Assignment AP1.4b.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Lars 2026-07-05 22:33:44 +02:00
parent 4d1c33bf18
commit e70e3196ec
3 changed files with 158 additions and 27 deletions

View File

@ -1,6 +1,6 @@
# ADP — Roadmap-Graph, Gate-Checkliste & Methodenprofile v0.1
**Status:** Entwurf — PO-Richtung 2026-07-05
**Status:** PO-Freigabe AP1.4b (2026-07-05)
**Stand:** 2026-07-05
**Bezug:** `ADP_RoadmapItem_and_Quality_Gate_Model_v0.1.md`, Vision v0.2 §9.1
**Ersetzt nicht:** AP1.4-Minimal (Schema 010/011) — **korrikt und erweitert** Zielbild
@ -51,15 +51,26 @@ Strukturierte Kriterien pro `RoadmapItem` — nicht nur Freitext `goal_descripti
| description | text | optional |
| criterion_kind | enum | `manual`, `evidence_required`, `review_required`, `metric` (später) |
| verification_hint | text | optional — für spätere KI („Was gilt als erfüllt?“) |
| status | enum | `open`, `satisfied`, `waived`, `failed` |
| status | enum | `open`, `satisfied`, `waived`, `deferred`, `failed` |
| waived_or_deferred_decision_id | uuid | optional FK — Pflicht bei `waived` / `deferred` |
| satisfied_by_evidence_id | uuid | optional FK |
| satisfied_at | timestamptz | |
**Verify `→ reached` (neu):**
**Sichtbarkeit:** Verantwortliche und Owner (Initiative-/Gate-Ebene) sehen alle Kriterien inkl. Abnahme-Status.
- Alle **Pflicht-Kriterien** `satisfied` oder `waived` (waive nur mit Decision)
- Oder explizite **gate_override** Decision (bestehend)
- Ein globales Evidence ohne Kriterienbezug reicht **nicht** mehr (Compat-Übergang: ein Kriterium „Gate allgemein“ migrieren)
**Verify `→ reached` (AP1.4b):**
- Jedes **Pflicht-Kriterium** muss `satisfied`, `waived` oder `deferred` sein (kein offenes Pflicht-Kriterium)
- **`waived`** (bewusst ausgelassen) oder **`deferred`** (verschoben): nur mit verknüpfter **Decision** + Begründung
- **`satisfied`:** Evidence/Review/Manual-Policy je `criterion_kind`
- Compat: bestehende Gates erhalten ein Default-Kriterium „Gate allgemein“ (Migration)
- Gate-weiter **`gate_override`** Decision bleibt als Ausnahme
**Kriterium nachträglich ändern (auch bei `reached`):**
- Titel, Beschreibung, Status-Änderung mit **Begründung** (Decision oder Audit-Eintrag)
- Wenn Gate `reached` war: Gate-Status → **`active`** (Produkt: „offen“), Kriterien **behalten** ihren jeweiligen Status — müssen **einzeln** erneut geprüft werden
- Verify erneut nötig für neues `reached`
**UI:**
@ -131,22 +142,34 @@ Kanten modellieren die **Baumlogik** (Forest pro Roadmap):
Hooks in `backend/steering/methods/`**keine** Sonder-Tabellen pro Methode.
### 5. Reaktivierung geschlossener Gates
### 5. Reaktivierung geschlossener Gates (PO 2026-07-05)
**Regel:** `reached → active` (Reopen) nur mit:
**Ziel-Status nach Reopen:** `active` (Produktbegriff: Gate wieder **offen** / bearbeitbar).
- **Decision** `gate_reopen` mit Begründung, oder
- Capability-gated Admin-Aktion + Audit
**Gate-Status `reached``active` — wer darf:**
Kriterien-Status: PO-Entscheidung — Option A: Kriterien bleiben `satisfied`; Option B: zurück auf `open` (empfohlen: **A**, Reopen dokumentiert Abweichung).
| Rolle | Bedingung |
|-------|-----------|
| **Verantwortlicher** | eigenes Vorhaben / zugewiesenes Gate (Initiative-`manage` + Verantwortlichkeit*) |
| **Gruppen-Admin** | Tenant-`owner` oder Tenant-`admin` im Mandanten |
| **Superadmin** | Portal-`admin` — Notfall über alle Mandanten |
Verify-Historie bleibt in Audit / Journey (AP1.6).
\*Verantwortlichkeit AP1.4b minimal: Initiative-Manager (`kairo.initiative.manage`); Gate-Owner-Feld optional Phase 2.
**Kriterien beim Reopen:** **unverändert** — z. B. weiterhin `satisfied` / `waived` / `deferred`; Gate ist offen, aber Abnahme muss **Kriterium für Kriterium** erneut bewertet werden, bevor erneut Verify/`reached`.
**Protokoll:** Jede Reopen-, Kriterien- und Gate-Status-Änderung → **Audit** (+ Decision wo Pflicht). Journey/AP1.6 zeigt Spur.
**Capabilities (AP1.4b):**
- `kairo.roadmap.reopen` — Verantwortlicher (member+), Tenant-Admin/Owner
- `kairo.roadmap.reopen.emergency` — Portal-Admin (Superadmin)
### 6. Bearbeiten & Löschen
| Aktion | Regel |
|--------|--------|
| Bearbeiten Titel/DoD/Kriterien | solange nicht `discarded`; `reached` → nur mit Reopen |
| Bearbeiten Titel/DoD/Kriterien | auch bei `reached`, mit Begründung → Gate `active`, Kriterien-Status bleibt |
| Löschen | nur `planned` oder mit Decision; Kanten mit-löschen |
| Status manuell | `reached`/`moved`/`discarded` nicht direkt (bestehend) |
@ -166,7 +189,7 @@ Plan-UI: **Detail-Modal/Route** `/initiatives/:id/plan/items/:itemId` — Checkl
| Paket | Inhalt | Version |
|-------|--------|---------|
| **AP1.4b** | Plan-Item bearbeiten/löschen UI; Reopen-API; Checkliste CRUD (JSONB oder criteria Tabelle) | 0.13.1 |
| **AP1.4b** | Criteria-Tabelle; Verify/Waive/Defer; Reopen-Capabilities; Plan-Detail-UI; Audit | 0.13.1 |
| **AP1.4d** | Graph Engine v1; `edge_kind` + group_key; deprecate `sequencing_mode` in UI | 0.14.0 |
| **AP1.4e** | Verify gegen Kriterien; Erfüllungsgrad-Widget; derived Blockers in Attention | 0.14.1 |
| **AP1.6** | Journey: Checkliste Schritt-für-Schritt; Graph-Sicht (Baum, nicht Gantt) | 0.15.x |
@ -185,13 +208,31 @@ Plan-UI: **Detail-Modal/Route** `/initiatives/:id/plan/items/:itemId` — Checkl
---
## PO-Freigabe-Checkliste
## PO-Freigabe — AP1.4b (2026-07-05)
- [ ] Kriterienplan statt „ein Evidence reicht“ (mit Compat-Übergang?)
- [ ] `sequencing_mode` am Item entfernen — nur Kanten
- [ ] Reopen-Regel (Decision vs. direkte Aktion)
- [ ] Erfüllungsgrad-Methoden ohne hartes `reached`
- [ ] Graph Engine in `backend/steering/graph/` — Scope Lock Erweiterung
### Frage 1 — Verify & Kriterien
- [x] **Kriterienplan** statt „ein Evidence reicht“ (Compat: Default-Kriterium pro Gate)
- [x] Einzelkriterien dürfen per **Decision** **`waived`** (ausgelassen) oder **`deferred`** (verschoben) werden
- [x] `reached` nur wenn kein offenes Pflicht-Kriterium mehr existiert
### Frage 2 — Reopen
- [x] Verantwortlicher darf **eigene** Vorhaben/Gates reopenen
- [x] Tenant-**Admin/Owner** (Gruppe) ebenfalls
- [x] Portal-**Admin** (Superadmin) als Notfall
- [x] **Alles auditiert**
### Frage 3 — Status nach Reopen / Kriterien
- [x] Gate → **`active`** (offen), Kriterien **behalten** gesetzten Status
- [x] Kriterien einzeln erneut prüfbar; Änderung an Kriterium bei `reached` → Gate **`active`** + Begründung
### Noch offen (spätere Pakete)
- [ ] `sequencing_mode` am Item entfernen — nur Kanten (AP1.4d)
- [ ] Erfüllungsgrad-Methoden ohne hartes `reached` (AP1.4e)
- [ ] Graph Engine in `backend/steering/graph/` (AP1.4d)
---

View File

@ -140,18 +140,22 @@ Vorlage: `Sprint0_AP0_10_Validation_Report_v0.1.md`
---
### AP1.4b — Gate-Checkliste & Pflege (nächstes Plan-Paket)
### AP1.4b — Gate-Checkliste & Pflege (**PO-Freigabe 2026-07-05**)
**Ziel:** Prüfplan pro Gate; Item bearbeiten/löschen; Reopen nach versehentlichem Schließen.
**Ziel:** Prüfplan pro Gate; Waive/Defer per Decision; Reopen mit Rollen; Audit.
| Scope | |
|-------|--|
| `roadmap_item_criteria` oder strukturiertes DoD |
| Checkliste in Plan-Detail (Modal/Route) |
| Reopen `reached → active` (Decision-gated) |
| Verify gegen Kriterien (Compat: Default-Kriterium) |
| Migration `roadmap_item_criteria` |
| Verify: Pflicht-Kriterien `satisfied` \| `waived` \| `deferred` (waive/defer → Decision) |
| Compat: Default-Kriterium pro bestehendem Gate |
| Reopen `reached → active`; Kriterien-Status **bleibt** |
| Reopen: Verantwortlicher, Tenant-Admin/Owner, Portal-Admin (Notfall) |
| Kriterium ändern bei `reached` + Begründung → Gate `active` |
| Plan-Detail-Route; Capabilities `kairo.roadmap.reopen*` |
| Audit für alle Gate-/Kriterien-Änderungen |
**ADP:** `ADP_Roadmap_Graph_and_Gate_Checklist_v0.1.md`
**ADP:** `ADP_Roadmap_Graph_and_Gate_Checklist_v0.1.md` § PO-Freigabe
**Version:** `0.13.1-ap1.4b`

View File

@ -0,0 +1,86 @@
# AP1.4b — Gate-Checkliste, Waive/Defer, Reopen
**Stand:** 2026-07-05
**PO-Freigabe:** `ADP_Roadmap_Graph_and_Gate_Checklist_v0.1.md` § PO-Freigabe
**Version:** `0.13.1-ap1.4b`
**Voraussetzung:** AP1.4 (010/011), Verify-Fix deployed
---
## Ziel
Prüfplan (Checkliste) pro RoadmapItem; Verify gegen Kriterien; bewusstes Auslassen/Verschieben einzelner Punkte per Decision; Reopen mit Rollenmodell; vollständiges Audit.
---
## PO-Regeln (verbindlich)
### Kriterien
- Status: `open`, `satisfied`, `waived`, `deferred`, `failed`
- `waived` / `deferred` nur mit **Decision** (Begründung)
- Sichtbar für Verantwortliche + Owner (Initiative-`manage` + lesend)
### Verify → `reached`
- Kein offenes Pflicht-Kriterium
- Jedes Kriterium: `satisfied`, `waived` oder `deferred`
- Compat-Migration: ein Default-Kriterium „Gate allgemein“ pro Item
### Reopen
- `reached`**`active`** (Produkt: Gate offen)
- Kriterien-Status **unverändert** — erneute Prüfung pro Kriterium
- Wer: Verantwortlicher (Initiative-`manage`), Tenant-Admin/Owner, Portal-Admin (Notfall)
- Audit Pflicht
### Kriterium ändern bei geschlossenem Gate
- Mit Begründung (Decision/Audit)
- Gate → **`active`**, Kriterien behalten Status bis manuell angepasst
---
## Lieferungen
| # | Backend |
|---|---------|
| 1 | Migration `012_roadmap_item_criteria.sql` |
| 2 | CRUD Criteria; waive/defer/satisfy Endpoints |
| 3 | Verify über Criteria-Engine (ersetzt Ein-Evidence-Shortcut) |
| 4 | `POST /api/roadmap-items/:id/reopen` + Capabilities |
| 5 | Audit-Events: criterion.*, roadmap_item.reopened |
| 6 | Default-Kriterium-Migration für bestehende Items |
| # | Frontend |
|---|----------|
| 7 | Route `/initiatives/:id/plan/items/:itemId` — Checkliste, Fortschritt |
| 8 | Waive/Defer-Dialog (Decision) |
| 9 | Reopen-Button (rollenabhängig) |
| # | Tests |
|---|-------|
| 10 | Verify mit satisfied/waived/deferred |
| 11 | Reopen + Kriterium-Änderung bei reached |
---
## Nicht in AP1.4b
- Graph Engine (AP1.4d)
- `sequencing_mode` entfernen (AP1.4d)
- KI-Verify
- Gate-Owner-Feld (optional später)
---
## Abnahme
- [ ] Gate mit 3 Kriterien: 2 satisfied, 1 waived (Decision) → Verify OK
- [ ] Reopen durch Member (Verantwortlicher) → `active`, Kriterien unverändert
- [ ] Kriterium an `reached`-Gate ändern → Gate `active`, Audit sichtbar
- [ ] pytest grün im CI-Container
---
*Referenz: Roadmap v0.2 AP1.4b, Vision §6*