brain/.claude/commands/meeting-end.md

4.4 KiB

Schließe ein Jour-Fixe-Meeting ab, ziehe automatisch Recap+Transkript aus Teams und führe die Ergebnisse zurück.

Schritt 1 — Meeting-Notiz identifizieren

  • Wenn current_note eine Datei unter 03 Bereiche/Meetings/ ist → diese verwenden.
  • Sonst: Serie und Datum aus $ARGUMENTS ermitteln. Pfad: 03 Bereiche/Meetings/YYYY-MM-DD <Titel>.md.
  • Lies das Frontmatter: o365_id, serie, date.
  • Wenn o365_id leer ist: User fragen, ob Auto-Import übersprungen werden soll (dann weiter bei Schritt 4 ohne Recap/Transkript).

Schritt 2 — Artifacts holen

Führe aus:

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)