From 3b3461fc59786b7dc99f356766eef184e53a8cfc Mon Sep 17 00:00:00 2001 From: Rogercode97 Date: Sat, 27 Jun 2026 17:01:44 -0300 Subject: [PATCH] feat(engine): integrate ChurnEngine into IndexerPipeline Intent: Hook up the existing ChurnEngine so Git-Aware Analysis (Churn metrics) is computed and stored automatically during scouter index operations. Constraint: Follows Zero-CGO and Bulk Updates architecture. --- cmd/scouter/scoutercmd/index.go | 2 ++ cmd/scouter/scoutercmd/mcp.go | 3 ++- internal/engine/indexer.go | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cmd/scouter/scoutercmd/index.go b/cmd/scouter/scoutercmd/index.go index 96b81b4..7b28687 100644 --- a/cmd/scouter/scoutercmd/index.go +++ b/cmd/scouter/scoutercmd/index.go @@ -37,12 +37,14 @@ var indexCmd = &cobra.Command{ analyzer := engine.NewAnalysisEngine(db) searchEngine := engine.NewSearchEngine(db, nil, nil) astRules := engine.NewASTRuleEngine(".scouter/rules") + churnEngine := engine.NewChurnEngine(db) indexer := engine.NewIndexerPipeline(engine.IndexerConfig{ Store: db, Semantic: semanticEngine, Analyzer: analyzer, Search: searchEngine, ASTRules: astRules, + Churn: churnEngine, Logger: nil, }) diff --git a/cmd/scouter/scoutercmd/mcp.go b/cmd/scouter/scoutercmd/mcp.go index 9a60bbd..d31fea3 100644 --- a/cmd/scouter/scoutercmd/mcp.go +++ b/cmd/scouter/scoutercmd/mcp.go @@ -51,6 +51,7 @@ var mcpCmd = &cobra.Command{ diagnostic := engine.NewDiagnosticEngine(db, analyzer, impact, lspMgr, searchEngine) astRules := engine.NewASTRuleEngine(".scouter/rules") + churnEngine := engine.NewChurnEngine(db) evolutionEngine := engine.NewEvolutionEngine(db, ledger, ripple) appService := memory.NewAppService(memoryProvider) @@ -61,7 +62,7 @@ var mcpCmd = &cobra.Command{ Store: db, Logger: logger, LspMgr: lspMgr, - Indexer: engine.NewIndexerPipeline(engine.IndexerConfig{Store: db, Semantic: semanticEngine, Analyzer: analyzer, Search: searchEngine, ASTRules: astRules, Logger: logger}), + Indexer: engine.NewIndexerPipeline(engine.IndexerConfig{Store: db, Semantic: semanticEngine, Analyzer: analyzer, Search: searchEngine, ASTRules: astRules, Churn: churnEngine, Logger: logger}), Search: searchEngine, Analyzer: analyzer, Impact: impact, diff --git a/internal/engine/indexer.go b/internal/engine/indexer.go index f8a8dcd..9143f80 100644 --- a/internal/engine/indexer.go +++ b/internal/engine/indexer.go @@ -44,6 +44,7 @@ type IndexerConfig struct { Analyzer *AnalysisEngine Search *SearchEngine ASTRules *ASTRuleEngine + Churn *ChurnEngine Logger *slog.Logger } @@ -243,6 +244,13 @@ func (ip *IndexerPipeline) Index(ctx context.Context, path string) error { } } + if ip.config.Churn != nil { + ip.config.Logger.Info("running churn engine analysis") + if cErr := ip.config.Churn.AnalyzeChurn(ctx, validatedPath, 500); cErr != nil { + ip.config.Logger.Error("failed to analyze churn", "error", cErr) + } + } + return err }