Files
wow20/_bmad-output/implementation-artifacts/spec-3-4-wissen-aus-mehreren-sources-synthetisieren.md

19 KiB
Raw Permalink Blame History

title, type, created, status, review_loop_iteration, baseline_commit, context
title type created status review_loop_iteration baseline_commit context
Wissen aus mehreren Sources synthetisieren — gemischte claim-granulare Provenienz operationalisieren (Story 3.4) feature 2026-08-19 done 0 9b256fa5ad
_bmad-output/implementation-artifacts/epic-3-context.md

Intent

Problem: §5.9 verankert die Update-Formen einzelner Concepts (Story 3.1/3.3), §4 die sources-Liste. Unoperativ bleibt die Synthese-Dimension (FR-7, AD-4, A0-3): wie der Producer mehrere Sources zum selben Thema zu einer gemeinsamen Wissensrepräsentation mit gemischter, claim-granularer Provenienz zusammenführt — statt getrennter Zusammenfassungen (FR-7). Es fehlt eine deterministische Anleitung für (a) die Erkennung einer Synthese-Einheit (≥ 2 belegende raw/-Quellen), (b) die Konsolidierung redundanter Aussagen ohne Provenienz-Verlust (Multi-Beleg, §5.5), und (c) den reflektierten Wissensstand (keine Aneinanderreihung von Source-Zusammenfassungen, FR-7 AC-4). Der §7-Synthese-Vorbehalt (:343) zeigt auf Story 3.4.

Approach: Story 3.4 verankert die Synthese-Mechanik als neue Sektion §5.10 „Synthese aus mehreren Sources (Story 3.4)" (nach §5.9, vor §6, Revision 2.9): deterministische Regeln für Synthese-Einheit, gemeinsame Zielrepräsentation (ein Concept-Pfad, sources-Liste ≥ 2), claim-granulare gemischte Provenienz mit Multi-Beleg-Konsolidierung (§5.5) und Reflektiertheits-Selbsttest (keine per-Source-Zusammenfassungs-Struktur). Zusätzlich eine re-executierbare Sandbox (sandbox-3-4/run-sandbox.sh, Muster Story-3.3): demonstriert einen echten Synthese-Run aus 2+ raw/-Quellen (Neu-Anlage + Update-Pfad) und assertet die Invarianten hart (sources ≥ 2, Multi-Beleg je konsolidierter Aussage, keine Aneinanderreihung, Erhaltungs-Invariante §5.9-Pkt.-5, Zwei-Run-Identität AD-17h). Nickel die Story-3.3-Defer U2/U7-Empfehlung (Form-Wahl-Klassifikationsprobe) im Sandbox auf. Keine Inhalts-Mutation des realen Bundles (AD-3); kein neues raw/-Material; kein Standalone (D-3).

Boundaries & Constraints

Always:

  • Instruktions-Story (D-3): Verankerung ausschließlich in schema/compiler.md §5.10 als deterministischer Text. Kein executable, kein Standalone, keine neue §7-Invaliditätsklasse, kein Change an schema/wiki-compiler.md/schema/validator.md/raw/ (AD-3).
  • Synthese ist Querschnitt-Dimension, keine fünfte Update-Form: Die §5.9-Abgrenzungs-Reihenfolge Korrigieren → Präzisieren → Erweitern → No-Op (Story 3.3) bleibt die sole Form-Wahl; Synthese erweitert die Ausführung um gemischte Provenienz + Konsolidierung (bei Update auf ein bestehendes Concept) bzw. die Neu-Anlage mit Multi-Source-sources (bei neuer Einheit).
  • Gemischte claim-granulare Provenienz (AD-4a/4b, A0-3): jede belegte Aussage des Synthese-Concepts bleibt auf raw/ zurückführbar; Konsequenz von AD-4c — kein bestehendes Concept ist alleinige Provenienz eines anderen; Übernahmen aus bestehenden Concepts tragen den §5.5-Kontext-Marker („übernommen aus <Concept> auf Basis von <source>, nicht eigenständig belegt").
  • Konsolidierung ohne Provenienz-Verlust (FR-7 AC-3): redundante Informationen werden zu einer Aussage konsolidiert, die alle betroffenen Inline-Belege trägt (Multi-Beleg, §5.5-Serialisierung) — keine stille Beleg-Tilgung (AD-4).
  • Reflektierter Wissensstand (FR-7 AC-4): keine per-Source-Zusammenfassungs-Blöcke („Quelle A: … / Quelle B: …"-Struktur); der Body trägt integrierte, je Aussage provenance-tags versehene Aussagen — textuell per Selbsttest prüfbar.
  • Determinismus (AD-17h/A0-19): Ziel-Pfad (via §3.2/§5.7), sources-Liste (lexikografisch nach resource, LC_ALL=C) und Konsolidierung folgen deterministisch aus der committeten Evidenz; gleicher Git-State + gleiche Eingabemenge → identischer Synthese-Vorgang. generated.at-Wanduhr-Gap bleibt offene A0-20-Konvention (Home Story 3.8).
  • Struktur-Erhaltung (FR-6/AC-2, Story 3.3): die §5.9-Pkt.-2-Struktur-Erhaltungsregeln gelten je berührtem Pfad unverändert (Frontmatter-Subset, keine stille Löschung, §5.6-Pin unverändert, Inline-Verweise gültig soweit Beleg Body-Bestand).
  • Erhaltungs-Invariante (AD-5/FT-6): der §5.9-Pkt.-5-Diff-Selbsttest gilt für Synthese-Runs unverändert (Pfad-Menge ⊆ Kandidatenliste Neu-Anlage log.md Index; keine neue Datei außer echten Ziel-Pfaden).
  • sprint-status.yaml: Key 3-4-wissen-aus-mehreren-sources-synthetisierenin-progress (bei Implementierung).

Ask First: Inhalts-Mutation des realen Bundles (Demo per Sandbox) · AD-7d-Renames · §5.6-Linkform-Änderung · Validator-/Vertrags-/raw/-Change · Leasing-Ausweitung (3.5/3.6-Scope) · Synthese als fünfte Update-Form (Abgrenzung ändern) · per-Source-Concepts als zulässige Anlageform.

Never: Änderungen an schema/wiki-compiler.md/schema/validator.md/raw/ (AD-3) · neue §7-Invaliditätsklasse · Standalone (D-3) · getrennte Zusammenfassungs-Concepts je Quelle (FR-7) · Duplikat-Anlage eines bestehenden Pfads · „Regenerate Everything" (AD-5) · stille Provenienz-Tilgung oder stille Konsolidierung widersprechender Aussagen ohne Ersetzungsbeleg (AD-16) · Embeddings/Vector im Compiler-Kern (AD-13).

I/O & Edge-Case Matrix

Scenario Input / State Expected Output / Behavior Error Handling
HAPPY_SYNTHESE_NEUANLAGE Zwei committete raw/-Quellen zum selben Thema (neue Einheit, kein Ziel-Pfad belegt) Ein neues Concept (gemeinsame Repräsentation): sources-Liste ≥ 2 (je Quelle ein Eintrag, lexikografisch nach resource), claim-granulare gemischte Inline-Provenienz je Aussage, §5.5-Form; kein per-Source-Summary NO_MATCH → §5.9/§3.2-Pfad (keine Synthese-Dimension)
HAPPY_SYNTHESE_KONSOLIDIERUNG Redundante Aussage in beiden Quellen Eine konsolidierte Aussage mit Multi-Beleg auf alle betroffenen Quellen (§5.5-Semikolon-Form) — keine Provenienz-Dropped Quellen-EC-1 fehlt → Run-FAIL (Validator), keine Mutation
HAPPY_SYNTHESE_UPDATE Synthese-Einheit trifft bestehenden Concept-Pfad §5.9-Formwahl normal (Erweitern/Präzisieren/Korrigieren), sources-Zuwachs um die zweite Quelle, gemischte Belege; Struktur-Erhaltungsregeln gelten bestehende belegte Aussage als Anker fehlt → Prüfung ob Erweitern
NO_OP_SYNTHESE Evidenz bereits vollständig im Body No-Op (Nicht-Form): byte-identität, kein Eintrag, kein at-Bump im Zweifel greift eine Form (engere Auslegung No-Op)
ANEINANDERREIHUNG_NEGATIV Struktur „Quelle A: … / Quelle B: …" Instruktions-Selbsttest-FAIL (Reflektiertheits-Kriterium, NFR-7): textuell benannter Befund, vor Run-Abschluss behoben kein stiller Vorbeilass (NFR-4)
STRUKTUR_ERHALT Synthese-Update greift in Body mit belegten Aussagen Struktur unverändert (Subset, Verweise, Linkform); kein unbefugter Key Verstoß → textuell benannt + Rollback (§5.9 Pkt. 5)
SYNTHESE_OVERLAP_FORMCROSS Eine Einheit trägt zugleich neue + schärfende Aussage §5.9-Abgrenzungs-Reihenfolge wählt die erste zutreffende Form; Textgenauigkeits-Rahmen der übrigen gelten je Teilbestand — (AD-17h: deterministisch)

Code Map

  • schema/compiler.mdprimär mutiert (D-3):
    • Neue Sektion §5.10 (nach §5.9, vor §6): Synthese-Stimulus (≥ 2 belegende Quellen per §2-Interpretation), ein-Ziel-Repräsentation (§5.7-Routing), sources-Liste (≥ 2, lexikografisch nach resource, LC_ALL=C — deterministisch, AD-17h), gemischte claim-granulare Provenienz (je Aussage Inline-raw/-Verweis §5.5; konsolidierte Aussagen mit Multi-Beleg), Reflektiertheits-Selbsttest (keine per-Source-Zusammenfassungs-Struktur; Muster-Termane wie „nicht eigenständig belegt"), Übernahme aus bestehenden Concepts mit §5.5-Kontext-Marker (AD-4c: nie alleinige Provenienz), §5.6-Pin unverändert, log.md-Eintragspflicht („Story 3.1-Update" bei Update; Anlage-Eintrag bei neuem Synthese-Concept), Erhaltungs-Invariante (Diff-Probe §5.9 Pkt. 5 gilt), Determinismus-Vertrag.
    • §7 (:343): Synthese-Vorbehalt auflösen („→ §5.10 verankert (Story 3.4)").
    • §8 Revisionslog (:382): Revision 2.9 mit Abschlussklausel.
  • _bmad-output/implementation-artifacts/sandbox-3-4/run-sandbox.shneu (re-executierbar, Muster Story-3.3-Sandbox): Mini-Bundle mit 2 raw/-Quellen zum selben Thema; Szenarien S1S6 (Neu-Anlage mit sources ≥ 2 + gemischten Belegen · Konsolidierung mit Multi-Beleg · Negativ-Kontrolle Aneinanderreihung · Synthese-Update auf bestehendem Pfad · Struktur-/Frontmatter-Invariante · Zwei-Run-Identität AD-17h) + N1 (NO_OP-Synthese: Evidenz bereits im Body → volle Byte-Identität, kein at-Bump, kein sources-Zusatz, kein log-Eintrag) + Form-Wahl-Klassifikationsprobe (Story-3.3-Defer U2/U7: überprüft die §5.9-Abgrenzungs-Reihenfolge an einer gemischten Einheit). Harte Pass/Fail-Assertionen (exit 1), Erhaltungs-Invariante, ??-Sicht, assert_frontmatter (Muster Story-3.3).
  • wiki/log.mdappend (append-only, Vertrag §5): Story-3.4-Eintrag (Verankerung, Sandbox-Nachweis, Statuswechsel, Validator-Verdikt); bestehende Bullets unverändert.
  • _bmad-output/implementation-artifacts/sprint-status.yamlmutiert: Key 3-4-… (:57) → in-progress (→ done bei Story-Abschluss).
  • schema/validator.md, schema/wiki-compiler.md, raw/…read-only (AD-3). Keine Concept-Inhalts-Mutation (Demonstration per Sandbox).

Tasks & Acceptance

Execution:

  • schema/compiler.md — §5.10 Synthese-Sektion einfügen (Stimulus, ein-Ziel-Repräsentation, sources-Liste, gemischte claim-granulare Provenienz + Multi-Beleg-Konsolidierung, Reflektiertheits-Selbsttest, AD-4c-Marker, §5.6-Pin, log.md, Erhaltungs-Invariante, Determinismus) · §7-Vorbehalt auflösen · §8 Revision 2.9; ohne Change an schema/wiki-compiler.md/schema/validator.md/raw/.
  • sandbox-3-4/run-sandbox.sh — Synthese-Run-Demonstrator (Neu-Anlage + Update, Konsolidierung, Negativ-Kontrolle Aneinanderreihung, NO_OP-Synthese, Form-Wahl-Probe, Struktur-Invariante, Zwei-Run-Identität); harte Pass/Fail-Assertionen; Exit 0.
  • wiki/log.md — Story-3.4-Eintrag (append-only): Verankerung, Sandbox-Nachweis, Statuswechsel, per-Datei-Validator-Verdikt.
  • sprint-status.yaml — Key 3-4-… → in-progress.

Acceptance Criteria:

  • Given mehrere Sources zum selben Thema, when der Run synthetisiert, then entsteht eine gemeinsame Wissensrepräsentation statt mehrerer getrennter Zusammenfassungen (AC-1; FR-7) — §5.10-Stimulus + ein-Ziel-Regel, Sandbox belegt (eine Datei, keine per-Source-Summary).
  • Given eine Synthese aus mehreren Sources, when das Ergebnis erzeugt wird, then übernimmt es gemischte, claim-granulare Provenienz der beteiligten Sources (AC-2; AD-4, A0-3) — Inline-Verweise §5.5 je Aussage, Konsolidierung mit Multi-Beleg.
  • Given redundante Informationen aus mehreren Sources, when sie synthetisiert werden, then werden sie konsolidiert, ohne Provenienz zu verlieren (AC-3; FR-7) — §5.10-Konsolidierungsregel, Sandbox-S2.
  • Given das resultierende Concept, when es geprüft wird, then reflektiert es den erkannten Wissensstand — keine bloße Aneinanderreihung (AC-4; FR-7) — Reflektiertheits-Selbsttest, Negativ-Kontrolle S3.
  • Given die Instruktion, when geprüft, then bleiben schema/validator.md/schema/wiki-compiler.md/raw/ unverändert (AD-3), keine neue §7-Klasse, kein Standalone (D-3), keine fünfte Update-Form (Abgrenzungs-Reihenfolge §5.9 unverändert), kein Leasing-Scope — Validator auf Ist-Bundle SUCCESS (7/7 unverändert).

Spec Change Log

Review-Loop-1 (2026-08-19, bmad-code-review, 3 Subagenten — blind-hunter / edge-case-hunter / verification-gap; kein Loopback, review_loop_iteration bleibt 0): Klassifikation — kein intent_gap, kein bad_spec (frozen Intent + Approach eingehalten); patch (auto-fixiert, siehe unten) + defer (4 Einträge → deferred-work.md append-only: AD-16/AD-4c-reale-Anwendung-Home-Epic-4, Orphan-Kontrolle-Home-3.8, Umlaut/Em-Dash-Normalisierung-Sandbox-Home-3.8, Frozen-„Nickel"-Typo-Re-Negotiation) + reject (noise: diff-Artifakt-Basename, SHA-Reproduzierbarkeit via $BASE-ID). Patches (alle verifiziert): (1) schema/compiler.md §5.10 — Reflektiertheits-Selbsttest-Muster auf Zeilenanfangs-Label erweitert (^(Quelle|Source) [A-Z][A-Za-z0-9_ -]*: — mehrbuchstabige/nummerierte Quell-Labels); Body-Reihenfolge deterministisch (lexikografisch über Beleg-Anker, LC_ALL=C) + Konsolidierungs-Kriterium (Befund-Äquivalenz über dieselbe erkannte Wissenseinheit) explizit; Duplikat-Fall + Orphan-Kontrolle in Pkt. 8; Stil-/Genus-Korrekturen (soleeinzige, der Updatedas Update, sources-Pluspunkt→sources-Zuwachs); Sandbox-N2/N3-Nachweise in Pkt. 3/4. (2) Sandbox run-sandbox.sh (jetzt 10 Szenarien S1S6 + N1N3 + FW, Exit 0): git add -A-wiki-Staging aus S1/S2/S3/S4/S5/FW entfernt → die Pkt.-8-??-Sicht wird lebendig geprüft; S5-Pkt.-8-??-Negativkontrolle neu (ungetrackte Nicht-Ziel-Datei ghost.md → Duplikat/Ghost-Diff-HARD-FAIL, nicht vacuous — Story-3.3-U9-Muster); N1-Stimulus-Kommentar korrigiert (alpha-v1 = Baseline-Evidenzbasis, nicht Zuwachs); N2 Disagreement (AD-16-Default, beide Behauptungen + je Beleg, kein Falsch-Multi-Beleg, Disagreement:-log-Eintrag) + N3 AD-4c-Übernahme-Marker (Kontext-Marker-Muster, eigenständig belegte Aussagen ohne Marker, übernommene Quelle nicht in sources) als neue Szenarien (schließen die Verification-Gap-Kernbefunde „AD-16-Pfad untested"/„AD-4c-Marker untested"); S1/S2-log.md-Assertionen um die vollständige Multi-Source-Liste erweitert. (3) wiki/log.md: Audit/Sandbox-Zählung auf 10 korrigiert, Scenario-Typo, „zum Audit-Zeitpunkt"-Qualifikation. (4) sprint-status.yaml last_updated-Präzision auf 08-19-2026 16:40 fortgeschrieben (HEAD-Format HH:MM, siehe Story-3.3-Präzedenzleistung 13:21). (5) deferred-work.md — 4 Spec-3.4-Einträge append-only. Nach-Review-Abschluss (dieser Flip): Spec status: 'in-review' → 'done'; sprint-status.yaml Key 3-4-… in-progress → done.

Design Notes

Warum §5.10, nicht §5.9-erweiterung: Synthese ist die Erzeugungs-/Zusammenführungs-Dimension (mehrere Quellen → eine Repräsentation) — keine der in §5.9 definierten Einzel-Update-Formen. §5.9 bleibt der Update-Pfad für einzelne bestehende Concepts; §5.10 erweitert die Ausführung um gemischte Provenienz + Konsolidierung (Querschnitt) und die Neu-Anlage mit Multi-Source-sources. Das spiegelt den §7-Vorbehalt (:343) als eigenständiges Thema.

Multi-Beleg-Konsolidierung (das Kernstück): Eine Aussage, die aus mehreren Quellen redundanz-belegt ist, wird zu EINER Aussage konsolidiert, die §5.5-Multi-Beleg trägt ((raw/a.md#X; raw/b.md#Y) — Semikolon-Form, voller Pfad je Beleg). Keine Beleg-Tilgung (AD-4). Widersprüche (diskrepanter Inhalt) bleiben gemäß AD-16 erhalten — kein stilles Zusammenführen zu scheinbar eindeutigen Aussagen (NFR-7, FR-8; Epic-4-Interface: Disagreement in log.md).

Reflektiertheits-Selbsttest (FR-7 AC-4): textuell prüfbar — der Body enthält keine per-Source-Zusammenfassungs-Sektionen (keine Struktur „Quelle A: … / Quelle B: …"); jede Aussage trägt ihren Provenienz-Tag. Der Selbsttest grep-basiert: keine Zeile, die nur einen Quell-Label abschnittsstrukturiert.

sources-Reihenfolge: deterministisch lexikografisch nach resource (LC_ALL=C) — unabhängig von Verarbeitungs- oder Datei-Reihenfolge (AD-17h; konsistent zur §3.2-Pkt.-3b-Lexikografie-Ordnung und zur §5.9-Tie-Break-Logik).

Verification

Commands (re-executierbar, ab Workspace-Root):

  1. bash _bmad-output/implementation-artifacts/sandbox-3-4/run-sandbox.sh — expected: alle Szenarien S1S6 + N1 + Form-Wahl-Probe mit harten Pass/Fail-Assertionen, Erhaltungs-Invariante erzwungen, Exit 0.
  2. grep -n "Synthese aus mehreren Sources\|Revision 2.9" schema/compiler.md — liefert die Synthese-Sektion + Revisionslog-Eintrag.
  3. Read-only (AD-3): git status --porcelain zeigt keinen Change an schema/validator.md/schema/wiki-compiler.md/raw/.
  4. Validator-Lauf: alle wiki/-Dateien SUCCESS (unverändert, keine Inhalts-Mutation).

Manual checks:

  • §5.10 trägt Stimulus, ein-Ziel-Regel, sources-Liste, gemischte Provenienz, Multi-Beleg-Konsolidierung, Reflektiertheits-Kriterium, AD-4c-Marker, §5.6-Pin, log.md-Regel, Erhaltungs-Invariante, Determinismus; §7-Vorbehalt :343 auf §5.10 aufgelöst; §8-Rev-2.9 mit Abschlussklausel; kein validator.md/wiki-compiler.md/raw/-Diff; kein neuer Standalone (D-3) / keine neue §7-Klasse; §5.9-Abgrenzungs-Reihenfolge unverändert (Synthese = Querschnitt, keine fünfte Form); wiki/log.md-Eintrag datiert mit Story-3.4-Semantik + Sandbox-Nachweis + Statuswechsel + Verdikt; sprint-status.yaml konsistent.

Suggested Review Order

(Befüllt nach Review-Abschluss durch step-04. Review-Loop 1 abgeschlossen: kein Loopback, 4 Defers; Status → done.)

Synthese-Mechanik (compiler.md §5.10)

  • Verankerung der Synthese-Dimension — Stimulus, ein-Ziel-Regel, gemischte Provenienz, Reflektiertheit, Erhaltungs-Invariante. compiler.md:290

  • Pkt. 8 — Determinismus-Vertrag: ??-Duplikat-Kontrolle, Orphan-Fall, generated.at-Gap (Home 3.8). compiler.md:301

§7/§8-Auflösung

  • Pkt. 3/4 — AD-16-Disagreement (N2) + AD-4c-Übernahme-Marker (N3) als Sandbox-Nachweise verankert. compiler.md:296

  • Revisionslog 2.9 — Abschlussklausel (AD-3, keine neue §7-Klasse, keine fünfte Update-Form) + Review-Loop-1-Notiz. compiler.md:396

Sandbox-Nachweis (re-executierbar)

  • 10 Szenarien S1S6 + N1N3 + FW, harte Erhaltungs-Invariante je Probe; Export & Pass-Statistik. run-sandbox.sh:226

  • N2 — AD-16-Disagreement (beide Behauptungen + Disagreement-Eintrag); N3 — AD-4c-Marker. run-sandbox.sh:562

  • FW — Form-Wahl-Klassifikationsprobe (Story-3.3-Defer U2/U7) + Zwei-Run-Identität (S6). run-sandbox.sh:740

Provenienz & Status

  • Story-Abschluss + Review-Loop-1-Audit — done-Flip, 10/10 PASS, 4 Defers. log.md:4

  • Implementierungs-Nachweis — Revision 2.9-Eintrag, Validator-Verdikt 7/7 SUCCESS. log.md:6

  • Statuskette in-progress → done + last_updated-Präzision. sprint-status.yaml:57