Optimierter Workflow

This commit is contained in:
2026-08-07 21:55:54 +02:00
parent dc2af7ca75
commit ffee925163
26 changed files with 1128 additions and 131 deletions
+15 -11
View File
@@ -329,7 +329,7 @@ func TestSynthesisResearchesUnclearKnowledgeThenLearnsAndLinksArticle(t *testing
if chatCalls != 6 {
t.Fatalf("expected relation, plan, brief, research plan, synthesis and claim review calls, got %d", chatCalls)
}
var resultEvent, candidateEvent, fetchEvent, materialEvent, ingestEvent, learnedEvent, roundEvent, reviewEvent *model.Activity
var resultEvent, candidateEvent, fetchEvent, materialEvent, storedEvent, materializedEvent, learnedEvent, roundEvent, reviewEvent *model.Activity
for _, event := range broker.Recent() {
event := event
switch event.Type {
@@ -341,8 +341,10 @@ func TestSynthesisResearchesUnclearKnowledgeThenLearnsAndLinksArticle(t *testing
fetchEvent = &event
case "article.research.material.collected":
materialEvent = &event
case "article.research.material.ingested":
ingestEvent = &event
case "article.research.material.stored":
storedEvent = &event
case "article.research.grounded.materialized":
materializedEvent = &event
case "article.research.learned":
learnedEvent = &event
case "article.research.collection.round.completed":
@@ -351,15 +353,17 @@ func TestSynthesisResearchesUnclearKnowledgeThenLearnsAndLinksArticle(t *testing
reviewEvent = &event
}
}
if resultEvent == nil || candidateEvent == nil || fetchEvent == nil || materialEvent == nil || ingestEvent == nil || learnedEvent == nil || roundEvent == nil || reviewEvent == nil {
t.Fatalf("expected research-generate-review pipeline, result=%v candidate=%v fetch=%v material=%v ingest=%v learned=%v round=%v review=%v", resultEvent != nil, candidateEvent != nil, fetchEvent != nil, materialEvent != nil, ingestEvent != nil, learnedEvent != nil, roundEvent != nil, reviewEvent != nil)
if resultEvent == nil || candidateEvent == nil || fetchEvent == nil || materialEvent == nil || storedEvent == nil || materializedEvent == nil || learnedEvent == nil || roundEvent == nil || reviewEvent == nil {
t.Fatalf("expected adaptive generate-review pipeline, result=%v candidate=%v fetch=%v material=%v stored=%v materialized=%v learned=%v round=%v review=%v", resultEvent != nil, candidateEvent != nil, fetchEvent != nil, materialEvent != nil, storedEvent != nil, materializedEvent != nil, learnedEvent != nil, roundEvent != nil, reviewEvent != nil)
}
resultNodeIDs, _ := ingestEvent.Metadata["result_node_ids"].([]string)
if len(resultNodeIDs) != 1 || resultNodeIDs[0] != researchID {
t.Fatalf("unexpected ingested research nodes: %#v", ingestEvent.Metadata["result_node_ids"])
if storedEvent.Metadata["materialization"] != "evidence_store_only" {
t.Fatalf("research material should remain evidence-only before review: %#v", storedEvent.Metadata)
}
if ingestEvent.Metadata["animation_min_ms"] != 2000 {
t.Fatalf("research animation minimum missing: %#v", ingestEvent.Metadata["animation_min_ms"])
if materializedEvent.Metadata["materialized_nodes"] != 1 {
t.Fatalf("expected exactly one reviewer-grounded research node, got %#v", materializedEvent.Metadata)
}
if storedEvent.Metadata["animation_min_ms"] != 2000 {
t.Fatalf("research animation minimum missing: %#v", storedEvent.Metadata["animation_min_ms"])
}
}
@@ -446,7 +450,7 @@ func TestWriteKnowledgeArticleDraftPreservesUpdateTarget(t *testing.T) {
}
plan := model.ArticlePlanDecision{Action: "update", TargetArticleID: target.ID, Reason: "Der bestehende Artikel benötigt Diagnose und Validierung.", ExpectedValue: "Vollständiger Ablauf", ArticleType: "troubleshooting", SourceNodeIDs: nodeIDsFromArticleSources(sources)}
draft := model.KnowledgeArticleDraft{Title: "VPN-Artikel vollständig diagnostizieren", Text: strings.Repeat("Problem und Geltungsbereich. ", 5), Answer: strings.Repeat("1. Konkreten Prüfschritt ausführen. ", 8), Validation: []string{"VPN-Tunnel ist aktiv"}, Categories: []string{"VPN"}, Keywords: []string{"VPN"}, SourceNodeIDs: nodeIDsFromArticleSources(sources), Confidence: .9}
path, _, created, err := e.writeKnowledgeArticleDraft(sources, plan, model.KnowledgeBrief{Topic: "VPN", ReadyForArticle: true}, draft, nil, nil, model.ArticleQualityDecision{Accepted: true, Confidence: .9}, 0, 3, 0, 1, 1)
path, _, created, err := e.writeKnowledgeArticleDraft(sources, plan, model.KnowledgeBrief{Topic: "VPN", ReadyForArticle: true}, draft, nil, nil, model.ArticleQualityDecision{Accepted: true, Confidence: .9}, 0, 3, 0, 1, 1, articleSourceFingerprint(sources, plan, nil, e.articlePipelineFingerprintIdentity()))
if err != nil {
t.Fatal(err)
}