feat(meetings): rewrite /meeting-end with graph auto-import

This commit is contained in:
beo3000 2026-05-06 21:14:36 +02:00
parent b91267d537
commit e0a330520a
1 changed files with 103 additions and 12 deletions

View File

@ -1,13 +1,104 @@
Schließe ein Jour-Fixe-Meeting ab und führe die Ergebnisse zurück. Schließe ein Jour-Fixe-Meeting ab, ziehe automatisch Recap+Transkript aus Teams und führe die Ergebnisse zurück.
1. Identifiziere das aktuelle Meeting aus dem Kontext oder den Parametern: $ARGUMENTS ## Schritt 1 — Meeting-Notiz identifizieren
- Prüfe ob eine Meeting-Notiz gerade geöffnet ist (current_note)
- Oder nimm Serie + Datum aus Parametern - Wenn `current_note` eine Datei unter `03 Bereiche/Meetings/` ist → diese verwenden.
2. Lies die Meeting-Notiz und die zugehörige Agenda.md - Sonst: Serie und Datum aus `$ARGUMENTS` ermitteln. Pfad: `03 Bereiche/Meetings/YYYY-MM-DD <Titel>.md`.
3. Frage für jedes besprochene Topic: erledigt, offen (weiter), postponed, oder übersprungen? - Lies das Frontmatter: `o365_id`, `serie`, `date`.
4. Führe die Ergebnisse nach dem Jour-Fixe-Skill (jour-fixe.md) zurück: - Wenn `o365_id` leer ist: User fragen, ob Auto-Import übersprungen werden soll (dann weiter bei Schritt 4 ohne Recap/Transkript).
- Historie in Agenda.md fortschreiben (Bold-Datum mit Kurzfassung)
- Erledigte Topics mit Historie ins Archiv verschieben ## Schritt 2 — Artifacts holen
- Postponed Topics in ⏳ Sektion verschieben
5. Setze den Meeting-Status auf abgeschlossen Führe aus:
6. Bestätige mit Zusammenfassung: wie viele Topics aktualisiert, archiviert, verschoben ```
cd scripts
node fetch-meeting-artifacts.js --o365-id <o365_id> --out /tmp/artifacts.json
```
Lies das JSON. Erwartete Felder:
- `meeting.seriesMasterId`
- `transcript` (string oder null)
- `recap` (object mit `meetingNotes`, `actionItems`, `mentions` — oder null)
- `recordingUrl` (string oder null)
- `warnings` (Liste)
Wenn `transcript === null` und `recap === null`: User fragen, ob er den Recap aus Teams einfügen will, oder ob das Meeting ohne Auto-Import abgeschlossen werden soll.
## Schritt 3 — Sprecher-Mapping
Sammle alle Sprecher-Namen aus `transcript` (Zeilenanfang vor `:`).
Pro Name → Wikilink über Personenmatching (siehe `00 Kontext/Personen/`) oder null.
Notiere ungematchte Sprecher als offene Punkte am Ende des Berichts.
## Schritt 4 — Doppel-Pass-Synthese
Lies die existierende Meeting-Notiz vollständig (Live-Notizen!).
Doppel-Pass:
- **Aus Recap** (sofern vorhanden): Topics, Entscheidungen, offene Fragen, Tasks extrahieren.
- **Aus Transkript**: pro Recap-Aussage validieren; ergänze Details, die mehrfach im Transkript bestätigt sind aber im Recap fehlen. Sprecher als Wikilinks ersetzen.
Schreibe Ergebnis in die Meeting-Notiz:
- `## Notizen` (gegliedert nach Topics, mit Wikilinks zu Sprechern)
- `## Entscheidungen`
- `## Offene Fragen`
- `## Aufgaben` (Owner als Wikilinks)
**Merge-Regel mit Live-Notizen:**
- Live-Eintrag mit gleichem Aktor + gleicher Kernaussage → Recap-Eintrag SKIP.
- Live-Eintrag stub (nur Stichwort) → durch Recap-Detail ergänzen.
- Recap-Eintrag neu → unten anhängen.
- Reihenfolge: Live-Order bleibt, neue Items hinten.
Wenn `recordingUrl` vorhanden: füge ins Frontmatter `recording_url: <url>` ein (oder ersetze existierenden Wert).
## Schritt 5 — Agenda-Rückführung mit Konfidenz
Bestimme die zugehörige Agenda:
- Aus Frontmatter `serie:` der Meeting-Notiz.
- Pfad: `03 Bereiche/Jour Fixe/<Serie>/Agenda*.md`.
- Verifiziere: `o365_series_id` der Agenda matched `meeting.seriesMasterId`. Mismatch → User warnen.
- Falls die Agenda kein `o365_series_id` hat und `meeting.seriesMasterId` vorhanden ist: lazy-backfill (siehe `/meeting`).
Pro Topic der Meeting-Notiz (H3-Überschriften unter `## 📌 Dauerläufer`, `## 🆕 Neu`, `## ⏸️ Postponed`):
| Signal in Notiz/Recap/Transkript | Konfidenz | Aktion |
|---|---|---|
| `## ⏸️ Postponed` enthält dieses Topic | HOCH | postpone → in Agenda `## ⏸️ Postponed` verschieben |
| Topic-Status aus Notiz oder Recap: "erledigt"/"abgeschlossen"/"✅" + alle Tasks done | HOCH | archivieren (mit ganzer Historie) |
| Topic erwähnt, kein Abschluss-Marker | HOCH | Historie-Eintrag in Agenda: `**YYYY-MM-DD:** Kurzfassung → [[Meeting-Notiz]]` |
| Topic in Agenda, aber nicht im Notiz-Block | HOCH | unverändert |
| Mehrdeutig | NIEDRIG | zur Bestätigung listen |
Sammel-Bericht VOR Schreiben:
```
Vorgesehene Aktionen:
- 5 Topics: Historie-Eintrag (auto)
- 2 Topics: archivieren (auto): X, Y
- 1 Topic: postponed (auto): Z
Bestätigung nötig:
- "NAC-Projekt": Recap mehrdeutig — erledigt oder offen?
Ungematchte Sprecher (Personen-Notiz fehlt): Maria Schmidt
```
User bestätigt einmal für HOCH-Aktionen, entscheidet pro NIEDRIG-Topic. Dann ausführen.
## Schritt 6 — Neue Topics nach Dauerläufer
Topics, die in `## 🆕 Neu` der Meeting-Notiz standen und nicht archiviert oder postponed wurden, in der Agenda nach `## 📌 Dauerläufer` verschieben (🆕-Emoji aus Titel entfernen).
## Schritt 7 — Status
In der Meeting-Notiz: `status: abgeschlossen` setzen.
## Schritt 8 — Bericht
Gib eine Zusammenfassung aus:
- Recap aus Graph: ja/nein
- Transkript: ja/nein
- Recording-Link: ja/nein
- X Topics aktualisiert, Y archiviert, Z postponed, W neu nach Dauerläufer
- Ungematchte Sprecher (falls vorhanden): Hinweis auf fehlende Personen-Notizen
- Warnings aus dem Fetch-Script (falls vorhanden)