From 391d883cf9d1c36d8b367005002292078eb087e0 Mon Sep 17 00:00:00 2001 From: tae2089 Date: Tue, 11 Aug 2026 18:59:59 +0900 Subject: [PATCH 1/2] test(search): replay raw intent matches in golden eval --- .../searchsql/goldenfixture_contract_test.go | 49 ++++ .../outbound/searchsql/goldenfixture_test.go | 270 ++++++++++++++---- .../outbound/searchsql/parity_test.go | 8 +- internal/app/search/rank/golden_guard_test.go | 10 +- internal/app/search/rank/golden_test.go | 192 +++++++++---- .../app/search/rank/intent_fixture_test.go | 113 ++++++++ internal/app/search/rank/testdata/README.md | 42 +-- 7 files changed, 547 insertions(+), 137 deletions(-) create mode 100644 internal/adapters/outbound/searchsql/goldenfixture_contract_test.go create mode 100644 internal/app/search/rank/intent_fixture_test.go diff --git a/internal/adapters/outbound/searchsql/goldenfixture_contract_test.go b/internal/adapters/outbound/searchsql/goldenfixture_contract_test.go new file mode 100644 index 00000000..8b6a5e71 --- /dev/null +++ b/internal/adapters/outbound/searchsql/goldenfixture_contract_test.go @@ -0,0 +1,49 @@ +package searchsql + +import ( + "context" + "path/filepath" + "strings" + "testing" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" + + requestctx "github.com/tae2089/code-context-graph/internal/ctx" + "github.com/tae2089/code-context-graph/internal/domain/graph" +) + +func TestGoldenIntentCapturerRejectsSameSizeReindexedCorpus(t *testing.T) { + db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "graph.db")), &gorm.Config{}) + if err != nil { + t.Fatal(err) + } + if err := db.AutoMigrate(&graph.Node{}, &graph.SearchReason{}, &graph.Annotation{}, &graph.DocTag{}); err != nil { + t.Fatal(err) + } + node := graph.Node{ID: 2, Namespace: "golden", Name: "Build", QualifiedName: "workflow.Build", Kind: graph.NodeKindFunction, FilePath: "workflow/build.go", StartLine: 10} + if err := db.Create(&node).Error; err != nil { + t.Fatal(err) + } + if err := db.Create(&graph.SearchReason{ID: 20, Namespace: "golden", NodeID: node.ID, Content: "build the graph"}).Error; err != nil { + t.Fatal(err) + } + ctx := requestctx.WithNamespace(context.Background(), "golden") + capturer, err := newGoldenIntentCapturer(ctx, NewReader(db, &SQLiteBackend{})) + if err != nil { + t.Fatal(err) + } + fixture := goldenIntentFixture{ + Corpus: 1, + Nodes: map[uint]goldenIntentNode{1: { + Name: "Build", QualifiedName: "workflow.Build", Kind: "function", + FilePath: "workflow/build.go", Namespace: "golden", StartLine: 10, + }}, + Documents: map[uint]goldenIntentDocument{10: {NodeID: 1, Content: "build the graph"}}, + Queries: map[string][]uint{"build graph": {10}}, + } + err = capturer.validateExisting(ctx, fixture) + if err == nil || !strings.Contains(err.Error(), "full capture") { + t.Fatalf("error = %v, want same-size reindex to require a full capture", err) + } +} diff --git a/internal/adapters/outbound/searchsql/goldenfixture_test.go b/internal/adapters/outbound/searchsql/goldenfixture_test.go index 8ead238e..262a1bf9 100644 --- a/internal/adapters/outbound/searchsql/goldenfixture_test.go +++ b/internal/adapters/outbound/searchsql/goldenfixture_test.go @@ -4,7 +4,11 @@ import ( "context" "encoding/json" "flag" + "fmt" "os" + "slices" + "sort" + "strconv" "testing" "gorm.io/driver/sqlite" @@ -13,6 +17,7 @@ import ( "github.com/tae2089/code-context-graph/internal/app/search/rank" requestctx "github.com/tae2089/code-context-graph/internal/ctx" + "github.com/tae2089/code-context-graph/internal/domain/graph" ) // TestCaptureGoldenCandidates refreshes the frozen candidate lists that the @@ -63,7 +68,14 @@ func TestCaptureGoldenCandidates(t *testing.T) { ctx := requestctx.WithNamespace(context.Background(), set.Corpus.Namespace) out := map[string][]goldenCandidate{} - outIntent := map[string]goldenIntentAnswer{} + capturer, err := newGoldenIntentCapturer(ctx, reader) + if err != nil { + t.Fatal(err) + } + outIntent := goldenIntentFixture{ + Corpus: capturer.corpus, Nodes: map[uint]goldenIntentNode{}, + Documents: map[uint]goldenIntentDocument{}, Queries: map[string][]uint{}, + } for _, q := range set.Queries { nodes, err := backend.Query(ctx, db, q.Query, rank.FetchLimit(goldenLimit)) if err != nil { @@ -81,45 +93,176 @@ func TestCaptureGoldenCandidates(t *testing.T) { }) } out[q.Query] = captured - answer, err := captureIntentAnswer(ctx, reader, q.Query) + matched, err := capturer.capture(ctx, q.Query, &outIntent) if err != nil { t.Fatalf("%q: %v", q.Query, err) } - outIntent[q.Query] = answer - t.Logf("%-30q -> %2d candidates, %2d intent hits", q.Query, len(captured), len(answer.Hits)) + t.Logf("%-30q -> %2d candidates, %2d matched intent reasons", q.Query, len(captured), matched) } + if err := validateGoldenIntentFixture(outIntent); err != nil { + t.Fatal(err) + } writeGoldenJSON(t, dir+"candidates.json", out) writeGoldenJSON(t, dir+"intent_candidates.json", outIntent) t.Log("candidates.json and intent_candidates.json rewritten; re-run the rank golden report and review every change") } -// captureIntentAnswer runs the production intent query for one golden query, -// with the same over-fetch the search service asks for, and keeps the whole -// answer: hits, scored terms with their reason counts, and the corpus size. -// The terms matter as much as the hits — membership is gated on them. -func captureIntentAnswer(ctx context.Context, reader *Reader, query string) (goldenIntentAnswer, error) { - result, err := reader.QueryIntent(ctx, query, rank.FetchLimit(goldenLimit)) +type goldenIntentCapturer struct { + reader *Reader + corpus int + reasonIDs map[string][]uint +} + +// newGoldenIntentCapturer indexes the corpus's persisted reason IDs once. Query +// captures can then store compact references while replay still receives every +// exact document MatchIntent returned. +func newGoldenIntentCapturer(ctx context.Context, reader *Reader) (*goldenIntentCapturer, error) { + var reasons []graph.SearchReason + if err := reader.db.WithContext(ctx). + Where("namespace = ?", requestctx.FromContext(ctx)). + Order("id").Find(&reasons).Error; err != nil { + return nil, err + } + c := &goldenIntentCapturer{reader: reader, corpus: len(reasons), reasonIDs: make(map[string][]uint, len(reasons))} + for _, reason := range reasons { + key := intentReasonKey(reason.NodeID, reason.Content) + c.reasonIDs[key] = append(c.reasonIDs[key], reason.ID) + } + return c, nil +} + +func intentReasonKey(nodeID uint, content string) string { + return strconv.FormatUint(uint64(nodeID), 10) + "\x00" + content +} + +func (c *goldenIntentCapturer) capture(ctx context.Context, query string, fixture *goldenIntentFixture) (int, error) { + docs, err := c.reader.backend.MatchIntent(ctx, c.reader.db, query, maxIntentCandidates) + if err != nil { + return 0, err + } + refs := make([]uint, 0, len(docs)) + used := make(map[string]int) + nodeIDs := make([]uint, 0, len(docs)) + seenNode := make(map[uint]bool) + for _, doc := range docs { + key := intentReasonKey(doc.NodeID, doc.Content) + at := used[key] + ids := c.reasonIDs[key] + if at >= len(ids) { + return 0, fmt.Errorf("matched intent reason for node %d is absent from search_reasons", doc.NodeID) + } + ref := ids[at] + used[key] = at + 1 + refs = append(refs, ref) + document := goldenIntentDocument{NodeID: doc.NodeID, Content: doc.Content} + if existing, ok := fixture.Documents[ref]; ok && existing != document { + return 0, fmt.Errorf("intent document id %d identifies two different reasons", ref) + } + fixture.Documents[ref] = document + if !seenNode[doc.NodeID] { + seenNode[doc.NodeID] = true + nodeIDs = append(nodeIDs, doc.NodeID) + } + } + sort.Slice(refs, func(i, j int) bool { return refs[i] < refs[j] }) + fixture.Queries[query] = refs + if len(nodeIDs) == 0 { + return 0, nil + } + nodes, err := loadNodesInOrder(ctx, c.reader.db, nodeIDs) if err != nil { - return goldenIntentAnswer{}, err - } - answer := goldenIntentAnswer{Corpus: result.Corpus} - for _, term := range result.Terms { - answer.Terms = append(answer.Terms, goldenIntentTerm{Text: term.Text, InReasons: term.InReasons}) - } - for _, h := range result.Hits { - answer.Hits = append(answer.Hits, goldenIntentHit{ - ID: h.Node.ID, - Name: h.Node.Name, - QualifiedName: h.Node.QualifiedName, - Kind: string(h.Node.Kind), - FilePath: h.Node.FilePath, - Intent: h.Node.Intent(), - Reason: h.Node.RecordedReason(), - Terms: h.Terms, - }) - } - return answer, nil + return 0, err + } + byID := make(map[uint]graph.Node, len(nodes)) + for _, node := range nodes { + byID[node.ID] = node + } + for _, doc := range docs { + node, ok := byID[doc.NodeID] + if !ok { + return 0, fmt.Errorf("matched intent node %d could not be loaded", doc.NodeID) + } + captured := goldenIntentNode{ + Name: node.Name, QualifiedName: doc.QualifiedName, Kind: string(doc.Kind), + FilePath: doc.FilePath, Namespace: doc.Namespace, StartLine: doc.StartLine, + Intent: node.Intent(), Reason: node.RecordedReason(), + } + if existing, ok := fixture.Nodes[doc.NodeID]; ok && existing != captured { + return 0, fmt.Errorf("intent node id %d identifies two different nodes", doc.NodeID) + } + fixture.Nodes[doc.NodeID] = captured + } + return len(refs), nil +} + +func validateGoldenIntentFixture(fixture goldenIntentFixture) error { + usedDocuments := make(map[uint]bool, len(fixture.Documents)) + usedNodes := make(map[uint]bool, len(fixture.Nodes)) + for query, refs := range fixture.Queries { + if !sort.SliceIsSorted(refs, func(i, j int) bool { return refs[i] < refs[j] }) { + return fmt.Errorf("intent refs for %q are not in canonical id order", query) + } + seen := make(map[uint]bool, len(refs)) + for _, ref := range refs { + if seen[ref] { + return fmt.Errorf("intent refs for %q repeat document id %d", query, ref) + } + seen[ref] = true + document, ok := fixture.Documents[ref] + if !ok { + return fmt.Errorf("intent refs for %q point to missing document id %d", query, ref) + } + if _, ok := fixture.Nodes[document.NodeID]; !ok { + return fmt.Errorf("intent document id %d points to missing node id %d", ref, document.NodeID) + } + usedDocuments[ref] = true + usedNodes[document.NodeID] = true + } + } + for id := range fixture.Documents { + if !usedDocuments[id] { + return fmt.Errorf("intent document id %d is unreachable from every query", id) + } + } + for id := range fixture.Nodes { + if !usedNodes[id] { + return fmt.Errorf("intent node id %d is unreachable from every query", id) + } + } + return nil +} + +func (c *goldenIntentCapturer) validateExisting(ctx context.Context, fixture goldenIntentFixture) error { + if err := validateGoldenIntentFixture(fixture); err != nil { + return err + } + if fixture.Corpus != c.corpus { + return fmt.Errorf("intent corpus changed from %d to %d; run the full capture", fixture.Corpus, c.corpus) + } + for id, document := range fixture.Documents { + ids := c.reasonIDs[intentReasonKey(document.NodeID, document.Content)] + if !slices.Contains(ids, id) { + return fmt.Errorf("intent document id %d no longer identifies the captured reason; run the full capture", id) + } + } + for id, want := range fixture.Nodes { + var node graph.Node + if err := c.reader.db.WithContext(ctx). + Where("id = ? AND namespace = ?", id, requestctx.FromContext(ctx)). + Preload("Annotation.Tags").First(&node).Error; err != nil { + return fmt.Errorf("intent node id %d no longer resolves: %w", id, err) + } + got := goldenIntentNode{ + Name: node.Name, QualifiedName: node.QualifiedName, Kind: string(node.Kind), + FilePath: node.FilePath, Namespace: node.Namespace, StartLine: node.StartLine, + Intent: node.Intent(), Reason: node.RecordedReason(), + } + if got != want { + return fmt.Errorf("intent node id %d no longer identifies the captured node; run the full capture", id) + } + } + return nil } func writeGoldenJSON(t *testing.T, path string, data any) { @@ -172,7 +315,7 @@ func TestCaptureMissingGoldenCandidates(t *testing.T) { if err := json.Unmarshal(blob, &existing); err != nil { t.Fatal(err) } - existingIntent := map[string]goldenIntentAnswer{} + existingIntent := goldenIntentFixture{} if blob, err := os.ReadFile(dir + "intent_candidates.json"); err == nil { if err := json.Unmarshal(blob, &existingIntent); err != nil { t.Fatal(err) @@ -186,11 +329,27 @@ func TestCaptureMissingGoldenCandidates(t *testing.T) { backend := &SQLiteBackend{} reader := NewReader(db, backend) ctx := requestctx.WithNamespace(context.Background(), set.Corpus.Namespace) + capturer, err := newGoldenIntentCapturer(ctx, reader) + if err != nil { + t.Fatal(err) + } + if err := capturer.validateExisting(ctx, existingIntent); err != nil { + t.Fatal(err) + } + if existingIntent.Nodes == nil { + existingIntent.Nodes = map[uint]goldenIntentNode{} + } + if existingIntent.Documents == nil { + existingIntent.Documents = map[uint]goldenIntentDocument{} + } + if existingIntent.Queries == nil { + existingIntent.Queries = map[string][]uint{} + } added := 0 for _, q := range set.Queries { _, haveNamed := existing[q.Query] - _, haveIntent := existingIntent[q.Query] + _, haveIntent := existingIntent.Queries[q.Query] if haveNamed && haveIntent { continue } @@ -212,20 +371,23 @@ func TestCaptureMissingGoldenCandidates(t *testing.T) { } existing[q.Query] = captured } + matched := len(existingIntent.Queries[q.Query]) if !haveIntent { - answer, err := captureIntentAnswer(ctx, reader, q.Query) + matched, err = capturer.capture(ctx, q.Query, &existingIntent) if err != nil { t.Fatalf("%q: %v", q.Query, err) } - existingIntent[q.Query] = answer } added++ - t.Logf("added %-40q -> %2d candidates, %2d intent hits", q.Query, len(existing[q.Query]), len(existingIntent[q.Query].Hits)) + t.Logf("added %-40q -> %2d candidates, %2d matched intent reasons", q.Query, len(existing[q.Query]), matched) } if added == 0 { t.Log("every query already has captured candidates; nothing written") return } + if err := validateGoldenIntentFixture(existingIntent); err != nil { + t.Fatal(err) + } writeGoldenJSON(t, dir+"candidates.json", existing) writeGoldenJSON(t, dir+"intent_candidates.json", existingIntent) t.Logf("candidates.json and intent_candidates.json: %d queries added, existing entries untouched", added) @@ -282,31 +444,25 @@ type goldenCandidate struct { Intent string `json:"intent,omitempty"` } -// goldenIntentAnswer mirrors the intent-candidate record the rank golden set -// reads back: the ranked hits, every scored term with its reason count, and the -// corpus size. The terms are captured because membership is gated on them. -type goldenIntentAnswer struct { - Corpus int `json:"corpus,omitempty"` - Terms []goldenIntentTerm `json:"terms,omitempty"` - Hits []goldenIntentHit `json:"hits,omitempty"` +type goldenIntentFixture struct { + Corpus int `json:"corpus,omitempty"` + Nodes map[uint]goldenIntentNode `json:"nodes,omitempty"` + Documents map[uint]goldenIntentDocument `json:"documents,omitempty"` + Queries map[string][]uint `json:"queries"` } -// goldenIntentTerm is one scored term of the question and how many recorded -// reasons in the whole index hold it. -type goldenIntentTerm struct { - Text string `json:"text"` - InReasons int `json:"in_reasons"` +type goldenIntentDocument struct { + NodeID uint `json:"node_id"` + Content string `json:"content"` } -// goldenIntentHit is one node the intent index answered the query with, the -// recorded reason it matched, and the query terms the scorer counted in it. -type goldenIntentHit struct { - ID uint `json:"id"` - Name string `json:"name"` - QualifiedName string `json:"qualified_name"` - Kind string `json:"kind"` - FilePath string `json:"file_path"` - Intent string `json:"intent,omitempty"` - Reason string `json:"reason,omitempty"` - Terms []string `json:"terms,omitempty"` +type goldenIntentNode struct { + Name string `json:"name"` + QualifiedName string `json:"qualified_name"` + Kind string `json:"kind"` + FilePath string `json:"file_path"` + Namespace string `json:"namespace,omitempty"` + StartLine int `json:"start_line,omitempty"` + Intent string `json:"intent,omitempty"` + Reason string `json:"reason,omitempty"` } diff --git a/internal/adapters/outbound/searchsql/parity_test.go b/internal/adapters/outbound/searchsql/parity_test.go index 3d4a0016..a22f7065 100644 --- a/internal/adapters/outbound/searchsql/parity_test.go +++ b/internal/adapters/outbound/searchsql/parity_test.go @@ -221,7 +221,7 @@ func loadParityCorpus(t *testing.T, dir string) parityCorpus { readParityJSON(t, dir+"queries.json", &set) named := map[string][]goldenCandidate{} readParityJSON(t, dir+"candidates.json", &named) - intents := map[string]goldenIntentAnswer{} + intents := goldenIntentFixture{} readParityJSON(t, dir+"intent_candidates.json", &intents) corpus := parityCorpus{namespace: set.Corpus.Namespace} @@ -245,8 +245,10 @@ func loadParityCorpus(t *testing.T, dir string) parityCorpus { for _, c := range named[q.Query] { add(parityNode{name: c.Name, qualifiedName: c.QualifiedName, kind: c.Kind, filePath: c.FilePath, intent: c.Intent}) } - for _, h := range intents[q.Query].Hits { - add(parityNode{name: h.Name, qualifiedName: h.QualifiedName, kind: h.Kind, filePath: h.FilePath, intent: h.Intent, reason: h.Reason}) + for _, ref := range intents.Queries[q.Query] { + document := intents.Documents[ref] + node := intents.Nodes[document.NodeID] + add(parityNode{name: node.Name, qualifiedName: node.QualifiedName, kind: node.Kind, filePath: node.FilePath, intent: node.Intent, reason: node.Reason}) } } return corpus diff --git a/internal/app/search/rank/golden_guard_test.go b/internal/app/search/rank/golden_guard_test.go index 02fe890d..f6775b22 100644 --- a/internal/app/search/rank/golden_guard_test.go +++ b/internal/app/search/rank/golden_guard_test.go @@ -221,10 +221,12 @@ var zeroScoreNotes = map[string]map[string]zeroScoreNote{ // → 0.938. Identifier names and file paths are what a question has least in // common with, which is the reason absorbIntent leaves intent order alone. // - // What is left to try lives in intentrank, and the ratchet cannot see it: - // intent_candidates.json freezes that scorer's ranked output, so a scoring - // change moves nothing here until the fixture is recaptured. The recapture - // is then what a reviewer reads. See testdata/README.md. + // The fixture now stores matched reasons and the ratchet calls intentrank. + // Two general rules were measured through that path and rejected. Symmetric + // prefix matching paid the total-byte-limit query but lowered ccg top1, + // top3 and MRR and context-diary MRR. Ordering first by distinct query-term + // coverage put the oversized-file answer in file 10, but regressed six ccg + // queries and lowered MRR. Neither satisfies the corpus-wide contract. // // The last one arrived with a fixture refresh, and no line of code // moved with it. It was already at the edge of the page on the stale diff --git a/internal/app/search/rank/golden_test.go b/internal/app/search/rank/golden_test.go index e8b2850e..f3ba3a72 100644 --- a/internal/app/search/rank/golden_test.go +++ b/internal/app/search/rank/golden_test.go @@ -18,6 +18,7 @@ import ( searchapp "github.com/tae2089/code-context-graph/internal/app/search" "github.com/tae2089/code-context-graph/internal/app/search/evidence" intentapp "github.com/tae2089/code-context-graph/internal/app/search/intent" + "github.com/tae2089/code-context-graph/internal/app/search/intentrank" "github.com/tae2089/code-context-graph/internal/domain/graph" ) @@ -124,68 +125,72 @@ func nodeOf(c goldenCandidate) graph.Node { return n } -// goldenIntentAnswer is everything the intent index said about one golden -// query, as captured through the production intent query path: the ranked hits, -// every scored term with its reason count, and the corpus size. The terms are -// captured because membership is gated on them — a replay without them would -// score a search that thinks every question is answerable. -type goldenIntentAnswer struct { - Corpus int `json:"corpus,omitempty"` - Terms []goldenIntentTerm `json:"terms,omitempty"` - Hits []goldenIntentHit `json:"hits,omitempty"` +// goldenIntentFixture stores each corpus node and indexed reason once, then +// records which reason rows each query matched. Keeping scorer input rather +// than output makes replay exercise the current intentrank.Rank implementation +// without repeating the same corpus text under every query that matched it. +type goldenIntentFixture struct { + Corpus int `json:"corpus,omitempty"` + Nodes map[uint]goldenIntentNode `json:"nodes,omitempty"` + Documents map[uint]goldenIntentDocument `json:"documents,omitempty"` + Queries map[string][]uint `json:"queries"` } -// goldenIntentTerm is one scored term of the question and how many recorded -// reasons in the whole index hold it. -type goldenIntentTerm struct { - Text string `json:"text"` - InReasons int `json:"in_reasons"` -} - -// goldenIntentHit is one candidate the intent index answered a golden query -// with, as captured through the production intent query path. -type goldenIntentHit struct { - ID uint `json:"id"` +type goldenIntentNode struct { Name string `json:"name"` QualifiedName string `json:"qualified_name"` Kind string `json:"kind"` FilePath string `json:"file_path"` + Namespace string `json:"namespace,omitempty"` + StartLine int `json:"start_line,omitempty"` Intent string `json:"intent,omitempty"` - // Reason is the recorded reason the index matched — the @intent, or the - // @domainRule when the node has no @intent of its own. + // Reason is what search displays: @intent when present, otherwise the first + // @domainRule. Content remains the exact indexed reason Rank scores. Reason string `json:"reason,omitempty"` - // Terms are the query terms the intent scorer counted in Reason. - Terms []string `json:"terms,omitempty"` } -// intentHitOf rebuilds the hit the intent query hands the service, with enough -// of the annotation restored that RecordedReason reads the captured reason back. -func intentHitOf(h goldenIntentHit) intentapp.Hit { +type goldenIntentDocument struct { + NodeID uint `json:"node_id"` + Content string `json:"content"` +} + +func (d goldenIntentDocument) rankDoc(node goldenIntentNode) intentrank.Doc { + return intentrank.Doc{ + NodeID: d.NodeID, Content: d.Content, FilePath: node.FilePath, + QualifiedName: node.QualifiedName, Kind: graph.NodeKind(node.Kind), + Namespace: node.Namespace, StartLine: node.StartLine, + } +} + +// intentNodeOf rebuilds the node the intent query hands the service, with enough +// annotation state that RecordedReason reads the captured display reason back. +func intentNodeOf(id uint, c goldenIntentNode) graph.Node { n := graph.Node{ - ID: h.ID, - Name: h.Name, - QualifiedName: h.QualifiedName, - Kind: graph.NodeKind(h.Kind), - FilePath: h.FilePath, + ID: id, + Name: c.Name, + QualifiedName: c.QualifiedName, + Kind: graph.NodeKind(c.Kind), + FilePath: c.FilePath, + StartLine: c.StartLine, } tags := make([]graph.DocTag, 0, 2) - if h.Intent != "" { - tags = append(tags, graph.DocTag{Kind: graph.TagIntent, Value: h.Intent}) + if c.Intent != "" { + tags = append(tags, graph.DocTag{Kind: graph.TagIntent, Value: c.Intent}) } - if h.Reason != "" && h.Reason != h.Intent { - tags = append(tags, graph.DocTag{Kind: graph.TagDomainRule, Value: h.Reason}) + if c.Reason != "" && c.Reason != c.Intent { + tags = append(tags, graph.DocTag{Kind: graph.TagDomainRule, Value: c.Reason}) } if len(tags) > 0 { n.Annotation = &graph.Annotation{Tags: tags} } - return intentapp.Hit{Node: n, Terms: h.Terms} + return n } // fixtureSearcher answers the service's two fetches from the frozen captures, // so the only thing that can move a result is the search code itself. type fixtureSearcher struct { named map[string][]goldenCandidate - intent map[string]goldenIntentAnswer + intent goldenIntentFixture } func (f fixtureSearcher) Query(_ context.Context, query string, _ int) ([]graph.Node, error) { @@ -197,17 +202,26 @@ func (f fixtureSearcher) Query(_ context.Context, query string, _ int) ([]graph. return nodes, nil } -func (f fixtureSearcher) QueryIntent(_ context.Context, query string, _ int) (intentapp.Result, error) { - captured := f.intent[query] - hits := make([]intentapp.Hit, len(captured.Hits)) - for i, h := range captured.Hits { - hits[i] = intentHitOf(h) - } - terms := make([]intentapp.Term, len(captured.Terms)) - for i, term := range captured.Terms { +func (f fixtureSearcher) QueryIntent(_ context.Context, query string, limit int) (intentapp.Result, error) { + refs := f.intent.Queries[query] + docs := make([]intentrank.Doc, 0, len(refs)) + nodes := make(map[uint]graph.Node, len(refs)) + for _, ref := range refs { + document := f.intent.Documents[ref] + node := f.intent.Nodes[document.NodeID] + docs = append(docs, document.rankDoc(node)) + nodes[document.NodeID] = intentNodeOf(document.NodeID, node) + } + ranked := intentrank.Rank(query, docs, f.intent.Corpus, limit) + hits := make([]intentapp.Hit, 0, len(ranked.Matches)) + for _, match := range ranked.Matches { + hits = append(hits, intentapp.Hit{Node: nodes[match.NodeID], Terms: match.Terms}) + } + terms := make([]intentapp.Term, len(ranked.Terms)) + for i, term := range ranked.Terms { terms[i] = intentapp.Term{Text: term.Text, InReasons: term.InReasons} } - return intentapp.Result{Hits: hits, Terms: terms, Corpus: captured.Corpus}, nil + return intentapp.Result{Hits: hits, Terms: terms, Corpus: ranked.Corpus}, nil } // outcome is one query's result, and the unit the baseline compares. @@ -255,22 +269,90 @@ func loadGolden(t *testing.T, dir string) (goldenSet, fixtureSearcher) { var set goldenSet readJSON(t, dir+"/queries.json", &set) searcher := fixtureSearcher{ - named: map[string][]goldenCandidate{}, - intent: map[string]goldenIntentAnswer{}, + named: map[string][]goldenCandidate{}, } readJSON(t, dir+"/candidates.json", &searcher.named) readJSON(t, dir+"/intent_candidates.json", &searcher.intent) + if err := validateGoldenIntentFixture(searcher.intent); err != nil { + t.Fatalf("%s/intent_candidates.json: %v", dir, err) + } + if err := validateGoldenPoolIdentities(searcher.named, searcher.intent); err != nil { + t.Fatalf("%s: %v", dir, err) + } for _, q := range set.Queries { if _, ok := searcher.named[q.Query]; !ok { t.Fatalf("query %q has no captured candidates; re-run the capture", q.Query) } - if _, ok := searcher.intent[q.Query]; !ok { + if _, ok := searcher.intent.Queries[q.Query]; !ok { t.Fatalf("query %q has no captured intent candidates; re-run the capture", q.Query) } } return set, searcher } +type goldenNodeIdentity struct { + QualifiedName string + Kind string + FilePath string +} + +func validateGoldenPoolIdentities(named map[string][]goldenCandidate, intent goldenIntentFixture) error { + identities := make(map[uint]goldenNodeIdentity) + for query, candidates := range named { + for _, candidate := range candidates { + got := goldenNodeIdentity{candidate.QualifiedName, candidate.Kind, candidate.FilePath} + if previous, ok := identities[candidate.ID]; ok && previous != got { + return fmt.Errorf("named candidates reuse node id %d for different identities at query %q", candidate.ID, query) + } + identities[candidate.ID] = got + } + } + for id, node := range intent.Nodes { + got := goldenNodeIdentity{node.QualifiedName, node.Kind, node.FilePath} + if previous, ok := identities[id]; ok && previous != got { + return fmt.Errorf("named and intent candidates give node id %d different identities", id) + } + } + return nil +} + +func validateGoldenIntentFixture(fixture goldenIntentFixture) error { + usedDocuments := make(map[uint]bool, len(fixture.Documents)) + usedNodes := make(map[uint]bool, len(fixture.Nodes)) + for query, refs := range fixture.Queries { + if !sort.SliceIsSorted(refs, func(i, j int) bool { return refs[i] < refs[j] }) { + return fmt.Errorf("refs for %q are not in canonical id order", query) + } + seen := make(map[uint]bool, len(refs)) + for _, ref := range refs { + if seen[ref] { + return fmt.Errorf("refs for %q repeat document id %d", query, ref) + } + seen[ref] = true + document, ok := fixture.Documents[ref] + if !ok { + return fmt.Errorf("refs for %q point to missing document id %d", query, ref) + } + if _, ok := fixture.Nodes[document.NodeID]; !ok { + return fmt.Errorf("document id %d points to missing node id %d", ref, document.NodeID) + } + usedDocuments[ref] = true + usedNodes[document.NodeID] = true + } + } + for id := range fixture.Documents { + if !usedDocuments[id] { + return fmt.Errorf("document id %d is unreachable from every query", id) + } + } + for id := range fixture.Nodes { + if !usedNodes[id] { + return fmt.Errorf("node id %d is unreachable from every query", id) + } + } + return nil +} + func readJSON(t *testing.T, path string, into any) { t.Helper() raw, err := os.ReadFile(path) @@ -303,14 +385,16 @@ func (rel relevance) count() int { return len(rel.nodes) + len(rel.files) } // retrieved reports whether any judged node or file is anywhere in either // captured pool — the ceiling no ranking or filtering change can lift. -func (rel relevance) retrieved(named []goldenCandidate, intent goldenIntentAnswer) bool { +func (rel relevance) retrieved(named []goldenCandidate, intent goldenIntentFixture, query string) bool { for _, c := range named { if rel.nodes[label(nodeOf(c))] || rel.files[c.FilePath] { return true } } - for _, h := range intent.Hits { - if rel.nodes[label(intentHitOf(h).Node)] || rel.files[h.FilePath] { + for _, ref := range intent.Queries[query] { + document := intent.Documents[ref] + node := intent.Nodes[document.NodeID] + if rel.nodes[label(intentNodeOf(document.NodeID, node))] || rel.files[node.FilePath] { return true } } @@ -355,7 +439,7 @@ func runGolden(t *testing.T, dir string) []outcome { Bucket: q.Bucket, Negative: rel.count() == 0, OutOfScope: q.declinedBy("search"), - Retrieved: rel.retrieved(searcher.named[q.Query], searcher.intent[q.Query]), + Retrieved: rel.retrieved(searcher.named[q.Query], searcher.intent, q.Query), Relevant: rel.count(), } list, err := svc.Search(context.Background(), searchapp.Params{Query: q.Query, Limit: goldenLimit}) diff --git a/internal/app/search/rank/intent_fixture_test.go b/internal/app/search/rank/intent_fixture_test.go new file mode 100644 index 00000000..18591061 --- /dev/null +++ b/internal/app/search/rank/intent_fixture_test.go @@ -0,0 +1,113 @@ +package rank_test + +import ( + "context" + "slices" + "strings" + "testing" +) + +// The intent fixture freezes retrieval input, not scorer output. Replaying it +// must therefore apply the current intent scorer and ignore capture order. +func TestFixtureSearcher_QueryIntentRanksCapturedDocuments(t *testing.T) { + searcher := fixtureSearcher{intent: goldenIntentFixture{ + Corpus: 40, + Nodes: map[uint]goldenIntentNode{ + 1: {Name: "Sync", QualifiedName: "repo.Sync", Kind: "function", FilePath: "repo/sync.go"}, + 2: {Name: "Quarantine", QualifiedName: "repo.Quarantine", Kind: "function", FilePath: "repo/quarantine.go", Intent: "quarantine a repository whose sync keeps failing"}, + }, + Documents: map[uint]goldenIntentDocument{ + 10: {NodeID: 1, Content: "sync something else"}, + 20: {NodeID: 2, Content: "quarantine a repository whose sync keeps failing"}, + }, + Queries: map[string][]uint{"why quarantine a sync": {10, 20}}, + }} + + got, err := searcher.QueryIntent(context.Background(), "why quarantine a sync", 2) + if err != nil { + t.Fatal(err) + } + if len(got.Hits) != 2 { + t.Fatalf("got %d hits, want 2", len(got.Hits)) + } + if ids := []uint{got.Hits[0].Node.ID, got.Hits[1].Node.ID}; !slices.Equal(ids, []uint{2, 1}) { + t.Fatalf("got node order %v, want scorer order [2 1]", ids) + } + if !slices.Equal(got.Hits[0].Terms, []string{"quarantine", "sync"}) { + t.Errorf("first hit terms = %v, want the scorer's matched terms", got.Hits[0].Terms) + } +} + +func TestValidateGoldenIntentFixtureRejectsBrokenReferences(t *testing.T) { + valid := func() goldenIntentFixture { + return goldenIntentFixture{ + Nodes: map[uint]goldenIntentNode{1: {Name: "One"}}, + Documents: map[uint]goldenIntentDocument{10: {NodeID: 1, Content: "one"}}, + Queries: map[string][]uint{"query": {10}}, + } + } + tests := []struct { + name string + edit func(*goldenIntentFixture) + want string + }{ + {name: "unsorted", edit: func(f *goldenIntentFixture) { + f.Documents[20] = goldenIntentDocument{NodeID: 1, Content: "two"} + f.Queries["query"] = []uint{20, 10} + }, want: "canonical"}, + {name: "duplicate", edit: func(f *goldenIntentFixture) { + f.Queries["query"] = []uint{10, 10} + }, want: "repeat"}, + {name: "dangling document", edit: func(f *goldenIntentFixture) { + f.Queries["query"] = []uint{99} + }, want: "missing document"}, + {name: "dangling node", edit: func(f *goldenIntentFixture) { + f.Documents[10] = goldenIntentDocument{NodeID: 99, Content: "one"} + }, want: "missing node"}, + {name: "unreachable document", edit: func(f *goldenIntentFixture) { + f.Documents[20] = goldenIntentDocument{NodeID: 1, Content: "two"} + }, want: "unreachable"}, + {name: "unreachable node", edit: func(f *goldenIntentFixture) { + f.Nodes[2] = goldenIntentNode{Name: "Two"} + }, want: "unreachable"}, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + fixture := valid() + tc.edit(&fixture) + if err := validateGoldenIntentFixture(fixture); err == nil || !strings.Contains(err.Error(), tc.want) { + t.Fatalf("error = %v, want it to contain %q", err, tc.want) + } + }) + } +} + +func TestValidateGoldenPoolIdentitiesRejectsNodeIDCollisions(t *testing.T) { + tests := []struct { + name string + named map[string][]goldenCandidate + intent goldenIntentFixture + }{ + { + name: "named candidates disagree", + named: map[string][]goldenCandidate{ + "first": {{ID: 1, QualifiedName: "repo.First", Kind: "function", FilePath: "first.go"}}, + "second": {{ID: 1, QualifiedName: "repo.Second", Kind: "function", FilePath: "second.go"}}, + }, + }, + { + name: "named and intent disagree", + named: map[string][]goldenCandidate{"query": {{ID: 1, QualifiedName: "repo.Named", Kind: "function", FilePath: "named.go"}}}, + intent: goldenIntentFixture{Nodes: map[uint]goldenIntentNode{ + 1: {QualifiedName: "repo.Intent", Kind: "function", FilePath: "intent.go"}, + }}, + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + if err := validateGoldenPoolIdentities(tc.named, tc.intent); err == nil { + t.Fatal("expected a shared node ID identity collision") + } + }) + } +} diff --git a/internal/app/search/rank/testdata/README.md b/internal/app/search/rank/testdata/README.md index 0698e5da..cd479190 100644 --- a/internal/app/search/rank/testdata/README.md +++ b/internal/app/search/rank/testdata/README.md @@ -109,29 +109,33 @@ scope rules. | --- | --- | --- | | `queries.json` | a human | 91 queries with the answers a developer typing them would accept, and why | | `candidates.json` | `TestCaptureGoldenCandidates` | the full-text candidates for `search`, in retrieval order, at `rank.FetchLimit(10)` | -| `intent_candidates.json` | `TestCaptureGoldenCandidates` | what the intent index said per query: ranked hits, every scored term with its reason count, and the corpus size | +| `intent_candidates.json` | `TestCaptureGoldenCandidates` | the matched reason documents per query, their nodes, and the corpus size | | `baseline.json` | `-update-golden` | where `search` put the first relevant node on the last accepted run | -`intent_candidates.json` keeps the term counts, not only the hits, because -membership is gated on them: `intent.Result.CanAnswer` drops every intent hit -when fewer than half the question's scored terms appear in any recorded reason. -A replay without the terms would score a search that thinks every question is -answerable. +`intent_candidates.json` stores each node and matched reason once at corpus +scope, then gives each query a sorted list of reason IDs. Replay expands those +references into `intentrank.Doc` values and calls `intentrank.Rank`, so the +scorer recomputes both answer order and the term counts that +`intent.Result.CanAnswer` gates on. The fixture is captured through the production query path, so the tool is scored on exactly the pool it gets in production. Once captured it is never re-read from a database, which is what makes a metric change attributable to the code and nothing else. -What `intent_candidates.json` freezes is wider than retrieval, and the line is -easy to miss. `hits` is `intentrank.Rank`'s output — already scored, already -ordered — and the replay hands that order straight to the service, so the scorer -itself is never called. Panicking inside `Rank` and re-running `make search-eval` -prints all four scoreboards unchanged, which is the proof. So an intent-ranking -change moves nothing here until this file is recaptured, and it is the recapture -a reviewer has to read. Whoever wants the ratchet to measure the scorer directly -has to change what is captured — the matched documents rather than the ranked -hits — which is a fixture format change, not a scoring one. +The boundary is now retrieval input, not scorer output. Removing the replay's +`intentrank.Rank` call makes the focused fixture test fail and makes the ccg and +context-diary ratchets report lost relevant answers. A scorer-only change is +therefore measured without recapturing the fixture. The capture still has to be +refreshed when intent retrieval, indexed reason text, corpus membership, or node +identity changes. + +The named and intent fixtures are one snapshot contract, not independent +captures. Replay rejects a node ID when the named pool uses it for a different +qualified name, kind, or file path than the intent pool, and also rejects a +named fixture that reuses one ID for two identities. A full capture rewrites +both files together; mixing captures from separately built graphs is invalid +even when each file is valid by itself. ### Drift the next recapture will show @@ -264,10 +268,10 @@ a reviewer reads. ## Rebuilding the candidate fixture Only when candidate retrieval itself changes — the tokenizer, `SanitizeFTS5`, -`promoteExactNameMatch`, the indexed document content — or when `intentrank.Rank` -does, since the intent capture stores that scorer's ranked output rather than the -documents it ranked. It needs a graph at the repository root, which is build -output and not tracked: +`promoteExactNameMatch`, the indexed document content — or when intent retrieval, +indexed reasons, corpus membership, or captured node identity changes. A change +to `intentrank.Rank` alone does not require a recapture. The capture needs a graph +at the repository root, which is build output and not tracked: ```sh make wiki-db # builds ./ccg.db, which the capture reads From 29e61e23d2cea0e8707cd0ae75cdd1d95716b2bc Mon Sep 17 00:00:00 2001 From: tae2089 Date: Tue, 11 Aug 2026 19:00:30 +0900 Subject: [PATCH 2/2] testdata(search): recapture golden inputs from one graph snapshot --- .../app/search/rank/testdata/baseline.json | 10 +- .../app/search/rank/testdata/candidates.json | 884 +- .../corpora/cobra/intent_candidates.json | 28 +- .../context-diary/intent_candidates.json | 3684 +- .../corpora/gorm/intent_candidates.json | 32 +- .../rank/testdata/intent_candidates.json | 73161 +++++++--------- .../app/search/rank/testdata/queries.json | 6 +- 7 files changed, 35224 insertions(+), 42581 deletions(-) diff --git a/internal/app/search/rank/testdata/baseline.json b/internal/app/search/rank/testdata/baseline.json index c37450ae..2621170e 100644 --- a/internal/app/search/rank/testdata/baseline.json +++ b/internal/app/search/rank/testdata/baseline.json @@ -270,7 +270,7 @@ "relevant": 4, "found": 4, "rank": 1, - "weak_filtered": 16 + "weak_filtered": 17 }, { "query": "flow membership", @@ -535,7 +535,7 @@ "query": "what makes the order files are parsed the same on every build", "bucket": "behavior", "retrieved": true, - "returned": 23, + "returned": 24, "relevant": 1, "found": 1, "rank": 2 @@ -636,7 +636,7 @@ "query": "what made readiness fail while webhook work kept piling up", "bucket": "incident", "retrieved": true, - "returned": 30, + "returned": 29, "relevant": 1, "found": 1, "rank": 3 @@ -690,7 +690,7 @@ "query": "why does editing a function with many outgoing links rank as riskier", "bucket": "behavior", "retrieved": false, - "returned": 24, + "returned": 23, "relevant": 1, "found": 0, "rank": 0 @@ -838,7 +838,7 @@ { "query": "what decides whether generated documentation may delete an existing page", "bucket": "policy", - "retrieved": false, + "retrieved": true, "returned": 16, "relevant": 1, "found": 0, diff --git a/internal/app/search/rank/testdata/candidates.json b/internal/app/search/rank/testdata/candidates.json index 0340233f..96deb41c 100644 --- a/internal/app/search/rank/testdata/candidates.json +++ b/internal/app/search/rank/testdata/candidates.json @@ -59,7 +59,7 @@ ], "RunMigrations": [ { - "id": 1735, + "id": 1736, "name": "RunMigrations", "qualified_name": "migration.RunMigrations", "kind": "function", @@ -67,7 +67,7 @@ "intent": "애플리케이션 기본 마이그레이션 경로에 legacy baseline 로직을 포함시킨다." }, { - "id": 1884, + "id": 1889, "name": "Migrate", "qualified_name": "runtime.Runtime.Migrate", "kind": "function", @@ -75,7 +75,7 @@ "intent": "expose migration execution without coupling binaries to migration internals." }, { - "id": 1734, + "id": 1735, "name": "Run", "qualified_name": "migration.Run", "kind": "function", @@ -83,7 +83,7 @@ "intent": "마이그레이션 실행과 사후 스키마 정합성 검사를 하나의 진입점으로 묶는다." }, { - "id": 1825, + "id": 1830, "name": "SchemaVersion", "qualified_name": "graph.SchemaVersion", "kind": "class", @@ -99,7 +99,7 @@ "intent": "give tests and callers a one-call schema setup that reuses the production migrations." }, { - "id": 1727, + "id": 1728, "name": "internal/db/migration/embed.go", "qualified_name": "internal/db/migration/embed.go", "kind": "file", @@ -143,7 +143,7 @@ ], "UnresolvedEdgeCandidate": [ { - "id": 1831, + "id": 1836, "name": "UnresolvedEdgeCandidate", "qualified_name": "graph.UnresolvedEdgeCandidate", "kind": "class", @@ -151,7 +151,7 @@ "intent": "let newly added symbols select affected unchanged callers without reparsing the whole graph." }, { - "id": 1832, + "id": 1837, "name": "Edge", "qualified_name": "graph.UnresolvedEdgeCandidate.Edge", "kind": "function", @@ -249,7 +249,7 @@ "intent": "expose annotation tags with typed fields for getAnnotation callers." }, { - "id": 1796, + "id": 1797, "name": "Annotation", "qualified_name": "graph.Annotation", "kind": "class", @@ -257,7 +257,7 @@ "intent": "노드에 연결된 요약과 태그 메타데이터를 영속화한다." }, { - "id": 1674, + "id": 1675, "name": "AnnotationDetail", "qualified_name": "wiki.AnnotationDetail", "kind": "class", @@ -265,7 +265,7 @@ "intent": "serialize annotation summary, context, and tags in a UI-friendly shape." }, { - "id": 1935, + "id": 1940, "name": "AnnotationDetails", "qualified_name": "AnnotationDetails", "kind": "type", @@ -297,7 +297,7 @@ "intent": "batch-load Wiki annotations with deterministic tag ordering." }, { - "id": 1936, + "id": 1941, "name": "AnnotationTag", "qualified_name": "AnnotationTag", "kind": "type", @@ -343,6 +343,14 @@ "file_path": "internal/adapters/inbound/wikihttp/server.go", "intent": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON." }, + { + "id": 1790, + "name": "Parser", + "qualified_name": "annotation.Parser", + "kind": "class", + "file_path": "internal/domain/annotation/parser.go", + "intent": "convert stripped documentation text into graph.Annotation values" + }, { "id": 386, "name": "annotationDetailFromModel", @@ -352,15 +360,7 @@ "intent": "convert a stored annotation into the same details shape used by wiki-index.json." }, { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values" - }, - { - "id": 1794, + "id": 1795, "name": "internal/domain/graph/annotation.go", "qualified_name": "internal/domain/graph/annotation.go", "kind": "file", @@ -376,7 +376,7 @@ "intent": "disambiguate overloaded or repeated declarations sharing the same qualified name." }, { - "id": 1780, + "id": 1781, "name": "NewNormalizer", "qualified_name": "annotation.NewNormalizer", "kind": "function", @@ -392,7 +392,7 @@ "intent": "carry the minimal source facts needed to materialize a cross-namespace reference." }, { - "id": 1790, + "id": 1791, "name": "NewParser", "qualified_name": "annotation.NewParser", "kind": "function", @@ -400,7 +400,7 @@ "intent": "provide a reusable annotation parser instance for binding pipelines" }, { - "id": 1778, + "id": 1779, "name": "internal/domain/annotation/normalizer.go", "qualified_name": "internal/domain/annotation/normalizer.go", "kind": "file", @@ -416,7 +416,7 @@ "intent": "collapse per-annotation lookup and write round trips into bounded batch operations." }, { - "id": 1779, + "id": 1780, "name": "Normalizer", "qualified_name": "annotation.Normalizer", "kind": "class", @@ -424,14 +424,14 @@ "intent": "normalize comment text before annotation parsing across supported languages" }, { - "id": 1788, + "id": 1789, "name": "internal/domain/annotation/parser.go", "qualified_name": "internal/domain/annotation/parser.go", "kind": "file", "file_path": "internal/domain/annotation/parser.go" }, { - "id": 1781, + "id": 1782, "name": "Normalize", "qualified_name": "annotation.Normalizer.Normalize", "kind": "function", @@ -447,7 +447,7 @@ "intent": "keep the single-annotation API compatible while delegating persistence to the batch path." }, { - "id": 1782, + "id": 1783, "name": "isGoDirective", "qualified_name": "annotation.isGoDirective", "kind": "function", @@ -471,7 +471,7 @@ "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments." }, { - "id": 1791, + "id": 1792, "name": "Parse", "qualified_name": "annotation.Parser.Parse", "kind": "function", @@ -487,7 +487,7 @@ "intent": "load a node's structured comment and tags together for search and display." }, { - "id": 1645, + "id": 1646, "name": "loadAnnotations", "qualified_name": "wiki.Builder.loadAnnotations", "kind": "function", @@ -503,7 +503,7 @@ "intent": "prepare annotation rows for the flush-scoped bulk write without issuing per-file SQL." }, { - "id": 1787, + "id": 1788, "name": "stripLinePrefix", "qualified_name": "annotation.stripLinePrefix", "kind": "function", @@ -511,13 +511,21 @@ "intent": "normalize individual documentation lines across language comment syntaxes" }, { - "id": 1835, + "id": 1840, "name": "Ref", "qualified_name": "reference.Ref", "kind": "class", "file_path": "internal/domain/reference/ref.go", "intent": "represent cross-namespace @see links without coupling annotations to graph storage." }, + { + "id": 1784, + "name": "stripBlockDelimiters", + "qualified_name": "annotation.stripBlockDelimiters", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "intent": "keep only the inner documentation payload from block-style comments" + }, { "id": 1081, "name": "hasContent", @@ -526,14 +534,6 @@ "file_path": "internal/app/ingest/binding/binder.go", "intent": "skip empty annotation payloads before they are bound to nodes" }, - { - "id": 1783, - "name": "stripBlockDelimiters", - "qualified_name": "annotation.stripBlockDelimiters", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "keep only the inner documentation payload from block-style comments" - }, { "id": 1048, "name": "Contradiction", @@ -551,7 +551,7 @@ "intent": "persist all batch nodes before annotations and all edges so references can resolve with fewer store operations." }, { - "id": 1784, + "id": 1785, "name": "stripPythonDocstringDelimiters", "qualified_name": "annotation.stripPythonDocstringDelimiters", "kind": "function", @@ -559,7 +559,7 @@ "intent": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms." }, { - "id": 1676, + "id": 1677, "name": "DocTagDetailFromModel", "qualified_name": "wiki.DocTagDetailFromModel", "kind": "function", @@ -567,20 +567,20 @@ "intent": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows." }, { - "id": 1785, - "name": "stripPythonQuotedString", - "qualified_name": "annotation.stripPythonQuotedString", + "id": 1787, + "name": "isSupportedPythonDocstringPrefix", + "qualified_name": "annotation.isSupportedPythonDocstringPrefix", "kind": "function", "file_path": "internal/domain/annotation/normalizer.go", - "intent": "accept docstrings with optional `r` or `u` prefixes without altering body content." + "intent": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling." }, { "id": 1786, - "name": "isSupportedPythonDocstringPrefix", - "qualified_name": "annotation.isSupportedPythonDocstringPrefix", + "name": "stripPythonQuotedString", + "qualified_name": "annotation.stripPythonQuotedString", "kind": "function", "file_path": "internal/domain/annotation/normalizer.go", - "intent": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling." + "intent": "accept docstrings with optional `r` or `u` prefixes without altering body content." }, { "id": 1047, @@ -591,7 +591,7 @@ "intent": "코드 변경으로 세부 어노테이션 신뢰성이 깨진 심볼을 보고한다." }, { - "id": 1678, + "id": 1679, "name": "SearchTextForAnnotation", "qualified_name": "wiki.SearchTextForAnnotation", "kind": "function", @@ -607,7 +607,7 @@ "intent": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\"." }, { - "id": 1661, + "id": 1662, "name": "nodeIDs", "qualified_name": "wiki.nodeIDs", "kind": "function", @@ -615,15 +615,15 @@ "intent": "collect graph node IDs for batch annotation lookup." }, { - "id": 486, - "name": "Snapshot", - "qualified_name": "graphgorm.Store.Snapshot", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load documentable nodes and their annotations from one namespace." + "id": 1942, + "name": "CCGRef", + "qualified_name": "CCGRef", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations." }, { - "id": 1795, + "id": 1796, "name": "TagKind", "qualified_name": "graph.TagKind", "kind": "type", @@ -631,12 +631,12 @@ "intent": "구조화된 문서 태그의 의미 분류를 표준화한다." }, { - "id": 1937, - "name": "CCGRef", - "qualified_name": "CCGRef", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations." + "id": 486, + "name": "Snapshot", + "qualified_name": "graphgorm.Store.Snapshot", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "intent": "load documentable nodes and their annotations from one namespace." } ], "anotation": [], @@ -692,6 +692,14 @@ "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges." }, + { + "id": 1803, + "name": "CrossRefStatus", + "qualified_name": "graph.CrossRefStatus", + "kind": "type", + "file_path": "internal/domain/graph/crossref.go", + "intent": "distinguish navigable references from dangling ones without deleting authored links." + }, { "id": 1360, "name": "CrossRefSyncer", @@ -700,14 +708,6 @@ "file_path": "internal/app/ingest/workflow/indexer.go", "intent": "let build/update trigger cross-ref materialization without depending on its implementation." }, - { - "id": 1802, - "name": "CrossRefStatus", - "qualified_name": "graph.CrossRefStatus", - "kind": "type", - "file_path": "internal/domain/graph/crossref.go", - "intent": "distinguish navigable references from dangling ones without deleting authored links." - }, { "id": 207, "name": "crossRefItem", @@ -725,7 +725,7 @@ "intent": "make outbound cross-ref state a pure function of the namespace's current annotations." }, { - "id": 1803, + "id": 1804, "name": "CrossRefSource", "qualified_name": "graph.CrossRefSource", "kind": "type", @@ -787,7 +787,7 @@ "intent": "expose a namespace's declared external dependencies for listing and analysis." }, { - "id": 1801, + "id": 1802, "name": "internal/domain/graph/crossref.go", "qualified_name": "internal/domain/graph/crossref.go", "kind": "file", @@ -810,7 +810,7 @@ "intent": "let impact and flow analysis walk across repository boundaries declared by annotations." }, { - "id": 1834, + "id": 1839, "name": "internal/domain/reference/ref.go", "qualified_name": "internal/domain/reference/ref.go", "kind": "file", @@ -833,7 +833,7 @@ "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity." }, { - "id": 1835, + "id": 1840, "name": "Ref", "qualified_name": "reference.Ref", "kind": "class", @@ -887,7 +887,7 @@ "intent": "keep the requested namespace and direction visible next to the reference list." }, { - "id": 1836, + "id": 1841, "name": "Is", "qualified_name": "reference.Is", "kind": "function", @@ -895,7 +895,7 @@ "intent": "let callers branch between local @see values and cross-namespace CCG refs cheaply." }, { - "id": 1937, + "id": 1942, "name": "CCGRef", "qualified_name": "CCGRef", "kind": "type", @@ -959,7 +959,7 @@ "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics." }, { - "id": 1804, + "id": 1805, "name": "CrossRef", "qualified_name": "graph.CrossRef", "kind": "class", @@ -1040,7 +1040,7 @@ "file_path": "internal/app/crossref" }, { - "id": 1801, + "id": 1802, "name": "internal/domain/graph/crossref.go", "qualified_name": "internal/domain/graph/crossref.go", "kind": "file", @@ -1055,7 +1055,7 @@ "intent": "expose symbolic target identity and derived resolution state without internal row metadata." }, { - "id": 1802, + "id": 1803, "name": "CrossRefStatus", "qualified_name": "graph.CrossRefStatus", "kind": "type", @@ -1063,14 +1063,7 @@ "intent": "distinguish navigable references from dangling ones without deleting authored links." }, { - "id": 478, - "name": "internal/adapters/outbound/graphgorm/crossref.go", - "qualified_name": "internal/adapters/outbound/graphgorm/crossref.go", - "kind": "file", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go" - }, - { - "id": 1803, + "id": 1804, "name": "CrossRefSource", "qualified_name": "graph.CrossRefSource", "kind": "type", @@ -1078,11 +1071,11 @@ "intent": "keep room for future non-annotation signals (e.g. import mapping) without schema rework." }, { - "id": 1014, - "name": "equalNodeID", - "qualified_name": "crossref.equalNodeID", - "kind": "function", - "file_path": "internal/app/crossref/service.go" + "id": 478, + "name": "internal/adapters/outbound/graphgorm/crossref.go", + "qualified_name": "internal/adapters/outbound/graphgorm/crossref.go", + "kind": "file", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go" }, { "id": 1015, @@ -1091,6 +1084,13 @@ "kind": "function", "file_path": "internal/app/crossref/service.go" }, + { + "id": 1014, + "name": "equalNodeID", + "qualified_name": "crossref.equalNodeID", + "kind": "function", + "file_path": "internal/app/crossref/service.go" + }, { "id": 206, "name": "internal/adapters/inbound/mcp/handler_crossref.go", @@ -1169,21 +1169,13 @@ "intent": "translate matcher output into row state: namespace-scope hits stay resolved without a node target." }, { - "id": 1804, + "id": 1805, "name": "CrossRef", "qualified_name": "graph.CrossRef", "kind": "class", "file_path": "internal/domain/graph/crossref.go", "intent": "make annotation-declared repository links traversable and listable instead of plain tag text." }, - { - "id": 1004, - "name": "Store", - "qualified_name": "crossref.Store", - "kind": "type", - "file_path": "internal/app/crossref/service.go", - "intent": "keep the sync policy independent from GORM by owning a minimal consumer-side port." - }, { "id": 1005, "name": "Service", @@ -1192,6 +1184,14 @@ "file_path": "internal/app/crossref/service.go", "intent": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes." }, + { + "id": 1004, + "name": "Store", + "qualified_name": "crossref.Store", + "kind": "type", + "file_path": "internal/app/crossref/service.go", + "intent": "keep the sync policy independent from GORM by owning a minimal consumer-side port." + }, { "id": 1003, "name": "AnnotationRef", @@ -1281,7 +1281,7 @@ "intent": "select the rows whose resolution may change after this namespace rebuilds." }, { - "id": 1589, + "id": 1590, "name": "nameSim", "qualified_name": "rank.nameSim", "kind": "function", @@ -1354,6 +1354,14 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "model a Go import path as one package node that contains every non-test file in that package." }, + { + "id": 1159, + "name": "PackageDiscoverer", + "qualified_name": "ingest.PackageDiscoverer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "intent": "delegate language-specific package discovery while ingest owns traversal policy." + }, { "id": 660, "name": "JavaScriptPackageDiscovery", @@ -1370,14 +1378,6 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "include pnpm-managed workspace package roots in Node-family package discovery." }, - { - "id": 1159, - "name": "PackageDiscoverer", - "qualified_name": "ingest.PackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "delegate language-specific package discovery while ingest owns traversal policy." - }, { "id": 694, "name": "workspacePatternMatch", @@ -1402,14 +1402,6 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "derive additional package-node import paths from compiler aliases." }, - { - "id": 651, - "name": "NoopPackageDiscovery", - "qualified_name": "treesitter.NoopPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "provide a default no-op implementation of the PackageDiscovery interface." - }, { "id": 669, "name": "DiscoverPackages", @@ -1419,12 +1411,12 @@ "intent": "walk the repository to identify Go packages and their source files." }, { - "id": 653, - "name": "DiscoverPackages", - "qualified_name": "treesitter.Walker.DiscoverPackages", - "kind": "function", + "id": 651, + "name": "NoopPackageDiscovery", + "qualified_name": "treesitter.NoopPackageDiscovery", + "kind": "class", "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "implement the ingest package-discovery port without exposing LangSpec to the application." + "intent": "provide a default no-op implementation of the PackageDiscovery interface." }, { "id": 661, @@ -1443,12 +1435,12 @@ "intent": "map Kotlin package headers to package nodes so imports and package containment use declared package names." }, { - "id": 677, - "name": "nodePackageJSON", - "qualified_name": "treesitter.nodePackageJSON", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep package metadata parsing minimal while deriving package-node qualified names." + "id": 653, + "name": "DiscoverPackages", + "qualified_name": "treesitter.Walker.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "intent": "implement the ingest package-discovery port without exposing LangSpec to the application." }, { "id": 693, @@ -1458,6 +1450,14 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "apply include-first and negate-after semantics consistently across workspace root discovery." }, + { + "id": 677, + "name": "nodePackageJSON", + "qualified_name": "treesitter.nodePackageJSON", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "intent": "keep package metadata parsing minimal while deriving package-node qualified names." + }, { "id": 701, "name": "stripJSONComments", @@ -1474,6 +1474,14 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "create package nodes for JavaScript directories using package.json-derived import paths." }, + { + "id": 667, + "name": "DiscoverPackages", + "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets." + }, { "id": 652, "name": "DiscoverPackages", @@ -1490,14 +1498,6 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved." }, - { - "id": 667, - "name": "DiscoverPackages", - "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets." - }, { "id": 656, "name": "PackageDiscoveryOrDefault", @@ -1523,20 +1523,20 @@ "intent": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently." }, { - "id": 663, + "id": 666, "name": "DiscoverPackages", - "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", + "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", "kind": "function", "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages." + "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses." }, { - "id": 666, + "id": 663, "name": "DiscoverPackages", - "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", + "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", "kind": "function", "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses." + "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages." }, { "id": 702, @@ -1608,6 +1608,22 @@ "kind": "file", "file_path": "internal/adapters/inbound/mcp/tools_context.go" }, + { + "id": 740, + "name": "GoSemantics", + "qualified_name": "treesitter.GoSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + }, + { + "id": 700, + "name": "pathMatchesPrefix", + "qualified_name": "treesitter.pathMatchesPrefix", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "intent": "match concrete source file paths against tsconfig alias target roots." + }, { "id": 683, "name": "readTSConfigAliasPrefixes", @@ -1625,20 +1641,12 @@ "intent": "normalize alias rules before matching them against source directories." }, { - "id": 700, - "name": "pathMatchesPrefix", - "qualified_name": "treesitter.pathMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match concrete source file paths against tsconfig alias target roots." - }, - { - "id": 740, - "name": "GoSemantics", - "qualified_name": "treesitter.GoSemantics", + "id": 1149, + "name": "PackageInfo", + "qualified_name": "ingest.PackageInfo", "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + "file_path": "internal/app/ingest/ports.go", + "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details." }, { "id": 648, @@ -1655,14 +1663,6 @@ "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "identify the repository's root import path for Go package normalization." }, - { - "id": 1149, - "name": "PackageInfo", - "qualified_name": "ingest.PackageInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details." - }, { "id": 1377, "name": "packageDiscoverers", @@ -1679,6 +1679,14 @@ "file_path": "internal/adapters/inbound/mcp/tools_context.go", "intent": "keep the context-oriented MCP surface grouped and reusable during server startup." }, + { + "id": 699, + "name": "dirMatchesPrefix", + "qualified_name": "treesitter.dirMatchesPrefix", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "intent": "match source directories against tsconfig path targets without partial-segment false positives." + }, { "id": 672, "name": "mergeSplitPackageDir", @@ -1694,14 +1702,6 @@ "kind": "class", "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", "intent": "resolve aliased Node imports against the package node scope they belong to." - }, - { - "id": 689, - "name": "parseNodeWorkspaces", - "qualified_name": "treesitter.parseNodeWorkspaces", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "support both array and object forms used by npm/Yarn/Bun workspace configs." } ], "flow membership": [ @@ -1722,7 +1722,7 @@ "intent": "store traced flow aggregates while keeping generated IDs visible to application results." }, { - "id": 1812, + "id": 1813, "name": "FlowMembership", "qualified_name": "graph.FlowMembership", "kind": "class", @@ -1804,7 +1804,7 @@ "intent": "Avoids full namespace FTS reloading during incremental update paths." }, { - "id": 1760, + "id": 1761, "name": "validateSQLiteSchemaParity", "qualified_name": "migration.validateSQLiteSchemaParity", "kind": "function", @@ -1937,14 +1937,6 @@ "file_path": "internal/adapters/outbound/searchsql/sqlite.go", "intent": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces." }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression." - }, { "id": 611, "name": "internal/adapters/outbound/searchsql/sqlite.go", @@ -1961,7 +1953,7 @@ "intent": "let a sentence-shaped question match a sentence-shaped reason." }, { - "id": 1581, + "id": 1582, "name": "internal/app/search/rank/rank.go", "qualified_name": "internal/app/search/rank/rank.go", "kind": "file", @@ -1976,7 +1968,7 @@ "intent": "regenerate FTS content from the latest nodes and annotations in batches to bound memory." }, { - "id": 1704, + "id": 1705, "name": "ConfigurePool", "qualified_name": "db.ConfigurePool", "kind": "function", @@ -1984,7 +1976,7 @@ "intent": "apply connection-pool limits that match each database driver's concurrency model." }, { - "id": 1584, + "id": 1585, "name": "Rerank", "qualified_name": "rank.Rerank", "kind": "function", @@ -1992,7 +1984,7 @@ "intent": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break." }, { - "id": 1582, + "id": 1583, "name": "FetchLimit", "qualified_name": "rank.FetchLimit", "kind": "function", @@ -2013,7 +2005,7 @@ "qualified_name": "searchsql.SQLiteBackend.MatchIntent", "kind": "function", "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced." + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." }, { "id": 608, @@ -2030,6 +2022,14 @@ "kind": "function", "file_path": "internal/adapters/outbound/searchsql/postgres.go", "intent": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows." + }, + { + "id": 624, + "name": "matchRows", + "qualified_name": "searchsql.SQLiteBackend.matchRows", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "intent": "let Query run the same retrieval twice with a different expression." } ], "graphgorm crossref": [ @@ -2242,14 +2242,6 @@ "kind": "file", "file_path": "internal/adapters/inbound/mcp/handler_analysis.go" }, - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port." - }, { "id": 916, "name": "changedNodeHits", @@ -2258,6 +2250,14 @@ "file_path": "internal/app/analyze/changes/service.go", "intent": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup." }, + { + "id": 171, + "name": "AnalysisToolsDeps", + "qualified_name": "mcp.AnalysisToolsDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "intent": "group only configured application analyzers and their read-model port." + }, { "id": 469, "name": "CrossNamespaceReader", @@ -2638,7 +2638,7 @@ "intent": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다." }, { - "id": 1882, + "id": 1887, "name": "MCPComponents", "qualified_name": "runtime.Runtime.MCPComponents", "kind": "function", @@ -2646,21 +2646,13 @@ "intent": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters." }, { - "id": 1869, + "id": 1874, "name": "Components", "qualified_name": "mcpruntime.Components", "kind": "class", "file_path": "internal/runtime/mcp/runtime.go", "intent": "share one MCP assembly path without making the MCP runtime import its parent composition package." }, - { - "id": 173, - "name": "Deps", - "qualified_name": "mcp.Deps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "make each MCP capability's required application contracts explicit at composition time." - }, { "id": 291, "name": "internal/adapters/inbound/mcp/http.go", @@ -2669,12 +2661,20 @@ "file_path": "internal/adapters/inbound/mcp/http.go" }, { - "id": 1868, + "id": 1873, "name": "internal/runtime/mcp/runtime.go", "qualified_name": "internal/runtime/mcp/runtime.go", "kind": "file", "file_path": "internal/runtime/mcp/runtime.go" }, + { + "id": 173, + "name": "Deps", + "qualified_name": "mcp.Deps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "intent": "make each MCP capability's required application contracts explicit at composition time." + }, { "id": 280, "name": "toolResultErr", @@ -2697,14 +2697,6 @@ "kind": "file", "file_path": "internal/adapters/inbound/mcp/handlers.go" }, - { - "id": 271, - "name": "handlers", - "qualified_name": "mcp.handlers", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache." - }, { "id": 313, "name": "internal/adapters/inbound/mcp/prompts_register.go", @@ -2720,7 +2712,15 @@ "file_path": "internal/adapters/inbound/mcp/tools_register.go" }, { - "id": 1871, + "id": 271, + "name": "handlers", + "qualified_name": "mcp.handlers", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache." + }, + { + "id": 1876, "name": "Instance", "qualified_name": "mcpruntime.Instance", "kind": "class", @@ -2756,6 +2756,13 @@ "kind": "file", "file_path": "internal/adapters/inbound/mcp/tools_context.go" }, + { + "id": 317, + "name": "internal/adapters/inbound/mcp/tools_analysis.go", + "qualified_name": "internal/adapters/inbound/mcp/tools_analysis.go", + "kind": "file", + "file_path": "internal/adapters/inbound/mcp/tools_analysis.go" + }, { "id": 165, "name": "FlowBuilder", @@ -2772,13 +2779,6 @@ "file_path": "internal/adapters/inbound/mcp/deps.go", "intent": "Simplifies handlers by abstracting standard graph queries into a single service interface." }, - { - "id": 317, - "name": "internal/adapters/inbound/mcp/tools_analysis.go", - "qualified_name": "internal/adapters/inbound/mcp/tools_analysis.go", - "kind": "file", - "file_path": "internal/adapters/inbound/mcp/tools_analysis.go" - }, { "id": 150, "name": "internal/adapters/inbound/mcp/cache.go", @@ -2786,6 +2786,13 @@ "kind": "file", "file_path": "internal/adapters/inbound/mcp/cache.go" }, + { + "id": 323, + "name": "internal/adapters/inbound/mcp/tools_graph.go", + "qualified_name": "internal/adapters/inbound/mcp/tools_graph.go", + "kind": "file", + "file_path": "internal/adapters/inbound/mcp/tools_graph.go" + }, { "id": 161, "name": "Parser", @@ -2802,13 +2809,6 @@ "file_path": "internal/adapters/inbound/mcp/handlers.go", "intent": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract." }, - { - "id": 323, - "name": "internal/adapters/inbound/mcp/tools_graph.go", - "qualified_name": "internal/adapters/inbound/mcp/tools_graph.go", - "kind": "file", - "file_path": "internal/adapters/inbound/mcp/tools_graph.go" - }, { "id": 229, "name": "internal/adapters/inbound/mcp/handler_namespace.go", @@ -2902,20 +2902,20 @@ "file_path": "internal/adapters/inbound/mcp/tools_docs.go" }, { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", + "id": 1880, + "name": "FlushQueryCache", + "qualified_name": "mcpruntime.FlushQueryCache", "kind": "function", "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary." + "intent": "let graph updates invalidate shared MCP cache without coupling to transport packages." }, { - "id": 1875, - "name": "FlushQueryCache", - "qualified_name": "mcpruntime.FlushQueryCache", + "id": 1877, + "name": "New", + "qualified_name": "mcpruntime.New", "kind": "function", "file_path": "internal/runtime/mcp/runtime.go", - "intent": "let graph updates invalidate shared MCP cache without coupling to transport packages." + "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary." }, { "id": 181, @@ -2965,7 +2965,7 @@ "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request." }, { - "id": 1874, + "id": 1879, "name": "RunStdio", "qualified_name": "mcpruntime.RunStdio", "kind": "function", @@ -3023,13 +3023,21 @@ "intent": "store traced flow aggregates while keeping generated IDs visible to application results." }, { - "id": 1800, + "id": 1801, "name": "CommunityMembership", "qualified_name": "graph.CommunityMembership", "kind": "class", "file_path": "internal/domain/graph/community.go", "intent": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다." }, + { + "id": 1813, + "name": "FlowMembership", + "qualified_name": "graph.FlowMembership", + "kind": "class", + "file_path": "internal/domain/graph/flow.go", + "intent": "특정 플로우를 구성하는 노드와 그 위치를 연결한다." + }, { "id": 198, "name": "sliceContainsString", @@ -3038,14 +3046,6 @@ "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", "intent": "linear membership check for small string slices used by allowlist evaluation." }, - { - "id": 1812, - "name": "FlowMembership", - "qualified_name": "graph.FlowMembership", - "kind": "class", - "file_path": "internal/domain/graph/flow.go", - "intent": "특정 플로우를 구성하는 노드와 그 위치를 연결한다." - }, { "id": 227, "name": "derivedStateFlows", @@ -3110,7 +3110,7 @@ "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk." }, { - "id": 1610, + "id": 1611, "name": "Search", "qualified_name": "search.Service.Search", "kind": "function", @@ -3128,7 +3128,7 @@ ], "migration schema": [ { - "id": 1733, + "id": 1734, "name": "SchemaColumn", "qualified_name": "migration.SchemaColumn", "kind": "class", @@ -3136,7 +3136,7 @@ "intent": "런타임 스키마 검증에서 필수 컬럼 목록을 표준 구조로 표현한다." }, { - "id": 1732, + "id": 1733, "name": "MigrationSchemaVersion", "qualified_name": "migration.MigrationSchemaVersion", "kind": "class", @@ -3144,7 +3144,7 @@ "intent": "golang-migrate 메타데이터 테이블을 런타임 검증에서 읽을 수 있게 한다." }, { - "id": 1748, + "id": 1749, "name": "CheckSchemaVersion", "qualified_name": "migration.CheckSchemaVersion", "kind": "function", @@ -3152,7 +3152,7 @@ "intent": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다." }, { - "id": 1826, + "id": 1831, "name": "TableName", "qualified_name": "graph.SchemaVersion.TableName", "kind": "function", @@ -3160,23 +3160,23 @@ "intent": "keep runtime schema checks aligned with explicit migration bookkeeping." }, { - "id": 1746, - "name": "actionableSchemaParityError", - "qualified_name": "migration.actionableSchemaParityError", + "id": 1748, + "name": "ActionableSchemaParityError", + "qualified_name": "migration.ActionableSchemaParityError", "kind": "function", "file_path": "internal/db/migration/migration.go", - "intent": "스키마 정합성 오류에 즉시 실행할 운영 조치를 함께 붙인다." + "intent": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다." }, { "id": 1747, - "name": "ActionableSchemaParityError", - "qualified_name": "migration.ActionableSchemaParityError", + "name": "actionableSchemaParityError", + "qualified_name": "migration.actionableSchemaParityError", "kind": "function", "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다." + "intent": "스키마 정합성 오류에 즉시 실행할 운영 조치를 함께 붙인다." }, { - "id": 1770, + "id": 1771, "name": "postgresColumnNotNull", "qualified_name": "migration.postgresColumnNotNull", "kind": "function", @@ -3184,7 +3184,7 @@ "intent": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다." }, { - "id": 1737, + "id": 1738, "name": "ValidateSchemaForRuntime", "qualified_name": "migration.ValidateSchemaForRuntime", "kind": "function", @@ -3192,7 +3192,7 @@ "intent": "런타임 시작 전에 스키마 이상을 운영 로그와 함께 명확히 보고한다." }, { - "id": 1774, + "id": 1775, "name": "postgresIndexExists", "qualified_name": "migration.postgresIndexExists", "kind": "function", @@ -3200,7 +3200,7 @@ "intent": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다." }, { - "id": 1735, + "id": 1736, "name": "RunMigrations", "qualified_name": "migration.RunMigrations", "kind": "function", @@ -3208,7 +3208,7 @@ "intent": "애플리케이션 기본 마이그레이션 경로에 legacy baseline 로직을 포함시킨다." }, { - "id": 1825, + "id": 1830, "name": "SchemaVersion", "qualified_name": "graph.SchemaVersion", "kind": "class", @@ -3224,7 +3224,7 @@ "intent": "give tests and callers a one-call schema setup that reuses the production migrations." }, { - "id": 1728, + "id": 1729, "name": "internal/db/migration/migration.go", "qualified_name": "internal/db/migration/migration.go", "kind": "file", @@ -3232,7 +3232,7 @@ "intent": "일반 마이그레이션 전에 legacy 스키마를 현재 메타데이터 체계에 정렬하는 훅 계약을 정의한다." }, { - "id": 1729, + "id": 1730, "name": "LegacyBaselineFunc", "qualified_name": "migration.LegacyBaselineFunc", "kind": "type", @@ -3240,7 +3240,7 @@ "intent": "일반 마이그레이션 전에 legacy 스키마를 현재 메타데이터 체계에 정렬하는 훅 계약을 정의한다." }, { - "id": 1749, + "id": 1750, "name": "BaselineLegacySchemaVersion", "qualified_name": "migration.BaselineLegacySchemaVersion", "kind": "function", @@ -3248,7 +3248,7 @@ "intent": "legacy 버전 테이블만 있는 배포를 golang-migrate 메타데이터로 안전하게 기준선 맞춤한다." }, { - "id": 1734, + "id": 1735, "name": "Run", "qualified_name": "migration.Run", "kind": "function", @@ -3256,7 +3256,7 @@ "intent": "마이그레이션 실행과 사후 스키마 정합성 검사를 하나의 진입점으로 묶는다." }, { - "id": 1761, + "id": 1762, "name": "validatePostgresSchemaParity", "qualified_name": "migration.validatePostgresSchemaParity", "kind": "function", @@ -3264,15 +3264,7 @@ "intent": "PostgreSQL 검색/후처리 스키마가 운영 계약과 일치하는지 확인한다." }, { - "id": 1730, - "name": "ValidateSchemaParityFunc", - "qualified_name": "migration.ValidateSchemaParityFunc", - "kind": "type", - "file_path": "internal/db/migration/migration.go", - "intent": "드라이버별 스키마 정합성 검사를 주입 가능한 함수 계약으로 분리한다." - }, - { - "id": 1750, + "id": 1751, "name": "ValidateSchemaParity", "qualified_name": "migration.ValidateSchemaParity", "kind": "function", @@ -3280,7 +3272,15 @@ "intent": "런타임이 의존하는 테이블, 컬럼, 인덱스, 트리거가 모두 준비됐는지 검증한다." }, { - "id": 1751, + "id": 1731, + "name": "ValidateSchemaParityFunc", + "qualified_name": "migration.ValidateSchemaParityFunc", + "kind": "type", + "file_path": "internal/db/migration/migration.go", + "intent": "드라이버별 스키마 정합성 검사를 주입 가능한 함수 계약으로 분리한다." + }, + { + "id": 1752, "name": "RequiredSchemaTables", "qualified_name": "migration.RequiredSchemaTables", "kind": "function", @@ -3288,7 +3288,7 @@ "intent": "스키마 정합성 검사가 공통으로 확인할 필수 테이블 집합을 제공한다." }, { - "id": 1771, + "id": 1772, "name": "postgresColumnDataType", "qualified_name": "migration.postgresColumnDataType", "kind": "function", @@ -3304,7 +3304,7 @@ "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run." }, { - "id": 1884, + "id": 1889, "name": "Migrate", "qualified_name": "runtime.Runtime.Migrate", "kind": "function", @@ -3312,7 +3312,7 @@ "intent": "expose migration execution without coupling binaries to migration internals." }, { - "id": 1776, + "id": 1777, "name": "postgresTriggerExists", "qualified_name": "migration.postgresTriggerExists", "kind": "function", @@ -3320,7 +3320,7 @@ "intent": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다." }, { - "id": 1736, + "id": 1737, "name": "EnsureSchemaVersion", "qualified_name": "migration.EnsureSchemaVersion", "kind": "function", @@ -3328,7 +3328,7 @@ "intent": "런타임 명령이 시작되기 전에 스키마 버전과 자동 마이그레이션 조건을 검증한다." }, { - "id": 1765, + "id": 1766, "name": "sqliteIndexExists", "qualified_name": "migration.sqliteIndexExists", "kind": "function", @@ -3336,7 +3336,7 @@ "intent": "index presence can be verified during schema parity checks before query paths use them." }, { - "id": 1760, + "id": 1761, "name": "validateSQLiteSchemaParity", "qualified_name": "migration.validateSQLiteSchemaParity", "kind": "function", @@ -3802,7 +3802,7 @@ "intent": "include every input known to affect parser output instead of trusting source content alone." }, { - "id": 1823, + "id": 1828, "name": "ParseCacheEntry", "qualified_name": "graph.ParseCacheEntry", "kind": "class", @@ -3991,7 +3991,7 @@ ], "rerank": [ { - "id": 1584, + "id": 1585, "name": "Rerank", "qualified_name": "rank.Rerank", "kind": "function", @@ -3999,7 +3999,7 @@ "intent": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break." }, { - "id": 1586, + "id": 1587, "name": "RerankGroups", "qualified_name": "rank.RerankGroups", "kind": "function", @@ -4007,7 +4007,7 @@ "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first." }, { - "id": 1585, + "id": 1586, "name": "rerankWithRanks", "qualified_name": "rank.rerankWithRanks", "kind": "function", @@ -4015,7 +4015,7 @@ "intent": "keep one ordering implementation for both single-list and multi-list retrieval." }, { - "id": 1582, + "id": 1583, "name": "FetchLimit", "qualified_name": "rank.FetchLimit", "kind": "function", @@ -4023,7 +4023,7 @@ "intent": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result." }, { - "id": 1588, + "id": 1589, "name": "applyLimit", "qualified_name": "rank.applyLimit", "kind": "function", @@ -4031,7 +4031,7 @@ "intent": "apply the caller's result bound after candidate reranking." }, { - "id": 1610, + "id": 1611, "name": "Search", "qualified_name": "search.Service.Search", "kind": "function", @@ -4039,7 +4039,7 @@ "intent": "answer a search with the files that can justify their place, not the backend's raw order." }, { - "id": 1608, + "id": 1609, "name": "Service", "qualified_name": "search.Service", "kind": "class", @@ -4047,7 +4047,7 @@ "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter." }, { - "id": 1581, + "id": 1582, "name": "internal/app/search/rank/rank.go", "qualified_name": "internal/app/search/rank/rank.go", "kind": "file", @@ -4062,7 +4062,7 @@ "intent": "answer one search across several repositories with per-item namespace labels." }, { - "id": 1580, + "id": 1581, "name": "Signals", "qualified_name": "rank.Signals", "kind": "function", @@ -4078,21 +4078,21 @@ "intent": "give a reader or an agent a file list where every line states why it is there." }, { - "id": 1605, + "id": 1606, "name": "internal/app/search/service.go", "qualified_name": "internal/app/search/service.go", "kind": "file", "file_path": "internal/app/search/service.go" }, { - "id": 1572, + "id": 1573, "name": "internal/app/search/offsetrule/offsetrule.go", "qualified_name": "internal/app/search/offsetrule/offsetrule.go", "kind": "file", "file_path": "internal/app/search/offsetrule/offsetrule.go" }, { - "id": 1578, + "id": 1579, "name": "Structural", "qualified_name": "rank.Structural", "kind": "class", @@ -4100,7 +4100,7 @@ "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." }, { - "id": 1620, + "id": 1621, "name": "absorbIntent", "qualified_name": "search.absorbIntent", "kind": "function", @@ -4108,7 +4108,7 @@ "intent": "let a recorded reason put a node on the page without letting it reshuffle the name matches." }, { - "id": 1577, + "id": 1578, "name": "internal/app/search/rank/evidence.go", "qualified_name": "internal/app/search/rank/evidence.go", "kind": "file", @@ -4116,7 +4116,7 @@ "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." }, { - "id": 1613, + "id": 1614, "name": "fetch", "qualified_name": "search.Service.fetch", "kind": "function", @@ -4198,7 +4198,7 @@ "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax." }, { - "id": 1567, + "id": 1568, "name": "group", "qualified_name": "intentrank.group", "kind": "class", @@ -4213,7 +4213,7 @@ "intent": "move an exact symbol-name hit to the front of search results to improve precision." }, { - "id": 1568, + "id": 1569, "name": "parseGroups", "qualified_name": "intentrank.parseGroups", "kind": "function", @@ -4269,7 +4269,7 @@ "file_path": "internal/app/search/document" }, { - "id": 1758, + "id": 1759, "name": "searchDocCollision", "qualified_name": "migration.searchDocCollision", "kind": "class", @@ -4341,21 +4341,13 @@ "intent": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns." }, { - "id": 1828, + "id": 1833, "name": "SearchDocument", "qualified_name": "graph.SearchDocument", "kind": "class", "file_path": "internal/domain/graph/search.go", "intent": "전문 검색 백엔드가 사용할 노드별 검색 본문을 유지한다." }, - { - "id": 1523, - "name": "pathTokens", - "qualified_name": "document.pathTokens", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "make basename, extension, and human language names searchable." - }, { "id": 1524, "name": "languageAlias", @@ -4364,6 +4356,14 @@ "file_path": "internal/app/search/document/document.go", "intent": "preserve language-name recall for extension-only file paths." }, + { + "id": 1523, + "name": "pathTokens", + "qualified_name": "document.pathTokens", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "intent": "make basename, extension, and human language names searchable." + }, { "id": 322, "name": "docsTools", @@ -4467,7 +4467,7 @@ "intent": "implement the incremental derived-search refresh required by graph updates." }, { - "id": 1904, + "id": 1909, "name": "SelectedDoc", "qualified_name": "SelectedDoc", "kind": "type", @@ -4515,7 +4515,7 @@ "intent": "keep --json output byte-stable and diffable while staying the MCP contract." }, { - "id": 1829, + "id": 1834, "name": "SearchReason", "qualified_name": "graph.SearchReason", "kind": "class", @@ -4547,7 +4547,7 @@ "intent": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces." }, { - "id": 1754, + "id": 1755, "name": "MigrateLegacyDefaultNamespace", "qualified_name": "migration.MigrateLegacyDefaultNamespace", "kind": "function", @@ -4586,13 +4586,21 @@ "file_path": "internal/adapters/outbound/graphgorm/store.go", "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk." }, + { + "id": 624, + "name": "matchRows", + "qualified_name": "searchsql.SQLiteBackend.matchRows", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "intent": "let Query run the same retrieval twice with a different expression." + }, { "id": 592, "name": "MatchIntent", "qualified_name": "searchsql.PostgresBackend.MatchIntent", "kind": "function", "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced." + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." }, { "id": 599, @@ -4610,7 +4618,7 @@ "file_path": "internal/app/search/intent/intent.go" }, { - "id": 1589, + "id": 1590, "name": "nameSim", "qualified_name": "rank.nameSim", "kind": "function", @@ -4620,7 +4628,7 @@ ], "sqlite": [ { - "id": 1762, + "id": 1763, "name": "sqliteColumnExists", "qualified_name": "migration.sqliteColumnExists", "kind": "function", @@ -4628,7 +4636,7 @@ "intent": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다." }, { - "id": 1763, + "id": 1764, "name": "sqliteColumnNotNull", "qualified_name": "migration.sqliteColumnNotNull", "kind": "function", @@ -4636,7 +4644,7 @@ "intent": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다." }, { - "id": 1766, + "id": 1767, "name": "sqliteColumnInfo", "qualified_name": "migration.sqliteColumnInfo", "kind": "function", @@ -4660,7 +4668,7 @@ "intent": "let migration code branch on table presence without depending on GORM AutoMigrate side effects." }, { - "id": 1769, + "id": 1770, "name": "SQLiteColumnInfo", "qualified_name": "migration.SQLiteColumnInfo", "kind": "function", @@ -4676,7 +4684,7 @@ "intent": "gate schema migrations on actual table layout instead of guessing from version markers." }, { - "id": 1764, + "id": 1765, "name": "sqliteColumn", "qualified_name": "migration.sqliteColumn", "kind": "class", @@ -4684,7 +4692,7 @@ "intent": "PRAGMA 결과를 helper 간에 재사용할 최소 내부 표현을 제공한다." }, { - "id": 1767, + "id": 1768, "name": "SQLiteColumnExists", "qualified_name": "migration.SQLiteColumnExists", "kind": "function", @@ -4692,7 +4700,7 @@ "intent": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다." }, { - "id": 1768, + "id": 1769, "name": "SQLiteColumnNotNull", "qualified_name": "migration.SQLiteColumnNotNull", "kind": "function", @@ -4700,7 +4708,7 @@ "intent": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다." }, { - "id": 1765, + "id": 1766, "name": "sqliteIndexExists", "qualified_name": "migration.sqliteIndexExists", "kind": "function", @@ -4731,7 +4739,7 @@ "intent": "Creates a full-text search index table for SQLite." }, { - "id": 1703, + "id": 1704, "name": "Open", "qualified_name": "db.Open", "kind": "function", @@ -4739,7 +4747,7 @@ "intent": "centralize driver-specific GORM initialization and pool setup behind one entry point." }, { - "id": 1701, + "id": 1702, "name": "internal/db/db.go", "qualified_name": "internal/db/db.go", "kind": "file", @@ -4770,7 +4778,7 @@ "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild." }, { - "id": 1760, + "id": 1761, "name": "validateSQLiteSchemaParity", "qualified_name": "migration.validateSQLiteSchemaParity", "kind": "function", @@ -4786,15 +4794,7 @@ "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion." }, { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression." - }, - { - "id": 1738, + "id": 1739, "name": "ShouldAutoMigrateLocalSQLite", "qualified_name": "migration.ShouldAutoMigrateLocalSQLite", "kind": "function", @@ -4882,7 +4882,7 @@ "intent": "decode the single-column FTS result before joining back to nodes." }, { - "id": 1745, + "id": 1746, "name": "migrateDatabaseDriver", "qualified_name": "migration.migrateDatabaseDriver", "kind": "function", @@ -4921,7 +4921,7 @@ "intent": "keep search rebuild SQL within the SQLite/Postgres parameter limit." }, { - "id": 1736, + "id": 1737, "name": "EnsureSchemaVersion", "qualified_name": "migration.EnsureSchemaVersion", "kind": "function", @@ -4934,10 +4934,10 @@ "qualified_name": "searchsql.SQLiteBackend.MatchIntent", "kind": "function", "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced." + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." }, { - "id": 1705, + "id": 1706, "name": "NewSearchBackend", "qualified_name": "db.NewSearchBackend", "kind": "function", @@ -4945,13 +4945,21 @@ "intent": "select the full-text search backend implementation that matches the active database driver." }, { - "id": 1727, + "id": 1728, "name": "internal/db/migration/embed.go", "qualified_name": "internal/db/migration/embed.go", "kind": "file", "file_path": "internal/db/migration/embed.go", "intent": "keep embedded versioned SQL assets with the migration runtime that selects and executes them." }, + { + "id": 624, + "name": "matchRows", + "qualified_name": "searchsql.SQLiteBackend.matchRows", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "intent": "let Query run the same retrieval twice with a different expression." + }, { "id": 629, "name": "insertSQLiteIntentBatch", @@ -4977,7 +4985,7 @@ "intent": "push many rows in a single statement so rebuild paths avoid per-row round trips." }, { - "id": 1704, + "id": 1705, "name": "ConfigurePool", "qualified_name": "db.ConfigurePool", "kind": "function", @@ -5042,14 +5050,6 @@ "file_path": "internal/adapters/outbound/searchsql/sqlite.go", "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion." }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression." - }, { "id": 614, "name": "Migrate", @@ -5122,21 +5122,29 @@ "file_path": "internal/adapters/outbound/searchsql/sqlite.go", "intent": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces." }, + { + "id": 625, + "name": "Query", + "qualified_name": "searchsql.SQLiteBackend.Query", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes." + }, { "id": 626, "name": "MatchIntent", "qualified_name": "searchsql.SQLiteBackend.MatchIntent", "kind": "function", "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced." + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." }, { - "id": 625, - "name": "Query", - "qualified_name": "searchsql.SQLiteBackend.Query", + "id": 624, + "name": "matchRows", + "qualified_name": "searchsql.SQLiteBackend.matchRows", "kind": "function", "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes." + "intent": "let Query run the same retrieval twice with a different expression." } ], "syncer": [ @@ -5332,14 +5340,6 @@ "file_path": "internal/app/ingest/workflow/indexer.go", "intent": "let build/update trigger cross-ref materialization without depending on its implementation." }, - { - "id": 1168, - "name": "TransactionalIncrementalSyncer", - "qualified_name": "ingest.TransactionalIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep incremental graph mutations inside the same unit of work as package and search updates." - }, { "id": 1169, "name": "FileBatchVisitor", @@ -5348,6 +5348,14 @@ "file_path": "internal/app/ingest/ports.go", "intent": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering." }, + { + "id": 1168, + "name": "TransactionalIncrementalSyncer", + "qualified_name": "ingest.TransactionalIncrementalSyncer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "intent": "keep incremental graph mutations inside the same unit of work as package and search updates." + }, { "id": 1357, "name": "splitForcedFiles", @@ -5454,6 +5462,14 @@ "file_path": "internal/app/reposync/queue.go", "intent": "run the main worker loop that drains deduplicated repository work items." }, + { + "id": 1508, + "name": "get", + "qualified_name": "reposync.SyncQueue.get", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "intent": "block workers until the next deduplicated repository payload is ready for processing." + }, { "id": 1505, "name": "recordSuccess", @@ -5471,12 +5487,12 @@ "intent": "isolate handler panics and merged cancellation logic around one sync attempt." }, { - "id": 1508, - "name": "get", - "qualified_name": "reposync.SyncQueue.get", + "id": 1509, + "name": "done", + "qualified_name": "reposync.SyncQueue.done", "kind": "function", "file_path": "internal/app/reposync/queue.go", - "intent": "block workers until the next deduplicated repository payload is ready for processing." + "intent": "requeue repositories that changed during processing or release payload state when work is complete." }, { "id": 1501, @@ -5502,14 +5518,6 @@ "file_path": "internal/app/reposync/queue.go", "intent": "maintain a bounded MRU view of repository stats without unbounded growth." }, - { - "id": 1509, - "name": "done", - "qualified_name": "reposync.SyncQueue.done", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "requeue repositories that changed during processing or release payload state when work is complete." - }, { "id": 1499, "name": "buildRecentReposLocked", @@ -5527,7 +5535,7 @@ "intent": "merge queued payload state with historical success and failure data for one repository summary." }, { - "id": 1594, + "id": 1595, "name": "pathScore", "qualified_name": "rank.pathScore", "kind": "function", @@ -5535,7 +5543,7 @@ "intent": "use matching path segments as a bounded secondary relevance signal." }, { - "id": 1595, + "id": 1596, "name": "queryTokens", "qualified_name": "rank.queryTokens", "kind": "class", @@ -5738,7 +5746,7 @@ "intent": "communicate truncation status alongside the produced flow" }, { - "id": 1846, + "id": 1851, "name": "Telemetry", "qualified_name": "obs.Telemetry", "kind": "class", @@ -5754,7 +5762,7 @@ "intent": "construct a tracer bound to a graph edge reader" }, { - "id": 1848, + "id": 1853, "name": "Shutdown", "qualified_name": "obs.Telemetry.Shutdown", "kind": "function", @@ -5794,7 +5802,7 @@ "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace." }, { - "id": 1854, + "id": 1859, "name": "Global", "qualified_name": "obs.Global", "kind": "function", @@ -5802,14 +5810,14 @@ "intent": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다." }, { - "id": 1844, + "id": 1849, "name": "internal/obs/trace.go", "qualified_name": "internal/obs/trace.go", "kind": "file", "file_path": "internal/obs/trace.go" }, { - "id": 1850, + "id": 1855, "name": "StartSpan", "qualified_name": "obs.Telemetry.StartSpan", "kind": "function", @@ -5817,7 +5825,7 @@ "intent": "개별 telemetry 인스턴스로 일반 내부 span을 생성한다." }, { - "id": 1851, + "id": 1856, "name": "StartChildSpan", "qualified_name": "obs.Telemetry.StartChildSpan", "kind": "function", @@ -5825,7 +5833,7 @@ "intent": "telemetry 인스턴스 기준으로 후속 작업 span을 생성한다." }, { - "id": 1849, + "id": 1854, "name": "StartServerSpan", "qualified_name": "obs.Telemetry.StartServerSpan", "kind": "function", @@ -5833,7 +5841,7 @@ "intent": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다." }, { - "id": 1853, + "id": 1858, "name": "SetGlobal", "qualified_name": "obs.SetGlobal", "kind": "function", @@ -5841,7 +5849,7 @@ "intent": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다." }, { - "id": 1852, + "id": 1857, "name": "start", "qualified_name": "obs.Telemetry.start", "kind": "function", @@ -5849,7 +5857,7 @@ "intent": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다." }, { - "id": 1847, + "id": 1852, "name": "Setup", "qualified_name": "obs.Setup", "kind": "function", @@ -5937,14 +5945,6 @@ "file_path": "internal/adapters/outbound/treesitter/semantics.go", "intent": "let build/update orchestration reuse optional package-level enrichment hooks." }, - { - "id": 726, - "name": "NoopSemantics", - "qualified_name": "treesitter.NoopSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "provide a safe fallback semantics hook when a language does not define extra graph enrichment." - }, { "id": 791, "name": "AdditionalEdges", @@ -5953,6 +5953,14 @@ "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", "intent": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics." }, + { + "id": 726, + "name": "NoopSemantics", + "qualified_name": "treesitter.NoopSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "intent": "provide a safe fallback semantics hook when a language does not define extra graph enrichment." + }, { "id": 804, "name": "AdditionalEdges", @@ -6001,14 +6009,6 @@ "file_path": "internal/adapters/outbound/treesitter/semantics.go", "intent": "centralize package-level enrichment behind an optional semantics hook." }, - { - "id": 708, - "name": "LanguageSemantics", - "qualified_name": "treesitter.LanguageSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep language-specific inference opt-in while the generic parser remains shared." - }, { "id": 709, "name": "CallRewriteSemantics", @@ -6018,12 +6018,12 @@ "intent": "avoid forcing languages without call rewrite needs to implement no-op methods." }, { - "id": 711, - "name": "DefinitionNameSemantics", - "qualified_name": "treesitter.DefinitionNameSemantics", + "id": 708, + "name": "LanguageSemantics", + "qualified_name": "treesitter.LanguageSemantics", "kind": "type", "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages normalize captured definition names before node and edge fingerprints are emitted." + "intent": "keep language-specific inference opt-in while the generic parser remains shared." }, { "id": 714, @@ -6033,6 +6033,14 @@ "file_path": "internal/adapters/outbound/treesitter/semantics.go", "intent": "let languages contribute docstrings or similar constructs without Walker language branches." }, + { + "id": 711, + "name": "DefinitionNameSemantics", + "qualified_name": "treesitter.DefinitionNameSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "intent": "let languages normalize captured definition names before node and edge fingerprints are emitted." + }, { "id": 727, "name": "AdditionalEdges", @@ -6129,22 +6137,6 @@ "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", "intent": "strip generic arguments and preserve full path segments for trait implementation edges." }, - { - "id": 771, - "name": "TypeScriptSemantics", - "qualified_name": "treesitter.TypeScriptSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." - }, - { - "id": 774, - "name": "CallRewriter", - "qualified_name": "treesitter.TypeScriptSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "rewrite member-call chains only when explicit type annotations prove each hop." - }, { "id": 807, "name": "CallRewriter", @@ -6162,12 +6154,20 @@ "intent": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks." }, { - "id": 713, - "name": "PackageSemantics", - "qualified_name": "treesitter.PackageSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages derive relationships that require package-wide context without widening Walker's per-file parse path." + "id": 771, + "name": "TypeScriptSemantics", + "qualified_name": "treesitter.TypeScriptSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." + }, + { + "id": 774, + "name": "CallRewriter", + "qualified_name": "treesitter.TypeScriptSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "intent": "rewrite member-call chains only when explicit type annotations prove each hop." }, { "id": 789, @@ -6194,12 +6194,12 @@ "intent": "keep generic-safe relationship extraction consistent between direct hierarchy parsing and query captures." }, { - "id": 847, - "name": "isFirstStringExprStmt", - "qualified_name": "treesitter.isFirstStringExprStmt", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "preserve Python docstring semantics that only the leading string literal counts." + "id": 713, + "name": "PackageSemantics", + "qualified_name": "treesitter.PackageSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "intent": "let languages derive relationships that require package-wide context without widening Walker's per-file parse path." }, { "id": 852, @@ -6209,6 +6209,14 @@ "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", "intent": "keep impl_item class names stable when the captured type includes generic arguments." }, + { + "id": 847, + "name": "isFirstStringExprStmt", + "qualified_name": "treesitter.isFirstStringExprStmt", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "intent": "preserve Python docstring semantics that only the leading string literal counts." + }, { "id": 809, "name": "ImplementedTypes", diff --git a/internal/app/search/rank/testdata/corpora/cobra/intent_candidates.json b/internal/app/search/rank/testdata/corpora/cobra/intent_candidates.json index 6a8b826e..05279e4d 100644 --- a/internal/app/search/rank/testdata/corpora/cobra/intent_candidates.json +++ b/internal/app/search/rank/testdata/corpora/cobra/intent_candidates.json @@ -1,15 +1,17 @@ { - "ExactArgs": {}, - "Excute": {}, - "ExecuteC": {}, - "SuggestionsFor": {}, - "active help": {}, - "database connection pool": {}, - "flag error": {}, - "flag groups": {}, - "levenshtein": {}, - "persistent flags": {}, - "shell completion": {}, - "usage template": {}, - "valid args": {} + "queries": { + "ExactArgs": [], + "Excute": [], + "ExecuteC": [], + "SuggestionsFor": [], + "active help": [], + "database connection pool": [], + "flag error": [], + "flag groups": [], + "levenshtein": [], + "persistent flags": [], + "shell completion": [], + "usage template": [], + "valid args": [] + } } diff --git a/internal/app/search/rank/testdata/corpora/context-diary/intent_candidates.json b/internal/app/search/rank/testdata/corpora/context-diary/intent_candidates.json index f36f35d9..d4b7464d 100644 --- a/internal/app/search/rank/testdata/corpora/context-diary/intent_candidates.json +++ b/internal/app/search/rank/testdata/corpora/context-diary/intent_candidates.json @@ -1,2519 +1,1209 @@ { - "Prepare": { - "corpus": 110, - "terms": [ - { - "text": "prepare", - "in_reasons": 2 - } - ], - "hits": [ - { - "id": 37, - "name": "cmdHook", - "qualified_name": "main.cmdHook", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "reason": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "terms": [ - "prepare" - ] - } - ] + "corpus": 110, + "nodes": { + "102": { + "name": "Prepare", + "qualified_name": "hook.Prepare", + "kind": "function", + "file_path": "internal/hook/hook.go", + "namespace": "context-diary", + "start_line": 49, + "intent": "give a human committer a commented trailer template to fill in, without ever blocking the commit", + "reason": "give a human committer a commented trailer template to fill in, without ever blocking the commit" + }, + "104": { + "name": "CommitMsg", + "qualified_name": "hook.CommitMsg", + "kind": "function", + "file_path": "internal/hook/hook.go", + "namespace": "context-diary", + "start_line": 117, + "intent": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", + "reason": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output" + }, + "107": { + "name": "ParseCodeRef", + "qualified_name": "index.ParseCodeRef", + "kind": "function", + "file_path": "internal/index/coderef.go", + "namespace": "context-diary", + "start_line": 30, + "intent": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", + "reason": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id" + }, + "111": { + "name": "EntryFromCommit", + "qualified_name": "index.EntryFromCommit", + "kind": "function", + "file_path": "internal/index/entry.go", + "namespace": "context-diary", + "start_line": 58, + "intent": "turn one commit into an indexable context entry, or nil when it carries no why", + "reason": "turn one commit into an indexable context entry, or nil when it carries no why" + }, + "118": { + "name": "Run", + "qualified_name": "ingest.Run", + "kind": "function", + "file_path": "internal/ingest/ingest.go", + "namespace": "context-diary", + "start_line": 40, + "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", + "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook" + }, + "123": { + "name": "AgentSetup", + "qualified_name": "installer.AgentSetup", + "kind": "function", + "file_path": "internal/installer/agent.go", + "namespace": "context-diary", + "start_line": 84, + "intent": "set up an AI-agent convention file with the trailer instructions snippet", + "reason": "set up an AI-agent convention file with the trailer instructions snippet" + }, + "127": { + "name": "Install", + "qualified_name": "installer.Install", + "kind": "function", + "file_path": "internal/installer/installer.go", + "namespace": "context-diary", + "start_line": 67, + "intent": "install the git hooks without clobbering another tool's hooks", + "reason": "install the git hooks without clobbering another tool's hooks" + }, + "129": { + "name": "ScaffoldConfig", + "qualified_name": "installer.ScaffoldConfig", + "kind": "function", + "file_path": "internal/installer/installer.go", + "namespace": "context-diary", + "start_line": 111, + "intent": "write a starter .context-diary.toml when none exists, without overwriting an edited one", + "reason": "write a starter .context-diary.toml when none exists, without overwriting an edited one" + }, + "143": { + "name": "NewServer", + "qualified_name": "mcptool.NewServer", + "kind": "function", + "file_path": "internal/mcptool/mcptool.go", + "namespace": "context-diary", + "start_line": 128, + "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", + "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is" + }, + "147": { + "name": "Sync", + "qualified_name": "mirror.Sync", + "kind": "function", + "file_path": "internal/mirror/mirror.go", + "namespace": "context-diary", + "start_line": 32, + "intent": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", + "reason": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree" + }, + "152": { + "name": "Evaluate", + "qualified_name": "preview.Evaluate", + "kind": "function", + "file_path": "internal/preview/preview.go", + "namespace": "context-diary", + "start_line": 46, + "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", + "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page" + }, + "159": { + "name": "New", + "qualified_name": "queue.New", + "kind": "function", + "file_path": "internal/queue/queue.go", + "namespace": "context-diary", + "start_line": 32, + "intent": "build a bounded worker-pool queue that serializes jobs per key", + "reason": "build a bounded worker-pool queue that serializes jobs per key" + }, + "160": { + "name": "Enqueue", + "qualified_name": "queue.Q.Enqueue", + "kind": "function", + "file_path": "internal/queue/queue.go", + "namespace": "context-diary", + "start_line": 45, + "intent": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated", + "reason": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated" + }, + "161": { + "name": "Start", + "qualified_name": "queue.Q.Start", + "kind": "function", + "file_path": "internal/queue/queue.go", + "namespace": "context-diary", + "start_line": 58, + "intent": "launch the worker pool that drains the queue until the context is cancelled", + "reason": "launch the worker pool that drains the queue until the context is cancelled" + }, + "170": { + "name": "Migrate", + "qualified_name": "store.Store.Migrate", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 133, + "intent": "create or update the schema on startup without a migration framework", + "reason": "create or update the schema on startup without a migration framework" + }, + "171": { + "name": "UpsertRepo", + "qualified_name": "store.Store.UpsertRepo", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 143, + "intent": "ensure the repos row exists and return its id and ingest cursor", + "reason": "ensure the repos row exists and return its id and ingest cursor" + }, + "172": { + "name": "SaveEntries", + "qualified_name": "store.Store.SaveEntries", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 171, + "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", + "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits" + }, + "174": { + "name": "Search", + "qualified_name": "store.Store.Search", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 267, + "intent": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point", + "reason": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point" + }, + "175": { + "name": "ByHashes", + "qualified_name": "store.Store.ByHashes", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 323, + "intent": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", + "reason": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function" + }, + "177": { + "name": "ReferencedBy", + "qualified_name": "store.Store.ReferencedBy", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 366, + "intent": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"", + "reason": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"" + }, + "180": { + "name": "ListScopes", + "qualified_name": "store.Store.ListScopes", + "kind": "function", + "file_path": "internal/store/store.go", + "namespace": "context-diary", + "start_line": 422, + "intent": "list the product scope slugs with entry counts, so callers can discover areas before searching", + "reason": "list the product scope slugs with entry counts, so callers can discover areas before searching" + }, + "184": { + "name": "Parse", + "qualified_name": "trailer.Parse", + "kind": "function", + "file_path": "internal/trailer/trailer.go", + "namespace": "context-diary", + "start_line": 60, + "intent": "extract the structured trailer block from a commit or PR message", + "reason": "extract the structured trailer block from a commit or PR message" + }, + "188": { + "name": "HasContextWhy", + "qualified_name": "trailer.HasContextWhy", + "kind": "function", + "file_path": "internal/trailer/trailer.go", + "namespace": "context-diary", + "start_line": 154, + "intent": "report whether a message carries a non-empty Context-Why (case-insensitive), the gate for indexing", + "reason": "report whether a message carries a non-empty Context-Why (case-insensitive), the gate for indexing" + }, + "19": { + "name": "cmd/context-diary/backfill.go", + "qualified_name": "cmd/context-diary/backfill.go", + "kind": "file", + "file_path": "cmd/context-diary/backfill.go", + "namespace": "context-diary", + "start_line": 1, + "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", + "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes" + }, + "190": { + "name": "StripComments", + "qualified_name": "trailer.StripComments", + "kind": "function", + "file_path": "internal/trailer/trailer.go", + "namespace": "context-diary", + "start_line": 175, + "intent": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", + "reason": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer" + }, + "194": { + "name": "Lint", + "qualified_name": "trailer.Lint", + "kind": "function", + "file_path": "internal/trailer/trailer.go", + "namespace": "context-diary", + "start_line": 221, + "intent": "validate a commit or PR message against the trailer format and return actionable violations", + "reason": "validate a commit or PR message against the trailer format and return actionable violations" + }, + "20": { + "name": "cmdBackfill", + "qualified_name": "main.cmdBackfill", + "kind": "function", + "file_path": "cmd/context-diary/backfill.go", + "namespace": "context-diary", + "start_line": 17, + "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", + "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes" + }, + "205": { + "name": "results", + "qualified_name": "webui.handler.results", + "kind": "function", + "file_path": "internal/webui/webui.go", + "namespace": "context-diary", + "start_line": 113, + "intent": "run the index query for a UI request, paginate the result, and render the page", + "reason": "run the index query for a UI request, paginate the result, and render the page" + }, + "22": { + "name": "cmd/context-diary/explain.go", + "qualified_name": "cmd/context-diary/explain.go", + "kind": "file", + "file_path": "cmd/context-diary/explain.go", + "namespace": "context-diary", + "start_line": 1, + "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", + "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index" + }, + "23": { + "name": "cmdExplain", + "qualified_name": "main.cmdExplain", + "kind": "function", + "file_path": "cmd/context-diary/explain.go", + "namespace": "context-diary", + "start_line": 20, + "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", + "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index" + }, + "26": { + "name": "cmdIndex", + "qualified_name": "main.cmdIndex", + "kind": "function", + "file_path": "cmd/context-diary/index.go", + "namespace": "context-diary", + "start_line": 28, + "intent": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", + "reason": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres" + }, + "28": { + "name": "cmd/context-diary/lintmessage.go", + "qualified_name": "cmd/context-diary/lintmessage.go", + "kind": "file", + "file_path": "cmd/context-diary/lintmessage.go", + "namespace": "context-diary", + "start_line": 1, + "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", + "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve" + }, + "29": { + "name": "cmdLintMessage", + "qualified_name": "main.cmdLintMessage", + "kind": "function", + "file_path": "cmd/context-diary/lintmessage.go", + "namespace": "context-diary", + "start_line": 18, + "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", + "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve" + }, + "32": { + "name": "run", + "qualified_name": "main.run", + "kind": "function", + "file_path": "cmd/context-diary/main.go", + "namespace": "context-diary", + "start_line": 47, + "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", + "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)" + }, + "35": { + "name": "cmdInit", + "qualified_name": "main.cmdInit", + "kind": "function", + "file_path": "cmd/context-diary/main.go", + "namespace": "context-diary", + "start_line": 110, + "intent": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet", + "reason": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet" + }, + "37": { + "name": "cmdHook", + "qualified_name": "main.cmdHook", + "kind": "function", + "file_path": "cmd/context-diary/main.go", + "namespace": "context-diary", + "start_line": 171, + "intent": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", + "reason": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git" + }, + "38": { + "name": "cmdLint", + "qualified_name": "main.cmdLint", + "kind": "function", + "file_path": "cmd/context-diary/main.go", + "namespace": "context-diary", + "start_line": 222, + "intent": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers", + "reason": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers" + }, + "43": { + "name": "rescanHandler", + "qualified_name": "main.rescanHandler", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 91, + "intent": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", + "reason": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index" + }, + "44": { + "name": "cmdServe", + "qualified_name": "main.cmdServe", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 115, + "intent": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", + "reason": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server" + }, + "45": { + "name": "githubTokenFn", + "qualified_name": "main.githubTokenFn", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 338, + "intent": "select the GitHub auth mode and return a per-request token resolver", + "reason": "select the GitHub auth mode and return a per-request token resolver" + }, + "47": { + "name": "checksHandler", + "qualified_name": "main.checksHandler", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 372, + "intent": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired", + "reason": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired" + }, + "48": { + "name": "bearerAuth", + "qualified_name": "main.bearerAuth", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 388, + "intent": "require a bearer token on the MCP endpoint when CONTEXT_DIARY_MCP_TOKEN is set", + "reason": "require a bearer token on the MCP endpoint when CONTEXT_DIARY_MCP_TOKEN is set" + }, + "49": { + "name": "webhookHandler", + "qualified_name": "main.webhookHandler", + "kind": "function", + "file_path": "cmd/context-diary/serve.go", + "namespace": "context-diary", + "start_line": 408, + "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", + "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously" + }, + "54": { + "name": "Upsert", + "qualified_name": "checks.Store.Upsert", + "kind": "function", + "file_path": "internal/checks/checks.go", + "namespace": "context-diary", + "start_line": 61, + "intent": "create or replace a check detail page and return the stable capability URL id for its logical key", + "reason": "create or replace a check detail page and return the stable capability URL id for its logical key" + }, + "60": { + "name": "Load", + "qualified_name": "config.Load", + "kind": "function", + "file_path": "internal/config/config.go", + "namespace": "context-diary", + "start_line": 55, + "intent": "resolve the effective configuration from env, repo file, user file, and defaults", + "reason": "resolve the effective configuration from env, repo file, user file, and defaults" + }, + "66": { + "name": "Token", + "qualified_name": "github.AppAuth.Token", + "kind": "function", + "file_path": "internal/forge/github/app.go", + "namespace": "context-diary", + "start_line": 73, + "intent": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation", + "reason": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation" + }, + "73": { + "name": "ValidSignature", + "qualified_name": "github.ValidSignature", + "kind": "function", + "file_path": "internal/forge/github/github.go", + "namespace": "context-diary", + "start_line": 64, + "intent": "authenticate that a webhook payload really came from GitHub before any side effect", + "reason": "authenticate that a webhook payload really came from GitHub before any side effect" + }, + "74": { + "name": "ParsePREvent", + "qualified_name": "github.ParsePREvent", + "kind": "function", + "file_path": "internal/forge/github/github.go", + "namespace": "context-diary", + "start_line": 82, + "intent": "extract the pull_request fields serve needs from a verified webhook payload", + "reason": "extract the pull_request fields serve needs from a verified webhook payload" + }, + "77": { + "name": "SetStatus", + "qualified_name": "github.Client.SetStatus", + "kind": "function", + "file_path": "internal/forge/github/github.go", + "namespace": "context-diary", + "start_line": 168, + "intent": "surface context-diary results as a commit status that branch protection can require", + "reason": "surface context-diary results as a commit status that branch protection can require" + }, + "78": { + "name": "ListPRCommits", + "qualified_name": "github.Client.ListPRCommits", + "kind": "function", + "file_path": "internal/forge/github/github.go", + "namespace": "context-diary", + "start_line": 189, + "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", + "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams" + }, + "79": { + "name": "UpsertComment", + "qualified_name": "github.Client.UpsertComment", + "kind": "function", + "file_path": "internal/forge/github/github.go", + "namespace": "context-diary", + "start_line": 218, + "intent": "keep exactly one bot comment per PR so pushes never spam the thread", + "reason": "keep exactly one bot comment per PR so pushes never spam the thread" + }, + "82": { + "name": "CommitsTouching", + "qualified_name": "funclog.CommitsTouching", + "kind": "function", + "file_path": "internal/funclog/funclog.go", + "namespace": "context-diary", + "start_line": 36, + "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", + "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline" + }, + "84": { + "name": "WalkFull", + "qualified_name": "gitlog.WalkFull", + "kind": "function", + "file_path": "internal/gitlog/gitlog.go", + "namespace": "context-diary", + "start_line": 37, + "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", + "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved" + }, + "85": { + "name": "Walk", + "qualified_name": "gitlog.Walk", + "kind": "function", + "file_path": "internal/gitlog/gitlog.go", + "namespace": "context-diary", + "start_line": 126, + "intent": "index the linear default-branch history for squash and rebase workflows where every landed commit is on the first-parent line", + "reason": "index the linear default-branch history for squash and rebase workflows where every landed commit is on the first-parent line" + }, + "91": { + "name": "StagedDiff", + "qualified_name": "gitx.StagedDiff", + "kind": "function", + "file_path": "internal/gitx/gitx.go", + "namespace": "context-diary", + "start_line": 34, + "intent": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget", + "reason": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget" + }, + "92": { + "name": "CommentChar", + "qualified_name": "gitx.CommentChar", + "kind": "function", + "file_path": "internal/gitx/gitx.go", + "namespace": "context-diary", + "start_line": 57, + "intent": "resolve the git comment character so injected template lines match the editor", + "reason": "resolve the git comment character so injected template lines match the editor" + }, + "94": { + "name": "HooksDir", + "qualified_name": "gitx.HooksDir", + "kind": "function", + "file_path": "internal/gitx/gitx.go", + "namespace": "context-diary", + "start_line": 81, + "intent": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default", + "reason": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default" + } }, - "SaveEntries": { - "corpus": 110, - "terms": [ - { - "text": "saveentries", - "in_reasons": 1 - } - ], - "hits": [ - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "saveentries" - ] - } - ] + "documents": { + "1": { + "node_id": 19, + "content": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes" + }, + "10": { + "node_id": 35, + "content": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet" + }, + "100": { + "node_id": 180, + "content": "list the product scope slugs with entry counts, so callers can discover areas before searching" + }, + "101": { + "node_id": 184, + "content": "extract the structured trailer block from a commit or PR message" + }, + "102": { + "node_id": 184, + "content": "the trailer block is the run of consecutive all-trailer paragraphs at the end of the message — more lenient than git's last-paragraph rule, so GitHub's appended Co-authored-by paragraph does not orphan the Context trailers" + }, + "103": { + "node_id": 184, + "content": "a single-paragraph message has no trailer block; that paragraph is the subject" + }, + "104": { + "node_id": 188, + "content": "report whether a message carries a non-empty Context-Why (case-insensitive), the gate for indexing" + }, + "106": { + "node_id": 190, + "content": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer" + }, + "107": { + "node_id": 194, + "content": "validate a commit or PR message against the trailer format and return actionable violations" + }, + "108": { + "node_id": 194, + "content": "requires a non-empty Context-Why; scope slugs must match the grammar; values must be single-line; Context-* lines must live in the trailer block" + }, + "109": { + "node_id": 205, + "content": "run the index query for a UI request, paginate the result, and render the page" + }, + "11": { + "node_id": 37, + "content": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git" + }, + "12": { + "node_id": 37, + "content": "never-block (I-1): prepare-commit-msg always exits 0; commit-msg exits 1 only under strict lint" + }, + "13": { + "node_id": 38, + "content": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers" + }, + "15": { + "node_id": 43, + "content": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index" + }, + "16": { + "node_id": 43, + "content": "a missing repo query is a 400 with no side effect; a rescan failure surfaces as 500" + }, + "17": { + "node_id": 44, + "content": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server" + }, + "18": { + "node_id": 45, + "content": "select the GitHub auth mode and return a per-request token resolver" + }, + "19": { + "node_id": 45, + "content": "a personal access token (GITHUB_TOKEN) wins when set; otherwise GitHub App credentials are required" + }, + "2": { + "node_id": 20, + "content": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes" + }, + "20": { + "node_id": 47, + "content": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired" + }, + "22": { + "node_id": 48, + "content": "the token comparison is constant-time to avoid timing oracles" + }, + "23": { + "node_id": 49, + "content": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously" + }, + "24": { + "node_id": 49, + "content": "the payload is verified (HMAC) before any parsing or side effect; an invalid signature returns 401" + }, + "25": { + "node_id": 49, + "content": "a merged PR is enqueued and acknowledged with 202 immediately; ingestion runs in the background so the 10s webhook timeout is never a factor" + }, + "26": { + "node_id": 49, + "content": "a full ingest queue returns 503 with no side effects" + }, + "28": { + "node_id": 54, + "content": "the same logical key keeps the same id while resident, so a pending status and its final result share one URL" + }, + "3": { + "node_id": 22, + "content": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index" + }, + "31": { + "node_id": 60, + "content": "precedence is env \u003e repo file \u003e user file \u003e builtin defaults; secrets never come from config files" + }, + "32": { + "node_id": 66, + "content": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation" + }, + "34": { + "node_id": 73, + "content": "authenticate that a webhook payload really came from GitHub before any side effect" + }, + "35": { + "node_id": 73, + "content": "webhook bodies are untrusted until this passes; a bad or missing signature must be rejected with 401" + }, + "36": { + "node_id": 74, + "content": "extract the pull_request fields serve needs from a verified webhook payload" + }, + "37": { + "node_id": 77, + "content": "surface context-diary results as a commit status that branch protection can require" + }, + "38": { + "node_id": 78, + "content": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams" + }, + "39": { + "node_id": 78, + "content": "reads only the first 100 commits; larger PRs are an anti-pattern and are backstopped by lint on main" + }, + "4": { + "node_id": 23, + "content": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index" + }, + "40": { + "node_id": 79, + "content": "keep exactly one bot comment per PR so pushes never spam the thread" + }, + "41": { + "node_id": 79, + "content": "the comment is found by an HTML marker and updated in place; otherwise a new one is created" + }, + "42": { + "node_id": 82, + "content": "list the commits that changed one function, so their context can be joined into a per-function why-timeline" + }, + "44": { + "node_id": 84, + "content": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved" + }, + "45": { + "node_id": 84, + "content": "merge-commit teams use full-DAG walk; merge commits themselves carry no trailers and are stitches" + }, + "46": { + "node_id": 84, + "content": "an unreachable cursor (history rewrite) falls back to a full rescan, which is safe because inserts are idempotent" + }, + "47": { + "node_id": 85, + "content": "index the linear default-branch history for squash and rebase workflows where every landed commit is on the first-parent line" + }, + "49": { + "node_id": 91, + "content": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget" + }, + "50": { + "node_id": 92, + "content": "resolve the git comment character so injected template lines match the editor" + }, + "51": { + "node_id": 92, + "content": "the rare core.commentChar=auto is resolved by git after this hook runs, so it falls back to \"#\" (design R3)" + }, + "52": { + "node_id": 94, + "content": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default" + }, + "53": { + "node_id": 94, + "content": "a custom hooksPath is reported so init refuses to write there and prints manual instructions instead" + }, + "54": { + "node_id": 102, + "content": "give a human committer a commented trailer template to fill in, without ever blocking the commit" + }, + "55": { + "node_id": 102, + "content": "never-block (I-1): every failure path warns to stderr and returns; the commit is never rejected here" + }, + "57": { + "node_id": 104, + "content": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output" + }, + "58": { + "node_id": 104, + "content": "blocks the commit only when lint.level is strict and violations exist; warn mode never blocks" + }, + "6": { + "node_id": 26, + "content": "--rescan ignores the cursor to reflect parser upgrades and edited backfill notes; --walk selects first-parent or full DAG" + }, + "60": { + "node_id": 107, + "content": "canonical form is owner/repo:path#Symbol (symbol optional); legacy repo//path#Symbol remains readable; GitHub blob URLs parse to repo+path only, and #L line fragments are ignored because they rot with edits" + }, + "61": { + "node_id": 111, + "content": "turn one commit into an indexable context entry, or nil when it carries no why" + }, + "62": { + "node_id": 111, + "content": "a commit with no non-empty Context-Why is not indexed — this is not an error (spec)" + }, + "63": { + "node_id": 111, + "content": "authored commit trailers win entirely; a backfill git note is consulted only when the message has no Context-Why" + }, + "65": { + "node_id": 118, + "content": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook" + }, + "66": { + "node_id": 118, + "content": "Rescan ignores the stored cursor and rewalks the whole history so parser upgrades and edited backfill notes are reflected" + }, + "67": { + "node_id": 123, + "content": "set up an AI-agent convention file with the trailer instructions snippet" + }, + "68": { + "node_id": 123, + "content": "an existing convention file is never modified (I-3); the snippet is returned as a manual instruction instead" + }, + "69": { + "node_id": 127, + "content": "install the git hooks without clobbering another tool's hooks" + }, + "7": { + "node_id": 28, + "content": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve" + }, + "70": { + "node_id": 127, + "content": "never edit files it does not own (I-3): a foreign hook is left untouched and returned as a manual instruction" + }, + "71": { + "node_id": 129, + "content": "write a starter .context-diary.toml when none exists, without overwriting an edited one" + }, + "72": { + "node_id": 143, + "content": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is" + }, + "73": { + "node_id": 143, + "content": "read-only; audience translation of answers is the calling assistant's job (write-once-developer-level principle)" + }, + "74": { + "node_id": 143, + "content": "explain_function is registered only when a RepoPath resolver is provided (needs a local mirror and the git CLI)" + }, + "75": { + "node_id": 147, + "content": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree" + }, + "76": { + "node_id": 147, + "content": "the token is used for in-memory auth only; the on-disk bare mirror never stores credentials" + }, + "77": { + "node_id": 152, + "content": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page" + }, + "78": { + "node_id": 152, + "content": "dual-path: the PR passes when EITHER the PR description carries trailers OR every non-merge branch commit does" + }, + "79": { + "node_id": 152, + "content": "merge commits are exempt from the commit path — they are stitches, not changes" + }, + "8": { + "node_id": 29, + "content": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve" + }, + "80": { + "node_id": 152, + "content": "when only the commit path passes, warn that a squash merge would discard the commit messages" + }, + "81": { + "node_id": 159, + "content": "build a bounded worker-pool queue that serializes jobs per key" + }, + "82": { + "node_id": 160, + "content": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated" + }, + "83": { + "node_id": 160, + "content": "returns false when the bounded buffer is full so the caller can surface a 503 with no partial side effects" + }, + "84": { + "node_id": 161, + "content": "launch the worker pool that drains the queue until the context is cancelled" + }, + "85": { + "node_id": 161, + "content": "same-key jobs are serialized by a per-key mutex while different keys run in parallel" + }, + "87": { + "node_id": 170, + "content": "DDL is CREATE ... IF NOT EXISTS only; no migration tool until the first breaking schema change (YAGNI)" + }, + "88": { + "node_id": 171, + "content": "ensure the repos row exists and return its id and ingest cursor" + }, + "89": { + "node_id": 172, + "content": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits" + }, + "9": { + "node_id": 32, + "content": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)" + }, + "90": { + "node_id": 172, + "content": "upsert-on-change: an unchanged commit is a no-op; changed content (e.g. an edited backfill note) rebuilds its scopes/details/code-refs" + }, + "91": { + "node_id": 172, + "content": "force=true rebuilds derived children even when content is unchanged, so parser upgrades reach already-indexed commits (used by --rescan)" + }, + "92": { + "node_id": 174, + "content": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point" + }, + "93": { + "node_id": 174, + "content": "free-text matches when EITHER the tsvector FTS query OR an all-words trigram substring hits, so agglutinative-language (Korean) stems find their inflected forms" + }, + "94": { + "node_id": 174, + "content": "an empty repoName searches across every indexed repository" + }, + "95": { + "node_id": 175, + "content": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function" + }, + "96": { + "node_id": 177, + "content": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"" + } }, - "UpsertComment": {}, - "ValidSignature": {}, - "backfill": { - "corpus": 110, - "terms": [ - { - "text": "backfill", - "in_reasons": 7 - } + "queries": { + "Prepare": [ + 11, + 12 ], - "hits": [ - { - "id": 32, - "name": "run", - "qualified_name": "main.run", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "terms": [ - "backfill" - ] - }, - { - "id": 19, - "name": "cmd/context-diary/backfill.go", - "qualified_name": "cmd/context-diary/backfill.go", - "kind": "file", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "backfill" - ] - }, - { - "id": 20, - "name": "cmdBackfill", - "qualified_name": "main.cmdBackfill", - "kind": "function", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "backfill" - ] - }, - { - "id": 26, - "name": "cmdIndex", - "qualified_name": "main.cmdIndex", - "kind": "function", - "file_path": "cmd/context-diary/index.go", - "intent": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "reason": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "terms": [ - "backfill" - ] - }, - { - "id": 111, - "name": "EntryFromCommit", - "qualified_name": "index.EntryFromCommit", - "kind": "function", - "file_path": "internal/index/entry.go", - "intent": "turn one commit into an indexable context entry, or nil when it carries no why", - "reason": "turn one commit into an indexable context entry, or nil when it carries no why", - "terms": [ - "backfill" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "backfill" - ] - }, - { - "id": 172, - "name": "SaveEntries", - "qualified_name": "store.Store.SaveEntries", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "terms": [ - "backfill" - ] - } - ] - }, - "does the installer overwrite hooks that belong to another tool": { - "corpus": 110, - "terms": [ - { - "text": "installer", - "in_reasons": 0 - }, - { - "text": "overwrite", - "in_reasons": 0 - }, - { - "text": "hooks", - "in_reasons": 4 - }, - { - "text": "belong", - "in_reasons": 0 - }, - { - "text": "another", - "in_reasons": 2 - }, - { - "text": "tool", - "in_reasons": 3 - } + "SaveEntries": [ + 65 ], - "hits": [ - { - "id": 127, - "name": "Install", - "qualified_name": "installer.Install", - "kind": "function", - "file_path": "internal/installer/installer.go", - "intent": "install the git hooks without clobbering another tool's hooks", - "reason": "install the git hooks without clobbering another tool's hooks", - "terms": [ - "hooks", - "another", - "tool" - ] - }, - { - "id": 94, - "name": "HooksDir", - "qualified_name": "gitx.HooksDir", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default", - "reason": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default", - "terms": [ - "hooks" - ] - }, - { - "id": 177, - "name": "ReferencedBy", - "qualified_name": "store.Store.ReferencedBy", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"", - "reason": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"", - "terms": [ - "another" - ] - }, - { - "id": 170, - "name": "Migrate", - "qualified_name": "store.Store.Migrate", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "create or update the schema on startup without a migration framework", - "reason": "create or update the schema on startup without a migration framework", - "terms": [ - "tool" - ] - }, - { - "id": 35, - "name": "cmdInit", - "qualified_name": "main.cmdInit", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet", - "reason": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet", - "terms": [ - "hooks" - ] - }, - { - "id": 143, - "name": "NewServer", - "qualified_name": "mcptool.NewServer", - "kind": "function", - "file_path": "internal/mcptool/mcptool.go", - "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "terms": [ - "tool" - ] - } - ] - }, - "explain": { - "corpus": 110, - "terms": [ - { - "text": "explain", - "in_reasons": 5 - } + "UpsertComment": [], + "ValidSignature": [], + "backfill": [ + 1, + 2, + 6, + 9, + 63, + 66, + 90 ], - "hits": [ - { - "id": 175, - "name": "ByHashes", - "qualified_name": "store.Store.ByHashes", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "reason": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "terms": [ - "explain" - ] - }, - { - "id": 32, - "name": "run", - "qualified_name": "main.run", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "terms": [ - "explain" - ] - }, - { - "id": 143, - "name": "NewServer", - "qualified_name": "mcptool.NewServer", - "kind": "function", - "file_path": "internal/mcptool/mcptool.go", - "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "terms": [ - "explain" - ] - }, - { - "id": 22, - "name": "cmd/context-diary/explain.go", - "qualified_name": "cmd/context-diary/explain.go", - "kind": "file", - "file_path": "cmd/context-diary/explain.go", - "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "terms": [ - "explain" - ] - }, - { - "id": 23, - "name": "cmdExplain", - "qualified_name": "main.cmdExplain", - "kind": "function", - "file_path": "cmd/context-diary/explain.go", - "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "terms": [ - "explain" - ] - } - ] - }, - "explain function": { - "corpus": 110, - "terms": [ - { - "text": "explain", - "in_reasons": 5 - }, - { - "text": "function", - "in_reasons": 4 - } + "does the installer overwrite hooks that belong to another tool": [ + 10, + 52, + 53, + 69, + 72, + 87, + 96 ], - "hits": [ - { - "id": 22, - "name": "cmd/context-diary/explain.go", - "qualified_name": "cmd/context-diary/explain.go", - "kind": "file", - "file_path": "cmd/context-diary/explain.go", - "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "terms": [ - "explain", - "function" - ] - }, - { - "id": 23, - "name": "cmdExplain", - "qualified_name": "main.cmdExplain", - "kind": "function", - "file_path": "cmd/context-diary/explain.go", - "intent": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "reason": "implement `context-diary explain \u003cfile\u003e \u003cfunction\u003e`: print a function why-timeline by joining git line history with the index", - "terms": [ - "explain", - "function" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "function" - ] - }, - { - "id": 177, - "name": "ReferencedBy", - "qualified_name": "store.Store.ReferencedBy", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"", - "reason": "reverse-lookup cross-repo impact: \"which decision in another service concerns this function\"", - "terms": [ - "function" - ] - }, - { - "id": 175, - "name": "ByHashes", - "qualified_name": "store.Store.ByHashes", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "reason": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "terms": [ - "explain" - ] - }, - { - "id": 32, - "name": "run", - "qualified_name": "main.run", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "terms": [ - "explain" - ] - }, - { - "id": 143, - "name": "NewServer", - "qualified_name": "mcptool.NewServer", - "kind": "function", - "file_path": "internal/mcptool/mcptool.go", - "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "terms": [ - "explain" - ] - } - ] - }, - "how are github app tokens refreshed": { - "corpus": 110, - "terms": [ - { - "text": "github", - "in_reasons": 8 - }, - { - "text": "app", - "in_reasons": 2 - }, - { - "text": "tokens", - "in_reasons": 0 - }, - { - "text": "refreshed", - "in_reasons": 0 - } + "explain": [ + 3, + 4, + 9, + 74, + 95 ], - "hits": [ - { - "id": 45, - "name": "githubTokenFn", - "qualified_name": "main.githubTokenFn", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "select the GitHub auth mode and return a per-request token resolver", - "reason": "select the GitHub auth mode and return a per-request token resolver", - "terms": [ - "github", - "app" - ] - }, - { - "id": 66, - "name": "Token", - "qualified_name": "github.AppAuth.Token", - "kind": "function", - "file_path": "internal/forge/github/app.go", - "intent": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation", - "reason": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation", - "terms": [ - "github", - "app" - ] - }, - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "github" - ] - }, - { - "id": 73, - "name": "ValidSignature", - "qualified_name": "github.ValidSignature", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "authenticate that a webhook payload really came from GitHub before any side effect", - "reason": "authenticate that a webhook payload really came from GitHub before any side effect", - "terms": [ - "github" - ] - }, - { - "id": 44, - "name": "cmdServe", - "qualified_name": "main.cmdServe", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "reason": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "terms": [ - "github" - ] - }, - { - "id": 107, - "name": "ParseCodeRef", - "qualified_name": "index.ParseCodeRef", - "kind": "function", - "file_path": "internal/index/coderef.go", - "intent": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "reason": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "terms": [ - "github" - ] - }, - { - "id": 184, - "name": "Parse", - "qualified_name": "trailer.Parse", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "extract the structured trailer block from a commit or PR message", - "reason": "extract the structured trailer block from a commit or PR message", - "terms": [ - "github" - ] - } - ] - }, - "how do korean searches find inflected words": { - "corpus": 110, - "terms": [ - { - "text": "korean", - "in_reasons": 1 - }, - { - "text": "searches", - "in_reasons": 1 - }, - { - "text": "find", - "in_reasons": 1 - }, - { - "text": "inflected", - "in_reasons": 1 - }, - { - "text": "words", - "in_reasons": 1 - } + "explain function": [ + 3, + 4, + 9, + 42, + 74, + 95, + 96 ], - "hits": [ - { - "id": 174, - "name": "Search", - "qualified_name": "store.Store.Search", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point", - "reason": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point", - "terms": [ - "korean", - "searches", - "find", - "inflected", - "words" - ] - } - ] - }, - "how does a crash avoid skipping or duplicating commits": { - "corpus": 110, - "terms": [ - { - "text": "crash", - "in_reasons": 1 - }, - { - "text": "avoid", - "in_reasons": 1 - }, - { - "text": "skipping", - "in_reasons": 0 - }, - { - "text": "duplicating", - "in_reasons": 0 - }, - { - "text": "commits", - "in_reasons": 10 - } + "how are github app tokens refreshed": [ + 17, + 18, + 19, + 23, + 32, + 34, + 60, + 102 ], - "hits": [ - { - "id": 172, - "name": "SaveEntries", - "qualified_name": "store.Store.SaveEntries", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "terms": [ - "crash", - "commits" - ] - }, - { - "id": 48, - "name": "bearerAuth", - "qualified_name": "main.bearerAuth", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "require a bearer token on the MCP endpoint when CONTEXT_DIARY_MCP_TOKEN is set", - "reason": "require a bearer token on the MCP endpoint when CONTEXT_DIARY_MCP_TOKEN is set", - "terms": [ - "avoid" - ] - }, - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "commits" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "commits" - ] - }, - { - "id": 19, - "name": "cmd/context-diary/backfill.go", - "qualified_name": "cmd/context-diary/backfill.go", - "kind": "file", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 20, - "name": "cmdBackfill", - "qualified_name": "main.cmdBackfill", - "kind": "function", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "commits" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "commits" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "commits" - ] - } - ] - }, - "how does the server verify a webhook really came from github": { - "corpus": 110, - "terms": [ - { - "text": "server", - "in_reasons": 3 - }, - { - "text": "verify", - "in_reasons": 0 - }, - { - "text": "webhook", - "in_reasons": 8 - }, - { - "text": "really", - "in_reasons": 1 - }, - { - "text": "came", - "in_reasons": 1 - }, - { - "text": "github", - "in_reasons": 8 - } + "how do korean searches find inflected words": [ + 93, + 94 ], - "hits": [ - { - "id": 73, - "name": "ValidSignature", - "qualified_name": "github.ValidSignature", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "authenticate that a webhook payload really came from GitHub before any side effect", - "reason": "authenticate that a webhook payload really came from GitHub before any side effect", - "terms": [ - "webhook", - "really", - "came", - "github" - ] - }, - { - "id": 44, - "name": "cmdServe", - "qualified_name": "main.cmdServe", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "reason": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "terms": [ - "server", - "webhook", - "github" - ] - }, - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "webhook", - "github" - ] - }, - { - "id": 45, - "name": "githubTokenFn", - "qualified_name": "main.githubTokenFn", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "select the GitHub auth mode and return a per-request token resolver", - "reason": "select the GitHub auth mode and return a per-request token resolver", - "terms": [ - "github" - ] - }, - { - "id": 28, - "name": "cmd/context-diary/lintmessage.go", - "qualified_name": "cmd/context-diary/lintmessage.go", - "kind": "file", - "file_path": "cmd/context-diary/lintmessage.go", - "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "terms": [ - "server" - ] - }, - { - "id": 29, - "name": "cmdLintMessage", - "qualified_name": "main.cmdLintMessage", - "kind": "function", - "file_path": "cmd/context-diary/lintmessage.go", - "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "terms": [ - "server" - ] - }, - { - "id": 74, - "name": "ParsePREvent", - "qualified_name": "github.ParsePREvent", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "extract the pull_request fields serve needs from a verified webhook payload", - "reason": "extract the pull_request fields serve needs from a verified webhook payload", - "terms": [ - "webhook" - ] - }, - { - "id": 160, - "name": "Enqueue", - "qualified_name": "queue.Q.Enqueue", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated", - "reason": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated", - "terms": [ - "webhook" - ] - }, - { - "id": 66, - "name": "Token", - "qualified_name": "github.AppAuth.Token", - "kind": "function", - "file_path": "internal/forge/github/app.go", - "intent": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation", - "reason": "provide a valid GitHub App installation token to every API call, hiding the JWT-exchange and hourly rotation", - "terms": [ - "github" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "webhook" - ] - }, - { - "id": 107, - "name": "ParseCodeRef", - "qualified_name": "index.ParseCodeRef", - "kind": "function", - "file_path": "internal/index/coderef.go", - "intent": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "reason": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "terms": [ - "github" - ] - }, - { - "id": 184, - "name": "Parse", - "qualified_name": "trailer.Parse", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "extract the structured trailer block from a commit or PR message", - "reason": "extract the structured trailer block from a commit or PR message", - "terms": [ - "github" - ] - } - ] - }, - "kubernetes deployment rollout strategy": {}, - "mirror sync": { - "corpus": 110, - "terms": [ - { - "text": "mirror", - "in_reasons": 4 - }, - { - "text": "sync", - "in_reasons": 1 - } + "how does a crash avoid skipping or duplicating commits": [ + 1, + 2, + 22, + 38, + 39, + 42, + 45, + 65, + 79, + 89, + 91 ], - "hits": [ - { - "id": 43, - "name": "rescanHandler", - "qualified_name": "main.rescanHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "reason": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "terms": [ - "mirror", - "sync" - ] - }, - { - "id": 147, - "name": "Sync", - "qualified_name": "mirror.Sync", - "kind": "function", - "file_path": "internal/mirror/mirror.go", - "intent": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "reason": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "terms": [ - "mirror" - ] - }, - { - "id": 143, - "name": "NewServer", - "qualified_name": "mcptool.NewServer", - "kind": "function", - "file_path": "internal/mcptool/mcptool.go", - "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "terms": [ - "mirror" - ] - } - ] - }, - "rescan commits": { - "corpus": 110, - "terms": [ - { - "text": "rescan", - "in_reasons": 6 - }, - { - "text": "commits", - "in_reasons": 10 - } + "how does the server verify a webhook really came from github": [ + 7, + 8, + 17, + 18, + 19, + 23, + 25, + 32, + 34, + 35, + 36, + 60, + 65, + 82, + 102 ], - "hits": [ - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "rescan", - "commits" - ] - }, - { - "id": 172, - "name": "SaveEntries", - "qualified_name": "store.Store.SaveEntries", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "terms": [ - "rescan", - "commits" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "rescan", - "commits" - ] - }, - { - "id": 43, - "name": "rescanHandler", - "qualified_name": "main.rescanHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "reason": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "terms": [ - "rescan" - ] - }, - { - "id": 26, - "name": "cmdIndex", - "qualified_name": "main.cmdIndex", - "kind": "function", - "file_path": "cmd/context-diary/index.go", - "intent": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "reason": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "terms": [ - "rescan" - ] - }, - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "commits" - ] - }, - { - "id": 19, - "name": "cmd/context-diary/backfill.go", - "qualified_name": "cmd/context-diary/backfill.go", - "kind": "file", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 20, - "name": "cmdBackfill", - "qualified_name": "main.cmdBackfill", - "kind": "function", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "commits" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "commits" - ] - } - ] - }, - "trailer lint": { - "corpus": 110, - "terms": [ - { - "text": "trailer", - "in_reasons": 11 - }, - { - "text": "lint", - "in_reasons": 9 - } + "kubernetes deployment rollout strategy": [], + "mirror sync": [ + 15, + 74, + 75, + 76 ], - "hits": [ - { - "id": 38, - "name": "cmdLint", - "qualified_name": "main.cmdLint", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers", - "reason": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers", - "terms": [ - "trailer", - "lint" - ] - }, - { - "id": 184, - "name": "Parse", - "qualified_name": "trailer.Parse", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "extract the structured trailer block from a commit or PR message", - "reason": "extract the structured trailer block from a commit or PR message", - "terms": [ - "trailer" - ] - }, - { - "id": 123, - "name": "AgentSetup", - "qualified_name": "installer.AgentSetup", - "kind": "function", - "file_path": "internal/installer/agent.go", - "intent": "set up an AI-agent convention file with the trailer instructions snippet", - "reason": "set up an AI-agent convention file with the trailer instructions snippet", - "terms": [ - "trailer" - ] - }, - { - "id": 104, - "name": "CommitMsg", - "qualified_name": "hook.CommitMsg", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "reason": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "terms": [ - "lint" - ] - }, - { - "id": 32, - "name": "run", - "qualified_name": "main.run", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "terms": [ - "lint" - ] - }, - { - "id": 194, - "name": "Lint", - "qualified_name": "trailer.Lint", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "validate a commit or PR message against the trailer format and return actionable violations", - "reason": "validate a commit or PR message against the trailer format and return actionable violations", - "terms": [ - "trailer" - ] - }, - { - "id": 37, - "name": "cmdHook", - "qualified_name": "main.cmdHook", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "reason": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "terms": [ - "lint" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "lint" - ] - }, - { - "id": 190, - "name": "StripComments", - "qualified_name": "trailer.StripComments", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "reason": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "terms": [ - "lint" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "trailer" - ] - }, - { - "id": 102, - "name": "Prepare", - "qualified_name": "hook.Prepare", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "reason": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "terms": [ - "trailer" - ] - }, - { - "id": 28, - "name": "cmd/context-diary/lintmessage.go", - "qualified_name": "cmd/context-diary/lintmessage.go", - "kind": "file", - "file_path": "cmd/context-diary/lintmessage.go", - "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "terms": [ - "lint" - ] - }, - { - "id": 29, - "name": "cmdLintMessage", - "qualified_name": "main.cmdLintMessage", - "kind": "function", - "file_path": "cmd/context-diary/lintmessage.go", - "intent": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "reason": "implement `context-diary lint-message`: validate a PR description or message body (stdin or file) for CI on servers without serve", - "terms": [ - "lint" - ] - }, - { - "id": 111, - "name": "EntryFromCommit", - "qualified_name": "index.EntryFromCommit", - "kind": "function", - "file_path": "internal/index/entry.go", - "intent": "turn one commit into an indexable context entry, or nil when it carries no why", - "reason": "turn one commit into an indexable context entry, or nil when it carries no why", - "terms": [ - "trailer" - ] - }, - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "trailer" - ] - } - ] - }, - "what happens when the ingest queue is full": { - "corpus": 110, - "terms": [ - { - "text": "happens", - "in_reasons": 0 - }, - { - "text": "ingest", - "in_reasons": 5 - }, - { - "text": "queue", - "in_reasons": 3 - }, - { - "text": "full", - "in_reasons": 6 - } + "rescan commits": [ + 1, + 2, + 6, + 15, + 16, + 38, + 39, + 42, + 45, + 46, + 65, + 66, + 79, + 89, + 91 ], - "hits": [ - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "ingest", - "queue", - "full" - ] - }, - { - "id": 160, - "name": "Enqueue", - "qualified_name": "queue.Q.Enqueue", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated", - "reason": "accept an ingest job without blocking the webhook, or signal back-pressure when saturated", - "terms": [ - "ingest", - "full" - ] - }, - { - "id": 159, - "name": "New", - "qualified_name": "queue.New", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "build a bounded worker-pool queue that serializes jobs per key", - "reason": "build a bounded worker-pool queue that serializes jobs per key", - "terms": [ - "queue" - ] - }, - { - "id": 161, - "name": "Start", - "qualified_name": "queue.Q.Start", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "launch the worker pool that drains the queue until the context is cancelled", - "reason": "launch the worker pool that drains the queue until the context is cancelled", - "terms": [ - "queue" - ] - }, - { - "id": 171, - "name": "UpsertRepo", - "qualified_name": "store.Store.UpsertRepo", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "ensure the repos row exists and return its id and ingest cursor", - "reason": "ensure the repos row exists and return its id and ingest cursor", - "terms": [ - "ingest" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "full" - ] - }, - { - "id": 147, - "name": "Sync", - "qualified_name": "mirror.Sync", - "kind": "function", - "file_path": "internal/mirror/mirror.go", - "intent": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "reason": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "terms": [ - "ingest" - ] - }, - { - "id": 26, - "name": "cmdIndex", - "qualified_name": "main.cmdIndex", - "kind": "function", - "file_path": "cmd/context-diary/index.go", - "intent": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "reason": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "terms": [ - "full" - ] - }, - { - "id": 43, - "name": "rescanHandler", - "qualified_name": "main.rescanHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "reason": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "terms": [ - "full" - ] - } - ] - }, - "why does a merged pull request get acknowledged before indexing finishes": { - "corpus": 110, - "terms": [ - { - "text": "merged", - "in_reasons": 1 - }, - { - "text": "pull", - "in_reasons": 2 - }, - { - "text": "request", - "in_reasons": 2 - }, - { - "text": "get", - "in_reasons": 1 - }, - { - "text": "acknowledged", - "in_reasons": 1 - }, - { - "text": "before", - "in_reasons": 3 - }, - { - "text": "indexing", - "in_reasons": 1 - }, - { - "text": "finishes", - "in_reasons": 0 - } + "trailer lint": [ + 7, + 8, + 9, + 12, + 13, + 39, + 45, + 54, + 57, + 58, + 63, + 67, + 78, + 101, + 102, + 103, + 106, + 107, + 108 ], - "hits": [ - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "merged", - "pull", - "acknowledged", - "before" - ] - }, - { - "id": 74, - "name": "ParsePREvent", - "qualified_name": "github.ParsePREvent", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "extract the pull_request fields serve needs from a verified webhook payload", - "reason": "extract the pull_request fields serve needs from a verified webhook payload", - "terms": [ - "pull" - ] - }, - { - "id": 188, - "name": "HasContextWhy", - "qualified_name": "trailer.HasContextWhy", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "report whether a message carries a non-empty Context-Why (case-insensitive), the gate for indexing", - "reason": "report whether a message carries a non-empty Context-Why (case-insensitive), the gate for indexing", - "terms": [ - "indexing" - ] - }, - { - "id": 45, - "name": "githubTokenFn", - "qualified_name": "main.githubTokenFn", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "select the GitHub auth mode and return a per-request token resolver", - "reason": "select the GitHub auth mode and return a per-request token resolver", - "terms": [ - "request" - ] - }, - { - "id": 47, - "name": "checksHandler", - "qualified_name": "main.checksHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired", - "reason": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired", - "terms": [ - "get" - ] - }, - { - "id": 205, - "name": "results", - "qualified_name": "webui.handler.results", - "kind": "function", - "file_path": "internal/webui/webui.go", - "intent": "run the index query for a UI request, paginate the result, and render the page", - "reason": "run the index query for a UI request, paginate the result, and render the page", - "terms": [ - "request" - ] - }, - { - "id": 73, - "name": "ValidSignature", - "qualified_name": "github.ValidSignature", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "authenticate that a webhook payload really came from GitHub before any side effect", - "reason": "authenticate that a webhook payload really came from GitHub before any side effect", - "terms": [ - "before" - ] - }, - { - "id": 180, - "name": "ListScopes", - "qualified_name": "store.Store.ListScopes", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "list the product scope slugs with entry counts, so callers can discover areas before searching", - "reason": "list the product scope slugs with entry counts, so callers can discover areas before searching", - "terms": [ - "before" - ] - } - ] - }, - "why does a rescan reindex commits that did not change": { - "corpus": 110, - "terms": [ - { - "text": "rescan", - "in_reasons": 6 - }, - { - "text": "reindex", - "in_reasons": 0 - }, - { - "text": "commits", - "in_reasons": 10 - }, - { - "text": "not", - "in_reasons": 7 - }, - { - "text": "change", - "in_reasons": 6 - } + "what happens when the ingest queue is full": [ + 6, + 15, + 25, + 26, + 45, + 46, + 75, + 81, + 82, + 83, + 84, + 88 ], - "hits": [ - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "commits", - "not", - "change" - ] - }, - { - "id": 172, - "name": "SaveEntries", - "qualified_name": "store.Store.SaveEntries", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "terms": [ - "rescan", - "commits", - "change" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "rescan", - "commits", - "not" - ] - }, - { - "id": 170, - "name": "Migrate", - "qualified_name": "store.Store.Migrate", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "create or update the schema on startup without a migration framework", - "reason": "create or update the schema on startup without a migration framework", - "terms": [ - "not", - "change" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "commits", - "change" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "rescan", - "commits" - ] - }, - { - "id": 111, - "name": "EntryFromCommit", - "qualified_name": "index.EntryFromCommit", - "kind": "function", - "file_path": "internal/index/entry.go", - "intent": "turn one commit into an indexable context entry, or nil when it carries no why", - "reason": "turn one commit into an indexable context entry, or nil when it carries no why", - "terms": [ - "not" - ] - }, - { - "id": 43, - "name": "rescanHandler", - "qualified_name": "main.rescanHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "reason": "serve POST /admin/rescan?repo=owner/repo[\u0026branch=name]: re-sync the mirror and rewalk full history into the index", - "terms": [ - "rescan" - ] - }, - { - "id": 91, - "name": "StagedDiff", - "qualified_name": "gitx.StagedDiff", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget", - "reason": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget", - "terms": [ - "change" - ] - }, - { - "id": 26, - "name": "cmdIndex", - "qualified_name": "main.cmdIndex", - "kind": "function", - "file_path": "cmd/context-diary/index.go", - "intent": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "reason": "implement `context-diary index`: scan default-branch history and upsert context entries into Postgres", - "terms": [ - "rescan" - ] - }, - { - "id": 174, - "name": "Search", - "qualified_name": "store.Store.Search", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point", - "reason": "answer \"why did this area change\" by scope, time window, and free text — the non-developer query entry point", - "terms": [ - "change" - ] - }, - { - "id": 190, - "name": "StripComments", - "qualified_name": "trailer.StripComments", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "reason": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "terms": [ - "not" - ] - }, - { - "id": 127, - "name": "Install", - "qualified_name": "installer.Install", - "kind": "function", - "file_path": "internal/installer/installer.go", - "intent": "install the git hooks without clobbering another tool's hooks", - "reason": "install the git hooks without clobbering another tool's hooks", - "terms": [ - "not" - ] - }, - { - "id": 19, - "name": "cmd/context-diary/backfill.go", - "qualified_name": "cmd/context-diary/backfill.go", - "kind": "file", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 20, - "name": "cmdBackfill", - "qualified_name": "main.cmdBackfill", - "kind": "function", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commits" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "commits" - ] - }, - { - "id": 184, - "name": "Parse", - "qualified_name": "trailer.Parse", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "extract the structured trailer block from a commit or PR message", - "reason": "extract the structured trailer block from a commit or PR message", - "terms": [ - "not" - ] - } - ] - }, - "why does the bot keep only one comment per pull request": { - "corpus": 110, - "terms": [ - { - "text": "bot", - "in_reasons": 4 - }, - { - "text": "keep", - "in_reasons": 3 - }, - { - "text": "only", - "in_reasons": 10 - }, - { - "text": "one", - "in_reasons": 7 - }, - { - "text": "comment", - "in_reasons": 7 - }, - { - "text": "per", - "in_reasons": 6 - }, - { - "text": "pull", - "in_reasons": 2 - }, - { - "text": "request", - "in_reasons": 2 - } + "why does a merged pull request get acknowledged before indexing finishes": [ + 18, + 20, + 23, + 24, + 25, + 34, + 36, + 100, + 104, + 109 ], - "hits": [ - { - "id": 79, - "name": "UpsertComment", - "qualified_name": "github.Client.UpsertComment", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "keep exactly one bot comment per PR so pushes never spam the thread", - "reason": "keep exactly one bot comment per PR so pushes never spam the thread", - "terms": [ - "bot", - "keep", - "one", - "comment", - "per" - ] - }, - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "bot", - "only", - "comment" - ] - }, - { - "id": 45, - "name": "githubTokenFn", - "qualified_name": "main.githubTokenFn", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "select the GitHub auth mode and return a per-request token resolver", - "reason": "select the GitHub auth mode and return a per-request token resolver", - "terms": [ - "per", - "request" - ] - }, - { - "id": 147, - "name": "Sync", - "qualified_name": "mirror.Sync", - "kind": "function", - "file_path": "internal/mirror/mirror.go", - "intent": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "reason": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "terms": [ - "keep", - "only" - ] - }, - { - "id": 54, - "name": "Upsert", - "qualified_name": "checks.Store.Upsert", - "kind": "function", - "file_path": "internal/checks/checks.go", - "intent": "create or replace a check detail page and return the stable capability URL id for its logical key", - "reason": "create or replace a check detail page and return the stable capability URL id for its logical key", - "terms": [ - "keep", - "one" - ] - }, - { - "id": 44, - "name": "cmdServe", - "qualified_name": "main.cmdServe", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "reason": "implement `context-diary serve`: wire the GitHub webhook bot, MCP endpoint, check pages, and web UI into one HTTP server", - "terms": [ - "bot", - "one" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "one", - "per" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "bot", - "only" - ] - }, - { - "id": 111, - "name": "EntryFromCommit", - "qualified_name": "index.EntryFromCommit", - "kind": "function", - "file_path": "internal/index/entry.go", - "intent": "turn one commit into an indexable context entry, or nil when it carries no why", - "reason": "turn one commit into an indexable context entry, or nil when it carries no why", - "terms": [ - "only", - "one" - ] - }, - { - "id": 74, - "name": "ParsePREvent", - "qualified_name": "github.ParsePREvent", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "extract the pull_request fields serve needs from a verified webhook payload", - "reason": "extract the pull_request fields serve needs from a verified webhook payload", - "terms": [ - "pull" - ] - }, - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "pull" - ] - }, - { - "id": 205, - "name": "results", - "qualified_name": "webui.handler.results", - "kind": "function", - "file_path": "internal/webui/webui.go", - "intent": "run the index query for a UI request, paginate the result, and render the page", - "reason": "run the index query for a UI request, paginate the result, and render the page", - "terms": [ - "request" - ] - }, - { - "id": 159, - "name": "New", - "qualified_name": "queue.New", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "build a bounded worker-pool queue that serializes jobs per key", - "reason": "build a bounded worker-pool queue that serializes jobs per key", - "terms": [ - "per" - ] - }, - { - "id": 92, - "name": "CommentChar", - "qualified_name": "gitx.CommentChar", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "resolve the git comment character so injected template lines match the editor", - "reason": "resolve the git comment character so injected template lines match the editor", - "terms": [ - "comment" - ] - }, - { - "id": 161, - "name": "Start", - "qualified_name": "queue.Q.Start", - "kind": "function", - "file_path": "internal/queue/queue.go", - "intent": "launch the worker pool that drains the queue until the context is cancelled", - "reason": "launch the worker pool that drains the queue until the context is cancelled", - "terms": [ - "per" - ] - }, - { - "id": 129, - "name": "ScaffoldConfig", - "qualified_name": "installer.ScaffoldConfig", - "kind": "function", - "file_path": "internal/installer/installer.go", - "intent": "write a starter .context-diary.toml when none exists, without overwriting an edited one", - "reason": "write a starter .context-diary.toml when none exists, without overwriting an edited one", - "terms": [ - "one" - ] - }, - { - "id": 102, - "name": "Prepare", - "qualified_name": "hook.Prepare", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "reason": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "terms": [ - "comment" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "per" - ] - }, - { - "id": 190, - "name": "StripComments", - "qualified_name": "trailer.StripComments", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "reason": "drop comment lines so an injected draft template is not mistaken for accepted content when linting an editor buffer", - "terms": [ - "comment" - ] - }, - { - "id": 104, - "name": "CommitMsg", - "qualified_name": "hook.CommitMsg", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "reason": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "terms": [ - "only" - ] - }, - { - "id": 143, - "name": "NewServer", - "qualified_name": "mcptool.NewServer", - "kind": "function", - "file_path": "internal/mcptool/mcptool.go", - "intent": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "reason": "expose the context index to AI assistants as MCP tools so anyone can ask why code is the way it is", - "terms": [ - "only" - ] - }, - { - "id": 170, - "name": "Migrate", - "qualified_name": "store.Store.Migrate", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "create or update the schema on startup without a migration framework", - "reason": "create or update the schema on startup without a migration framework", - "terms": [ - "only" - ] - }, - { - "id": 37, - "name": "cmdHook", - "qualified_name": "main.cmdHook", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "reason": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "terms": [ - "only" - ] - }, - { - "id": 107, - "name": "ParseCodeRef", - "qualified_name": "index.ParseCodeRef", - "kind": "function", - "file_path": "internal/index/coderef.go", - "intent": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "reason": "parse a Context-Ref into a structured code reference, or nil for a plain URL or issue id", - "terms": [ - "only" - ] - } - ] - }, - "why is the commit never blocked by the hook": { - "corpus": 110, - "terms": [ - { - "text": "commit", - "in_reasons": 30 - }, - { - "text": "never", - "in_reasons": 10 - }, - { - "text": "blocked", - "in_reasons": 0 - }, - { - "text": "hook", - "in_reasons": 9 - } + "why does a rescan reindex commits that did not change": [ + 1, + 2, + 6, + 15, + 16, + 38, + 39, + 42, + 44, + 45, + 46, + 49, + 62, + 65, + 66, + 70, + 79, + 87, + 89, + 90, + 91, + 92, + 102, + 106 + ], + "why does the bot keep only one comment per pull request": [ + 12, + 17, + 18, + 23, + 28, + 36, + 38, + 39, + 40, + 41, + 42, + 44, + 50, + 51, + 54, + 58, + 60, + 61, + 63, + 71, + 73, + 74, + 75, + 76, + 77, + 80, + 81, + 85, + 87, + 106, + 109 ], - "hits": [ - { - "id": 37, - "name": "cmdHook", - "qualified_name": "main.cmdHook", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "reason": "implement the git hook entry points (prepare-commit-msg, commit-msg) invoked by git", - "terms": [ - "commit", - "never", - "hook" - ] - }, - { - "id": 127, - "name": "Install", - "qualified_name": "installer.Install", - "kind": "function", - "file_path": "internal/installer/installer.go", - "intent": "install the git hooks without clobbering another tool's hooks", - "reason": "install the git hooks without clobbering another tool's hooks", - "terms": [ - "never", - "hook" - ] - }, - { - "id": 102, - "name": "Prepare", - "qualified_name": "hook.Prepare", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "reason": "give a human committer a commented trailer template to fill in, without ever blocking the commit", - "terms": [ - "commit", - "never" - ] - }, - { - "id": 94, - "name": "HooksDir", - "qualified_name": "gitx.HooksDir", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default", - "reason": "locate where git reads hooks, distinguishing a custom core.hooksPath (hook-manager territory) from the default", - "terms": [ - "hook" - ] - }, - { - "id": 104, - "name": "CommitMsg", - "qualified_name": "hook.CommitMsg", - "kind": "function", - "file_path": "internal/hook/hook.go", - "intent": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "reason": "lint the final commit message and, in strict mode, reject it so the AI agent self-corrects from the violation output", - "terms": [ - "commit", - "never" - ] - }, - { - "id": 172, - "name": "SaveEntries", - "qualified_name": "store.Store.SaveEntries", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "reason": "atomically persist a batch of context entries and advance the repo cursor so a crash never skips or duplicates commits", - "terms": [ - "commit", - "never" - ] - }, - { - "id": 79, - "name": "UpsertComment", - "qualified_name": "github.Client.UpsertComment", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "keep exactly one bot comment per PR so pushes never spam the thread", - "reason": "keep exactly one bot comment per PR so pushes never spam the thread", - "terms": [ - "never" - ] - }, - { - "id": 35, - "name": "cmdInit", - "qualified_name": "main.cmdInit", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet", - "reason": "implement `context-diary init`: install hooks, scaffold config, and optionally write the agent convention snippet", - "terms": [ - "hook" - ] - }, - { - "id": 60, - "name": "Load", - "qualified_name": "config.Load", - "kind": "function", - "file_path": "internal/config/config.go", - "intent": "resolve the effective configuration from env, repo file, user file, and defaults", - "reason": "resolve the effective configuration from env, repo file, user file, and defaults", - "terms": [ - "never" - ] - }, - { - "id": 32, - "name": "run", - "qualified_name": "main.run", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "reason": "single entry point that routes the CLI subcommand (init/hook/lint/index/serve/backfill/explain/scopes/instructions)", - "terms": [ - "hook" - ] - }, - { - "id": 91, - "name": "StagedDiff", - "qualified_name": "gitx.StagedDiff", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget", - "reason": "give the hook the staged changes as context, bounded so a huge diff cannot blow the budget", - "terms": [ - "hook" - ] - }, - { - "id": 147, - "name": "Sync", - "qualified_name": "mirror.Sync", - "kind": "function", - "file_path": "internal/mirror/mirror.go", - "intent": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "reason": "keep a local bare mirror of a repository so merge-time ingestion has git history without a working tree", - "terms": [ - "never" - ] - }, - { - "id": 123, - "name": "AgentSetup", - "qualified_name": "installer.AgentSetup", - "kind": "function", - "file_path": "internal/installer/agent.go", - "intent": "set up an AI-agent convention file with the trailer instructions snippet", - "reason": "set up an AI-agent convention file with the trailer instructions snippet", - "terms": [ - "never" - ] - }, - { - "id": 92, - "name": "CommentChar", - "qualified_name": "gitx.CommentChar", - "kind": "function", - "file_path": "internal/gitx/gitx.go", - "intent": "resolve the git comment character so injected template lines match the editor", - "reason": "resolve the git comment character so injected template lines match the editor", - "terms": [ - "hook" - ] - }, - { - "id": 49, - "name": "webhookHandler", - "qualified_name": "main.webhookHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "reason": "handle GitHub pull_request webhooks: review PRs on open/edit and index merges asynchronously", - "terms": [ - "never" - ] - }, - { - "id": 84, - "name": "WalkFull", - "qualified_name": "gitlog.WalkFull", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "reason": "index every branch commit of a merge-commit workflow, not just the first-parent line, so per-commit context is preserved", - "terms": [ - "commit" - ] - }, - { - "id": 152, - "name": "Evaluate", - "qualified_name": "preview.Evaluate", - "kind": "function", - "file_path": "internal/preview/preview.go", - "intent": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "reason": "decide whether a PR carries enough context to merge, and render the bot comment, status description, and check page", - "terms": [ - "commit" - ] - }, - { - "id": 78, - "name": "ListPRCommits", - "qualified_name": "github.Client.ListPRCommits", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "reason": "fetch a PR's branch commits so the bot can validate the commit-path context carrier for merge/rebase teams", - "terms": [ - "commit" - ] - }, - { - "id": 184, - "name": "Parse", - "qualified_name": "trailer.Parse", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "extract the structured trailer block from a commit or PR message", - "reason": "extract the structured trailer block from a commit or PR message", - "terms": [ - "commit" - ] - }, - { - "id": 77, - "name": "SetStatus", - "qualified_name": "github.Client.SetStatus", - "kind": "function", - "file_path": "internal/forge/github/github.go", - "intent": "surface context-diary results as a commit status that branch protection can require", - "reason": "surface context-diary results as a commit status that branch protection can require", - "terms": [ - "commit" - ] - }, - { - "id": 194, - "name": "Lint", - "qualified_name": "trailer.Lint", - "kind": "function", - "file_path": "internal/trailer/trailer.go", - "intent": "validate a commit or PR message against the trailer format and return actionable violations", - "reason": "validate a commit or PR message against the trailer format and return actionable violations", - "terms": [ - "commit" - ] - }, - { - "id": 111, - "name": "EntryFromCommit", - "qualified_name": "index.EntryFromCommit", - "kind": "function", - "file_path": "internal/index/entry.go", - "intent": "turn one commit into an indexable context entry, or nil when it carries no why", - "reason": "turn one commit into an indexable context entry, or nil when it carries no why", - "terms": [ - "commit" - ] - }, - { - "id": 175, - "name": "ByHashes", - "qualified_name": "store.Store.ByHashes", - "kind": "function", - "file_path": "internal/store/store.go", - "intent": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "reason": "hydrate index entries for a set of commit hashes, oldest first — the join step behind explain_function", - "terms": [ - "commit" - ] - }, - { - "id": 38, - "name": "cmdLint", - "qualified_name": "main.cmdLint", - "kind": "function", - "file_path": "cmd/context-diary/main.go", - "intent": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers", - "reason": "implement `context-diary lint \u003crev-range\u003e`: the CI gate that fails when a commit lacks context trailers", - "terms": [ - "commit" - ] - }, - { - "id": 19, - "name": "cmd/context-diary/backfill.go", - "qualified_name": "cmd/context-diary/backfill.go", - "kind": "file", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commit" - ] - }, - { - "id": 20, - "name": "cmdBackfill", - "qualified_name": "main.cmdBackfill", - "kind": "function", - "file_path": "cmd/context-diary/backfill.go", - "intent": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "reason": "implement `context-diary backfill`: list commits still lacking context as the worklist an AI agent annotates via git notes", - "terms": [ - "commit" - ] - }, - { - "id": 47, - "name": "checksHandler", - "qualified_name": "main.checksHandler", - "kind": "function", - "file_path": "cmd/context-diary/serve.go", - "intent": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired", - "reason": "serve GET /checks/{id}: render a commit-status detail page, or 404 when the id is unknown or expired", - "terms": [ - "commit" - ] - }, - { - "id": 82, - "name": "CommitsTouching", - "qualified_name": "funclog.CommitsTouching", - "kind": "function", - "file_path": "internal/funclog/funclog.go", - "intent": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "reason": "list the commits that changed one function, so their context can be joined into a per-function why-timeline", - "terms": [ - "commit" - ] - }, - { - "id": 85, - "name": "Walk", - "qualified_name": "gitlog.Walk", - "kind": "function", - "file_path": "internal/gitlog/gitlog.go", - "intent": "index the linear default-branch history for squash and rebase workflows where every landed commit is on the first-parent line", - "reason": "index the linear default-branch history for squash and rebase workflows where every landed commit is on the first-parent line", - "terms": [ - "commit" - ] - }, - { - "id": 118, - "name": "Run", - "qualified_name": "ingest.Run", - "kind": "function", - "file_path": "internal/ingest/ingest.go", - "intent": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "reason": "walk history since the cursor, map commits to entries, and save them — the shared path behind the index CLI and the serve merge webhook", - "terms": [ - "commit" - ] - } + "why is the commit never blocked by the hook": [ + 1, + 2, + 9, + 10, + 11, + 12, + 13, + 20, + 25, + 31, + 37, + 38, + 39, + 40, + 42, + 44, + 45, + 47, + 49, + 51, + 52, + 53, + 54, + 55, + 57, + 58, + 61, + 62, + 63, + 65, + 68, + 69, + 70, + 76, + 78, + 79, + 80, + 89, + 90, + 91, + 95, + 101, + 107 ] } } diff --git a/internal/app/search/rank/testdata/corpora/gorm/intent_candidates.json b/internal/app/search/rank/testdata/corpora/gorm/intent_candidates.json index dcb49c8a..797f80f4 100644 --- a/internal/app/search/rank/testdata/corpora/gorm/intent_candidates.json +++ b/internal/app/search/rank/testdata/corpora/gorm/intent_candidates.json @@ -1,17 +1,19 @@ { - "AutoMigrate": {}, - "OnConflict": {}, - "Open": {}, - "Preload": {}, - "Preloda": {}, - "Transaction": {}, - "association": {}, - "clause": {}, - "create in batches": {}, - "kubernetes ingress controller": {}, - "naming strategy": {}, - "parse field": {}, - "prepared statement": {}, - "soft delete": {}, - "table name": {} + "queries": { + "AutoMigrate": [], + "OnConflict": [], + "Open": [], + "Preload": [], + "Preloda": [], + "Transaction": [], + "association": [], + "clause": [], + "create in batches": [], + "kubernetes ingress controller": [], + "naming strategy": [], + "parse field": [], + "prepared statement": [], + "soft delete": [], + "table name": [] + } } diff --git a/internal/app/search/rank/testdata/intent_candidates.json b/internal/app/search/rank/testdata/intent_candidates.json index f993b7c4..492871f9 100644 --- a/internal/app/search/rank/testdata/intent_candidates.json +++ b/internal/app/search/rank/testdata/intent_candidates.json @@ -1,39692 +1,33633 @@ { - "BuildContent": {}, - "RunMigrations": { - "corpus": 1901, - "terms": [ - { - "text": "runmigrations", - "in_reasons": 1 - } - ], - "hits": [ - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "runmigrations" - ] - } - ] + "corpus": 1906, + "nodes": { + "100": { + "name": "resolveNamespace", + "qualified_name": "cli.resolveNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/root.go", + "namespace": "ccg", + "start_line": 205, + "intent": "config의 namespace 설정이 --namespace 플래그 기본값에 가려지지 않도록 우선순위대로 해석한다.", + "reason": "config의 namespace 설정이 --namespace 플래그 기본값에 가려지지 않도록 우선순위대로 해석한다." + }, + "1000": { + "name": "defaultQueryOptions", + "qualified_name": "query.defaultQueryOptions", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 217, + "intent": "keep legacy callers fallback-inclusive unless they explicitly opt into strict mode.", + "reason": "keep legacy callers fallback-inclusive unless they explicitly opt into strict mode." + }, + "1001": { + "name": "normalizeResults", + "qualified_name": "query.normalizeResults", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 228, + "intent": "keep predefined query responses stable across joins that may return duplicate nodes.", + "reason": "keep predefined query responses stable across joins that may return duplicate nodes." + }, + "1003": { + "name": "AnnotationRef", + "qualified_name": "crossref.AnnotationRef", + "kind": "class", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 17, + "intent": "carry the minimal source facts needed to materialize a cross-namespace reference.", + "reason": "carry the minimal source facts needed to materialize a cross-namespace reference." + }, + "1004": { + "name": "Store", + "qualified_name": "crossref.Store", + "kind": "type", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 24, + "intent": "keep the sync policy independent from GORM by owning a minimal consumer-side port.", + "reason": "keep the sync policy independent from GORM by owning a minimal consumer-side port." + }, + "1005": { + "name": "Service", + "qualified_name": "crossref.Service", + "kind": "class", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 34, + "intent": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", + "reason": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes." + }, + "1006": { + "name": "New", + "qualified_name": "crossref.New", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 41, + "intent": "bind the sync policy to one persistence port instance.", + "reason": "bind the sync policy to one persistence port instance." + }, + "1007": { + "name": "SyncNamespace", + "qualified_name": "crossref.Service.SyncNamespace", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 50, + "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", + "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity." + }, + "1008": { + "name": "targetKey", + "qualified_name": "crossref.targetKey", + "kind": "class", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 67, + "intent": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row.", + "reason": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row." + }, + "1010": { + "name": "resolveOnce", + "qualified_name": "crossref.Service.resolveOnce", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 83, + "intent": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", + "reason": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target." + }, + "1011": { + "name": "rebuildOutbound", + "qualified_name": "crossref.Service.rebuildOutbound", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 97, + "intent": "replace the namespace's outbound rows with rows derived from its current annotations.", + "reason": "replace the namespace's outbound rows with rows derived from its current annotations." + }, + "1012": { + "name": "reresolveInbound", + "qualified_name": "crossref.Service.reresolveInbound", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 134, + "intent": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", + "reason": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt." + }, + "1013": { + "name": "resolve", + "qualified_name": "crossref.Service.resolve", + "kind": "function", + "file_path": "internal/app/crossref/service.go", + "namespace": "ccg", + "start_line": 156, + "intent": "translate matcher output into row state: namespace-scope hits stay resolved without a node target.", + "reason": "translate matcher output into row state: namespace-scope hits stay resolved without a node target." + }, + "1017": { + "name": "Scope", + "qualified_name": "describe.Scope", + "kind": "type", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 21, + "intent": "let one call answer for a folder, a file, or a miss, and say which it was.", + "reason": "let one call answer for a folder, a file, or a miss, and say which it was." + }, + "1018": { + "name": "declarationKinds", + "qualified_name": "describe.declarationKinds", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 40, + "intent": "keep \"what is written here\" separate from \"where it is written\".", + "reason": "keep \"what is written here\" separate from \"where it is written\"." + }, + "1021": { + "name": "Decl", + "qualified_name": "describe.Decl", + "kind": "class", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 66, + "intent": "give a reader a name, a place to open, and why it exists.", + "reason": "give a reader a name, a place to open, and why it exists." + }, + "1022": { + "name": "Child", + "qualified_name": "describe.Child", + "kind": "class", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 83, + "intent": "let a caller descend one deliberate step at a time.", + "reason": "let a caller descend one deliberate step at a time." + }, + "1023": { + "name": "Suggestion", + "qualified_name": "describe.Suggestion", + "kind": "class", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 92, + "intent": "turn a wrong path into the right one instead of into an empty answer.", + "reason": "turn a wrong path into the right one instead of into an empty answer." + }, + "1024": { + "name": "Outline", + "qualified_name": "describe.Outline", + "kind": "class", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 105, + "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", + "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to." + }, + "1025": { + "name": "Service", + "qualified_name": "describe.Service", + "kind": "class", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 115, + "intent": "provide one application entry point for \"what is in here\".", + "reason": "provide one application entry point for \"what is in here\"." + }, + "1026": { + "name": "New", + "qualified_name": "describe.New", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 121, + "intent": "make the graph dependency explicit at composition time.", + "reason": "make the graph dependency explicit at composition time." + }, + "1028": { + "name": "declarationsOf", + "qualified_name": "describe.Service.declarationsOf", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 175, + "intent": "hand back a file's contents in the order a reader would scroll through them.", + "reason": "hand back a file's contents in the order a reader would scroll through them." + }, + "1029": { + "name": "suggestionsFor", + "qualified_name": "describe.Service.suggestionsFor", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 223, + "intent": "answer a wrong path with the right one.", + "reason": "answer a wrong path with the right one." + }, + "103": { + "name": "resolveMaxFileBytes", + "qualified_name": "cli.resolveMaxFileBytes", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/root.go", + "namespace": "ccg", + "start_line": 252, + "intent": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다.", + "reason": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다." + }, + "1030": { + "name": "childrenOf", + "qualified_name": "describe.childrenOf", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 257, + "intent": "turn a recursive row set into the one level a caller can choose from.", + "reason": "turn a recursive row set into the one level a caller can choose from." + }, + "1031": { + "name": "childSegment", + "qualified_name": "describe.childSegment", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 302, + "intent": "decide a row's immediate bucket without walking the whole path.", + "reason": "decide a row's immediate bucket without walking the whole path." + }, + "1032": { + "name": "cleanTarget", + "qualified_name": "describe.cleanTarget", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 322, + "intent": "make \"./internal/app/\", \"internal/app\" and \"internal//app\" the same target.", + "reason": "make \"./internal/app/\", \"internal/app\" and \"internal//app\" the same target." + }, + "1033": { + "name": "lastSegment", + "qualified_name": "describe.lastSegment", + "kind": "function", + "file_path": "internal/app/describe/describe.go", + "namespace": "ccg", + "start_line": 340, + "intent": "recover the stored short name from a dotted or slashed guess.", + "reason": "recover the stored short name from a dotted or slashed guess." + }, + "1036": { + "name": "Run", + "qualified_name": "docs.Generator.Run", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 31, + "intent": "전체 문서 산출물을 한 번에 다시 생성한다.", + "reason": "전체 문서 산출물을 한 번에 다시 생성한다." + }, + "1037": { + "name": "validateDocGroups", + "qualified_name": "docs.Generator.validateDocGroups", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 85, + "intent": "prevent path-traversal writes before any file I/O is attempted", + "reason": "prevent path-traversal writes before any file I/O is attempted" + }, + "1039": { + "name": "loadEdges", + "qualified_name": "docs.Generator.loadEdges", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 111, + "intent": "심볼 문서에 호출 관계를 표시할 최소 엣지 집합만 조회한다.", + "reason": "심볼 문서에 호출 관계를 표시할 최소 엣지 집합만 조회한다." + }, + "1040": { + "name": "manifestPath", + "qualified_name": "docs.Generator.manifestPath", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 124, + "intent": "isolate manifest files per namespace so concurrent namespaces do not collide", + "reason": "isolate manifest files per namespace so concurrent namespaces do not collide" + }, + "1041": { + "name": "loadManifest", + "qualified_name": "docs.Generator.loadManifest", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 134, + "intent": "restore the prior output file list so Run can compute stale files to prune", + "reason": "restore the prior output file list so Run can compute stale files to prune" + }, + "1042": { + "name": "saveManifest", + "qualified_name": "docs.Generator.saveManifest", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 152, + "intent": "record which files were written so future runs can detect and remove stale docs", + "reason": "record which files were written so future runs can detect and remove stale docs" + }, + "1043": { + "name": "pruneManaged", + "qualified_name": "docs.Generator.pruneManaged", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 164, + "intent": "clean up stale generated docs without touching manually created files", + "reason": "clean up stale generated docs without touching manually created files" + }, + "1045": { + "name": "generatedFiles", + "qualified_name": "docs.generatedFiles", + "kind": "function", + "file_path": "internal/app/docs/generator.go", + "namespace": "ccg", + "start_line": 204, + "intent": "track expected output files so the manifest and prune step stay consistent", + "reason": "track expected output files so the manifest and prune step stay consistent" + }, + "1049": { + "name": "DeadRef", + "qualified_name": "docs.DeadRef", + "kind": "class", + "file_path": "internal/app/docs/lint.go", + "namespace": "ccg", + "start_line": 32, + "intent": "해석되지 않는 @see 참조를 수집해 문서 링크 정합성을 점검한다.", + "reason": "해석되지 않는 @see 참조를 수집해 문서 링크 정합성을 점검한다." + }, + "1051": { + "name": "Lint", + "qualified_name": "docs.Generator.Lint", + "kind": "function", + "file_path": "internal/app/docs/lint.go", + "namespace": "ccg", + "start_line": 54, + "intent": "문서 파일, 그래프 노드, 어노테이션을 교차 검증해 문서 건강 상태를 계산한다.", + "reason": "문서 파일, 그래프 노드, 어노테이션을 교차 검증해 문서 건강 상태를 계산한다." + }, + "1053": { + "name": "lintDocFiles", + "qualified_name": "docs.Generator.lintDocFiles", + "kind": "function", + "file_path": "internal/app/docs/lint.go", + "namespace": "ccg", + "start_line": 260, + "intent": "collect only the Markdown files that belong to the active docs namespace.", + "reason": "collect only the Markdown files that belong to the active docs namespace." + }, + "1054": { + "name": "loadLintManifest", + "qualified_name": "docs.Generator.loadLintManifest", + "kind": "function", + "file_path": "internal/app/docs/lint.go", + "namespace": "ccg", + "start_line": 305, + "intent": "load the active namespace manifest for lint without hiding whether it exists.", + "reason": "load the active namespace manifest for lint without hiding whether it exists." + }, + "1055": { + "name": "ccgRefExists", + "qualified_name": "docs.Generator.ccgRefExists", + "kind": "function", + "file_path": "internal/app/docs/lint.go", + "namespace": "ccg", + "start_line": 322, + "intent": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", + "reason": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged." + }, + "1057": { + "name": "RootedFiles", + "qualified_name": "docs.RootedFiles", + "kind": "type", + "file_path": "internal/app/docs/ports.go", + "namespace": "ccg", + "start_line": 14, + "intent": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", + "reason": "keep path containment, symlink checks, and filesystem mutation outside docs policy." + }, + "1059": { + "name": "Repository", + "qualified_name": "docs.Repository", + "kind": "type", + "file_path": "internal/app/docs/ports.go", + "namespace": "ccg", + "start_line": 32, + "intent": "isolate generated-format and lint policy from GORM query construction.", + "reason": "isolate generated-format and lint policy from GORM query construction." + }, + "1060": { + "name": "internal/app/docs/template.go", + "qualified_name": "internal/app/docs/template.go", + "kind": "file", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 1, + "intent": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", + "reason": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다." + }, + "1061": { + "name": "nodeGroup", + "qualified_name": "docs.nodeGroup", + "kind": "class", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 15, + "intent": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", + "reason": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다." + }, + "1062": { + "name": "groupByFile", + "qualified_name": "docs.groupByFile", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 26, + "intent": "문서 렌더러가 파일 단위로 반복할 수 있게 입력 데이터를 재구성한다.", + "reason": "문서 렌더러가 파일 단위로 반복할 수 있게 입력 데이터를 재구성한다." + }, + "1063": { + "name": "writeFileDoc", + "qualified_name": "docs.Generator.writeFileDoc", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 60, + "intent": "단일 소스 파일 문서를 실제 산출물로 저장한다.", + "reason": "단일 소스 파일 문서를 실제 산출물로 저장한다." + }, + "1064": { + "name": "writeIndex", + "qualified_name": "docs.Generator.writeIndex", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 68, + "intent": "전체 파일 문서에 대한 탐색용 index.md를 저장한다.", + "reason": "전체 파일 문서에 대한 탐색용 index.md를 저장한다." + }, + "1065": { + "name": "renderFileDoc", + "qualified_name": "docs.renderFileDoc", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 76, + "intent": "파일 수준 어노테이션과 심볼 정보를 사람이 읽는 Markdown으로 직렬화한다.", + "reason": "파일 수준 어노테이션과 심볼 정보를 사람이 읽는 Markdown으로 직렬화한다." + }, + "1067": { + "name": "renderIndex", + "qualified_name": "docs.renderIndex", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 194, + "intent": "생성된 모든 파일 문서와 심볼에 대한 탐색용 표를 만든다.", + "reason": "생성된 모든 파일 문서와 심볼에 대한 탐색용 표를 만든다." + }, + "107": { + "name": "printJSONResponse", + "qualified_name": "cli.printJSONResponse", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/search.go", + "namespace": "ccg", + "start_line": 76, + "intent": "keep --json output byte-stable and diffable while staying the MCP contract.", + "reason": "keep --json output byte-stable and diffable while staying the MCP contract." + }, + "1072": { + "name": "tagsWithName", + "qualified_name": "docs.tagsWithName", + "kind": "function", + "file_path": "internal/app/docs/template.go", + "namespace": "ccg", + "start_line": 294, + "intent": "@param 같이 이름과 값을 함께 출력해야 하는 태그를 보존해 전달한다.", + "reason": "@param 같이 이름과 값을 함께 출력해야 하는 태그를 보존해 전달한다." + }, + "1073": { + "name": "internal/app/ingest/binding/binder.go", + "qualified_name": "internal/app/ingest/binding/binder.go", + "kind": "file", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 1, + "intent": "preserve comment text with source line bounds during parse-to-annotation binding", + "reason": "preserve comment text with source line bounds during parse-to-annotation binding" + }, + "1074": { + "name": "CommentBlock", + "qualified_name": "binding.CommentBlock", + "kind": "class", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 12, + "intent": "preserve comment text with source line bounds during parse-to-annotation binding", + "reason": "preserve comment text with source line bounds during parse-to-annotation binding" + }, + "1075": { + "name": "Binding", + "qualified_name": "binding.Binding", + "kind": "class", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 22, + "intent": "represent the result of associating one comment block with one graph node", + "reason": "represent the result of associating one comment block with one graph node" + }, + "1076": { + "name": "Binder", + "qualified_name": "binding.Binder", + "kind": "class", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 29, + "intent": "attach normalized and parsed annotations to nodes based on source proximity", + "reason": "attach normalized and parsed annotations to nodes based on source proximity" + }, + "1077": { + "name": "NewBinder", + "qualified_name": "binding.NewBinder", + "kind": "function", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 36, + "intent": "compose the normalizer and parser used during comment-to-node binding", + "reason": "compose the normalizer and parser used during comment-to-node binding" + }, + "1078": { + "name": "Bind", + "qualified_name": "binding.Binder.Bind", + "kind": "function", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 48, + "intent": "build node-to-annotation bindings from parsed comments and node positions", + "reason": "build node-to-annotation bindings from parsed comments and node positions" + }, + "1079": { + "name": "isPassthroughLine", + "qualified_name": "binding.isPassthroughLine", + "kind": "function", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 118, + "intent": "classify a single source line as non-code (passthrough) for binding logic", + "reason": "classify a single source line as non-code (passthrough) for binding logic" + }, + "108": { + "name": "printEvidenceList", + "qualified_name": "cli.printEvidenceList", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/search.go", + "namespace": "ccg", + "start_line": 92, + "intent": "let a reader see why each result is in the list without opening the file.", + "reason": "let a reader see why each result is in the list without opening the file." + }, + "1080": { + "name": "hasCodeBetween", + "qualified_name": "binding.hasCodeBetween", + "kind": "function", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 143, + "intent": "determine if real code exists between a comment and declaration for Look-Between binding", + "reason": "determine if real code exists between a comment and declaration for Look-Between binding" + }, + "1081": { + "name": "hasContent", + "qualified_name": "binding.hasContent", + "kind": "function", + "file_path": "internal/app/ingest/binding/binder.go", + "namespace": "ccg", + "start_line": 158, + "intent": "skip empty annotation payloads before they are bound to nodes", + "reason": "skip empty annotation payloads before they are bound to nodes" + }, + "1083": { + "name": "deferredEdgeFile", + "qualified_name": "incremental.deferredEdgeFile", + "kind": "class", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 18, + "intent": "retain only the edge-resolution input needed after source bytes are released.", + "reason": "retain only the edge-resolution input needed after source bytes are released." + }, + "1084": { + "name": "deferredEdgeRecord", + "qualified_name": "incremental.deferredEdgeRecord", + "kind": "class", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 25, + "intent": "keep large staged updates independent of the total parsed edge count in memory.", + "reason": "keep large staged updates independent of the total parsed edge count in memory." + }, + "1085": { + "name": "deferredEdgeSpool", + "qualified_name": "incremental.deferredEdgeSpool", + "kind": "class", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 31, + "intent": "preserve parsed cross-batch edges until every changed node has been applied.", + "reason": "preserve parsed cross-batch edges until every changed node has been applied." + }, + "1086": { + "name": "newDeferredEdgeSpool", + "qualified_name": "incremental.newDeferredEdgeSpool", + "kind": "function", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 39, + "intent": "isolate temporary staged-update data so cleanup cannot affect persistent graph state.", + "reason": "isolate temporary staged-update data so cleanup cannot affect persistent graph state." + }, + "1087": { + "name": "writeRecord", + "qualified_name": "incremental.deferredEdgeSpool.writeRecord", + "kind": "function", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 50, + "intent": "defer cross-file edge resolution until all batch-local node replacements are complete.", + "reason": "defer cross-file edge resolution until all batch-local node replacements are complete." + }, + "1088": { + "name": "readRecord", + "qualified_name": "incremental.deferredEdgeSpool.readRecord", + "kind": "function", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 73, + "intent": "let edge resolution remain bounded by the original source batch size.", + "reason": "let edge resolution remain bounded by the original source batch size." + }, + "1089": { + "name": "cleanup", + "qualified_name": "incremental.deferredEdgeSpool.cleanup", + "kind": "function", + "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", + "namespace": "ccg", + "start_line": 93, + "intent": "ensure successful and failed staged updates do not retain temporary source-derived data.", + "reason": "ensure successful and failed staged updates do not retain temporary source-derived data." + }, + "109": { + "name": "matchedLabels", + "qualified_name": "cli.matchedLabels", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/search.go", + "namespace": "ccg", + "start_line": 145, + "intent": "name the parts of a result the query touched, in one glanceable token.", + "reason": "name the parts of a result the query touched, in one glanceable token." + }, + "1091": { + "name": "importFileNodeLister", + "qualified_name": "incremental.importFileNodeLister", + "kind": "type", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 13, + "intent": "avoid expanding the legacy incremental Store contract for lightweight test doubles.", + "reason": "avoid expanding the legacy incremental Store contract for lightweight test doubles." + }, + "1092": { + "name": "fileSuffixLookup", + "qualified_name": "incremental.fileSuffixLookup", + "kind": "type", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 19, + "intent": "keep staged reconciliation compatible with custom stores that do not expose the bulk file-node query.", + "reason": "keep staged reconciliation compatible with custom stores that do not expose the bulk file-node query." + }, + "1093": { + "name": "edgeReader", + "qualified_name": "incremental.edgeReader", + "kind": "type", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 25, + "intent": "keep staged resolution behavior aligned with the underlying graph store capabilities.", + "reason": "keep staged resolution behavior aligned with the underlying graph store capabilities." + }, + "1094": { + "name": "importIndexedLookup", + "qualified_name": "incremental.importIndexedLookup", + "kind": "class", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 31, + "intent": "replace repeated suffix database scans with one transaction-local file-node snapshot.", + "reason": "replace repeated suffix database scans with one transaction-local file-node snapshot." + }, + "1095": { + "name": "newImportIndexedLookup", + "qualified_name": "incremental.newImportIndexedLookup", + "kind": "function", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 39, + "intent": "scope cached import paths to one update transaction and avoid stale store-wide state.", + "reason": "scope cached import paths to one update transaction and avoid stale store-wide state." + }, + "1096": { + "name": "GetFileNodesByPathSuffix", + "qualified_name": "incremental.importIndexedLookup.GetFileNodesByPathSuffix", + "kind": "function", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 48, + "intent": "preserve the legacy lookup fallback while avoiding repeated scans for staged bulk updates.", + "reason": "preserve the legacy lookup fallback while avoiding repeated scans for staged bulk updates." + }, + "1097": { + "name": "GetEdgesToNodes", + "qualified_name": "incremental.importIndexedLookup.GetEdgesToNodes", + "kind": "function", + "file_path": "internal/app/ingest/incremental/import_lookup.go", + "namespace": "ccg", + "start_line": 77, + "intent": "retain historical implements resolution while the lookup decorates import lookups.", + "reason": "retain historical implements resolution while the lookup decorates import lookups." + }, + "1098": { + "name": "internal/app/ingest/incremental/incremental.go", + "qualified_name": "internal/app/ingest/incremental/incremental.go", + "kind": "file", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 1, + "intent": "abstract graph storage so changed files can be reparsed and upserted", + "reason": "abstract graph storage so changed files can be reparsed and upserted" + }, + "1099": { + "name": "Store", + "qualified_name": "incremental.Store", + "kind": "type", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 21, + "intent": "abstract graph storage so changed files can be reparsed and upserted", + "reason": "abstract graph storage so changed files can be reparsed and upserted" + }, + "110": { + "name": "internal/adapters/inbound/cli/serve.go", + "qualified_name": "internal/adapters/inbound/cli/serve.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/serve.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", + "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting." + }, + "1100": { + "name": "Parser", + "qualified_name": "incremental.Parser", + "kind": "type", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 33, + "intent": "decouple incremental sync from language-specific parsing logic", + "reason": "decouple incremental sync from language-specific parsing logic" + }, + "1101": { + "name": "AnnotatingParser", + "qualified_name": "incremental.AnnotatingParser", + "kind": "type", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 39, + "intent": "allow incremental sync to reuse comment-aware parsing when available", + "reason": "allow incremental sync to reuse comment-aware parsing when available" + }, + "1102": { + "name": "Syncer", + "qualified_name": "incremental.Syncer", + "kind": "class", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 55, + "intent": "avoid full rebuilds by reparsing only files whose content hash changed", + "reason": "avoid full rebuilds by reparsing only files whose content hash changed" + }, + "1103": { + "name": "SyncerOption", + "qualified_name": "incremental.SyncerOption", + "kind": "type", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 65, + "intent": "customize incremental sync behavior without expanding the constructor signature", + "reason": "customize incremental sync behavior without expanding the constructor signature" + }, + "1104": { + "name": "WithLogger", + "qualified_name": "incremental.WithLogger", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 70, + "intent": "allow callers to observe incremental sync progress through structured logs", + "reason": "allow callers to observe incremental sync progress through structured logs" + }, + "1105": { + "name": "WithParsers", + "qualified_name": "incremental.WithParsers", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 78, + "intent": "let incremental sync dispatch parsing per file extension for multi-language projects", + "reason": "let incremental sync dispatch parsing per file extension for multi-language projects" + }, + "1106": { + "name": "New", + "qualified_name": "incremental.New", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 87, + "intent": "wire storage, parser, and optional configuration into a sync coordinator", + "reason": "wire storage, parser, and optional configuration into a sync coordinator" + }, + "1107": { + "name": "NewWithRegistry", + "qualified_name": "incremental.NewWithRegistry", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 100, + "intent": "support multi-language incremental parsing without breaking the legacy single-parser constructor", + "reason": "support multi-language incremental parsing without breaking the legacy single-parser constructor" + }, + "1108": { + "name": "SetResolveOptions", + "qualified_name": "incremental.Syncer.SetResolveOptions", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 107, + "intent": "avoid rebuilding the syncer for every Build/Update invocation.", + "reason": "avoid rebuilding the syncer for every Build/Update invocation." + }, + "1109": { + "name": "Sync", + "qualified_name": "incremental.Syncer.Sync", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 115, + "intent": "run incremental parsing when only current files are known", + "reason": "run incremental parsing when only current files are known" + }, + "111": { + "name": "ServeConfig", + "qualified_name": "cli.ServeConfig", + "kind": "class", + "file_path": "internal/adapters/inbound/cli/serve.go", + "namespace": "ccg", + "start_line": 14, + "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", + "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting." + }, + "1110": { + "name": "SyncWithExisting", + "qualified_name": "incremental.Syncer.SyncWithExisting", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 128, + "intent": "reconcile parsed graph state with the latest changed-file snapshot", + "reason": "reconcile parsed graph state with the latest changed-file snapshot" + }, + "1111": { + "name": "SyncWithExistingStore", + "qualified_name": "incremental.Syncer.SyncWithExistingStore", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 134, + "intent": "let callers bind incremental sync to an existing transaction-scoped store", + "reason": "let callers bind incremental sync to an existing transaction-scoped store" + }, + "1112": { + "name": "SyncBatchesWithExisting", + "qualified_name": "incremental.Syncer.SyncBatchesWithExisting", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 147, + "intent": "prevent spool-record ordering from removing edges whose endpoints are both replaced in one bulk update.", + "reason": "prevent spool-record ordering from removing edges whose endpoints are both replaced in one bulk update." + }, + "1113": { + "name": "SyncBatchesWithExistingStore", + "qualified_name": "incremental.Syncer.SyncBatchesWithExistingStore", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 153, + "intent": "keep bulk update node, edge, package, and search writes within one transaction.", + "reason": "keep bulk update node, edge, package, and search writes within one transaction." + }, + "1114": { + "name": "syncWithExisting", + "qualified_name": "incremental.Syncer.syncWithExisting", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 165, + "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", + "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass." + }, + "1115": { + "name": "syncBatchesWithExisting", + "qualified_name": "incremental.Syncer.syncBatchesWithExisting", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 273, + "intent": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", + "reason": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory." + }, + "1116": { + "name": "stageBatch", + "qualified_name": "incremental.Syncer.stageBatch", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 349, + "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", + "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution." + }, + "1117": { + "name": "resolveAndUpsertEdges", + "qualified_name": "incremental.Syncer.resolveAndUpsertEdges", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 427, + "intent": "preserve interface dispatch and import-backed call resolution during incremental sync updates.", + "reason": "preserve interface dispatch and import-backed call resolution during incremental sync updates." + }, + "1118": { + "name": "resolveAndUpsertImplements", + "qualified_name": "incremental.Syncer.resolveAndUpsertImplements", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 438, + "intent": "let staged reconciliation finish a global implements pass before resolving interface-dispatch calls.", + "reason": "let staged reconciliation finish a global implements pass before resolving interface-dispatch calls." + }, + "1119": { + "name": "resolveAndUpsertOtherEdges", + "qualified_name": "incremental.Syncer.resolveAndUpsertOtherEdges", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 471, + "intent": "preserve file-local import warmup while making interface call resolution independent of spool record order.", + "reason": "preserve file-local import warmup while making interface call resolution independent of spool record order." + }, + "112": { + "name": "validateServeConfig", + "qualified_name": "cli.validateServeConfig", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/serve.go", + "namespace": "ccg", + "start_line": 26, + "intent": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", + "reason": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server." + }, + "1120": { + "name": "persistUnresolvedEdges", + "qualified_name": "incremental.persistUnresolvedEdges", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 501, + "intent": "keep incremental candidate maintenance optional for legacy/custom store implementations.", + "reason": "keep incremental candidate maintenance optional for legacy/custom store implementations." + }, + "1121": { + "name": "resolveParser", + "qualified_name": "incremental.Syncer.resolveParser", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 517, + "intent": "let multi-language projects sync without losing the single-parser fallback for callers using New.", + "reason": "let multi-language projects sync without losing the single-parser fallback for callers using New." + }, + "1122": { + "name": "persistParsedNodesAndAnnotations", + "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 531, + "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", + "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments." + }, + "1123": { + "name": "collectAnnotations", + "qualified_name": "incremental.collectAnnotations", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 569, + "intent": "prepare annotation rows for the flush-scoped bulk write without issuing per-file SQL.", + "reason": "prepare annotation rows for the flush-scoped bulk write without issuing per-file SQL." + }, + "1124": { + "name": "parsedSyncFile", + "qualified_name": "incremental.parsedSyncFile", + "kind": "class", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 608, + "intent": "carry parsed nodes, edges, comments, and language state through the sync pipeline.", + "reason": "carry parsed nodes, edges, comments, and language state through the sync pipeline." + }, + "1125": { + "name": "releaseContent", + "qualified_name": "incremental.releaseContent", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 621, + "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", + "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed." + }, + "1126": { + "name": "setNodeHashes", + "qualified_name": "incremental.setNodeHashes", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 633, + "intent": "keep incremental hash comparisons aligned with the stored graph rows.", + "reason": "keep incremental hash comparisons aligned with the stored graph rows." + }, + "1127": { + "name": "sortedFilePaths", + "qualified_name": "incremental.sortedFilePaths", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 641, + "intent": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", + "reason": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible." + }, + "1128": { + "name": "mergeSyncUnresolvedDiagnostics", + "qualified_name": "incremental.mergeSyncUnresolvedDiagnostics", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 653, + "intent": "keep incremental sync logging aligned with chunked edge resolution output.", + "reason": "keep incremental sync logging aligned with chunked edge resolution output." + }, + "1129": { + "name": "formatEdgeKindCounts", + "qualified_name": "incremental.formatEdgeKindCounts", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 694, + "intent": "serialize EdgeKind counters into diagnostics-friendly logging output.", + "reason": "serialize EdgeKind counters into diagnostics-friendly logging output." + }, + "113": { + "name": "newServeCmd", + "qualified_name": "cli.newServeCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/serve.go", + "namespace": "ccg", + "start_line": 40, + "intent": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", + "reason": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings." + }, + "1131": { + "name": "partitionParsedSyncEdges", + "qualified_name": "incremental.partitionParsedSyncEdges", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 712, + "intent": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", + "reason": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships." + }, + "1132": { + "name": "importEdgesByFile", + "qualified_name": "incremental.importEdgesByFile", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 729, + "intent": "warm call-edge resolution with import context only for files that actually need it.", + "reason": "warm call-edge resolution with import context only for files that actually need it." + }, + "1133": { + "name": "chunkWithImportWarmup", + "qualified_name": "incremental.chunkWithImportWarmup", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 744, + "intent": "ensure chunked call resolution sees import relationships before resolving dependent call edges.", + "reason": "ensure chunked call resolution sees import relationships before resolving dependent call edges." + }, + "1134": { + "name": "splitEdgeChunks", + "qualified_name": "incremental.splitEdgeChunks", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 765, + "intent": "cap incremental resolution work so large files do not create oversized resolve batches.", + "reason": "cap incremental resolution work so large files do not create oversized resolve batches." + }, + "1135": { + "name": "annotationBindingKey", + "qualified_name": "incremental.annotationBindingKey", + "kind": "function", + "file_path": "internal/app/ingest/incremental/incremental.go", + "namespace": "ccg", + "start_line": 783, + "intent": "disambiguate overloaded or repeated declarations sharing the same qualified name.", + "reason": "disambiguate overloaded or repeated declarations sharing the same qualified name." + }, + "1136": { + "name": "internal/app/ingest/parse_context.go", + "qualified_name": "internal/app/ingest/parse_context.go", + "kind": "file", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 1, + "intent": "provide a collision-free key for parser-neutral import package context.", + "reason": "provide a collision-free key for parser-neutral import package context." + }, + "1137": { + "name": "importPackagesContextKey", + "qualified_name": "ingest.importPackagesContextKey", + "kind": "class", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 7, + "intent": "provide a collision-free key for parser-neutral import package context.", + "reason": "provide a collision-free key for parser-neutral import package context." + }, + "1138": { + "name": "filePackagesContextKey", + "qualified_name": "ingest.filePackagesContextKey", + "kind": "class", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 11, + "intent": "provide a collision-free key for parser-neutral file package context.", + "reason": "provide a collision-free key for parser-neutral file package context." + }, + "1139": { + "name": "WithImportPackages", + "qualified_name": "ingest.WithImportPackages", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 15, + "intent": "thread parser-neutral package names through build and update calls without adapter-specific APIs.", + "reason": "thread parser-neutral package names through build and update calls without adapter-specific APIs." + }, + "114": { + "name": "envString", + "qualified_name": "cli.envString", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/serve.go", + "namespace": "ccg", + "start_line": 81, + "intent": "keep optional stdio MCP environment defaults small and explicit.", + "reason": "keep optional stdio MCP environment defaults small and explicit." + }, + "1140": { + "name": "ImportPackagesFromContext", + "qualified_name": "ingest.ImportPackagesFromContext", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 21, + "intent": "let parser adapters consume application-owned package context without reversing dependencies.", + "reason": "let parser adapters consume application-owned package context without reversing dependencies." + }, + "1141": { + "name": "WithFilePackages", + "qualified_name": "ingest.WithFilePackages", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 27, + "intent": "provide deterministic package prefixes for languages without package declarations.", + "reason": "provide deterministic package prefixes for languages without package declarations." + }, + "1142": { + "name": "FilePackagesFromContext", + "qualified_name": "ingest.FilePackagesFromContext", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 33, + "intent": "let parser adapters seed qualified names from application-owned file context.", + "reason": "let parser adapters seed qualified names from application-owned file context." + }, + "1143": { + "name": "withStringMap", + "qualified_name": "ingest.withStringMap", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 39, + "intent": "prevent callers from mutating parser context maps after injection.", + "reason": "prevent callers from mutating parser context maps after injection." + }, + "1144": { + "name": "stringMapFromContext", + "qualified_name": "ingest.stringMapFromContext", + "kind": "function", + "file_path": "internal/app/ingest/parse_context.go", + "namespace": "ccg", + "start_line": 58, + "intent": "centralize safe retrieval for ingest-owned parser context hints.", + "reason": "centralize safe retrieval for ingest-owned parser context hints." + }, + "1146": { + "name": "CommentBlock", + "qualified_name": "ingest.CommentBlock", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 13, + "intent": "carry comments and docstring ownership from parser adapters into ingest binding policy.", + "reason": "carry comments and docstring ownership from parser adapters into ingest binding policy." + }, + "1147": { + "name": "PackageInterfaceInfo", + "qualified_name": "ingest.PackageInterfaceInfo", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 23, + "intent": "preserve package-level implementation inference without exposing parser implementation types.", + "reason": "preserve package-level implementation inference without exposing parser implementation types." + }, + "1148": { + "name": "ParseMetadata", + "qualified_name": "ingest.ParseMetadata", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 30, + "intent": "let ingest coordinate package semantics through parser-owned metadata.", + "reason": "let ingest coordinate package semantics through parser-owned metadata." + }, + "1149": { + "name": "PackageInfo", + "qualified_name": "ingest.PackageInfo", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 37, + "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", + "reason": "let ingest create package nodes and membership edges without knowing language-specific discovery details." + }, + "1150": { + "name": "PackageDiscoveryOptions", + "qualified_name": "ingest.PackageDiscoveryOptions", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 47, + "intent": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", + "reason": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery." + }, + "1151": { + "name": "PackageContext", + "qualified_name": "ingest.PackageContext", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 55, + "intent": "let parser adapters enrich multi-file packages without leaking AST types into ingest.", + "reason": "let parser adapters enrich multi-file packages without leaking AST types into ingest." + }, + "1152": { + "name": "Parser", + "qualified_name": "ingest.Parser", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 67, + "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", + "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation." + }, + "1153": { + "name": "VersionedParser", + "qualified_name": "ingest.VersionedParser", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 74, + "intent": "let ingest reuse parsed output only while parser behavior and embedded queries remain compatible.", + "reason": "let ingest reuse parsed output only while parser behavior and embedded queries remain compatible." + }, + "1154": { + "name": "ParseCacheKey", + "qualified_name": "ingest.ParseCacheKey", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 81, + "intent": "include every input known to affect parser output instead of trusting source content alone.", + "reason": "include every input known to affect parser output instead of trusting source content alone." + }, + "1155": { + "name": "ParseCache", + "qualified_name": "ingest.ParseCache", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 91, + "intent": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", + "reason": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend." + }, + "1156": { + "name": "UnresolvedEdgeStore", + "qualified_name": "ingest.UnresolvedEdgeStore", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 98, + "intent": "select unchanged source edges affected by newly added symbols without exposing persistence details.", + "reason": "select unchanged source edges affected by newly added symbols without exposing persistence details." + }, + "1157": { + "name": "AnnotatingParser", + "qualified_name": "ingest.AnnotatingParser", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 109, + "intent": "make comment-aware parsing an optional ingest capability.", + "reason": "make comment-aware parsing an optional ingest capability." + }, + "1158": { + "name": "MetadataParser", + "qualified_name": "ingest.MetadataParser", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 117, + "intent": "expose package/interface metadata without coupling ingest to parser adapter structs.", + "reason": "expose package/interface metadata without coupling ingest to parser adapter structs." + }, + "1159": { + "name": "PackageDiscoverer", + "qualified_name": "ingest.PackageDiscoverer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 124, + "intent": "delegate language-specific package discovery while ingest owns traversal policy.", + "reason": "delegate language-specific package discovery while ingest owns traversal policy." + }, + "1160": { + "name": "PackageEdgeBuilder", + "qualified_name": "ingest.PackageEdgeBuilder", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 130, + "intent": "derive language-specific package edges through a parser-neutral ingest contract.", + "reason": "derive language-specific package edges through a parser-neutral ingest contract." + }, + "1161": { + "name": "GraphStore", + "qualified_name": "ingest.GraphStore", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 136, + "intent": "keep ingest graph reads and writes inside the unit-of-work boundary without exposing a persistence implementation.", + "reason": "keep ingest graph reads and writes inside the unit-of-work boundary without exposing a persistence implementation." + }, + "1162": { + "name": "SearchWriter", + "qualified_name": "ingest.SearchWriter", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 158, + "intent": "expose full and scoped search rebuilds as indivisible application operations.", + "reason": "expose full and scoped search rebuilds as indivisible application operations." + }, + "1163": { + "name": "Transaction", + "qualified_name": "ingest.Transaction", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 165, + "intent": "give an ingest callback transaction-scoped capabilities without exposing a raw database handle.", + "reason": "give an ingest callback transaction-scoped capabilities without exposing a raw database handle." + }, + "1164": { + "name": "UnitOfWork", + "qualified_name": "ingest.UnitOfWork", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 173, + "intent": "commit graph and search changes together only when the callback succeeds.", + "reason": "commit graph and search changes together only when the callback succeeds." + }, + "1165": { + "name": "FileInfo", + "qualified_name": "ingest.FileInfo", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 179, + "intent": "keep incremental update inputs owned by ingest rather than a concrete sync implementation.", + "reason": "keep incremental update inputs owned by ingest rather than a concrete sync implementation." + }, + "1166": { + "name": "SyncStats", + "qualified_name": "ingest.SyncStats", + "kind": "class", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 187, + "intent": "expose update results without coupling callers to the incremental implementation package.", + "reason": "expose update results without coupling callers to the incremental implementation package." + }, + "1167": { + "name": "IncrementalSyncer", + "qualified_name": "ingest.IncrementalSyncer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 197, + "intent": "let ingest orchestrate batching and deletion policy through an implementation-neutral sync seam.", + "reason": "let ingest orchestrate batching and deletion policy through an implementation-neutral sync seam." + }, + "1168": { + "name": "TransactionalIncrementalSyncer", + "qualified_name": "ingest.TransactionalIncrementalSyncer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 203, + "intent": "keep incremental graph mutations inside the same unit of work as package and search updates.", + "reason": "keep incremental graph mutations inside the same unit of work as package and search updates." + }, + "1169": { + "name": "FileBatchVisitor", + "qualified_name": "ingest.FileBatchVisitor", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 209, + "intent": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", + "reason": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering." + }, + "117": { + "name": "callFallbackRatio", + "qualified_name": "cli.callFallbackRatio", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/status.go", + "namespace": "ccg", + "start_line": 83, + "intent": "compute the share of fallback call edges within all call-like edges for operator-facing health reporting.", + "reason": "compute the share of fallback call edges within all call-like edges for operator-facing health reporting." + }, + "1170": { + "name": "FileBatchSource", + "qualified_name": "ingest.FileBatchSource", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 213, + "intent": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", + "reason": "let workflow retain source spooling while incremental reconciliation controls node and edge phases." + }, + "1171": { + "name": "BatchIncrementalSyncer", + "qualified_name": "ingest.BatchIncrementalSyncer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 218, + "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", + "reason": "prevent batch order from affecting cross-file edge resolution during large updates." + }, + "1172": { + "name": "TransactionalBatchIncrementalSyncer", + "qualified_name": "ingest.TransactionalBatchIncrementalSyncer", + "kind": "type", + "file_path": "internal/app/ingest/ports.go", + "namespace": "ccg", + "start_line": 224, + "intent": "preserve one atomic graph and search transaction while reconciling streamed update batches.", + "reason": "preserve one atomic graph and search transaction while reconciling streamed update batches." + }, + "1174": { + "name": "languageDispatch", + "qualified_name": "resolve.languageDispatch", + "kind": "type", + "file_path": "internal/app/ingest/resolve/dispatch.go", + "namespace": "ccg", + "start_line": 9, + "intent": "keep Resolve generic while allowing languages to customize dispatch semantics.", + "reason": "keep Resolve generic while allowing languages to customize dispatch semantics." + }, + "1175": { + "name": "dispatchForLanguage", + "qualified_name": "resolve.dispatchForLanguage", + "kind": "function", + "file_path": "internal/app/ingest/resolve/dispatch.go", + "namespace": "ccg", + "start_line": 32, + "intent": "centralize language-specific resolver lookup behind one internal seam.", + "reason": "centralize language-specific resolver lookup behind one internal seam." + }, + "1177": { + "name": "ImportFileIndex", + "qualified_name": "resolve.ImportFileIndex", + "kind": "class", + "file_path": "internal/app/ingest/resolve/import_file_index.go", + "namespace": "ccg", + "start_line": 13, + "intent": "resolve many import paths from one immutable file-node snapshot without repeated store scans.", + "reason": "resolve many import paths from one immutable file-node snapshot without repeated store scans." + }, + "1178": { + "name": "NewImportFileIndex", + "qualified_name": "resolve.NewImportFileIndex", + "kind": "function", + "file_path": "internal/app/ingest/resolve/import_file_index.go", + "namespace": "ccg", + "start_line": 20, + "intent": "share the exact-directory and longest-suffix import policy across build and staged update resolution.", + "reason": "share the exact-directory and longest-suffix import policy across build and staged update resolution." + }, + "1179": { + "name": "Find", + "qualified_name": "resolve.ImportFileIndex.Find", + "kind": "function", + "file_path": "internal/app/ingest/resolve/import_file_index.go", + "namespace": "ccg", + "start_line": 45, + "intent": "preserve GraphStore import lookup precedence using bounded map reads.", + "reason": "preserve GraphStore import lookup precedence using bounded map reads." + }, + "118": { + "name": "callFallbackWarning", + "qualified_name": "cli.callFallbackWarning", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/status.go", + "namespace": "ccg", + "start_line": 92, + "intent": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", + "reason": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output." + }, + "1181": { + "name": "FilterResolvedSample", + "qualified_name": "resolve.FilterResolvedSample", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 19, + "intent": "retain a bounded set of representative dropped edges so operators can inspect fingerprints without flooding logs.", + "reason": "retain a bounded set of representative dropped edges so operators can inspect fingerprints without flooding logs." + }, + "1182": { + "name": "FilterResolvedDiagnostics", + "qualified_name": "resolve.FilterResolvedDiagnostics", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 28, + "intent": "surface enough aggregate context to debug why parsed edges did not become traversable graph edges.", + "reason": "surface enough aggregate context to debug why parsed edges did not become traversable graph edges." + }, + "1183": { + "name": "add", + "qualified_name": "resolve.FilterResolvedDiagnostics.add", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 39, + "intent": "accumulate per-kind, per-file, and sampled unresolved-edge diagnostics during filtering.", + "reason": "accumulate per-kind, per-file, and sampled unresolved-edge diagnostics during filtering." + }, + "1184": { + "name": "UnresolvedEdgeFilter", + "qualified_name": "resolve.UnresolvedEdgeFilter", + "kind": "type", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 66, + "intent": "allow callers to suppress noisy unresolved-edge classes (e.g., expected external imports).", + "reason": "allow callers to suppress noisy unresolved-edge classes (e.g., expected external imports)." + }, + "1185": { + "name": "NodeLookup", + "qualified_name": "resolve.NodeLookup", + "kind": "type", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 70, + "intent": "keep edge endpoint resolution independent of the concrete graph store.", + "reason": "keep edge endpoint resolution independent of the concrete graph store." + }, + "1187": { + "name": "filePrefixLookup", + "qualified_name": "resolve.filePrefixLookup", + "kind": "type", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 84, + "intent": "support resolving imports when only partial path information is available.", + "reason": "support resolving imports when only partial path information is available." + }, + "1188": { + "name": "resolveState", + "qualified_name": "resolve.resolveState", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 90, + "intent": "cache and index nodes by various keys (file, name, QN) during a single Resolve pass.", + "reason": "cache and index nodes by various keys (file, name, QN) during a single Resolve pass." + }, + "1189": { + "name": "loadImportFileNodes", + "qualified_name": "resolve.resolveState.loadImportFileNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 101, + "intent": "populate state with file nodes to support deeper resolution of imported symbols.", + "reason": "populate state with file nodes to support deeper resolution of imported symbols." + }, + "119": { + "name": "internal/adapters/inbound/cli/update.go", + "qualified_name": "internal/adapters/inbound/cli/update.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/update.go", + "namespace": "ccg", + "start_line": 1, + "intent": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", + "reason": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다." + }, + "1190": { + "name": "loadFileNodes", + "qualified_name": "resolve.resolveState.loadFileNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 117, + "intent": "ensure target file contents are available for cross-file resolution.", + "reason": "ensure target file contents are available for cross-file resolution." + }, + "1191": { + "name": "loadExistingImplements", + "qualified_name": "resolve.resolveState.loadExistingImplements", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 133, + "intent": "enable cross-file interface resolution by loading historical data.", + "reason": "enable cross-file interface resolution by loading historical data." + }, + "1192": { + "name": "ensureDispatchTargets", + "qualified_name": "resolve.resolveState.ensureDispatchTargets", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 187, + "intent": "batch load nodes needed to resolve polymorphic calls.", + "reason": "batch load nodes needed to resolve polymorphic calls." + }, + "1193": { + "name": "addNodes", + "qualified_name": "resolve.resolveState.addNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 222, + "intent": "batch add nodes to internal indexes.", + "reason": "batch add nodes to internal indexes." + }, + "1194": { + "name": "indexNode", + "qualified_name": "resolve.resolveState.indexNode", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 230, + "intent": "maintain consistent node indexing by ID, QN, file, and name.", + "reason": "maintain consistent node indexing by ID, QN, file, and name." + }, + "1196": { + "name": "Resolve", + "qualified_name": "resolve.Resolve", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 257, + "intent": "convert syntax-level edge fingerprints into traversable graph edges.", + "reason": "convert syntax-level edge fingerprints into traversable graph edges." + }, + "1197": { + "name": "ResolveOptions", + "qualified_name": "resolve.ResolveOptions", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 263, + "intent": "allow callers to trade strictness for coverage in low-confidence call cases.", + "reason": "allow callers to trade strictness for coverage in low-confidence call cases." + }, + "1198": { + "name": "ResolveWithOptions", + "qualified_name": "resolve.ResolveWithOptions", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 269, + "intent": "preserve current strict resolution by default while supporting fallback mode for CI noise reduction.", + "reason": "preserve current strict resolution by default while supporting fallback mode for CI noise reduction." + }, + "1199": { + "name": "FilterResolved", + "qualified_name": "resolve.FilterResolved", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 331, + "intent": "prevent unresolved syntax candidates from occupying fingerprints before they become traversable", + "reason": "prevent unresolved syntax candidates from occupying fingerprints before they become traversable" + }, + "120": { + "name": "newUpdateCmd", + "qualified_name": "cli.newUpdateCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/update.go", + "namespace": "ccg", + "start_line": 19, + "intent": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", + "reason": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다." + }, + "1200": { + "name": "FilterResolvedWithDiagnostics", + "qualified_name": "resolve.FilterResolvedWithDiagnostics", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 338, + "intent": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging.", + "reason": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging." + }, + "1201": { + "name": "FilterResolvedWithDiagnosticsFiltered", + "qualified_name": "resolve.FilterResolvedWithDiagnosticsFiltered", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 345, + "intent": "keep edge filtering behavior stable while controlling noise from known-unresolvable patterns.", + "reason": "keep edge filtering behavior stable while controlling noise from known-unresolvable patterns." + }, + "1202": { + "name": "PartitionResolvedWithDiagnosticsFiltered", + "qualified_name": "resolve.PartitionResolvedWithDiagnosticsFiltered", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 352, + "intent": "let build and update persist unresolved syntax edges without changing query-visible graph semantics.", + "reason": "let build and update persist unresolved syntax edges without changing query-visible graph semantics." + }, + "1203": { + "name": "BuildUnresolvedCandidates", + "qualified_name": "resolve.BuildUnresolvedCandidates", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 376, + "intent": "prefer extra candidate replay over missing a caller that a newly added symbol can resolve.", + "reason": "prefer extra candidate replay over missing a caller that a newly added symbol can resolve." + }, + "1204": { + "name": "primaryUnresolvedLookupKey", + "qualified_name": "resolve.primaryUnresolvedLookupKey", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 395, + "intent": "bound reverse-index rows to one per edge while matching newly added node simple names.", + "reason": "bound reverse-index rows to one per edge while matching newly added node simple names." + }, + "1205": { + "name": "LookupKeysForNodes", + "qualified_name": "resolve.LookupKeysForNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 424, + "intent": "match qualified names, simple names, and package/file path suffixes conservatively.", + "reason": "match qualified names, simple names, and package/file path suffixes conservatively." + }, + "1206": { + "name": "expandLookupValues", + "qualified_name": "resolve.expandLookupValues", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 437, + "intent": "make added-node lookup keys match the bounded simple target keys stored for unresolved edges.", + "reason": "make added-node lookup keys match the bounded simple target keys stored for unresolved edges." + }, + "1207": { + "name": "unresolvedReason", + "qualified_name": "resolve.unresolvedReason", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 474, + "intent": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", + "reason": "provide stable reason codes for unresolved-edge diagnostics and logging summaries." + }, + "1208": { + "name": "edgeFiles", + "qualified_name": "resolve.edgeFiles", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 489, + "intent": "identify all files involved in a resolution pass to batch node lookups.", + "reason": "identify all files involved in a resolution pass to batch node lookups." + }, + "1209": { + "name": "flattenNodes", + "qualified_name": "resolve.flattenNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 504, + "intent": "prepare nodes for indexing and state population.", + "reason": "prepare nodes for indexing and state population." + }, + "1210": { + "name": "indexByQualifiedName", + "qualified_name": "resolve.indexByQualifiedName", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 514, + "intent": "enable fast lookup of symbols during endpoint resolution.", + "reason": "enable fast lookup of symbols during endpoint resolution." + }, + "1212": { + "name": "indexByNameByFile", + "qualified_name": "resolve.indexByNameByFile", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 536, + "intent": "resolve bare name references when they occur in the same file as the caller.", + "reason": "resolve bare name references when they occur in the same file as the caller." + }, + "1213": { + "name": "indexFileNodes", + "qualified_name": "resolve.indexFileNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 552, + "intent": "provide quick access to file-level metadata during resolution.", + "reason": "provide quick access to file-level metadata during resolution." + }, + "1215": { + "name": "addName", + "qualified_name": "resolve.addName", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 617, + "intent": "ensure unique symbol names are collected for batch lookups.", + "reason": "ensure unique symbol names are collected for batch lookups." + }, + "1216": { + "name": "addEndpointCandidates", + "qualified_name": "resolve.addEndpointCandidates", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 627, + "intent": "support resolving local symbols that might be referenced without full qualification.", + "reason": "support resolving local symbols that might be referenced without full qualification." + }, + "1217": { + "name": "resolveCall", + "qualified_name": "resolve.resolveCall", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 639, + "intent": "find the unique caller and callee nodes for a call relationship.", + "reason": "find the unique caller and callee nodes for a call relationship." + }, + "1218": { + "name": "fallbackCallable", + "qualified_name": "resolve.fallbackCallable", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 707, + "intent": "trade an unresolved edge for a stable best-effort relationship in fallback mode.", + "reason": "trade an unresolved edge for a stable best-effort relationship in fallback mode." + }, + "1219": { + "name": "filterCallableNodes", + "qualified_name": "resolve.filterCallableNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 718, + "intent": "normalize a candidate list before deterministic tie-breaking.", + "reason": "normalize a candidate list before deterministic tie-breaking." + }, + "1220": { + "name": "stableCallableLess", + "qualified_name": "resolve.stableCallableLess", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 745, + "intent": "keep callable candidate ordering deterministic so resolver output is stable across runs.", + "reason": "keep callable candidate ordering deterministic so resolver output is stable across runs." + }, + "1221": { + "name": "resolveContains", + "qualified_name": "resolve.resolveContains", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 760, + "intent": "link file nodes to the top-level symbols they define.", + "reason": "link file nodes to the top-level symbols they define." + }, + "1222": { + "name": "resolveImplements", + "qualified_name": "resolve.resolveImplements", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 775, + "intent": "capture implementation relationships and populate implementer cache.", + "reason": "capture implementation relationships and populate implementer cache." + }, + "1223": { + "name": "resolveImportsFrom", + "qualified_name": "resolve.resolveImportsFrom", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 797, + "intent": "link importing files to their target packages or files.", + "reason": "link importing files to their target packages or files." + }, + "1224": { + "name": "resolveImportFile", + "qualified_name": "resolve.resolveImportFile", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 823, + "intent": "map language-specific import paths to physical file nodes in the graph.", + "reason": "map language-specific import paths to physical file nodes in the graph." + }, + "1225": { + "name": "bestImportFileMatch", + "qualified_name": "resolve.bestImportFileMatch", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 845, + "intent": "handle cases where import paths don't exactly match file system paths.", + "reason": "handle cases where import paths don't exactly match file system paths." + }, + "1226": { + "name": "representativeImportFile", + "qualified_name": "resolve.representativeImportFile", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 880, + "intent": "ensure deterministic resolution when multiple files match an import path.", + "reason": "ensure deterministic resolution when multiple files match an import path." + }, + "1227": { + "name": "uniquePackageNode", + "qualified_name": "resolve.uniquePackageNode", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 899, + "intent": "return nil if multiple ambiguous packages match the QN.", + "reason": "return nil if multiple ambiguous packages match the QN." + }, + "1228": { + "name": "uniqueFileNodes", + "qualified_name": "resolve.uniqueFileNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 922, + "intent": "identify distinct files in a set of result nodes.", + "reason": "identify distinct files in a set of result nodes." + }, + "1229": { + "name": "resolveInherits", + "qualified_name": "resolve.resolveInherits", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 942, + "intent": "link subclasses or derived types to their parents.", + "reason": "link subclasses or derived types to their parents." + }, + "1230": { + "name": "resolveTestedBy", + "qualified_name": "resolve.resolveTestedBy", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 957, + "intent": "bridge the gap between tests and the symbols they verify.", + "reason": "bridge the gap between tests and the symbols they verify." + }, + "1231": { + "name": "resolveProductionFunction", + "qualified_name": "resolve.resolveProductionFunction", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 972, + "intent": "locate the tested symbol by checking qualified and bare name matches.", + "reason": "locate the tested symbol by checking qualified and bare name matches." + }, + "1232": { + "name": "uniqueFileNode", + "qualified_name": "resolve.uniqueFileNode", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 988, + "intent": "return nil if multiple ambiguous files match.", + "reason": "return nil if multiple ambiguous files match." + }, + "1234": { + "name": "IsLikelyExternalImportPath", + "qualified_name": "resolve.IsLikelyExternalImportPath", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1032, + "intent": "keep unresolved-edge noise focused on internal graph-coverage gaps.", + "reason": "keep unresolved-edge noise focused on internal graph-coverage gaps." + }, + "1235": { + "name": "IsLikelyExternalImportEdge", + "qualified_name": "resolve.IsLikelyExternalImportEdge", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1058, + "intent": "classify import edges that are not expected to have local resolution targets.", + "reason": "classify import edges that are not expected to have local resolution targets." + }, + "1236": { + "name": "ImportsFromTarget", + "qualified_name": "resolve.ImportsFromTarget", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1068, + "intent": "provide a stable parser for import-edge-specific diagnostics and filtering.", + "reason": "provide a stable parser for import-edge-specific diagnostics and filtering." + }, + "1237": { + "name": "inheritsEndpoints", + "qualified_name": "resolve.inheritsEndpoints", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1074, + "intent": "retrieve subclass and parent names from the persisted fingerprint.", + "reason": "retrieve subclass and parent names from the persisted fingerprint." + }, + "1238": { + "name": "testedByEndpoints", + "qualified_name": "resolve.testedByEndpoints", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1080, + "intent": "retrieve test and production symbol names from the persisted fingerprint.", + "reason": "retrieve test and production symbol names from the persisted fingerprint." + }, + "1239": { + "name": "resolveTypeEndpoint", + "qualified_name": "resolve.resolveTypeEndpoint", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1097, + "intent": "resolve symbol references to physical type nodes in the graph.", + "reason": "resolve symbol references to physical type nodes in the graph." + }, + "1240": { + "name": "resolveSameReceiverCall", + "qualified_name": "resolve.resolveSameReceiverCall", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1116, + "intent": "optimize resolution of 'this' or same-receiver method calls in Go.", + "reason": "optimize resolution of 'this' or same-receiver method calls in Go." + }, + "1241": { + "name": "resolveInterfaceDispatch", + "qualified_name": "resolve.resolveInterfaceDispatch", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1126, + "intent": "provide best-effort resolution for polymorphic calls by checking implementations.", + "reason": "provide best-effort resolution for polymorphic calls by checking implementations." + }, + "1242": { + "name": "implementsEndpoints", + "qualified_name": "resolve.implementsEndpoints", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1136, + "intent": "retrieve concrete and interface symbol names from the persisted fingerprint.", + "reason": "retrieve concrete and interface symbol names from the persisted fingerprint." + }, + "1243": { + "name": "packageForFile", + "qualified_name": "resolve.packageForFile", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1153, + "intent": "determine the logical package context for a physical source file.", + "reason": "determine the logical package context for a physical source file." + }, + "1244": { + "name": "isExportedName", + "qualified_name": "resolve.isExportedName", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1167, + "intent": "apply Go visibility rules during symbol resolution.", + "reason": "apply Go visibility rules during symbol resolution." + }, + "1245": { + "name": "enclosingCallable", + "qualified_name": "resolve.enclosingCallable", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1177, + "intent": "identify the source symbol (caller) for a relationship originating on a line.", + "reason": "identify the source symbol (caller) for a relationship originating on a line." + }, + "1246": { + "name": "span", + "qualified_name": "resolve.span", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1199, + "intent": "assist in finding the narrowest enclosing symbol for a given line.", + "reason": "assist in finding the narrowest enclosing symbol for a given line." + }, + "1247": { + "name": "callCallee", + "qualified_name": "resolve.callCallee", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1205, + "intent": "retrieve the callee symbol name from the persisted fingerprint.", + "reason": "retrieve the callee symbol name from the persisted fingerprint." + }, + "1248": { + "name": "containsTarget", + "qualified_name": "resolve.containsTarget", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1223, + "intent": "retrieve the target symbol name from the persisted fingerprint.", + "reason": "retrieve the target symbol name from the persisted fingerprint." + }, + "1249": { + "name": "packagePrefix", + "qualified_name": "resolve.packagePrefix", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1234, + "intent": "determine the logical namespace for a symbol.", + "reason": "determine the logical namespace for a symbol." + }, + "125": { + "name": "internal/adapters/inbound/http/config.go", + "qualified_name": "internal/adapters/inbound/http/config.go", + "kind": "file", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", + "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer." + }, + "1250": { + "name": "callerLanguage", + "qualified_name": "resolve.callerLanguage", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1247, + "intent": "avoid repeated nil checks before dispatch strategy lookup.", + "reason": "avoid repeated nil checks before dispatch strategy lookup." + }, + "1251": { + "name": "lastSegment", + "qualified_name": "resolve.lastSegment", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1256, + "intent": "extract the bare symbol name from a fully qualified name.", + "reason": "extract the bare symbol name from a fully qualified name." + }, + "1252": { + "name": "uniqueCallable", + "qualified_name": "resolve.uniqueCallable", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1265, + "intent": "return nil if multiple ambiguous functions match the criteria.", + "reason": "return nil if multiple ambiguous functions match the criteria." + }, + "1254": { + "name": "uniqueTypeNodeByName", + "qualified_name": "resolve.uniqueTypeNodeByName", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1311, + "intent": "filter nodes by name before applying uniqueness check.", + "reason": "filter nodes by name before applying uniqueness check." + }, + "1256": { + "name": "appendUniqueNode", + "qualified_name": "resolve.appendUniqueNode", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1343, + "intent": "prevent duplicate nodes in resolution result sets.", + "reason": "prevent duplicate nodes in resolution result sets." + }, + "1257": { + "name": "uniqueNodes", + "qualified_name": "resolve.uniqueNodes", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve.go", + "namespace": "ccg", + "start_line": 1357, + "intent": "deduplicate result sets before further processing or resolution.", + "reason": "deduplicate result sets before further processing or resolution." + }, + "1258": { + "name": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "qualified_name": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "kind": "file", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 1, + "intent": "add conservative interface-like dispatch for languages that lack receiver-type inference.", + "reason": "add conservative interface-like dispatch for languages that lack receiver-type inference." + }, + "1259": { + "name": "explicitOwnerLanguageDispatch", + "qualified_name": "resolve.explicitOwnerLanguageDispatch", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 11, + "intent": "add conservative interface-like dispatch for languages that lack receiver-type inference.", + "reason": "add conservative interface-like dispatch for languages that lack receiver-type inference." + }, + "126": { + "name": "Config", + "qualified_name": "server.Config", + "kind": "class", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 16, + "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", + "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer." + }, + "1260": { + "name": "Language", + "qualified_name": "resolve.explicitOwnerLanguageDispatch.Language", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 17, + "intent": "support registry-based lookup for explicit-owner language dispatch.", + "reason": "support registry-based lookup for explicit-owner language dispatch." + }, + "1261": { + "name": "CollectQualifiedCallCandidates", + "qualified_name": "resolve.explicitOwnerLanguageDispatch.CollectQualifiedCallCandidates", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 23, + "intent": "preload fully qualified owner types before polymorphic dispatch resolution runs.", + "reason": "preload fully qualified owner types before polymorphic dispatch resolution runs." + }, + "1263": { + "name": "ResolveSameReceiverCall", + "qualified_name": "resolve.explicitOwnerLanguageDispatch.ResolveSameReceiverCall", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 55, + "intent": "avoid inventing receiver inference when the call only proves an owner-qualified selector.", + "reason": "avoid inventing receiver inference when the call only proves an owner-qualified selector." + }, + "1264": { + "name": "ResolveInterfaceDispatch", + "qualified_name": "resolve.explicitOwnerLanguageDispatch.ResolveInterfaceDispatch", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 64, + "intent": "preserve conservative interface-style dispatch for JVM/TypeScript selectors without broad receiver inference.", + "reason": "preserve conservative interface-style dispatch for JVM/TypeScript selectors without broad receiver inference." + }, + "1265": { + "name": "PackagePrefix", + "qualified_name": "resolve.explicitOwnerLanguageDispatch.PackagePrefix", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 85, + "intent": "reuse existing qualified-name prefixes when expanding short owner candidates.", + "reason": "reuse existing qualified-name prefixes when expanding short owner candidates." + }, + "1266": { + "name": "explicitOwnerMethodSelector", + "qualified_name": "resolve.explicitOwnerMethodSelector", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 95, + "intent": "gate explicit-owner dispatch behind syntactic selectors that look like type-owned method calls.", + "reason": "gate explicit-owner dispatch behind syntactic selectors that look like type-owned method calls." + }, + "1267": { + "name": "explicitOwnerImplementers", + "qualified_name": "resolve.explicitOwnerImplementers", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 113, + "intent": "reuse implements edges to prefer concrete dispatch targets over abstract owner nodes when unique.", + "reason": "reuse implements edges to prefer concrete dispatch targets over abstract owner nodes when unique." + }, + "1268": { + "name": "explicitOwnerTarget", + "qualified_name": "resolve.explicitOwnerTarget", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 126, + "intent": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", + "reason": "normalize short and fully qualified owner names into one dispatch anchor before method lookup." + }, + "1269": { + "name": "explicitOwnerShortNameCandidates", + "qualified_name": "resolve.explicitOwnerShortNameCandidates", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", + "namespace": "ccg", + "start_line": 146, + "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", + "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace." + }, + "127": { + "name": "DefaultConfig", + "qualified_name": "server.DefaultConfig", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 48, + "intent": "centralize default server flag values for ccg-server.", + "reason": "centralize default server flag values for ccg-server." + }, + "1270": { + "name": "internal/app/ingest/resolve/resolve_go.go", + "qualified_name": "internal/app/ingest/resolve/resolve_go.go", + "kind": "file", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 1, + "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", + "reason": "isolate Go interface and receiver dispatch from the generic resolver flow." + }, + "1271": { + "name": "goLanguageDispatch", + "qualified_name": "resolve.goLanguageDispatch", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 11, + "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", + "reason": "isolate Go interface and receiver dispatch from the generic resolver flow." + }, + "1272": { + "name": "Language", + "qualified_name": "resolve.goLanguageDispatch.Language", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 15, + "intent": "support registry-based lookup for language-specific resolution.", + "reason": "support registry-based lookup for language-specific resolution." + }, + "1274": { + "name": "EnsureDispatchTargets", + "qualified_name": "resolve.goLanguageDispatch.EnsureDispatchTargets", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 34, + "intent": "preload potential interface implementer methods before call resolution.", + "reason": "preload potential interface implementer methods before call resolution." + }, + "1275": { + "name": "ResolveSameReceiverCall", + "qualified_name": "resolve.goLanguageDispatch.ResolveSameReceiverCall", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 52, + "intent": "preserve Go method-call resolution without hardcoding language checks in Resolve.", + "reason": "preserve Go method-call resolution without hardcoding language checks in Resolve." + }, + "1276": { + "name": "ResolveInterfaceDispatch", + "qualified_name": "resolve.goLanguageDispatch.ResolveInterfaceDispatch", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 65, + "intent": "preserve best-effort Go polymorphic dispatch behind the language seam.", + "reason": "preserve best-effort Go polymorphic dispatch behind the language seam." + }, + "1277": { + "name": "PackagePrefix", + "qualified_name": "resolve.goLanguageDispatch.PackagePrefix", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 92, + "intent": "keep Go package naming rules in the Go dispatch strategy.", + "reason": "keep Go package naming rules in the Go dispatch strategy." + }, + "1278": { + "name": "goImplementersFor", + "qualified_name": "resolve.resolveState.goImplementersFor", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 101, + "intent": "support Go interface method dispatch by finding candidate concrete types.", + "reason": "support Go interface method dispatch by finding candidate concrete types." + }, + "1279": { + "name": "interfaceMethodSelector", + "qualified_name": "resolve.interfaceMethodSelector", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_go.go", + "namespace": "ccg", + "start_line": 117, + "intent": "identify polymorphic call targets in Go selector expressions.", + "reason": "identify polymorphic call targets in Go selector expressions." + }, + "128": { + "name": "ValidateConfig", + "qualified_name": "server.ValidateConfig", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 71, + "intent": "reject invalid webhook and HTTP exposure settings before opening listeners.", + "reason": "reject invalid webhook and HTTP exposure settings before opening listeners." + }, + "1281": { + "name": "internal/app/ingest/resolve/resolve_rust.go", + "qualified_name": "internal/app/ingest/resolve/resolve_rust.go", + "kind": "file", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 1, + "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", + "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow." + }, + "1282": { + "name": "rustLanguageDispatch", + "qualified_name": "resolve.rustLanguageDispatch", + "kind": "class", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 11, + "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", + "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow." + }, + "1283": { + "name": "Language", + "qualified_name": "resolve.rustLanguageDispatch.Language", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 15, + "intent": "support registry-based lookup for language-specific resolution.", + "reason": "support registry-based lookup for language-specific resolution." + }, + "1285": { + "name": "EnsureDispatchTargets", + "qualified_name": "resolve.rustLanguageDispatch.EnsureDispatchTargets", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 31, + "intent": "preload possible impl methods for trait method dispatch before resolution.", + "reason": "preload possible impl methods for trait method dispatch before resolution." + }, + "1286": { + "name": "ResolveSameReceiverCall", + "qualified_name": "resolve.rustLanguageDispatch.ResolveSameReceiverCall", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 46, + "intent": "rely on the generic same-file fallback until Rust receiver-aware rewrites are needed.", + "reason": "rely on the generic same-file fallback until Rust receiver-aware rewrites are needed." + }, + "1287": { + "name": "ResolveInterfaceDispatch", + "qualified_name": "resolve.rustLanguageDispatch.ResolveInterfaceDispatch", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 55, + "intent": "support non-Go trait dispatch when call rewriting produces Trait::method selectors.", + "reason": "support non-Go trait dispatch when call rewriting produces Trait::method selectors." + }, + "1288": { + "name": "PackagePrefix", + "qualified_name": "resolve.rustLanguageDispatch.PackagePrefix", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 76, + "intent": "keep Rust naming rules localized even though current resolver use is minimal.", + "reason": "keep Rust naming rules localized even though current resolver use is minimal." + }, + "1289": { + "name": "rustTraitMethodSelector", + "qualified_name": "resolve.rustTraitMethodSelector", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 83, + "intent": "normalize Rust trait call syntaxes before dispatch resolution chooses implementer methods.", + "reason": "normalize Rust trait call syntaxes before dispatch resolution chooses implementer methods." + }, + "129": { + "name": "ConfiguredCloneBaseURLs", + "qualified_name": "server.ConfiguredCloneBaseURLs", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 138, + "intent": "preserve legacy singular URL behavior while exposing one ordered clone URL list.", + "reason": "preserve legacy singular URL behavior while exposing one ordered clone URL list." + }, + "1290": { + "name": "rustQualifiedTraitMethodSelector", + "qualified_name": "resolve.rustQualifiedTraitMethodSelector", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 97, + "intent": "recover the trait owner and method name from conservative qualified trait call fingerprints.", + "reason": "recover the trait owner and method name from conservative qualified trait call fingerprints." + }, + "1291": { + "name": "rustUFCSTraitMethodSelector", + "qualified_name": "resolve.rustUFCSTraitMethodSelector", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 112, + "intent": "preserve concrete-type disambiguation when Rust calls are rewritten in UFCS form.", + "reason": "preserve concrete-type disambiguation when Rust calls are rewritten in UFCS form." + }, + "1292": { + "name": "rustExactImplementers", + "qualified_name": "resolve.rustExactImplementers", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 137, + "intent": "narrow Rust trait dispatch candidates before method lookup so ambiguous impl sets stay unresolved.", + "reason": "narrow Rust trait dispatch candidates before method lookup so ambiguous impl sets stay unresolved." + }, + "1293": { + "name": "rustMatchingAngle", + "qualified_name": "resolve.rustMatchingAngle", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 153, + "intent": "parse nested UFCS selectors without confusing generic argument brackets for the outer boundary.", + "reason": "parse nested UFCS selectors without confusing generic argument brackets for the outer boundary." + }, + "1294": { + "name": "rustTopLevelAsIndex", + "qualified_name": "resolve.rustTopLevelAsIndex", + "kind": "function", + "file_path": "internal/app/ingest/resolve/resolve_rust.go", + "namespace": "ccg", + "start_line": 171, + "intent": "split concrete and trait types only when the separator is outside nested generic or tuple syntax.", + "reason": "split concrete and trait types only when the separator is outside nested generic or tuple syntax." + }, + "1296": { + "name": "parsedBuildNodeBatch", + "qualified_name": "workflow.parsedBuildNodeBatch", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 27, + "intent": "keep node persistence and annotation binding aligned to the same source snapshot.", + "reason": "keep node persistence and annotation binding aligned to the same source snapshot." + }, + "1297": { + "name": "parsedBuildEdgeBatch", + "qualified_name": "workflow.parsedBuildEdgeBatch", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 39, + "intent": "persist edges only after their referenced nodes exist in the graph.", + "reason": "persist edges only after their referenced nodes exist in the graph." + }, + "1298": { + "name": "buildEdgeBatchSource", + "qualified_name": "workflow.buildEdgeBatchSource", + "kind": "type", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 46, + "intent": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records.", + "reason": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records." + }, + "1299": { + "name": "buildParseInput", + "qualified_name": "workflow.buildParseInput", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 50, + "intent": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", + "reason": "keep deterministic input sequencing separate from concurrent filesystem and parser work." + }, + "130": { + "name": "EnvInt", + "qualified_name": "server.EnvInt", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 154, + "intent": "provide env-based defaults for server flags without panicking on bad input.", + "reason": "provide env-based defaults for server flags without panicking on bad input." + }, + "1300": { + "name": "buildParseResult", + "qualified_name": "workflow.buildParseResult", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 60, + "intent": "let workers finish out of order while the coordinator preserves record order.", + "reason": "let workers finish out of order while the coordinator preserves record order." + }, + "1301": { + "name": "newParsedBuildNodeBatch", + "qualified_name": "workflow.newParsedBuildNodeBatch", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 70, + "intent": "defer comment binding until storage time while keeping per-file source line context available.", + "reason": "defer comment binding until storage time while keeping per-file source line context available." + }, + "1302": { + "name": "buildPersistBatch", + "qualified_name": "workflow.buildPersistBatch", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 87, + "intent": "amortize transaction overhead by persisting groups of files together while bounding memory.", + "reason": "amortize transaction overhead by persisting groups of files together while bounding memory." + }, + "1303": { + "name": "add", + "qualified_name": "workflow.buildPersistBatch.add", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 96, + "intent": "accumulate work between flushes so persistence happens in bounded chunks.", + "reason": "accumulate work between flushes so persistence happens in bounded chunks." + }, + "1304": { + "name": "shouldFlush", + "qualified_name": "workflow.buildPersistBatch.shouldFlush", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 104, + "intent": "bound transaction size so long builds do not balloon memory or transaction logs.", + "reason": "bound transaction size so long builds do not balloon memory or transaction logs." + }, + "1305": { + "name": "reset", + "qualified_name": "workflow.buildPersistBatch.reset", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 111, + "intent": "recycle the batch struct without reallocating to keep build loops allocation-light.", + "reason": "recycle the batch struct without reallocating to keep build loops allocation-light." + }, + "1306": { + "name": "collectAndReleaseNodeBatch", + "qualified_name": "workflow.Service.collectAndReleaseNodeBatch", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 120, + "intent": "collect per-file annotations for one flush-scoped bulk write while preserving eager buffer release.", + "reason": "collect per-file annotations for one flush-scoped bulk write while preserving eager buffer release." + }, + "1307": { + "name": "Build", + "qualified_name": "workflow.Service.Build", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 158, + "intent": "perform a full graph build from the specified directory.", + "reason": "perform a full graph build from the specified directory." + }, + "1308": { + "name": "withBuildTx", + "qualified_name": "workflow.Service.withBuildTx", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 243, + "intent": "reuse one transaction across graph writes and the coupled search index rebuild.", + "reason": "reuse one transaction across graph writes and the coupled search index rebuild." + }, + "1309": { + "name": "prepareBuildSpool", + "qualified_name": "workflow.Service.prepareBuildSpool", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 251, + "intent": "pre-parse eligible files into spool records so the later build transaction can persist graph state from a stable snapshot.", + "reason": "pre-parse eligible files into spool records so the later build transaction can persist graph state from a stable snapshot." + }, + "131": { + "name": "EnvIsSet", + "qualified_name": "server.EnvIsSet", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 168, + "intent": "distinguish between an unset variable and one explicitly set to empty string.", + "reason": "distinguish between an unset variable and one explicitly set to empty string." + }, + "1310": { + "name": "collectBuildParseInputs", + "qualified_name": "workflow.Service.collectBuildParseInputs", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 293, + "intent": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", + "reason": "preserve build traversal policy and deterministic file order before concurrent parsing starts." + }, + "1311": { + "name": "parseBuildInputs", + "qualified_name": "workflow.Service.parseBuildInputs", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 330, + "intent": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory.", + "reason": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory." + }, + "1312": { + "name": "parseBuildInput", + "qualified_name": "workflow.Service.parseBuildInput", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 441, + "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", + "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state." + }, + "1313": { + "name": "applyBuildSpoolInTx", + "qualified_name": "workflow.Service.applyBuildSpoolInTx", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 509, + "intent": "rebuild the graph from scratch atomically so partial failures cannot leave stale state.", + "reason": "rebuild the graph from scratch atomically so partial failures cannot leave stale state." + }, + "1314": { + "name": "packageSemanticEdgeBatches", + "qualified_name": "workflow.Service.packageSemanticEdgeBatches", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 598, + "intent": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", + "reason": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents." + }, + "1315": { + "name": "flushBuildBatch", + "qualified_name": "workflow.Service.flushBuildBatch", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 646, + "intent": "persist all batch nodes before annotations and all edges so references can resolve with fewer store operations.", + "reason": "persist all batch nodes before annotations and all edges so references can resolve with fewer store operations." + }, + "1316": { + "name": "buildResolveLookup", + "qualified_name": "workflow.buildResolveLookup", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 698, + "intent": "avoid repeatedly scanning persisted file nodes for identical import paths during a full build.", + "reason": "avoid repeatedly scanning persisted file nodes for identical import paths during a full build." + }, + "1317": { + "name": "newBuildResolveLookup", + "qualified_name": "workflow.newBuildResolveLookup", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 707, + "intent": "share immutable import file-node results across all resolver chunks in one build.", + "reason": "share immutable import file-node results across all resolver chunks in one build." + }, + "1318": { + "name": "newBuildResolveLookupWithTiming", + "qualified_name": "workflow.newBuildResolveLookupWithTiming", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 713, + "intent": "retain the existing resolver lookup contract while making individual database-read costs observable.", + "reason": "retain the existing resolver lookup contract while making individual database-read costs observable." + }, + "1319": { + "name": "add", + "qualified_name": "workflow.BuildResolveOperationTiming.add", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 723, + "intent": "accumulate a single build-scoped timing without changing the observed operation result.", + "reason": "accumulate a single build-scoped timing without changing the observed operation result." + }, + "132": { + "name": "EnvDuration", + "qualified_name": "server.EnvDuration", + "kind": "function", + "file_path": "internal/adapters/inbound/http/config.go", + "namespace": "ccg", + "start_line": 175, + "intent": "provide env-based defaults for server timeout and retry flags without panicking on bad input.", + "reason": "provide env-based defaults for server timeout and retry flags without panicking on bad input." + }, + "1320": { + "name": "GetNodesByIDs", + "qualified_name": "workflow.buildResolveLookup.GetNodesByIDs", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 733, + "intent": "measure node-ID store reads while preserving the resolver lookup contract.", + "reason": "measure node-ID store reads while preserving the resolver lookup contract." + }, + "1321": { + "name": "GetNodesByFiles", + "qualified_name": "workflow.buildResolveLookup.GetNodesByFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 744, + "intent": "measure file-node store reads while preserving the resolver lookup contract.", + "reason": "measure file-node store reads while preserving the resolver lookup contract." + }, + "1322": { + "name": "GetNodesByQualifiedNames", + "qualified_name": "workflow.buildResolveLookup.GetNodesByQualifiedNames", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 755, + "intent": "measure qualified-name store reads while preserving the resolver lookup contract.", + "reason": "measure qualified-name store reads while preserving the resolver lookup contract." + }, + "1323": { + "name": "GetEdgesToNodes", + "qualified_name": "workflow.buildResolveLookup.GetEdgesToNodes", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 766, + "intent": "measure implements-edge store reads while preserving the resolver lookup contract.", + "reason": "measure implements-edge store reads while preserving the resolver lookup contract." + }, + "1324": { + "name": "GetFileNodesByPathSuffix", + "qualified_name": "workflow.buildResolveLookup.GetFileNodesByPathSuffix", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 777, + "intent": "eliminate repeated store scans while preserving the GraphStore lookup contract.", + "reason": "eliminate repeated store scans while preserving the GraphStore lookup contract." + }, + "1325": { + "name": "flushBuildEdges", + "qualified_name": "workflow.Service.flushBuildEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 804, + "intent": "attach parsed relationships to stored node IDs without depending on build batch order.", + "reason": "attach parsed relationships to stored node IDs without depending on build batch order." + }, + "1326": { + "name": "flushBuildEdgesWithTiming", + "qualified_name": "workflow.Service.flushBuildEdgesWithTiming", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 810, + "intent": "measure edge-resolution database reads and writes without altering the existing resolution order or transaction.", + "reason": "measure edge-resolution database reads and writes without altering the existing resolution order or transaction." + }, + "1327": { + "name": "flushBuildEdgeSourceWithTiming", + "qualified_name": "workflow.Service.flushBuildEdgeSourceWithTiming", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 826, + "intent": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts.", + "reason": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts." + }, + "1328": { + "name": "actualEdgeRange", + "qualified_name": "workflow.actualEdgeRange", + "kind": "class", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 890, + "intent": "persist only original parsed edges after using import edges to enrich resolution context.", + "reason": "persist only original parsed edges after using import edges to enrich resolution context." + }, + "1329": { + "name": "persistBuildUnresolvedEdges", + "qualified_name": "workflow.persistBuildUnresolvedEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 970, + "intent": "populate the reverse index during full builds while keeping stores without the optional capability compatible.", + "reason": "populate the reverse index during full builds while keeping stores without the optional capability compatible." + }, + "133": { + "name": "internal/adapters/inbound/http/serve.go", + "qualified_name": "internal/adapters/inbound/http/serve.go", + "kind": "file", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", + "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction." + }, + "1330": { + "name": "importEdges", + "qualified_name": "workflow.importEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 986, + "intent": "preserve import-aware call resolution without retaining a build-wide import map.", + "reason": "preserve import-aware call resolution without retaining a build-wide import map." + }, + "1331": { + "name": "rewriteImplementsFingerprintScope", + "qualified_name": "workflow.rewriteImplementsFingerprintScope", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 998, + "intent": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files.", + "reason": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files." + }, + "1332": { + "name": "mergeBuildUnresolvedDiagnostics", + "qualified_name": "workflow.mergeBuildUnresolvedDiagnostics", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1013, + "intent": "keep build-time unresolved-edge reporting aligned with chunked edge resolution output.", + "reason": "keep build-time unresolved-edge reporting aligned with chunked edge resolution output." + }, + "1333": { + "name": "mergeFilterResolvedDiagnostics", + "qualified_name": "workflow.mergeFilterResolvedDiagnostics", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1023, + "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", + "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows." + }, + "1334": { + "name": "formatEdgeKindCounts", + "qualified_name": "workflow.formatEdgeKindCounts", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1064, + "intent": "serialize EdgeKind counters into diagnostics-friendly logging output.", + "reason": "serialize EdgeKind counters into diagnostics-friendly logging output." + }, + "1335": { + "name": "shouldSuppressExternalImportUnresolved", + "qualified_name": "workflow.shouldSuppressExternalImportUnresolved", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1077, + "intent": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", + "reason": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph." + }, + "1336": { + "name": "splitImplementsEdges", + "qualified_name": "workflow.splitImplementsEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1083, + "intent": "ensure interface fulfillment edges are handled before call dispatch resolution.", + "reason": "ensure interface fulfillment edges are handled before call dispatch resolution." + }, + "1337": { + "name": "chunkWithImportWarmup", + "qualified_name": "workflow.chunkWithImportWarmup", + "kind": "function", + "file_path": "internal/app/ingest/workflow/build.go", + "namespace": "ccg", + "start_line": 1098, + "intent": "ensure the edge resolver has enough context to resolve call targets through imports.", + "reason": "ensure the edge resolver has enough context to resolve call targets through imports." + }, + "1339": { + "name": "inspectRegularSourceFile", + "qualified_name": "workflow.inspectRegularSourceFile", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 21, + "intent": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes.", + "reason": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes." + }, + "134": { + "name": "HostDeps", + "qualified_name": "server.HostDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 26, + "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", + "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction." + }, + "1340": { + "name": "openRegularSourceFile", + "qualified_name": "workflow.openRegularSourceFile", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 37, + "intent": "prevent replacement races from turning a validated regular path into a followed symlink before reading.", + "reason": "prevent replacement races from turning a validated regular path into a followed symlink before reading." + }, + "1341": { + "name": "readRegularSourceFile", + "qualified_name": "workflow.readRegularSourceFile", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 60, + "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", + "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion." + }, + "1342": { + "name": "shouldSkipDir", + "qualified_name": "workflow.shouldSkipDir", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 79, + "intent": "keep default source traversal exclusions local to the ingest workflow.", + "reason": "keep default source traversal exclusions local to the ingest workflow." + }, + "1343": { + "name": "walkMatchingFiles", + "qualified_name": "workflow.walkMatchingFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 88, + "intent": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", + "reason": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing." + }, + "1344": { + "name": "parseForBuild", + "qualified_name": "workflow.parseForBuild", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 124, + "intent": "surface comment blocks and language alongside nodes/edges so the binder can attach annotations.", + "reason": "surface comment blocks and language alongside nodes/edges so the binder can attach annotations." + }, + "1345": { + "name": "unreadableFileSummary", + "qualified_name": "workflow.unreadableFileSummary", + "kind": "class", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 135, + "intent": "let callers surface a single structured failure or warning instead of one log entry per file.", + "reason": "let callers surface a single structured failure or warning instead of one log entry per file." + }, + "1346": { + "name": "add", + "qualified_name": "workflow.unreadableFileSummary.add", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 144, + "intent": "collect every offending path while keeping summary output bounded for logs.", + "reason": "collect every offending path while keeping summary output bounded for logs." + }, + "1347": { + "name": "log", + "qualified_name": "workflow.unreadableFileSummary.log", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 155, + "intent": "prevent log spam by collapsing per-file warnings into one phase-tagged entry.", + "reason": "prevent log spam by collapsing per-file warnings into one phase-tagged entry." + }, + "1348": { + "name": "asError", + "qualified_name": "workflow.unreadableFileSummary.asError", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 164, + "intent": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", + "reason": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set." + }, + "1349": { + "name": "CheckParseFileSize", + "qualified_name": "workflow.CheckParseFileSize", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 173, + "intent": "reject individual files that exceed the configured per-file parse budget before loading them into memory.", + "reason": "reject individual files that exceed the configured per-file parse budget before loading them into memory." + }, + "135": { + "name": "RunStreamableHTTP", + "qualified_name": "server.RunStreamableHTTP", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 40, + "intent": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", + "reason": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다." + }, + "1350": { + "name": "CheckTotalParsedBytes", + "qualified_name": "workflow.CheckTotalParsedBytes", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 181, + "intent": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", + "reason": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit." + }, + "1351": { + "name": "toBinderComments", + "qualified_name": "workflow.toBinderComments", + "kind": "function", + "file_path": "internal/app/ingest/workflow/fileio.go", + "namespace": "ccg", + "start_line": 191, + "intent": "keep IsDocstring and OwnerStartLine in sync between walker and binder types", + "reason": "keep IsDocstring and OwnerStartLine in sync between walker and binder types" + }, + "1353": { + "name": "ExistingGraphFiles", + "qualified_name": "workflow.ExistingGraphFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/graphstate.go", + "namespace": "ccg", + "start_line": 14, + "intent": "share deletion-scope discovery across CLI and MCP incremental updates", + "reason": "share deletion-scope discovery across CLI and MCP incremental updates" + }, + "1354": { + "name": "existingGraphFileState", + "qualified_name": "workflow.existingGraphFileState", + "kind": "function", + "file_path": "internal/app/ingest/workflow/graphstate.go", + "namespace": "ccg", + "start_line": 21, + "intent": "provide both deletion-scope file paths and per-file node projections from a single query.", + "reason": "provide both deletion-scope file paths and per-file node projections from a single query." + }, + "1355": { + "name": "filterExistingStateByInclude", + "qualified_name": "workflow.filterExistingStateByInclude", + "kind": "function", + "file_path": "internal/app/ingest/workflow/graphstate.go", + "namespace": "ccg", + "start_line": 45, + "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", + "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths." + }, + "1356": { + "name": "forceReparseFiles", + "qualified_name": "workflow.forceReparseFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/graphstate.go", + "namespace": "ccg", + "start_line": 60, + "intent": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", + "reason": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change." + }, + "1357": { + "name": "splitForcedFiles", + "qualified_name": "workflow.splitForcedFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/graphstate.go", + "namespace": "ccg", + "start_line": 149, + "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", + "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit." + }, + "1359": { + "name": "resolveBuildEdgesFn", + "qualified_name": "workflow.resolveBuildEdgesFn", + "kind": "type", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 19, + "intent": "abstract build-time edge resolution so tests can inject resolver behavior per Service.", + "reason": "abstract build-time edge resolution so tests can inject resolver behavior per Service." + }, + "136": { + "name": "onceCleanup", + "qualified_name": "server.onceCleanup", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 148, + "intent": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", + "reason": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge." + }, + "1360": { + "name": "CrossRefSyncer", + "qualified_name": "workflow.CrossRefSyncer", + "kind": "type", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 52, + "intent": "let build/update trigger cross-ref materialization without depending on its implementation.", + "reason": "let build/update trigger cross-ref materialization without depending on its implementation." + }, + "1362": { + "name": "edgeResolver", + "qualified_name": "workflow.Service.edgeResolver", + "kind": "function", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 76, + "intent": "resolve build edges through the injected resolver, defaulting to the production resolver.", + "reason": "resolve build edges through the injected resolver, defaulting to the production resolver." + }, + "1363": { + "name": "syncCrossRefs", + "qualified_name": "workflow.Service.syncCrossRefs", + "kind": "function", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 85, + "intent": "keep cross-namespace reference state current without making it a hard build dependency.", + "reason": "keep cross-namespace reference state current without making it a hard build dependency." + }, + "1364": { + "name": "logger", + "qualified_name": "workflow.Service.logger", + "kind": "function", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 97, + "intent": "keep service code logging-safe even when callers leave Logger nil.", + "reason": "keep service code logging-safe even when callers leave Logger nil." + }, + "1365": { + "name": "parserForExt", + "qualified_name": "workflow.Service.parserForExt", + "kind": "function", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 106, + "intent": "let tests inject custom parsers while still using the production walker registry by default.", + "reason": "let tests inject custom parsers while still using the production walker registry by default." + }, + "1366": { + "name": "BuildOptions", + "qualified_name": "workflow.BuildOptions", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 117, + "intent": "빌드 대상 경로와 탐색 범위를 호출자에서 제어하게 한다.", + "reason": "빌드 대상 경로와 탐색 범위를 호출자에서 제어하게 한다." + }, + "1367": { + "name": "BuildStats", + "qualified_name": "workflow.BuildStats", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 130, + "intent": "CLI와 호출자가 빌드 결과 규모를 사용자에게 보여줄 수 있게 한다.", + "reason": "CLI와 호출자가 빌드 결과 규모를 사용자에게 보여줄 수 있게 한다." + }, + "1368": { + "name": "BuildTiming", + "qualified_name": "workflow.BuildTiming", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 140, + "intent": "expose actionable stage-level evidence so large-build regressions can be diagnosed without guessing.", + "reason": "expose actionable stage-level evidence so large-build regressions can be diagnosed without guessing." + }, + "1369": { + "name": "BuildResolveOperationTiming", + "qualified_name": "workflow.BuildResolveOperationTiming", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 153, + "intent": "show which edge-resolution store operation dominates a full build without changing resolution behavior.", + "reason": "show which edge-resolution store operation dominates a full build without changing resolution behavior." + }, + "137": { + "name": "ValidateHTTPExposure", + "qualified_name": "server.ValidateHTTPExposure", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 162, + "intent": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다.", + "reason": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다." + }, + "1370": { + "name": "BuildResolveTiming", + "qualified_name": "workflow.BuildResolveTiming", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 160, + "intent": "expose actionable evidence for optimizing the remaining full-build bottleneck.", + "reason": "expose actionable evidence for optimizing the remaining full-build bottleneck." + }, + "1371": { + "name": "UpdateOptions", + "qualified_name": "workflow.UpdateOptions", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 172, + "intent": "reuse Service traversal and parse limit policy for CLI and MCP updates", + "reason": "reuse Service traversal and parse limit policy for CLI and MCP updates" + }, + "1372": { + "name": "UnreadableFilesError", + "qualified_name": "workflow.UnreadableFilesError", + "kind": "class", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 182, + "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", + "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync" + }, + "1373": { + "name": "Error", + "qualified_name": "workflow.UnreadableFilesError.Error", + "kind": "function", + "file_path": "internal/app/ingest/workflow/indexer.go", + "namespace": "ccg", + "start_line": 188, + "intent": "give operators a stable, single-line summary they can grep instead of dumping every path.", + "reason": "give operators a stable, single-line summary they can grep instead of dumping every path." + }, + "1375": { + "name": "languagePackageDiscoverer", + "qualified_name": "workflow.languagePackageDiscoverer", + "kind": "type", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 20, + "intent": "select deterministic package discovery capabilities through the parser port.", + "reason": "select deterministic package discovery capabilities through the parser port." + }, + "1376": { + "name": "collectLanguagePackages", + "qualified_name": "workflow.Service.collectLanguagePackages", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 27, + "intent": "identify package boundaries and file memberships to populate the graph's package structure.", + "reason": "identify package boundaries and file memberships to populate the graph's package structure." + }, + "1377": { + "name": "packageDiscoverers", + "qualified_name": "workflow.Service.packageDiscoverers", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 60, + "intent": "discover packages through the ingest parser port without exposing adapter language specifications.", + "reason": "discover packages through the ingest parser port without exposing adapter language specifications." + }, + "1378": { + "name": "packageEdgeBuilder", + "qualified_name": "workflow.Service.packageEdgeBuilder", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 98, + "intent": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", + "reason": "keep package semantic enrichment behind the parser port instead of importing a parser adapter." + }, + "1379": { + "name": "withImportPackageContext", + "qualified_name": "workflow.Service.withImportPackageContext", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 123, + "intent": "ensure cross-package imports can be resolved using their semantic names.", + "reason": "ensure cross-package imports can be resolved using their semantic names." + }, + "138": { + "name": "MCPAuthMiddleware", + "qualified_name": "server.MCPAuthMiddleware", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 181, + "intent": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다.", + "reason": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다." + }, + "1380": { + "name": "refreshPackageSemanticEdges", + "qualified_name": "workflow.Service.refreshPackageSemanticEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 132, + "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", + "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package." + }, + "1381": { + "name": "collectAffectedPackageSemanticBatches", + "qualified_name": "workflow.Service.collectAffectedPackageSemanticBatches", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 152, + "intent": "limit package semantic edge refresh work to packages whose file sets overlap the current update.", + "reason": "limit package semantic edge refresh work to packages whose file sets overlap the current update." + }, + "1382": { + "name": "packageSemanticMetadataForFile", + "qualified_name": "workflow.Service.packageSemanticMetadataForFile", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 212, + "intent": "reload package and interface metadata only for files participating in a package semantic refresh.", + "reason": "reload package and interface metadata only for files participating in a package semantic refresh." + }, + "1383": { + "name": "packageEdgeBuilderForParser", + "qualified_name": "workflow.packageEdgeBuilderForParser", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 234, + "intent": "let explicit parsers and fallback walkers be evaluated independently for package semantics.", + "reason": "let explicit parsers and fallback walkers be evaluated independently for package semantics." + }, + "1384": { + "name": "mergeLanguagePackages", + "qualified_name": "workflow.mergeLanguagePackages", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 245, + "intent": "consolidate package discovery results while discarding conflicting definitions.", + "reason": "consolidate package discovery results while discarding conflicting definitions." + }, + "1385": { + "name": "importPackageContext", + "qualified_name": "workflow.importPackageContext", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 270, + "intent": "normalize discovered package imports into the canonical names used when resolving cross-file imports during parsing.", + "reason": "normalize discovered package imports into the canonical names used when resolving cross-file imports during parsing." + }, + "1386": { + "name": "filePackageImportPaths", + "qualified_name": "workflow.filePackageImportPaths", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 313, + "intent": "seed parser qualified names from discovered package ownership without depending on map iteration order.", + "reason": "seed parser qualified names from discovered package ownership without depending on map iteration order." + }, + "1387": { + "name": "packageNodes", + "qualified_name": "workflow.packageNodes", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 345, + "intent": "project package metadata into the graph schema for persistence.", + "reason": "project package metadata into the graph schema for persistence." + }, + "1388": { + "name": "packageContainsEdgeCount", + "qualified_name": "workflow.packageContainsEdgeCount", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 368, + "intent": "estimate the edge overhead for package structural nodes.", + "reason": "estimate the edge overhead for package structural nodes." + }, + "1389": { + "name": "upsertPackageNodes", + "qualified_name": "workflow.upsertPackageNodes", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 378, + "intent": "ensure package nodes exist before their member files are linked.", + "reason": "ensure package nodes exist before their member files are linked." + }, + "139": { + "name": "WithHTTPTraceContext", + "qualified_name": "server.WithHTTPTraceContext", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 197, + "intent": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다.", + "reason": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다." + }, + "1390": { + "name": "upsertPackageContainsEdges", + "qualified_name": "workflow.upsertPackageContainsEdges", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 388, + "intent": "populate the graph's structural hierarchy by connecting packages to their source files.", + "reason": "populate the graph's structural hierarchy by connecting packages to their source files." + }, + "1391": { + "name": "sortedPackageImportPaths", + "qualified_name": "workflow.sortedPackageImportPaths", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 428, + "intent": "keep package-related database operations stable across build runs.", + "reason": "keep package-related database operations stable across build runs." + }, + "1392": { + "name": "packageFilePaths", + "qualified_name": "workflow.packageFilePaths", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 439, + "intent": "collect all files that need to be linked to their containing package nodes.", + "reason": "collect all files that need to be linked to their containing package nodes." + }, + "1393": { + "name": "singleNodeOfKind", + "qualified_name": "workflow.singleNodeOfKind", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 457, + "intent": "ensure unambiguous node selection during structural edge linking.", + "reason": "ensure unambiguous node selection during structural edge linking." + }, + "1394": { + "name": "packageContainsFingerprint", + "qualified_name": "workflow.packageContainsFingerprint", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 473, + "intent": "ensure package structural edges can be upserted without duplication.", + "reason": "ensure package structural edges can be upserted without duplication." + }, + "1395": { + "name": "affectedPackageImportPaths", + "qualified_name": "workflow.affectedPackageImportPaths", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 480, + "intent": "constrain package semantic refresh to import paths touched directly or by directory-level package splits.", + "reason": "constrain package semantic refresh to import paths touched directly or by directory-level package splits." + }, + "1396": { + "name": "addUnchangedPeersForAddedFiles", + "qualified_name": "workflow.addUnchangedPeersForAddedFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 515, + "intent": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", + "reason": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers." + }, + "1397": { + "name": "addAllUnchangedFiles", + "qualified_name": "workflow.addAllUnchangedFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 572, + "intent": "preserve graph correctness when full-build fallback is unsafe or unavailable.", + "reason": "preserve graph correctness when full-build fallback is unsafe or unavailable." + }, + "1398": { + "name": "appendUniqueString", + "qualified_name": "workflow.appendUniqueString", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 584, + "intent": "maintain a unique set of strings while preserving insertion order for small sets.", + "reason": "maintain a unique set of strings while preserving insertion order for small sets." + }, + "1399": { + "name": "appendUniqueStrings", + "qualified_name": "workflow.appendUniqueStrings", + "kind": "function", + "file_path": "internal/app/ingest/workflow/packages.go", + "namespace": "ccg", + "start_line": 595, + "intent": "aggregate strings from multiple sources while filtering duplicates.", + "reason": "aggregate strings from multiple sources while filtering duplicates." + }, + "140": { + "name": "ValidateBearerToken", + "qualified_name": "server.ValidateBearerToken", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 207, + "intent": "Authorization 헤더가 기대한 bearer 토큰과 정확히 일치하는지만 판단한다.", + "reason": "Authorization 헤더가 기대한 bearer 토큰과 정확히 일치하는지만 판단한다." + }, + "1401": { + "name": "cachedParseRecord", + "qualified_name": "workflow.cachedParseRecord", + "kind": "class", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 18, + "intent": "cache reusable syntax results without duplicating source text or invocation-local byte accounting.", + "reason": "cache reusable syntax results without duplicating source text or invocation-local byte accounting." + }, + "1402": { + "name": "cachedParseRecordFrom", + "qualified_name": "workflow.cachedParseRecordFrom", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 29, + "intent": "keep durable cache payloads limited to parser output reused by later builds.", + "reason": "keep durable cache payloads limited to parser output reused by later builds." + }, + "1403": { + "name": "toSpooledRecord", + "qualified_name": "workflow.cachedParseRecord.toSpooledRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 38, + "intent": "reconstruct the same build spool contract on a cache hit as on a fresh parse.", + "reason": "reconstruct the same build spool contract on a cache hit as on a fresh parse." + }, + "1404": { + "name": "encodeCachedParseRecord", + "qualified_name": "workflow.encodeCachedParseRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 49, + "intent": "keep cache persistence independent of workflow-internal record types.", + "reason": "keep cache persistence independent of workflow-internal record types." + }, + "1406": { + "name": "parseResultCacheKey", + "qualified_name": "workflow.parseResultCacheKey", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 65, + "intent": "bypass caching when a parser cannot prove how its output version is invalidated.", + "reason": "bypass caching when a parser cannot prove how its output version is invalidated." + }, + "1407": { + "name": "parseSemanticContextHash", + "qualified_name": "workflow.parseSemanticContextHash", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 78, + "intent": "invalidate cached syntax results when import or file-package normalization changes.", + "reason": "invalidate cached syntax results when import or file-package normalization changes." + }, + "1408": { + "name": "setBuildNodeHashes", + "qualified_name": "workflow.setBuildNodeHashes", + "kind": "function", + "file_path": "internal/app/ingest/workflow/parsecache.go", + "namespace": "ccg", + "start_line": 103, + "intent": "keep change detection based on current content rather than serialized node state.", + "reason": "keep change detection based on current content rather than serialized node state." + }, + "141": { + "name": "IsLoopbackHTTPAddr", + "qualified_name": "server.IsLoopbackHTTPAddr", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 221, + "intent": "HTTP listen 주소가 로컬 테스트 전용인지 판별해 보안 규칙에 재사용한다.", + "reason": "HTTP listen 주소가 로컬 테스트 전용인지 판별해 보안 규칙에 재사용한다." + }, + "1410": { + "name": "spooledBuildRecord", + "qualified_name": "workflow.spooledBuildRecord", + "kind": "class", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 20, + "intent": "let the build transaction stream parsed input from disk instead of holding all files in memory.", + "reason": "let the build transaction stream parsed input from disk instead of holding all files in memory." + }, + "1411": { + "name": "buildSpool", + "qualified_name": "workflow.buildSpool", + "kind": "class", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 34, + "intent": "decouple parsing from the build transaction so the DB tx only opens once parsing succeeds.", + "reason": "decouple parsing from the build transaction so the DB tx only opens once parsing succeeds." + }, + "1412": { + "name": "spooledUpdateRecord", + "qualified_name": "workflow.spooledUpdateRecord", + "kind": "class", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 43, + "intent": "stream incremental sync inputs from disk to bound peak memory.", + "reason": "stream incremental sync inputs from disk to bound peak memory." + }, + "1413": { + "name": "updateSpool", + "qualified_name": "workflow.updateSpool", + "kind": "class", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 50, + "intent": "capture the current file set, hashes, and force-reparse decisions before the update transaction begins.", + "reason": "capture the current file set, hashes, and force-reparse decisions before the update transaction begins." + }, + "1414": { + "name": "writeRecord", + "qualified_name": "workflow.buildSpool.writeRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 63, + "intent": "persist parsed input for later transactional replay without holding it in memory.", + "reason": "persist parsed input for later transactional replay without holding it in memory." + }, + "1415": { + "name": "readRecord", + "qualified_name": "workflow.buildSpool.readRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 83, + "intent": "stream parsed input back into the build transaction one file at a time.", + "reason": "stream parsed input back into the build transaction one file at a time." + }, + "1416": { + "name": "edgeBatchSource", + "qualified_name": "workflow.buildSpool.edgeBatchSource", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 102, + "intent": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory.", + "reason": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory." + }, + "1417": { + "name": "cleanup", + "qualified_name": "workflow.buildSpool.cleanup", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 131, + "intent": "reclaim spool disk space whether the build succeeded or failed.", + "reason": "reclaim spool disk space whether the build succeeded or failed." + }, + "1418": { + "name": "writeRecord", + "qualified_name": "workflow.updateSpool.writeRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 143, + "intent": "persist update inputs for transactional replay without holding all batches in memory.", + "reason": "persist update inputs for transactional replay without holding all batches in memory." + }, + "1419": { + "name": "readRecord", + "qualified_name": "workflow.updateSpool.readRecord", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 163, + "intent": "stream update inputs back into the update transaction in batches.", + "reason": "stream update inputs back into the update transaction in batches." + }, + "142": { + "name": "HandleHealth", + "qualified_name": "server.HandleHealth", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 236, + "intent": "가장 가벼운 liveness probe로 프로세스 응답 가능 여부만 반환한다.", + "reason": "가장 가벼운 liveness probe로 프로세스 응답 가능 여부만 반환한다." + }, + "1420": { + "name": "cleanup", + "qualified_name": "workflow.updateSpool.cleanup", + "kind": "function", + "file_path": "internal/app/ingest/workflow/spool.go", + "namespace": "ccg", + "start_line": 183, + "intent": "reclaim spool disk space whether the update succeeded or failed.", + "reason": "reclaim spool disk space whether the update succeeded or failed." + }, + "1422": { + "name": "unresolvedIndexVersion", + "qualified_name": "workflow.Service.unresolvedIndexVersion", + "kind": "function", + "file_path": "internal/app/ingest/workflow/unresolved_version.go", + "namespace": "ccg", + "start_line": 17, + "intent": "prevent semi-naive replay from consuming unresolved candidates produced by incompatible parser/query or resolution behavior.", + "reason": "prevent semi-naive replay from consuming unresolved candidates produced by incompatible parser/query or resolution behavior." + }, + "1424": { + "name": "Update", + "qualified_name": "workflow.Service.Update", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 24, + "intent": "centralize file collection, include path, parse limit, and search policy for update callers", + "reason": "centralize file collection, include path, parse limit, and search policy for update callers" + }, + "1425": { + "name": "updateOutcome", + "qualified_name": "workflow.updateOutcome", + "kind": "class", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 92, + "intent": "carry the transaction-scoped update decision out to the orchestration layer without exposing a public result type.", + "reason": "carry the transaction-scoped update decision out to the orchestration layer without exposing a public result type." + }, + "1426": { + "name": "buildForUpdate", + "qualified_name": "workflow.Service.buildForUpdate", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 100, + "intent": "use the faster full-build write path for new packages without changing the Update result contract.", + "reason": "use the faster full-build write path for new packages without changing the Update result contract." + }, + "1427": { + "name": "canBuildForUpdate", + "qualified_name": "workflow.Service.canBuildForUpdate", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 112, + "intent": "prevent partial non-replacing updates from deleting graph data outside their include paths.", + "reason": "prevent partial non-replacing updates from deleting graph data outside their include paths." + }, + "1428": { + "name": "classifyUpdateSnapshot", + "qualified_name": "workflow.classifyUpdateSnapshot", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 118, + "intent": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", + "reason": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path." + }, + "1429": { + "name": "withUpdateTx", + "qualified_name": "workflow.Service.withUpdateTx", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 141, + "intent": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate.", + "reason": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate." + }, + "143": { + "name": "ReadyHandler", + "qualified_name": "server.ReadyHandler", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 252, + "intent": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다.", + "reason": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다." + }, + "1430": { + "name": "prepareUpdateSpool", + "qualified_name": "workflow.Service.prepareUpdateSpool", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 149, + "intent": "capture the current update input set and file hashes before transactional incremental sync begins.", + "reason": "capture the current update input set and file hashes before transactional incremental sync begins." + }, + "1431": { + "name": "applyUpdateSpoolInTx", + "qualified_name": "workflow.Service.applyUpdateSpoolInTx", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 252, + "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", + "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved." + }, + "1432": { + "name": "addedUpdateFiles", + "qualified_name": "workflow.addedUpdateFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 370, + "intent": "seed semi-naive unresolved lookup from newly introduced source files only.", + "reason": "seed semi-naive unresolved lookup from newly introduced source files only." + }, + "1433": { + "name": "replayUnresolvedEdgesForAddedFiles", + "qualified_name": "workflow.replayUnresolvedEdgesForAddedFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 384, + "intent": "replace graph-wide reparsing with reverse-index-driven edge reconciliation for new packages.", + "reason": "replace graph-wide reparsing with reverse-index-driven edge reconciliation for new packages." + }, + "1434": { + "name": "updateGraphWithoutTx", + "qualified_name": "workflow.Service.updateGraphWithoutTx", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 446, + "intent": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", + "reason": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory." + }, + "1435": { + "name": "newUpdateSpoolBatchSource", + "qualified_name": "workflow.newUpdateSpoolBatchSource", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 544, + "intent": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", + "reason": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory." + }, + "1436": { + "name": "affectedUpdateFiles", + "qualified_name": "workflow.affectedUpdateFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 570, + "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", + "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update." + }, + "1437": { + "name": "existingFilesMissingFromSet", + "qualified_name": "workflow.existingFilesMissingFromSet", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 584, + "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", + "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown." + }, + "1438": { + "name": "affectedNodeIDsForUpdate", + "qualified_name": "workflow.affectedNodeIDsForUpdate", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 600, + "intent": "merge previously stored node IDs with newly created ones so the search index sees both removals and additions.", + "reason": "merge previously stored node IDs with newly created ones so the search index sees both removals and additions." + }, + "1439": { + "name": "currentNodeIDsForFiles", + "qualified_name": "workflow.currentNodeIDsForFiles", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 633, + "intent": "avoid SQL parameter limits while collecting node IDs that need search index refresh.", + "reason": "avoid SQL parameter limits while collecting node IDs that need search index refresh." + }, + "144": { + "name": "statusResponse", + "qualified_name": "server.statusResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 275, + "intent": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", + "reason": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다." + }, + "1440": { + "name": "syncIncrementalBatch", + "qualified_name": "workflow.syncIncrementalBatch", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 656, + "intent": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes.", + "reason": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes." + }, + "1441": { + "name": "addSyncStats", + "qualified_name": "workflow.addSyncStats", + "kind": "function", + "file_path": "internal/app/ingest/workflow/update.go", + "namespace": "ccg", + "start_line": 670, + "intent": "let the update loop aggregate per-batch results without each call site touching every field.", + "reason": "let the update loop aggregate per-batch results without each call site touching every field." + }, + "1443": { + "name": "NormalizeBranchRef", + "qualified_name": "reposync.NormalizeBranchRef", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 13, + "intent": "reject tags and other Git refs before repository sync admission.", + "reason": "reject tags and other Git refs before repository sync admission." + }, + "1444": { + "name": "ExtractNamespace", + "qualified_name": "reposync.ExtractNamespace", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 20, + "intent": "preserve repository-backed namespace compatibility while removing owner segments.", + "reason": "preserve repository-backed namespace compatibility while removing owner segments." + }, + "1445": { + "name": "allowRule", + "qualified_name": "reposync.allowRule", + "kind": "class", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 30, + "intent": "represent a single Atlantis-style repo pattern in a form cheap to evaluate per webhook.", + "reason": "represent a single Atlantis-style repo pattern in a form cheap to evaluate per webhook." + }, + "1446": { + "name": "RepoRule", + "qualified_name": "reposync.RepoRule", + "kind": "class", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 39, + "intent": "expose a stable shape for CLI/YAML config without leaking the internal compiled rule layout.", + "reason": "expose a stable shape for CLI/YAML config without leaking the internal compiled rule layout." + }, + "1447": { + "name": "repoFilterRule", + "qualified_name": "reposync.repoFilterRule", + "kind": "class", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 46, + "intent": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local.", + "reason": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local." + }, + "1448": { + "name": "RepoFilter", + "qualified_name": "reposync.RepoFilter", + "kind": "class", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 53, + "intent": "provide a single matcher whose result depends on rule declaration order, where later matching rules override earlier ones.", + "reason": "provide a single matcher whose result depends on rule declaration order, where later matching rules override earlier ones." + }, + "145": { + "name": "StatusHandler", + "qualified_name": "server.StatusHandler", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 284, + "intent": "운영 진단용 상태를 종합해 HTTP 상태 코드와 JSON payload로 노출한다.", + "reason": "운영 진단용 상태를 종합해 HTTP 상태 코드와 JSON payload로 노출한다." + }, + "1450": { + "name": "NewRepoFilterFromRules", + "qualified_name": "reposync.NewRepoFilterFromRules", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 73, + "intent": "centralize Atlantis-style repo filtering so webhook dispatch can make one consistent allow decision.", + "reason": "centralize Atlantis-style repo filtering so webhook dispatch can make one consistent allow decision." + }, + "1451": { + "name": "IsAllowed", + "qualified_name": "reposync.RepoFilter.IsAllowed", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 98, + "intent": "let callers gate repository-level sync before looking at branch-specific restrictions.", + "reason": "let callers gate repository-level sync before looking at branch-specific restrictions." + }, + "1452": { + "name": "IsAllowedRef", + "qualified_name": "reposync.RepoFilter.IsAllowedRef", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 116, + "intent": "reject non-branch webhook refs before they can enter the sync pipeline.", + "reason": "reject non-branch webhook refs before they can enter the sync pipeline." + }, + "1453": { + "name": "IsAllowedBranch", + "qualified_name": "reposync.RepoFilter.IsAllowedBranch", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 129, + "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", + "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply." + }, + "1454": { + "name": "matchBranchPatterns", + "qualified_name": "reposync.matchBranchPatterns", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 153, + "intent": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites.", + "reason": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites." + }, + "1455": { + "name": "ParseRepoRule", + "qualified_name": "reposync.ParseRepoRule", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 166, + "intent": "preserve compact CLI config while still supporting per-repository branch restrictions.", + "reason": "preserve compact CLI config while still supporting per-repository branch restrictions." + }, + "1456": { + "name": "AllowRuleOwners", + "qualified_name": "reposync.AllowRuleOwners", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 178, + "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", + "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists." + }, + "1457": { + "name": "AllowRulesSpanMultipleOwners", + "qualified_name": "reposync.AllowRulesSpanMultipleOwners", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 201, + "intent": "identify configurations that can collide under the current repo-name namespace strategy.", + "reason": "identify configurations that can collide under the current repo-name namespace strategy." + }, + "1458": { + "name": "ValidateRepoNameNamespaceRules", + "qualified_name": "reposync.ValidateRepoNameNamespaceRules", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 209, + "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", + "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state." + }, + "1459": { + "name": "match", + "qualified_name": "reposync.allowRule.match", + "kind": "function", + "file_path": "internal/app/reposync/admission.go", + "namespace": "ccg", + "start_line": 218, + "intent": "apply one compiled allow or deny pattern to a repository full name during filter evaluation.", + "reason": "apply one compiled allow or deny pattern to a repository full name during filter evaluation." + }, + "146": { + "name": "WebhookBlockingReadyCheck", + "qualified_name": "server.WebhookBlockingReadyCheck", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 320, + "intent": "readiness 판단에서 웹훅 큐가 트래픽 차단 상태인지 빠르게 판정한다.", + "reason": "readiness 판단에서 웹훅 큐가 트래픽 차단 상태인지 빠르게 판정한다." + }, + "1461": { + "name": "ResolveCloneURL", + "qualified_name": "reposync.ResolveCloneURL", + "kind": "function", + "file_path": "internal/app/reposync/cloneurl.go", + "namespace": "ccg", + "start_line": 13, + "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", + "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed." + }, + "1462": { + "name": "normalizeRepoPath", + "qualified_name": "reposync.normalizeRepoPath", + "kind": "function", + "file_path": "internal/app/reposync/cloneurl.go", + "namespace": "ccg", + "start_line": 47, + "intent": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL.", + "reason": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL." + }, + "1463": { + "name": "buildCloneURL", + "qualified_name": "reposync.buildCloneURL", + "kind": "function", + "file_path": "internal/app/reposync/cloneurl.go", + "namespace": "ccg", + "start_line": 69, + "intent": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", + "reason": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data." + }, + "1464": { + "name": "parseCloneBaseURL", + "qualified_name": "reposync.parseCloneBaseURL", + "kind": "function", + "file_path": "internal/app/reposync/cloneurl.go", + "namespace": "ccg", + "start_line": 84, + "intent": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", + "reason": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets." + }, + "1465": { + "name": "internal/app/reposync/ports.go", + "qualified_name": "internal/app/reposync/ports.go", + "kind": "file", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 1, + "intent": "carry only trusted admission output into the checkout adapter.", + "reason": "carry only trusted admission output into the checkout adapter." + }, + "1466": { + "name": "CheckoutRequest", + "qualified_name": "reposync.CheckoutRequest", + "kind": "class", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 7, + "intent": "carry only trusted admission output into the checkout adapter.", + "reason": "carry only trusted admission output into the checkout adapter." + }, + "1467": { + "name": "Checkout", + "qualified_name": "reposync.Checkout", + "kind": "type", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 11, + "intent": "isolate checkout locking and Git implementation from sync ordering policy.", + "reason": "isolate checkout locking and Git implementation from sync ordering policy." + }, + "1468": { + "name": "BuildScope", + "qualified_name": "reposync.BuildScope", + "kind": "class", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 17, + "intent": "carry include and exclude configuration together so every webhook update uses one coherent build scope.", + "reason": "carry include and exclude configuration together so every webhook update uses one coherent build scope." + }, + "1469": { + "name": "BuildScopeLoader", + "qualified_name": "reposync.BuildScopeLoader", + "kind": "type", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 24, + "intent": "separate repository config file parsing from repository sync orchestration.", + "reason": "separate repository config file parsing from repository sync orchestration." + }, + "147": { + "name": "WebhookStatsBlockingReady", + "qualified_name": "server.WebhookStatsBlockingReady", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 330, + "intent": "큐 포화나 장시간 지연이 readiness 실패 조건인지 공통 규칙으로 판단한다.", + "reason": "큐 포화나 장시간 지연이 readiness 실패 조건인지 공통 규칙으로 판단한다." + }, + "1470": { + "name": "GraphRequest", + "qualified_name": "reposync.GraphRequest", + "kind": "class", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 30, + "intent": "preserve namespace, source scope, replace limits, and readability policy across the app boundary.", + "reason": "preserve namespace, source scope, replace limits, and readability policy across the app boundary." + }, + "1471": { + "name": "UpdateStats", + "qualified_name": "reposync.UpdateStats", + "kind": "class", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 40, + "intent": "report only update counts needed by repository sync observability.", + "reason": "report only update counts needed by repository sync observability." + }, + "1472": { + "name": "GraphUpdater", + "qualified_name": "reposync.GraphUpdater", + "kind": "type", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 44, + "intent": "adapt repository sync to the ingest application without importing workflow types.", + "reason": "adapt repository sync to the ingest application without importing workflow types." + }, + "1473": { + "name": "CacheInvalidator", + "qualified_name": "reposync.CacheInvalidator", + "kind": "type", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 50, + "intent": "keep derived query cache invalidation after successful repository graph commit.", + "reason": "keep derived query cache invalidation after successful repository graph commit." + }, + "1475": { + "name": "Invalidate", + "qualified_name": "reposync.CacheInvalidatorFunc.Invalidate", + "kind": "function", + "file_path": "internal/app/reposync/ports.go", + "namespace": "ccg", + "start_line": 58, + "intent": "invoke the configured cache invalidation only when one exists.", + "reason": "invoke the configured cache invalidation only when one exists." + }, + "1477": { + "name": "SyncHandlerFunc", + "qualified_name": "reposync.SyncHandlerFunc", + "kind": "type", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 24, + "intent": "provide the queue-to-service invocation contract without transport ownership.", + "reason": "provide the queue-to-service invocation contract without transport ownership." + }, + "1478": { + "name": "Observability", + "qualified_name": "reposync.Observability", + "kind": "type", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 28, + "intent": "allow tracing adapters to enrich contexts and logs while queue behavior remains infrastructure-free.", + "reason": "allow tracing adapters to enrich contexts and logs while queue behavior remains infrastructure-free." + }, + "1479": { + "name": "noopObservability", + "qualified_name": "reposync.noopObservability", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 34, + "intent": "preserve queue behavior when no observability adapter is configured.", + "reason": "preserve queue behavior when no observability adapter is configured." + }, + "148": { + "name": "WebhookStatsDegraded", + "qualified_name": "server.WebhookStatsDegraded", + "kind": "function", + "file_path": "internal/adapters/inbound/http/serve.go", + "namespace": "ccg", + "start_line": 347, + "intent": "최근 성공보다 최신 실패가 남아 있는 큐 상태를 degraded로 분류한다.", + "reason": "최근 성공보다 최신 실패가 남아 있는 큐 상태를 degraded로 분류한다." + }, + "1481": { + "name": "LogArgs", + "qualified_name": "reposync.noopObservability.LogArgs", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 42, + "intent": "contribute no structured trace fields when observability is disabled.", + "reason": "contribute no structured trace fields when observability is disabled." + }, + "1482": { + "name": "nonRetryableError", + "qualified_name": "reposync.nonRetryableError", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 45, + "intent": "mark sync failures that should stop retry backoff immediately.", + "reason": "mark sync failures that should stop retry backoff immediately." + }, + "1483": { + "name": "Error", + "qualified_name": "reposync.nonRetryableError.Error", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 50, + "intent": "expose the wrapped failure message so non-retryable errors print like the underlying error.", + "reason": "expose the wrapped failure message so non-retryable errors print like the underlying error." + }, + "1485": { + "name": "NonRetryable", + "qualified_name": "reposync.NonRetryable", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 60, + "intent": "wrap permanent sync failures so queue retry logic can short-circuit them.", + "reason": "wrap permanent sync failures so queue retry logic can short-circuit them." + }, + "1486": { + "name": "IsNonRetryable", + "qualified_name": "reposync.IsNonRetryable", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 71, + "intent": "let retry logic stop early when a failure is known to be permanent for the current payload.", + "reason": "let retry logic stop early when a failure is known to be permanent for the current payload." + }, + "1487": { + "name": "RetryConfig", + "qualified_name": "reposync.RetryConfig", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 78, + "intent": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", + "reason": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote." + }, + "1488": { + "name": "defaultRetryConfig", + "qualified_name": "reposync.defaultRetryConfig", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 88, + "intent": "provide conservative retry defaults for production webhook processing.", + "reason": "provide conservative retry defaults for production webhook processing." + }, + "1489": { + "name": "syncPayload", + "qualified_name": "reposync.syncPayload", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 97, + "intent": "capture the most recent sync request data per repository while it waits in the queue.", + "reason": "capture the most recent sync request data per repository while it waits in the queue." + }, + "1490": { + "name": "RepoStats", + "qualified_name": "reposync.RepoStats", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 105, + "intent": "expose per-repository queue state so operators can inspect backlog and failure hotspots.", + "reason": "expose per-repository queue state so operators can inspect backlog and failure hotspots." + }, + "1491": { + "name": "SyncQueue", + "qualified_name": "reposync.SyncQueue", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 118, + "intent": "coordinate deduplicated per-repository sync execution across a worker pool.", + "reason": "coordinate deduplicated per-repository sync execution across a worker pool." + }, + "1492": { + "name": "NewSyncQueue", + "qualified_name": "reposync.NewSyncQueue", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 149, + "intent": "provide the smallest constructor for production webhook dispatch.", + "reason": "provide the smallest constructor for production webhook dispatch." + }, + "1493": { + "name": "NewSyncQueueWithContext", + "qualified_name": "reposync.NewSyncQueueWithContext", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 157, + "intent": "allow server shutdown to cancel retries and worker waits cleanly.", + "reason": "allow server shutdown to cancel retries and worker waits cleanly." + }, + "1494": { + "name": "NewSyncQueueWithOptions", + "qualified_name": "reposync.NewSyncQueueWithOptions", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 165, + "intent": "expose backoff customization without forcing every caller to build a full queue config.", + "reason": "expose backoff customization without forcing every caller to build a full queue config." + }, + "1495": { + "name": "NewSyncQueueWithConfig", + "qualified_name": "reposync.NewSyncQueueWithConfig", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 174, + "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", + "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently." + }, + "1496": { + "name": "Add", + "qualified_name": "reposync.SyncQueue.Add", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 220, + "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", + "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data." + }, + "1497": { + "name": "Shutdown", + "qualified_name": "reposync.SyncQueue.Shutdown", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 262, + "intent": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", + "reason": "give the server a bounded, graceful shutdown path for in-flight webhook sync." + }, + "1498": { + "name": "Stats", + "qualified_name": "reposync.SyncQueue.Stats", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 291, + "intent": "expose enough queue state to diagnose backlog, failures, and hot repositories.", + "reason": "expose enough queue state to diagnose backlog, failures, and hot repositories." + }, + "1499": { + "name": "buildRecentReposLocked", + "qualified_name": "reposync.SyncQueue.buildRecentReposLocked", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 314, + "intent": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue.", + "reason": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue." + }, + "1500": { + "name": "recentRepoStatsLocked", + "qualified_name": "reposync.SyncQueue.recentRepoStatsLocked", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 359, + "intent": "merge queued payload state with historical success and failure data for one repository summary.", + "reason": "merge queued payload state with historical success and failure data for one repository summary." + }, + "1501": { + "name": "oldestAgeLocked", + "qualified_name": "reposync.SyncQueue.oldestAgeLocked", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 392, + "intent": "surface the oldest outstanding queue age so operators can detect stuck work.", + "reason": "surface the oldest outstanding queue age so operators can detect stuck work." + }, + "1502": { + "name": "worker", + "qualified_name": "reposync.SyncQueue.worker", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 407, + "intent": "run the main worker loop that drains deduplicated repository work items.", + "reason": "run the main worker loop that drains deduplicated repository work items." + }, + "1503": { + "name": "safeHandle", + "qualified_name": "reposync.SyncQueue.safeHandle", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 430, + "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", + "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever." + }, + "1504": { + "name": "recordFailure", + "qualified_name": "reposync.SyncQueue.recordFailure", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 472, + "intent": "update queue-level and per-repository failure tracking after a terminal sync error.", + "reason": "update queue-level and per-repository failure tracking after a terminal sync error." + }, + "1505": { + "name": "recordSuccess", + "qualified_name": "reposync.SyncQueue.recordSuccess", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 485, + "intent": "update the latest successful sync timestamps after a repository finishes cleanly.", + "reason": "update the latest successful sync timestamps after a repository finishes cleanly." + }, + "1506": { + "name": "upsertRepoStatLocked", + "qualified_name": "reposync.SyncQueue.upsertRepoStatLocked", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 496, + "intent": "maintain a bounded MRU view of repository stats without unbounded growth.", + "reason": "maintain a bounded MRU view of repository stats without unbounded growth." + }, + "1507": { + "name": "tryHandle", + "qualified_name": "reposync.SyncQueue.tryHandle", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 523, + "intent": "isolate handler panics and merged cancellation logic around one sync attempt.", + "reason": "isolate handler panics and merged cancellation logic around one sync attempt." + }, + "1508": { + "name": "get", + "qualified_name": "reposync.SyncQueue.get", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 538, + "intent": "block workers until the next deduplicated repository payload is ready for processing.", + "reason": "block workers until the next deduplicated repository payload is ready for processing." + }, + "1509": { + "name": "done", + "qualified_name": "reposync.SyncQueue.done", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 561, + "intent": "requeue repositories that changed during processing or release payload state when work is complete.", + "reason": "requeue repositories that changed during processing or release payload state when work is complete." + }, + "1510": { + "name": "repoStatEntry", + "qualified_name": "reposync.repoStatEntry", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 580, + "intent": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map.", + "reason": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map." + }, + "1511": { + "name": "SyncQueueStats", + "qualified_name": "reposync.SyncQueueStats", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 588, + "intent": "summarize queue-wide health and recent repository activity for observability.", + "reason": "summarize queue-wide health and recent repository activity for observability." + }, + "1512": { + "name": "QueueConfig", + "qualified_name": "reposync.QueueConfig", + "kind": "class", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 606, + "intent": "configure queue retry policy and memory bounds when constructing a SyncQueue.", + "reason": "configure queue retry policy and memory bounds when constructing a SyncQueue." + }, + "1513": { + "name": "recentRepoActivityTime", + "qualified_name": "reposync.recentRepoActivityTime", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 614, + "intent": "derive a comparable activity timestamp for sorting repository summaries.", + "reason": "derive a comparable activity timestamp for sorting repository summaries." + }, + "1514": { + "name": "mergeContexts", + "qualified_name": "reposync.mergeContexts", + "kind": "function", + "file_path": "internal/app/reposync/queue.go", + "namespace": "ccg", + "start_line": 629, + "intent": "cancel a sync attempt when either the queue lifecycle or the payload-specific context is done.", + "reason": "cancel a sync attempt when either the queue lifecycle or the payload-specific context is done." + }, + "1516": { + "name": "Service", + "qualified_name": "reposync.Service", + "kind": "class", + "file_path": "internal/app/reposync/service.go", + "namespace": "ccg", + "start_line": 12, + "intent": "coordinate admitted repository checkout, config loading, graph replacement, and cache invalidation.", + "reason": "coordinate admitted repository checkout, config loading, graph replacement, and cache invalidation." + }, + "1517": { + "name": "Sync", + "qualified_name": "reposync.Service.Sync", + "kind": "function", + "file_path": "internal/app/reposync/service.go", + "namespace": "ccg", + "start_line": 27, + "intent": "make repository synchronization ordering reusable outside HTTP server composition.", + "reason": "make repository synchronization ordering reusable outside HTTP server composition." + }, + "1519": { + "name": "Maintenance", + "qualified_name": "document.Maintenance", + "kind": "type", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 15, + "intent": "let inbound orchestration trigger one complete search rebuild without receiving database/backend handles.", + "reason": "let inbound orchestration trigger one complete search rebuild without receiving database/backend handles." + }, + "152": { + "name": "Cache", + "qualified_name": "mcp.Cache", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 20, + "intent": "Reuses MCP read-tool responses in memory for frequently repeated queries.", + "reason": "Reuses MCP read-tool responses in memory for frequently repeated queries." + }, + "1520": { + "name": "BuildContent", + "qualified_name": "document.BuildContent", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 22, + "intent": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns.", + "reason": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns." + }, + "1521": { + "name": "BuildReasons", + "qualified_name": "document.BuildReasons", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 77, + "intent": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", + "reason": "index each reason a node exists as its own document, so writing one reason down never costs another its score." + }, + "1522": { + "name": "identifierSubtokens", + "qualified_name": "document.identifierSubtokens", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 117, + "intent": "improve inner-word recall without inflating term frequency for repeated identity tokens.", + "reason": "improve inner-word recall without inflating term frequency for repeated identity tokens." + }, + "1523": { + "name": "pathTokens", + "qualified_name": "document.pathTokens", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 134, + "intent": "make basename, extension, and human language names searchable.", + "reason": "make basename, extension, and human language names searchable." + }, + "1524": { + "name": "languageAlias", + "qualified_name": "document.languageAlias", + "kind": "function", + "file_path": "internal/app/search/document/document.go", + "namespace": "ccg", + "start_line": 156, + "intent": "preserve language-name recall for extension-only file paths.", + "reason": "preserve language-name recall for extension-only file paths." + }, + "1526": { + "name": "Match", + "qualified_name": "evidence.Match", + "kind": "type", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 25, + "intent": "let a reader see which part of a result the query actually touched.", + "reason": "let a reader see which part of a result the query actually touched." + }, + "1527": { + "name": "Result", + "qualified_name": "evidence.Result", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 35, + "intent": "carry a search hit together with the evidence that justifies showing it.", + "reason": "carry a search hit together with the evidence that justifies showing it." + }, + "1528": { + "name": "NodeRef", + "qualified_name": "evidence.NodeRef", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 55, + "intent": "key per-node intent evidence so it cannot leak onto another repository's node.", + "reason": "key per-node intent evidence so it cannot leak onto another repository's node." + }, + "1529": { + "name": "IntentHit", + "qualified_name": "evidence.IntentHit", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 63, + "intent": "carry the intent query's evidence into the list without the list depending on the intent packages.", + "reason": "carry the intent query's evidence into the list without the list depending on the intent packages." + }, + "1530": { + "name": "Coverage", + "qualified_name": "evidence.Coverage", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 88, + "intent": "let an empty answer say whether anyone ever recorded a reason to search.", + "reason": "let an empty answer say whether anyone ever recorded a reason to search." + }, + "1531": { + "name": "Known", + "qualified_name": "evidence.Coverage.Known", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 99, + "intent": "keep an unmeasured coverage from being reported as a measured zero.", + "reason": "keep an unmeasured coverage from being reported as a measured zero." + }, + "1532": { + "name": "File", + "qualified_name": "evidence.File", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 109, + "intent": "make the file, not the declaration, the thing a caller chooses between.", + "reason": "make the file, not the declaration, the thing a caller chooses between." + }, + "1533": { + "name": "HitCount", + "qualified_name": "evidence.File.HitCount", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 119, + "intent": "let a caller weigh a file before reading any of its hits.", + "reason": "let a caller weigh a file before reading any of its hits." + }, + "1534": { + "name": "List", + "qualified_name": "evidence.List", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 123, + "intent": "make \"nothing to show\" a readable answer rather than an empty array.", + "reason": "make \"nothing to show\" a readable answer rather than an empty array." + }, + "1535": { + "name": "Hits", + "qualified_name": "evidence.List.Hits", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 164, + "intent": "give renderers and measurements one sequence without losing the grouping.", + "reason": "give renderers and measurements one sequence without losing the grouping." + }, + "1536": { + "name": "Justified", + "qualified_name": "evidence.List.Justified", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 183, + "intent": "tell a page that answered something apart from one that merely has rows on it.", + "reason": "tell a page that answered something apart from one that merely has rows on it." + }, + "1537": { + "name": "Options", + "qualified_name": "evidence.Options", + "kind": "class", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 197, + "intent": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", + "reason": "keep the bounds a caller controls — page size, page position, strictness — in one argument." + }, + "1538": { + "name": "Build", + "qualified_name": "evidence.Build", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 252, + "intent": "give a reader or an agent a file list where every line states why it is there.", + "reason": "give a reader or an agent a file list where every line states why it is there." + }, + "1539": { + "name": "emptyNote", + "qualified_name": "evidence.emptyNote", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 315, + "intent": "name the cause of an empty answer, rather than guessing at a remedy for it.", + "reason": "name the cause of an empty answer, rather than guessing at a remedy for it." + }, + "154": { + "name": "Get", + "qualified_name": "mcp.Cache.Get", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 48, + "intent": "Returns only cached responses that are still within their validity period.", + "reason": "Returns only cached responses that are still within their validity period." + }, + "1540": { + "name": "matchedSignals", + "qualified_name": "evidence.matchedSignals", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 338, + "intent": "state a candidate's evidence in the same terms the ranker ordered it by.", + "reason": "state a candidate's evidence in the same terms the ranker ordered it by." + }, + "1541": { + "name": "reasonOverlaps", + "qualified_name": "evidence.reasonOverlaps", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 384, + "intent": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", + "reason": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable." + }, + "1542": { + "name": "groupByFile", + "qualified_name": "evidence.groupByFile", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 413, + "intent": "turn a ranked list of declarations into a ranked list of files to read.", + "reason": "turn a ranked list of declarations into a ranked list of files to read." + }, + "1543": { + "name": "page", + "qualified_name": "evidence.page", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 447, + "intent": "bound an answer by files, so paging through it never lands a reader mid-file.", + "reason": "bound an answer by files, so paging through it never lands a reader mid-file." + }, + "1544": { + "name": "pagePerNamespace", + "qualified_name": "evidence.pagePerNamespace", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 491, + "intent": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", + "reason": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works." + }, + "1545": { + "name": "groupByNamespace", + "qualified_name": "evidence.groupByNamespace", + "kind": "function", + "file_path": "internal/app/search/evidence/evidence.go", + "namespace": "ccg", + "start_line": 543, + "intent": "let each repository be paged through its own list without losing the shared ranking.", + "reason": "let each repository be paged through its own list without losing the shared ranking." + }, + "1547": { + "name": "Fields", + "qualified_name": "identtoken.Fields", + "kind": "function", + "file_path": "internal/app/search/identtoken/identtoken.go", + "namespace": "ccg", + "start_line": 17, + "intent": "expose original-case terms; lowercasing happens per consumer.", + "reason": "expose original-case terms; lowercasing happens per consumer." + }, + "1548": { + "name": "FieldsLower", + "qualified_name": "identtoken.FieldsLower", + "kind": "function", + "file_path": "internal/app/search/identtoken/identtoken.go", + "namespace": "ccg", + "start_line": 30, + "intent": "read a document the same way the query is read.", + "reason": "read a document the same way the query is read." + }, + "1549": { + "name": "Split", + "qualified_name": "identtoken.Split", + "kind": "function", + "file_path": "internal/app/search/identtoken/identtoken.go", + "namespace": "ccg", + "start_line": 46, + "intent": "normalize source identifiers into stable search-index tokens without language-specific dependencies.", + "reason": "normalize source identifiers into stable search-index tokens without language-specific dependencies." + }, + "155": { + "name": "Set", + "qualified_name": "mcp.Cache.Set", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 62, + "intent": "Stores read-tool results in the cache with the configured TTL.", + "reason": "Stores read-tool results in the cache with the configured TTL." + }, + "1550": { + "name": "isAlnum", + "qualified_name": "identtoken.isAlnum", + "kind": "function", + "file_path": "internal/app/search/identtoken/identtoken.go", + "namespace": "ccg", + "start_line": 79, + "intent": "keep identifier tokenization limited to Unicode letters and digits.", + "reason": "keep identifier tokenization limited to Unicode letters and digits." + }, + "1552": { + "name": "Searcher", + "qualified_name": "intent.Searcher", + "kind": "type", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 12, + "intent": "let search consume a bound intent-index implementation without a database handle.", + "reason": "let search consume a bound intent-index implementation without a database handle." + }, + "1553": { + "name": "Hit", + "qualified_name": "intent.Hit", + "kind": "class", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 19, + "intent": "carry the reason a declaration ranked, not only that it ranked.", + "reason": "carry the reason a declaration ranked, not only that it ranked." + }, + "1554": { + "name": "Term", + "qualified_name": "intent.Term", + "kind": "class", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 29, + "intent": "let a reader weigh a match by how common the word that earned it is.", + "reason": "let a reader weigh a match by how common the word that earned it is." + }, + "1555": { + "name": "Coverage", + "qualified_name": "intent.Coverage", + "kind": "class", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 45, + "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", + "reason": "let an answer say whether it came back empty because nobody wrote a reason down." + }, + "1556": { + "name": "Result", + "qualified_name": "intent.Result", + "kind": "class", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 53, + "intent": "keep the ranking and the evidence for it on one value, so neither can be reported without the other.", + "reason": "keep the ranking and the evidence for it on one value, so neither can be reported without the other." + }, + "1557": { + "name": "CanAnswer", + "qualified_name": "intent.Result.CanAnswer", + "kind": "function", + "file_path": "internal/app/search/intent/intent.go", + "namespace": "ccg", + "start_line": 77, + "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason." + }, + "1559": { + "name": "Doc", + "qualified_name": "intentrank.Doc", + "kind": "class", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 24, + "intent": "carry the exact indexed text into scoring so the score is computed over what was matched.", + "reason": "carry the exact indexed text into scoring so the score is computed over what was matched." + }, + "156": { + "name": "Flush", + "qualified_name": "mcp.Cache.Flush", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 74, + "intent": "Invalidates all cached read results after a graph or index update.", + "reason": "Invalidates all cached read results after a graph or index update." + }, + "1560": { + "name": "identity", + "qualified_name": "intentrank.Doc.identity", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 37, + "intent": "keep the fields that make up the tie-break named in one place.", + "reason": "keep the fields that make up the tie-break named in one place." + }, + "1561": { + "name": "Match", + "qualified_name": "intentrank.Match", + "kind": "class", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 54, + "intent": "say what earned a declaration its place, not only that it earned one.", + "reason": "say what earned a declaration its place, not only that it earned one." + }, + "1562": { + "name": "Term", + "qualified_name": "intentrank.Term", + "kind": "class", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 65, + "intent": "let a reader weigh a match by how common the word that earned it is.", + "reason": "let a reader weigh a match by how common the word that earned it is." + }, + "1563": { + "name": "Result", + "qualified_name": "intentrank.Result", + "kind": "class", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 72, + "intent": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", + "reason": "hand back what matched alongside what ranked, so a weak answer can be recognised as one." + }, + "1566": { + "name": "inverseDocumentFrequency", + "qualified_name": "intentrank.inverseDocumentFrequency", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 231, + "intent": "give a rare term more weight than a common one, which is the whole point of scoring here.", + "reason": "give a rare term more weight than a common one, which is the whole point of scoring here." + }, + "1567": { + "name": "saturate", + "qualified_name": "intentrank.saturate", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 239, + "intent": "stop a long or repetitive reason from outranking a short exact one.", + "reason": "stop a long or repetitive reason from outranking a short exact one." + }, + "1569": { + "name": "parseGroups", + "qualified_name": "intentrank.parseGroups", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 268, + "intent": "score the same terms the index was asked to match.", + "reason": "score the same terms the index was asked to match." + }, + "157": { + "name": "Close", + "qualified_name": "mcp.Cache.Close", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 84, + "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", + "reason": "Safely stops the cleanup goroutine when the cache is no longer used." + }, + "1570": { + "name": "count", + "qualified_name": "intentrank.group.count", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 283, + "intent": "measure one term's presence the same way the index matched it.", + "reason": "measure one term's presence the same way the index matched it." + }, + "1571": { + "name": "countTerm", + "qualified_name": "intentrank.countTerm", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 308, + "intent": "keep the scorer and the index agreeing on what counts as a match.", + "reason": "keep the scorer and the index agreeing on what counts as a match." + }, + "1572": { + "name": "MatchesByPrefix", + "qualified_name": "intentrank.MatchesByPrefix", + "kind": "function", + "file_path": "internal/app/search/intentrank/rank.go", + "namespace": "ccg", + "start_line": 342, + "intent": "measure a term against the misfire that motivated the rule, not against a raw length.", + "reason": "measure a term against the misfire that motivated the rule, not against a raw length." + }, + "1574": { + "name": "Validate", + "qualified_name": "offsetrule.Validate", + "kind": "function", + "file_path": "internal/app/search/offsetrule/offsetrule.go", + "namespace": "ccg", + "start_line": 28, + "intent": "keep every paged entry point agreeing about which requests are askable.", + "reason": "keep every paged entry point agreeing about which requests are askable." + }, + "1576": { + "name": "IsFunctionWord", + "qualified_name": "queryterm.IsFunctionWord", + "kind": "function", + "file_path": "internal/app/search/queryterm/queryterm.go", + "namespace": "ccg", + "start_line": 39, + "intent": "let a caller judge one term without copying the list.", + "reason": "let a caller judge one term without copying the list." + }, + "1577": { + "name": "DropFunctionWords", + "qualified_name": "queryterm.DropFunctionWords", + "kind": "function", + "file_path": "internal/app/search/queryterm/queryterm.go", + "namespace": "ccg", + "start_line": 47, + "intent": "stop one unremarkable English word from deciding which results a query returns.", + "reason": "stop one unremarkable English word from deciding which results a query returns." + }, + "1578": { + "name": "internal/app/search/rank/evidence.go", + "qualified_name": "internal/app/search/rank/evidence.go", + "kind": "file", + "file_path": "internal/app/search/rank/evidence.go", + "namespace": "ccg", + "start_line": 1, + "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", + "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." + }, + "1579": { + "name": "Structural", + "qualified_name": "rank.Structural", + "kind": "class", + "file_path": "internal/app/search/rank/evidence.go", + "namespace": "ccg", + "start_line": 17, + "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", + "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." + }, + "158": { + "name": "evictOneLocked", + "qualified_name": "mcp.Cache.evictOneLocked", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 93, + "intent": "drop one cache entry to keep total size at or below the configured maximum.", + "reason": "drop one cache entry to keep total size at or below the configured maximum." + }, + "1580": { + "name": "Any", + "qualified_name": "rank.Structural.Any", + "kind": "function", + "file_path": "internal/app/search/rank/evidence.go", + "namespace": "ccg", + "start_line": 24, + "intent": "give callers one question to ask before deciding a candidate is unexplainable.", + "reason": "give callers one question to ask before deciding a candidate is unexplainable." + }, + "1581": { + "name": "Signals", + "qualified_name": "rank.Signals", + "kind": "function", + "file_path": "internal/app/search/rank/evidence.go", + "namespace": "ccg", + "start_line": 30, + "intent": "expose the ranker's per-candidate evidence to the code that builds a result list.", + "reason": "expose the ranker's per-candidate evidence to the code that builds a result list." + }, + "1583": { + "name": "FetchLimit", + "qualified_name": "rank.FetchLimit", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 76, + "intent": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result.", + "reason": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result." + }, + "1584": { + "name": "PoolWidth", + "qualified_name": "rank.PoolWidth", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 100, + "intent": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one.", + "reason": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one." + }, + "1585": { + "name": "Rerank", + "qualified_name": "rank.Rerank", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 125, + "intent": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break.", + "reason": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break." + }, + "1586": { + "name": "rerankWithRanks", + "qualified_name": "rank.rerankWithRanks", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 143, + "intent": "keep one ordering implementation for both single-list and multi-list retrieval.", + "reason": "keep one ordering implementation for both single-list and multi-list retrieval." + }, + "1587": { + "name": "RerankGroups", + "qualified_name": "rank.RerankGroups", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 217, + "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", + "reason": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first." + }, + "1588": { + "name": "compareIdentity", + "qualified_name": "rank.compareIdentity", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 240, + "intent": "break structural ties by node identity so the order never depends on which backend retrieved the pool.", + "reason": "break structural ties by node identity so the order never depends on which backend retrieved the pool." + }, + "1589": { + "name": "applyLimit", + "qualified_name": "rank.applyLimit", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 246, + "intent": "apply the caller's result bound after candidate reranking.", + "reason": "apply the caller's result bound after candidate reranking." + }, + "159": { + "name": "cleanup", + "qualified_name": "mcp.Cache.cleanup", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/cache.go", + "namespace": "ccg", + "start_line": 116, + "intent": "Periodically removes expired cache entries to limit memory usage.", + "reason": "Periodically removes expired cache entries to limit memory usage." + }, + "1590": { + "name": "nameSim", + "qualified_name": "rank.nameSim", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 274, + "intent": "score query tokens against simple and qualified node identifiers.", + "reason": "score query tokens against simple and qualified node identifiers." + }, + "1591": { + "name": "receiverSegment", + "qualified_name": "rank.receiverSegment", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 304, + "intent": "let a method be found by the type it belongs to, without turning a package name into an identifier match.", + "reason": "let a method be found by the type it belongs to, without turning a package name into an identifier match." + }, + "1592": { + "name": "scoreTargets", + "qualified_name": "rank.scoreTargets", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 324, + "intent": "score one query against several spellings of the same node.", + "reason": "score one query against several spellings of the same node." + }, + "1593": { + "name": "subsequenceScore", + "qualified_name": "rank.subsequenceScore", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 366, + "intent": "rank identifiers that contain the query by how prominently they contain it.", + "reason": "rank identifiers that contain the query by how prominently they contain it." + }, + "1594": { + "name": "matchBonus", + "qualified_name": "rank.matchBonus", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 425, + "intent": "make a match at a word boundary count for more than one reached by skipping runes.", + "reason": "make a match at a word boundary count for more than one reached by skipping runes." + }, + "1595": { + "name": "pathScore", + "qualified_name": "rank.pathScore", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 449, + "intent": "use matching path segments as a bounded secondary relevance signal.", + "reason": "use matching path segments as a bounded secondary relevance signal." + }, + "1597": { + "name": "newQueryTokens", + "qualified_name": "rank.newQueryTokens", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 502, + "intent": "read a query once and hand each scorer the cut it can use.", + "reason": "read a query once and hand each scorer the cut it can use." + }, + "1598": { + "name": "empty", + "qualified_name": "rank.queryTokens.empty", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 508, + "intent": "give callers one question to ask before scoring a candidate.", + "reason": "give callers one question to ask before scoring a candidate." + }, + "1599": { + "name": "meaningfulPart", + "qualified_name": "rank.queryTokens.meaningfulPart", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 550, + "intent": "stop a single shared character from standing as a candidate's only evidence.", + "reason": "stop a single shared character from standing as a candidate's only evidence." + }, + "1600": { + "name": "tokenize", + "qualified_name": "rank.tokenize", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 566, + "intent": "normalize free-text search input into comparable Unicode tokens.", + "reason": "normalize free-text search input into comparable Unicode tokens." + }, + "1601": { + "name": "isPathSep", + "qualified_name": "rank.isPathSep", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 573, + "intent": "recognize separators that delimit meaningful source-path segments.", + "reason": "recognize separators that delimit meaningful source-path segments." + }, + "1602": { + "name": "isAcronymTail", + "qualified_name": "rank.isAcronymTail", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 583, + "intent": "keep acronym-prefixed identifiers scoring like their mixed-case spelling.", + "reason": "keep acronym-prefixed identifiers scoring like their mixed-case spelling." + }, + "1603": { + "name": "isIdentSep", + "qualified_name": "rank.isIdentSep", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 589, + "intent": "recognize separators that delimit words inside a single identifier.", + "reason": "recognize separators that delimit words inside a single identifier." + }, + "1604": { + "name": "lastSegment", + "qualified_name": "rank.lastSegment", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 599, + "intent": "extract the leaf identifier from a qualified name without allocating intermediate segments.", + "reason": "extract the leaf identifier from a qualified name without allocating intermediate segments." + }, + "1605": { + "name": "rankBy", + "qualified_name": "rank.rankBy", + "kind": "function", + "file_path": "internal/app/search/rank/rank.go", + "namespace": "ccg", + "start_line": 621, + "intent": "convert a structural ordering to deterministic ordinal ranks so equally-scored candidates share one rank and fall through to the retrieval tie-break.", + "reason": "convert a structural ordering to deterministic ordinal ranks so equally-scored candidates share one rank and fall through to the retrieval tie-break." + }, + "1607": { + "name": "Searcher", + "qualified_name": "search.Searcher", + "kind": "type", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 28, + "intent": "keep the service on fetch-only ports so no backend or scoring package leaks in.", + "reason": "keep the service on fetch-only ports so no backend or scoring package leaks in." + }, + "1608": { + "name": "Params", + "qualified_name": "search.Params", + "kind": "class", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 35, + "intent": "give MCP and the CLI the same request shape so their answers stay comparable.", + "reason": "give MCP and the CLI the same request shape so their answers stay comparable." + }, + "1609": { + "name": "Service", + "qualified_name": "search.Service", + "kind": "class", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 49, + "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", + "reason": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter." + }, + "161": { + "name": "Parser", + "qualified_name": "mcp.Parser", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 24, + "intent": "Injects an abstract parser to combine language-specific parsing implementations on the server.", + "reason": "Injects an abstract parser to combine language-specific parsing implementations on the server." + }, + "1610": { + "name": "New", + "qualified_name": "search.New", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 55, + "intent": "keep construction trivial so composition roots stay declarative.", + "reason": "keep construction trivial so composition roots stay declarative." + }, + "1611": { + "name": "Search", + "qualified_name": "search.Service.Search", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 66, + "intent": "answer a search with the files that can justify their place, not the backend's raw order.", + "reason": "answer a search with the files that can justify their place, not the backend's raw order." + }, + "1612": { + "name": "SearchFederated", + "qualified_name": "search.Service.SearchFederated", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 99, + "intent": "answer one search across several repositories with per-item namespace labels.", + "reason": "answer one search across several repositories with per-item namespace labels." + }, + "1614": { + "name": "fetch", + "qualified_name": "search.Service.fetch", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 167, + "intent": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", + "reason": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for." + }, + "1616": { + "name": "orderPool", + "qualified_name": "search.orderPool", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 234, + "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", + "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches." + }, + "1617": { + "name": "orderGroupedPool", + "qualified_name": "search.orderGroupedPool", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 257, + "intent": "give federated paging the same fixed prefix a single repository's paging has.", + "reason": "give federated paging the same fixed prefix a single repository's paging has." + }, + "1618": { + "name": "keepPathPrefix", + "qualified_name": "search.keepPathPrefix", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 296, + "intent": "apply the caller's path filter without renumbering the pool the order was decided from.", + "reason": "apply the caller's path filter without renumbering the pool the order was decided from." + }, + "1619": { + "name": "coverageFromIntent", + "qualified_name": "search.coverageFromIntent", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 313, + "intent": "keep the intent port's types out of the answer the surfaces serialize.", + "reason": "keep the intent port's types out of the answer the surfaces serialize." + }, + "162": { + "name": "ChangeAnalyzer", + "qualified_name": "mcp.ChangeAnalyzer", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 31, + "intent": "inject a configured application change service without exposing Git or persistence implementations.", + "reason": "inject a configured application change service without exposing Git or persistence implementations." + }, + "1620": { + "name": "addCoverage", + "qualified_name": "search.addCoverage", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 322, + "intent": "make a federated answer's coverage cover every repository it searched.", + "reason": "make a federated answer's coverage cover every repository it searched." + }, + "1621": { + "name": "absorbIntent", + "qualified_name": "search.absorbIntent", + "kind": "function", + "file_path": "internal/app/search/service.go", + "namespace": "ccg", + "start_line": 336, + "intent": "let a recorded reason put a node on the page without letting it reshuffle the name matches.", + "reason": "let a recorded reason put a node on the page without letting it reshuffle the name matches." + }, + "1623": { + "name": "ResultItem", + "qualified_name": "wire.ResultItem", + "kind": "class", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 18, + "intent": "preserve a stable per-item DTO for search responses.", + "reason": "preserve a stable per-item DTO for search responses." + }, + "1624": { + "name": "FileGroup", + "qualified_name": "wire.FileGroup", + "kind": "class", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 49, + "intent": "let a caller choose between files, then read inside the one it chose.", + "reason": "let a caller choose between files, then read inside the one it chose." + }, + "1625": { + "name": "Response", + "qualified_name": "wire.Response", + "kind": "class", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 63, + "intent": "make a search answer self-describing, including when it is empty.", + "reason": "make a search answer self-describing, including when it is empty." + }, + "1626": { + "name": "Limits", + "qualified_name": "wire.Limits", + "kind": "class", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 98, + "intent": "let a caller tell a short answer from the first page of a long one.", + "reason": "let a caller tell a short answer from the first page of a long one." + }, + "1627": { + "name": "NextAction", + "qualified_name": "wire.NextAction", + "kind": "class", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 118, + "intent": "turn what a search withheld into a step the caller can actually take.", + "reason": "turn what a search withheld into a step the caller can actually take." + }, + "1628": { + "name": "NewResponse", + "qualified_name": "wire.NewResponse", + "kind": "function", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 132, + "intent": "keep one conversion so no two search surfaces can drift apart.", + "reason": "keep one conversion so no two search surfaces can drift apart." + }, + "1629": { + "name": "nextActions", + "qualified_name": "wire.nextActions", + "kind": "function", + "file_path": "internal/app/search/wire/wire.go", + "namespace": "ccg", + "start_line": 205, + "intent": "make the follow-up step obvious enough that an agent does not have to invent one.", + "reason": "make the follow-up step obvious enough that an agent does not have to invent one." + }, + "163": { + "name": "ImpactAnalyzer", + "qualified_name": "mcp.ImpactAnalyzer", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 40, + "intent": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", + "reason": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk." + }, + "1631": { + "name": "Builder", + "qualified_name": "wiki.Builder", + "kind": "class", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 24, + "intent": "derive a package/file/symbol presentation tree directly from graph nodes.", + "reason": "derive a package/file/symbol presentation tree directly from graph nodes." + }, + "1632": { + "name": "Build", + "qualified_name": "wiki.Builder.Build", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 36, + "intent": "generate a UI-oriented tree independent of community detection and PageIndex retrieval.", + "reason": "generate a UI-oriented tree independent of community detection and PageIndex retrieval." + }, + "1633": { + "name": "BuildTree", + "qualified_name": "wiki.Builder.BuildTree", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 56, + "intent": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated.", + "reason": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated." + }, + "1634": { + "name": "BuildSubtree", + "qualified_name": "wiki.Builder.BuildSubtree", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 113, + "intent": "support GitHub-style lazy Wiki navigation without synthesizing the full tree for every folder expansion.", + "reason": "support GitHub-style lazy Wiki navigation without synthesizing the full tree for every folder expansion." + }, + "1635": { + "name": "lazyBaseNode", + "qualified_name": "wiki.Builder.lazyBaseNode", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 140, + "intent": "build the selected lazy tree root without loading unrelated descendants.", + "reason": "build the selected lazy tree root without loading unrelated descendants." + }, + "1636": { + "name": "lazyStoredNode", + "qualified_name": "wiki.Builder.lazyStoredNode", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 162, + "intent": "load a stored package or file tree node with annotation summary and expandable state.", + "reason": "load a stored package or file tree node with annotation summary and expandable state." + }, + "1637": { + "name": "lazySymbolNode", + "qualified_name": "wiki.Builder.lazySymbolNode", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 188, + "intent": "load a stored symbol tree node by qualified name for direct lazy navigation.", + "reason": "load a stored symbol tree node by qualified name for direct lazy navigation." + }, + "1638": { + "name": "populateLazyChildren", + "qualified_name": "wiki.Builder.populateLazyChildren", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 204, + "intent": "populate a lazy tree node to the requested relative depth.", + "reason": "populate a lazy tree node to the requested relative depth." + }, + "1639": { + "name": "lazyChildren", + "qualified_name": "wiki.Builder.lazyChildren", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 224, + "intent": "resolve immediate children for one lazy Wiki tree node.", + "reason": "resolve immediate children for one lazy Wiki tree node." + }, + "164": { + "name": "FlowTracer", + "qualified_name": "mcp.FlowTracer", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 48, + "intent": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", + "reason": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal." + }, + "1640": { + "name": "folderChildren", + "qualified_name": "wiki.Builder.folderChildren", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 240, + "intent": "list immediate folder children while allowing package nodes to replace same-path synthetic folders.", + "reason": "list immediate folder children while allowing package nodes to replace same-path synthetic folders." + }, + "1641": { + "name": "packageChildren", + "qualified_name": "wiki.Builder.packageChildren", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 281, + "intent": "list direct files inside one package node.", + "reason": "list direct files inside one package node." + }, + "1642": { + "name": "fileChildren", + "qualified_name": "wiki.Builder.fileChildren", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 305, + "intent": "list symbols declared inside one file node.", + "reason": "list symbols declared inside one file node." + }, + "1643": { + "name": "loadPathNodes", + "qualified_name": "wiki.Builder.loadPathNodes", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 324, + "intent": "query package/file path candidates under a folder prefix without loading annotations.", + "reason": "query package/file path candidates under a folder prefix without loading annotations." + }, + "1644": { + "name": "materializeLazyEntries", + "qualified_name": "wiki.Builder.materializeLazyEntries", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 342, + "intent": "convert collected lazy child entries into annotated TreeNode DTOs.", + "reason": "convert collected lazy child entries into annotated TreeNode DTOs." + }, + "1645": { + "name": "treeNodeForModel", + "qualified_name": "wiki.Builder.treeNodeForModel", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 383, + "intent": "convert one graph node into the Wiki tree node shape used by full and lazy builders.", + "reason": "convert one graph node into the Wiki tree node shape used by full and lazy builders." + }, + "1646": { + "name": "loadAnnotations", + "qualified_name": "wiki.Builder.loadAnnotations", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 411, + "intent": "batch-load annotations for lazy tree nodes while preserving tag order.", + "reason": "batch-load annotations for lazy tree nodes while preserving tag order." + }, + "1647": { + "name": "hasPathDescendant", + "qualified_name": "wiki.Builder.hasPathDescendant", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 427, + "intent": "test whether a folder or root path has any descendant package or file node.", + "reason": "test whether a folder or root path has any descendant package or file node." + }, + "1648": { + "name": "hasDirectFile", + "qualified_name": "wiki.Builder.hasDirectFile", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 433, + "intent": "test whether a package node has direct file children.", + "reason": "test whether a package node has direct file children." + }, + "1649": { + "name": "hasSymbol", + "qualified_name": "wiki.Builder.hasSymbol", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 448, + "intent": "test whether a file node has symbol children.", + "reason": "test whether a file node has symbol children." + }, + "165": { + "name": "FlowBuilder", + "qualified_name": "mcp.FlowBuilder", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 55, + "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", + "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results." + }, + "1650": { + "name": "namespace", + "qualified_name": "wiki.Builder.namespace", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 454, + "intent": "resolve the namespace used for both DB reads and wiki-index output paths.", + "reason": "resolve the namespace used for both DB reads and wiki-index output paths." + }, + "1651": { + "name": "loadNodes", + "qualified_name": "wiki.Builder.loadNodes", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 466, + "intent": "load the graph node set needed for Wiki navigation and summaries.", + "reason": "load the graph node set needed for Wiki navigation and summaries." + }, + "1652": { + "name": "docPath", + "qualified_name": "wiki.Builder.docPath", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 501, + "intent": "convert a repository-relative source path to the generated Markdown doc path.", + "reason": "convert a repository-relative source path to the generated Markdown doc path." + }, + "1653": { + "name": "treeState", + "qualified_name": "wiki.treeState", + "kind": "class", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 514, + "intent": "hold mutable lookup maps while building the folder/package/file Wiki tree.", + "reason": "hold mutable lookup maps while building the folder/package/file Wiki tree." + }, + "1654": { + "name": "ensureFolder", + "qualified_name": "wiki.treeState.ensureFolder", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 522, + "intent": "create folder nodes for path segments that are not themselves packages.", + "reason": "create folder nodes for path segments that are not themselves packages." + }, + "1655": { + "name": "ensurePackage", + "qualified_name": "wiki.treeState.ensurePackage", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 543, + "intent": "ensure a package node exists under its containing folder.", + "reason": "ensure a package node exists under its containing folder." + }, + "1656": { + "name": "ensureFile", + "qualified_name": "wiki.treeState.ensureFile", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 572, + "intent": "create a file node under its package when available, otherwise under its directory folder.", + "reason": "create a file node under its package when available, otherwise under its directory folder." + }, + "1657": { + "name": "ensureFilePath", + "qualified_name": "wiki.treeState.ensureFilePath", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 577, + "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", + "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed." + }, + "1658": { + "name": "ensureFileWithSummary", + "qualified_name": "wiki.treeState.ensureFileWithSummary", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 582, + "intent": "deduplicate file tree nodes while preserving the first useful summary and doc path.", + "reason": "deduplicate file tree nodes while preserving the first useful summary and doc path." + }, + "1659": { + "name": "lazyEntry", + "qualified_name": "wiki.lazyEntry", + "kind": "class", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 616, + "intent": "hold one immediate child candidate while lazy tree nodes are materialized.", + "reason": "hold one immediate child candidate while lazy tree nodes are materialized." + }, + "166": { + "name": "QueryService", + "qualified_name": "mcp.QueryService", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 62, + "intent": "Simplifies handlers by abstracting standard graph queries into a single service interface.", + "reason": "Simplifies handlers by abstracting standard graph queries into a single service interface." + }, + "1661": { + "name": "isRootPackagePath", + "qualified_name": "wiki.isRootPackagePath", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 650, + "intent": "identify package nodes that represent the repository root rather than a sidebar child.", + "reason": "identify package nodes that represent the repository root rather than a sidebar child." + }, + "1662": { + "name": "nodeIDs", + "qualified_name": "wiki.nodeIDs", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 656, + "intent": "collect graph node IDs for batch annotation lookup.", + "reason": "collect graph node IDs for batch annotation lookup." + }, + "1663": { + "name": "symbolKindStrings", + "qualified_name": "wiki.symbolKindStrings", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 665, + "intent": "expose symbol node kinds as strings for GORM IN clauses.", + "reason": "expose symbol node kinds as strings for GORM IN clauses." + }, + "1664": { + "name": "symbolKinds", + "qualified_name": "wiki.symbolKinds", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 670, + "intent": "centralize the symbol kinds eligible for built-in Wiki navigation.", + "reason": "centralize the symbol kinds eligible for built-in Wiki navigation." + }, + "1665": { + "name": "nodeKinds", + "qualified_name": "wiki.nodeKinds", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 675, + "intent": "adapt legacy string kind sets into the repository's typed node-kind request.", + "reason": "adapt legacy string kind sets into the repository's typed node-kind request." + }, + "1666": { + "name": "lazyPathNodeKinds", + "qualified_name": "wiki.lazyPathNodeKinds", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 684, + "intent": "expose path-bearing node kinds that can imply folder and file tree entries.", + "reason": "expose path-bearing node kinds that can imply folder and file tree entries." + }, + "1667": { + "name": "isSymbolKind", + "qualified_name": "wiki.isSymbolKind", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 696, + "intent": "identify graph node kinds that should appear as symbols under a file in the Wiki tree.", + "reason": "identify graph node kinds that should appear as symbols under a file in the Wiki tree." + }, + "1668": { + "name": "summaryForNode", + "qualified_name": "wiki.summaryForNode", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 701, + "intent": "choose the summary text that makes a Wiki node useful for scanning and search.", + "reason": "choose the summary text that makes a Wiki node useful for scanning and search." + }, + "1669": { + "name": "detailsForNode", + "qualified_name": "wiki.detailsForNode", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 719, + "intent": "expose full structured annotation metadata for Wiki symbol detail views.", + "reason": "expose full structured annotation metadata for Wiki symbol detail views." + }, + "167": { + "name": "IncrementalSyncer", + "qualified_name": "mcp.IncrementalSyncer", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 83, + "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", + "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing." + }, + "1670": { + "name": "sortTree", + "qualified_name": "wiki.sortTree", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 743, + "intent": "keep Wiki tree output deterministic across builds.", + "reason": "keep Wiki tree output deterministic across builds." + }, + "1671": { + "name": "kindRank", + "qualified_name": "wiki.kindRank", + "kind": "function", + "file_path": "internal/app/wiki/builder.go", + "namespace": "ccg", + "start_line": 756, + "intent": "sort folders before packages, packages before files, and files before symbols.", + "reason": "sort folders before packages, packages before files, and files before symbols." + }, + "1673": { + "name": "TreeNode", + "qualified_name": "wiki.TreeNode", + "kind": "class", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 14, + "intent": "Wiki 탐색 트리에서 디렉터리, 패키지, 파일, 심볼을 동일 구조로 표현한다.", + "reason": "Wiki 탐색 트리에서 디렉터리, 패키지, 파일, 심볼을 동일 구조로 표현한다." + }, + "1674": { + "name": "NodeDetails", + "qualified_name": "wiki.NodeDetails", + "kind": "class", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 30, + "intent": "let presentation indexes expose symbol annotations without requiring a generated file doc.", + "reason": "let presentation indexes expose symbol annotations without requiring a generated file doc." + }, + "1675": { + "name": "AnnotationDetail", + "qualified_name": "wiki.AnnotationDetail", + "kind": "class", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 41, + "intent": "serialize annotation summary, context, and tags in a UI-friendly shape.", + "reason": "serialize annotation summary, context, and tags in a UI-friendly shape." + }, + "1676": { + "name": "DocTagDetail", + "qualified_name": "wiki.DocTagDetail", + "kind": "class", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 49, + "intent": "keep tag kind, type, name, and ordering available to browser renderers.", + "reason": "keep tag kind, type, name, and ordering available to browser renderers." + }, + "1677": { + "name": "DocTagDetailFromModel", + "qualified_name": "wiki.DocTagDetailFromModel", + "kind": "function", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 60, + "intent": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows.", + "reason": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows." + }, + "1679": { + "name": "SearchTextForAnnotation", + "qualified_name": "wiki.SearchTextForAnnotation", + "kind": "function", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 86, + "intent": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata.", + "reason": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata." + }, + "168": { + "name": "BuildToolsDeps", + "qualified_name": "mcp.BuildToolsDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 90, + "intent": "group only the dependencies required by parse, build, update, and postprocess tools.", + "reason": "group only the dependencies required by parse, build, update, and postprocess tools." + }, + "1680": { + "name": "SearchResult", + "qualified_name": "wiki.SearchResult", + "kind": "class", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 107, + "intent": "검색 UI나 MCP 응답에서 표시할 최소 결과 정보를 담는다.", + "reason": "검색 UI나 MCP 응답에서 표시할 최소 결과 정보를 담는다." + }, + "1681": { + "name": "Search", + "qualified_name": "wiki.Search", + "kind": "function", + "file_path": "internal/app/wiki/model.go", + "namespace": "ccg", + "start_line": 122, + "intent": "문서 인덱스 트리에서 제목, 요약, 구조화 annotation 기반 키워드 탐색을 제공한다.", + "reason": "문서 인덱스 트리에서 제목, 요약, 구조화 annotation 기반 키워드 탐색을 제공한다." + }, + "1685": { + "name": "GraphView", + "qualified_name": "wiki.GraphView", + "kind": "class", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 13, + "intent": "carry viewer graph facts without exposing database queries to HTTP handlers.", + "reason": "carry viewer graph facts without exposing database queries to HTTP handlers." + }, + "1686": { + "name": "GraphViewStage", + "qualified_name": "wiki.GraphViewStage", + "kind": "type", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 21, + "intent": "preserve stage-specific inbound error mapping without exposing database operations.", + "reason": "preserve stage-specific inbound error mapping without exposing database operations." + }, + "1688": { + "name": "Error", + "qualified_name": "wiki.GraphViewError.Error", + "kind": "function", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 38, + "intent": "satisfy error without leaking the application stage into the existing HTTP detail field.", + "reason": "satisfy error without leaking the application stage into the existing HTTP detail field." + }, + "1689": { + "name": "Unwrap", + "qualified_name": "wiki.GraphViewError.Unwrap", + "kind": "function", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 42, + "intent": "preserve errors.Is and errors.As behavior through graph-view stage classification.", + "reason": "preserve errors.Is and errors.As behavior through graph-view stage classification." + }, + "169": { + "name": "GraphToolsDeps", + "qualified_name": "mcp.GraphToolsDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 102, + "intent": "group only the dependencies required by graph and search read tools.", + "reason": "group only the dependencies required by graph and search read tools." + }, + "1690": { + "name": "Repository", + "qualified_name": "wiki.Repository", + "kind": "type", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 46, + "intent": "keep Wiki hierarchy and presentation policy independent of GORM query construction.", + "reason": "keep Wiki hierarchy and presentation policy independent of GORM query construction." + }, + "1691": { + "name": "IndexWriter", + "qualified_name": "wiki.IndexWriter", + "kind": "type", + "file_path": "internal/app/wiki/ports.go", + "namespace": "ccg", + "start_line": 61, + "intent": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", + "reason": "let Wiki build policy choose namespace and payload without owning filesystem implementation." + }, + "1693": { + "name": "internal/config/config.go", + "qualified_name": "internal/config/config.go", + "kind": "file", + "file_path": "internal/config/config.go", + "namespace": "ccg", + "start_line": 1, + "intent": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", + "reason": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다." + }, + "1694": { + "name": "MigrationsDir", + "qualified_name": "config.MigrationsDir", + "kind": "function", + "file_path": "internal/config/config.go", + "namespace": "ccg", + "start_line": 13, + "intent": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", + "reason": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다." + }, + "1695": { + "name": "RagIndexDir", + "qualified_name": "config.RagIndexDir", + "kind": "function", + "file_path": "internal/config/config.go", + "namespace": "ccg", + "start_line": 19, + "intent": "Wiki 호환 snapshot 출력 경로를 config helper로 재사용한다.", + "reason": "Wiki 호환 snapshot 출력 경로를 config helper로 재사용한다." + }, + "1696": { + "name": "RagDescription", + "qualified_name": "config.RagDescription", + "kind": "function", + "file_path": "internal/config/config.go", + "namespace": "ccg", + "start_line": 25, + "intent": "Wiki root summary에 포함할 프로젝트 설명 문자열을 config helper로 노출한다.", + "reason": "Wiki root summary에 포함할 프로젝트 설명 문자열을 config helper로 노출한다." + }, + "1698": { + "name": "ctxKey", + "qualified_name": "ctx.ctxKey", + "kind": "class", + "file_path": "internal/ctx/namespace.go", + "namespace": "ccg", + "start_line": 8, + "intent": "isolate the namespace value in the context map from any other package's keys.", + "reason": "isolate the namespace value in the context map from any other package's keys." + }, + "1699": { + "name": "Normalize", + "qualified_name": "ctx.Normalize", + "kind": "function", + "file_path": "internal/ctx/namespace.go", + "namespace": "ccg", + "start_line": 14, + "intent": "normalize namespace query parameter values so store and DB-backed search layers always observe a non-empty namespace string.", + "reason": "normalize namespace query parameter values so store and DB-backed search layers always observe a non-empty namespace string." + }, + "170": { + "name": "CrossRefLister", + "qualified_name": "mcp.CrossRefLister", + "kind": "type", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 116, + "intent": "let handlers enumerate repository-level dependencies without a store implementation dependency.", + "reason": "let handlers enumerate repository-level dependencies without a store implementation dependency." + }, + "1700": { + "name": "WithNamespace", + "qualified_name": "ctx.WithNamespace", + "kind": "function", + "file_path": "internal/ctx/namespace.go", + "namespace": "ccg", + "start_line": 23, + "intent": "호출자 시그니처 변경 없이 store 레이어까지 namespace를 전달한다.", + "reason": "호출자 시그니처 변경 없이 store 레이어까지 namespace를 전달한다." + }, + "1701": { + "name": "FromContext", + "qualified_name": "ctx.FromContext", + "kind": "function", + "file_path": "internal/ctx/namespace.go", + "namespace": "ccg", + "start_line": 30, + "intent": "store 내부에서 context로부터 namespace를 꺼내 쿼리 필터에 적용한다.", + "reason": "store 내부에서 context로부터 namespace를 꺼내 쿼리 필터에 적용한다." + }, + "1703": { + "name": "SQLDBPool", + "qualified_name": "db.SQLDBPool", + "kind": "type", + "file_path": "internal/db/db.go", + "namespace": "ccg", + "start_line": 18, + "intent": "abstract the pool configuration API so both real sql.DB handles and test doubles can share the same seam.", + "reason": "abstract the pool configuration API so both real sql.DB handles and test doubles can share the same seam." + }, + "1704": { + "name": "Open", + "qualified_name": "db.Open", + "kind": "function", + "file_path": "internal/db/db.go", + "namespace": "ccg", + "start_line": 30, + "intent": "centralize driver-specific GORM initialization and pool setup behind one entry point.", + "reason": "centralize driver-specific GORM initialization and pool setup behind one entry point." + }, + "1705": { + "name": "ConfigurePool", + "qualified_name": "db.ConfigurePool", + "kind": "function", + "file_path": "internal/db/db.go", + "namespace": "ccg", + "start_line": 74, + "intent": "apply connection-pool limits that match each database driver's concurrency model.", + "reason": "apply connection-pool limits that match each database driver's concurrency model." + }, + "1706": { + "name": "NewSearchBackend", + "qualified_name": "db.NewSearchBackend", + "kind": "function", + "file_path": "internal/db/db.go", + "namespace": "ccg", + "start_line": 92, + "intent": "select the full-text search backend implementation that matches the active database driver.", + "reason": "select the full-text search backend implementation that matches the active database driver." + }, + "1708": { + "name": "PostgresDSN", + "qualified_name": "dbtest.PostgresDSN", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 27, + "intent": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", + "reason": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package." + }, + "1709": { + "name": "IsolatedPostgresDSN", + "qualified_name": "dbtest.IsolatedPostgresDSN", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 37, + "intent": "let a test build its own tables without a concurrently running test seeing or dropping them.", + "reason": "let a test build its own tables without a concurrently running test seeing or dropping them." + }, + "171": { + "name": "AnalysisToolsDeps", + "qualified_name": "mcp.AnalysisToolsDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 124, + "intent": "group only configured application analyzers and their read-model port.", + "reason": "group only configured application analyzers and their read-model port." + }, + "1710": { + "name": "OpenIsolatedPostgres", + "qualified_name": "dbtest.OpenIsolatedPostgres", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 60, + "intent": "replace the per-package \"open postgres and wipe the shared schema\" helper with one safe entry point.", + "reason": "replace the per-package \"open postgres and wipe the shared schema\" helper with one safe entry point." + }, + "1711": { + "name": "postgresSchema", + "qualified_name": "dbtest.postgresSchema", + "kind": "class", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 83, + "intent": "model \"a schema that exists for as long as one test does\" as a value with an explicit end.", + "reason": "model \"a schema that exists for as long as one test does\" as a value with an explicit end." + }, + "1712": { + "name": "newPostgresSchema", + "qualified_name": "dbtest.newPostgresSchema", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 98, + "intent": "hand back a private, empty schema together with the means to remove it.", + "reason": "hand back a private, empty schema together with the means to remove it." + }, + "1713": { + "name": "requireTestDatabase", + "qualified_name": "dbtest.postgresSchema.requireTestDatabase", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 122, + "intent": "keep a misconfigured DSN from letting the suite create and drop schemas in real data.", + "reason": "keep a misconfigured DSN from letting the suite create and drop schemas in real data." + }, + "1714": { + "name": "dsn", + "qualified_name": "dbtest.postgresSchema.dsn", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 137, + "intent": "make the private schema apply to every connection a pool opens, not just the first.", + "reason": "make the private schema apply to every connection a pool opens, not just the first." + }, + "1715": { + "name": "drop", + "qualified_name": "dbtest.postgresSchema.drop", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 147, + "intent": "leave a concurrently running test's schema untouched while removing this one.", + "reason": "leave a concurrently running test's schema untouched while removing this one." + }, + "1716": { + "name": "close", + "qualified_name": "dbtest.postgresSchema.close", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 153, + "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", + "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure." + }, + "1717": { + "name": "abort", + "qualified_name": "dbtest.postgresSchema.abort", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 164, + "intent": "avoid leaking a connection when the schema never became usable.", + "reason": "avoid leaking a connection when the schema never became usable." + }, + "1719": { + "name": "postgresExtensionSchema", + "qualified_name": "dbtest.postgresExtensionSchema", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 199, + "intent": "keep an extension's operator classes reachable from a private schema without exposing public.", + "reason": "keep an extension's operator classes reachable from a private schema without exposing public." + }, + "172": { + "name": "RuntimeToolsDeps", + "qualified_name": "mcp.RuntimeToolsDeps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 136, + "intent": "group transport runtime configuration separately from capability dependencies.", + "reason": "group transport runtime configuration separately from capability dependencies." + }, + "1720": { + "name": "resolvePostgresExtensionSchema", + "qualified_name": "dbtest.resolvePostgresExtensionSchema", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 208, + "intent": "settle the extension's location once so every test's search_path can name it.", + "reason": "settle the extension's location once so every test's search_path can name it." + }, + "1722": { + "name": "newPostgresSchemaName", + "qualified_name": "dbtest.newPostgresSchemaName", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 271, + "intent": "name a schema so that it cannot collide and so its age can be read back later.", + "reason": "name a schema so that it cannot collide and so its age can be read back later." + }, + "1723": { + "name": "postgresSchemaAge", + "qualified_name": "dbtest.postgresSchemaAge", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 286, + "intent": "read a schema's age without a catalog column PostgreSQL does not have.", + "reason": "read a schema's age without a catalog column PostgreSQL does not have." + }, + "1724": { + "name": "sweepStalePostgresSchemasOnce", + "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 310, + "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", + "reason": "stop schemas from a crashed run piling up without touching a running test's schema." + }, + "1725": { + "name": "sweepStalePostgresSchemas", + "qualified_name": "dbtest.sweepStalePostgresSchemas", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 320, + "intent": "bound how long a schema abandoned by a crashed run can survive.", + "reason": "bound how long a schema abandoned by a crashed run can survive." + }, + "1726": { + "name": "withPostgresSearchPath", + "qualified_name": "dbtest.withPostgresSearchPath", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 343, + "intent": "carry the schema in the connection string whether the DSN is a URL or key=value pairs.", + "reason": "carry the schema in the connection string whether the DSN is a URL or key=value pairs." + }, + "1727": { + "name": "isPostgresUnreachable", + "qualified_name": "dbtest.isPostgresUnreachable", + "kind": "function", + "file_path": "internal/db/dbtest/postgres.go", + "namespace": "ccg", + "start_line": 361, + "intent": "keep the existing skip-when-absent behaviour without swallowing genuine errors.", + "reason": "keep the existing skip-when-absent behaviour without swallowing genuine errors." + }, + "1728": { + "name": "internal/db/migration/embed.go", + "qualified_name": "internal/db/migration/embed.go", + "kind": "file", + "file_path": "internal/db/migration/embed.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep embedded versioned SQL assets with the migration runtime that selects and executes them.", + "reason": "keep embedded versioned SQL assets with the migration runtime that selects and executes them." + }, + "173": { + "name": "Deps", + "qualified_name": "mcp.Deps", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/deps.go", + "namespace": "ccg", + "start_line": 149, + "intent": "make each MCP capability's required application contracts explicit at composition time.", + "reason": "make each MCP capability's required application contracts explicit at composition time." + }, + "1732": { + "name": "SourceInfo", + "qualified_name": "migration.SourceInfo", + "kind": "class", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 41, + "intent": "마이그레이션 파일이 embedded인지 external인지와 사용 드라이버를 함께 기록한다.", + "reason": "마이그레이션 파일이 embedded인지 external인지와 사용 드라이버를 함께 기록한다." + }, + "1737": { + "name": "EnsureSchemaVersion", + "qualified_name": "migration.EnsureSchemaVersion", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 113, + "intent": "런타임 명령이 시작되기 전에 스키마 버전과 자동 마이그레이션 조건을 검증한다.", + "reason": "런타임 명령이 시작되기 전에 스키마 버전과 자동 마이그레이션 조건을 검증한다." + }, + "1739": { + "name": "ShouldAutoMigrateLocalSQLite", + "qualified_name": "migration.ShouldAutoMigrateLocalSQLite", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 150, + "intent": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다.", + "reason": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다." + }, + "1740": { + "name": "NewMigrator", + "qualified_name": "migration.NewMigrator", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 173, + "intent": "GORM DB와 migration source를 golang-migrate 실행 인스턴스로 결합한다.", + "reason": "GORM DB와 migration source를 golang-migrate 실행 인스턴스로 결합한다." + }, + "1741": { + "name": "migrateSourceDriver", + "qualified_name": "migration.migrateSourceDriver", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 192, + "intent": "드라이버별 마이그레이션 입력을 source.Driver로 변환해 migrator 생성에 넘긴다.", + "reason": "드라이버별 마이그레이션 입력을 source.Driver로 변환해 migrator 생성에 넘긴다." + }, + "1742": { + "name": "migrationSourceInfoFor", + "qualified_name": "migration.migrationSourceInfoFor", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 214, + "intent": "마이그레이션 디렉터리 설정값을 source kind와 경로 정보로 정규화한다.", + "reason": "마이그레이션 디렉터리 설정값을 source kind와 경로 정보로 정규화한다." + }, + "1745": { + "name": "migrationSourceDir", + "qualified_name": "migration.migrationSourceDir", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 244, + "intent": "외부 migration source가 존재하는 실제 디렉터리인지 확인한다.", + "reason": "외부 migration source가 존재하는 실제 디렉터리인지 확인한다." + }, + "1746": { + "name": "migrateDatabaseDriver", + "qualified_name": "migration.migrateDatabaseDriver", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 262, + "intent": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다.", + "reason": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다." + }, + "1748": { + "name": "ActionableSchemaParityError", + "qualified_name": "migration.ActionableSchemaParityError", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 293, + "intent": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다.", + "reason": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다." + }, + "1749": { + "name": "CheckSchemaVersion", + "qualified_name": "migration.CheckSchemaVersion", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 300, + "intent": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다.", + "reason": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다." + }, + "175": { + "name": "namespaceEvidenceBlock", + "qualified_name": "mcp.namespaceEvidenceBlock", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 17, + "intent": "keep evidence payloads typed while exposing namespace and git provenance.", + "reason": "keep evidence payloads typed while exposing namespace and git provenance." + }, + "1753": { + "name": "RequiredTextColumns", + "qualified_name": "migration.RequiredTextColumns", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 395, + "intent": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths.", + "reason": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths." + }, + "1755": { + "name": "MigrateLegacyDefaultNamespace", + "qualified_name": "migration.MigrateLegacyDefaultNamespace", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 498, + "intent": "namespace 도입 이전 데이터셋을 기본 namespace로 올려 현재 모델과 호환시킨다.", + "reason": "namespace 도입 이전 데이터셋을 기본 namespace로 올려 현재 모델과 호환시킨다." + }, + "1756": { + "name": "failOnLegacyNamespaceCollisions", + "qualified_name": "migration.failOnLegacyNamespaceCollisions", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 527, + "intent": "빈 namespace 데이터를 default namespace로 올리기 전에 중복 키 충돌을 차단한다.", + "reason": "빈 namespace 데이터를 default namespace로 올리기 전에 중복 키 충돌을 차단한다." + }, + "1757": { + "name": "nodeCollision", + "qualified_name": "migration.nodeCollision", + "kind": "class", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 530, + "intent": "namespace 마이그레이션 충돌 리포트를 위한 최소 노드 식별자를 담는다.", + "reason": "namespace 마이그레이션 충돌 리포트를 위한 최소 노드 식별자를 담는다." + }, + "1758": { + "name": "edgeCollision", + "qualified_name": "migration.edgeCollision", + "kind": "class", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 556, + "intent": "edge namespace 병합 시 fingerprint 충돌만 간단히 전달한다.", + "reason": "edge namespace 병합 시 fingerprint 충돌만 간단히 전달한다." + }, + "1759": { + "name": "searchDocCollision", + "qualified_name": "migration.searchDocCollision", + "kind": "class", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 576, + "intent": "search_documents namespace 병합 시 중복되는 node_id를 보고한다.", + "reason": "search_documents namespace 병합 시 중복되는 node_id를 보고한다." + }, + "176": { + "name": "namespaceGitEvidenceBlock", + "qualified_name": "mcp.namespaceGitEvidenceBlock", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 25, + "intent": "preserve git evidence keys while making nil-versus-false behavior explicit.", + "reason": "preserve git evidence keys while making nil-versus-false behavior explicit." + }, + "1760": { + "name": "communityCollision", + "qualified_name": "migration.communityCollision", + "kind": "class", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 596, + "intent": "community namespace 병합 시 key 충돌을 보고한다.", + "reason": "community namespace 병합 시 key 충돌을 보고한다." + }, + "1761": { + "name": "validateSQLiteSchemaParity", + "qualified_name": "migration.validateSQLiteSchemaParity", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 619, + "intent": "SQLite 배포에서 FTS5 스키마와 모델 nullability 불변식을 확인한다.", + "reason": "SQLite 배포에서 FTS5 스키마와 모델 nullability 불변식을 확인한다." + }, + "1763": { + "name": "sqliteColumnExists", + "qualified_name": "migration.sqliteColumnExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 706, + "intent": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다.", + "reason": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다." + }, + "1764": { + "name": "sqliteColumnNotNull", + "qualified_name": "migration.sqliteColumnNotNull", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 716, + "intent": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다.", + "reason": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다." + }, + "1766": { + "name": "sqliteIndexExists", + "qualified_name": "migration.sqliteIndexExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 733, + "intent": "index presence can be verified during schema parity checks before query paths use them.", + "reason": "index presence can be verified during schema parity checks before query paths use them." + }, + "1767": { + "name": "sqliteColumnInfo", + "qualified_name": "migration.sqliteColumnInfo", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 744, + "intent": "SQLite 컬럼 존재 여부와 NOT NULL 속성을 한 번에 조회한다.", + "reason": "SQLite 컬럼 존재 여부와 NOT NULL 속성을 한 번에 조회한다." + }, + "1768": { + "name": "SQLiteColumnExists", + "qualified_name": "migration.SQLiteColumnExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 769, + "intent": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다.", + "reason": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다." + }, + "1769": { + "name": "SQLiteColumnNotNull", + "qualified_name": "migration.SQLiteColumnNotNull", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 775, + "intent": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다.", + "reason": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다." + }, + "177": { + "name": "namespaceEvidenceFromContext", + "qualified_name": "mcp.handlers.namespaceEvidenceFromContext", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 34, + "intent": "include namespace path and git state when available so LLM has traceable provenance.", + "reason": "include namespace path and git state when available so LLM has traceable provenance." + }, + "1770": { + "name": "SQLiteColumnInfo", + "qualified_name": "migration.SQLiteColumnInfo", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 781, + "intent": "SQLite 컬럼 메타데이터를 공개형 struct로 노출해 테스트와 검증 코드에서 재사용하게 한다.", + "reason": "SQLite 컬럼 메타데이터를 공개형 struct로 노출해 테스트와 검증 코드에서 재사용하게 한다." + }, + "1771": { + "name": "postgresColumnNotNull", + "qualified_name": "migration.postgresColumnNotNull", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 804, + "intent": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", + "reason": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다." + }, + "1773": { + "name": "PostgresColumnNotNull", + "qualified_name": "migration.PostgresColumnNotNull", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 838, + "intent": "외부 검증 코드가 PostgreSQL 컬럼 nullability를 재사용 가능한 API로 확인하게 한다.", + "reason": "외부 검증 코드가 PostgreSQL 컬럼 nullability를 재사용 가능한 API로 확인하게 한다." + }, + "1774": { + "name": "PostgresColumnDataType", + "qualified_name": "migration.PostgresColumnDataType", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 844, + "intent": "외부 검증 코드가 PostgreSQL 컬럼 타입을 재사용 가능한 API로 확인하게 한다.", + "reason": "외부 검증 코드가 PostgreSQL 컬럼 타입을 재사용 가능한 API로 확인하게 한다." + }, + "1775": { + "name": "postgresIndexExists", + "qualified_name": "migration.postgresIndexExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 851, + "intent": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", + "reason": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다." + }, + "1776": { + "name": "PostgresIndexExists", + "qualified_name": "migration.PostgresIndexExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 864, + "intent": "외부 검증 코드가 Postgres 인덱스 존재 여부를 재사용 가능한 API로 확인하게 한다.", + "reason": "외부 검증 코드가 Postgres 인덱스 존재 여부를 재사용 가능한 API로 확인하게 한다." + }, + "1777": { + "name": "postgresTriggerExists", + "qualified_name": "migration.postgresTriggerExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 871, + "intent": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다.", + "reason": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다." + }, + "1778": { + "name": "PostgresTriggerExists", + "qualified_name": "migration.PostgresTriggerExists", + "kind": "function", + "file_path": "internal/db/migration/migration.go", + "namespace": "ccg", + "start_line": 887, + "intent": "외부 검증 코드가 Postgres 트리거 존재 여부를 재사용 가능한 API로 확인하게 한다.", + "reason": "외부 검증 코드가 Postgres 트리거 존재 여부를 재사용 가능한 API로 확인하게 한다." + }, + "1779": { + "name": "internal/domain/annotation/normalizer.go", + "qualified_name": "internal/domain/annotation/normalizer.go", + "kind": "file", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 1, + "intent": "normalize comment text before annotation parsing across supported languages", + "reason": "normalize comment text before annotation parsing across supported languages" + }, + "178": { + "name": "namespaceEvidence", + "qualified_name": "mcp.handlers.namespaceEvidence", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 40, + "intent": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", + "reason": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from." + }, + "1780": { + "name": "Normalizer", + "qualified_name": "annotation.Normalizer", + "kind": "class", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 9, + "intent": "normalize comment text before annotation parsing across supported languages", + "reason": "normalize comment text before annotation parsing across supported languages" + }, + "1781": { + "name": "NewNormalizer", + "qualified_name": "annotation.NewNormalizer", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 13, + "intent": "provide a reusable comment normalizer for annotation extraction", + "reason": "provide a reusable comment normalizer for annotation extraction" + }, + "1782": { + "name": "Normalize", + "qualified_name": "annotation.Normalizer.Normalize", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 23, + "intent": "turn raw source comments into plain text consumable by the annotation parser", + "reason": "turn raw source comments into plain text consumable by the annotation parser" + }, + "1783": { + "name": "isGoDirective", + "qualified_name": "annotation.isGoDirective", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 53, + "intent": "exclude `//go:*` pragma lines from annotation normalization so tag values stay clean", + "reason": "exclude `//go:*` pragma lines from annotation normalization so tag values stay clean" + }, + "1784": { + "name": "stripBlockDelimiters", + "qualified_name": "annotation.stripBlockDelimiters", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 68, + "intent": "keep only the inner documentation payload from block-style comments", + "reason": "keep only the inner documentation payload from block-style comments" + }, + "1785": { + "name": "stripPythonDocstringDelimiters", + "qualified_name": "annotation.stripPythonDocstringDelimiters", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 88, + "intent": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms.", + "reason": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms." + }, + "1786": { + "name": "stripPythonQuotedString", + "qualified_name": "annotation.stripPythonQuotedString", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 99, + "intent": "accept docstrings with optional `r` or `u` prefixes without altering body content.", + "reason": "accept docstrings with optional `r` or `u` prefixes without altering body content." + }, + "1787": { + "name": "isSupportedPythonDocstringPrefix", + "qualified_name": "annotation.isSupportedPythonDocstringPrefix", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 119, + "intent": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling.", + "reason": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling." + }, + "1788": { + "name": "stripLinePrefix", + "qualified_name": "annotation.stripLinePrefix", + "kind": "function", + "file_path": "internal/domain/annotation/normalizer.go", + "namespace": "ccg", + "start_line": 128, + "intent": "normalize individual documentation lines across language comment syntaxes", + "reason": "normalize individual documentation lines across language comment syntaxes" + }, + "179": { + "name": "namespaceGitEvidence", + "qualified_name": "mcp.namespaceGitEvidence", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 65, + "intent": "summarize git branch, commit, remote, and dirty state for namespace-scoped evidence blocks.", + "reason": "summarize git branch, commit, remote, and dirty state for namespace-scoped evidence blocks." + }, + "1790": { + "name": "Parser", + "qualified_name": "annotation.Parser", + "kind": "class", + "file_path": "internal/domain/annotation/parser.go", + "namespace": "ccg", + "start_line": 29, + "intent": "convert stripped documentation text into graph.Annotation values", + "reason": "convert stripped documentation text into graph.Annotation values" + }, + "1791": { + "name": "NewParser", + "qualified_name": "annotation.NewParser", + "kind": "function", + "file_path": "internal/domain/annotation/parser.go", + "namespace": "ccg", + "start_line": 33, + "intent": "provide a reusable annotation parser instance for binding pipelines", + "reason": "provide a reusable annotation parser instance for binding pipelines" + }, + "1792": { + "name": "Parse", + "qualified_name": "annotation.Parser.Parse", + "kind": "function", + "file_path": "internal/domain/annotation/parser.go", + "namespace": "ccg", + "start_line": 52, + "intent": "extract machine-readable metadata from developer comments", + "reason": "extract machine-readable metadata from developer comments" + }, + "1793": { + "name": "parseTagLine", + "qualified_name": "annotation.Parser.parseTagLine", + "kind": "function", + "file_path": "internal/domain/annotation/parser.go", + "namespace": "ccg", + "start_line": 129, + "intent": "decode one normalized tag line into a DocTag with ordinal tracking", + "reason": "decode one normalized tag line into a DocTag with ordinal tracking" + }, + "1794": { + "name": "extractTypePrefix", + "qualified_name": "annotation.extractTypePrefix", + "kind": "function", + "file_path": "internal/domain/annotation/parser.go", + "namespace": "ccg", + "start_line": 185, + "intent": "separate type annotation from name/description portion for param/return/throws tags", + "reason": "separate type annotation from name/description portion for param/return/throws tags" + }, + "1798": { + "name": "DocTag", + "qualified_name": "graph.DocTag", + "kind": "class", + "file_path": "internal/domain/graph/annotation.go", + "namespace": "ccg", + "start_line": 44, + "intent": "어노테이션의 단일 구조화 태그 항목을 표현한다.\nType 필드는 YARD `@param [String] name ...` 또는 JSDoc `@param {string} name ...`에서\n추출한 타입 문자열을 보관한다 (param/throws/return에서 사용).\nTypeScript/JSDoc 복합 타입(`Record\u003cstring, Array\u003c{id: number, name: string}\u003e\u003e`)이\n수백 바이트에 이를 수 있어 text로 지정.", + "reason": "어노테이션의 단일 구조화 태그 항목을 표현한다.\nType 필드는 YARD `@param [String] name ...` 또는 JSDoc `@param {string} name ...`에서\n추출한 타입 문자열을 보관한다 (param/throws/return에서 사용).\nTypeScript/JSDoc 복합 타입(`Record\u003cstring, Array\u003c{id: number, name: string}\u003e\u003e`)이\n수백 바이트에 이를 수 있어 text로 지정." + }, + "180": { + "name": "branchNameForRef", + "qualified_name": "mcp.branchNameForRef", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/evidence.go", + "namespace": "ccg", + "start_line": 115, + "intent": "normalize git reference names into human-readable branch labels inside evidence metadata.", + "reason": "normalize git reference names into human-readable branch labels inside evidence metadata." + }, + "1801": { + "name": "CommunityMembership", + "qualified_name": "graph.CommunityMembership", + "kind": "class", + "file_path": "internal/domain/graph/community.go", + "namespace": "ccg", + "start_line": 22, + "intent": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다.", + "reason": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다." + }, + "1803": { + "name": "CrossRefStatus", + "qualified_name": "graph.CrossRefStatus", + "kind": "type", + "file_path": "internal/domain/graph/crossref.go", + "namespace": "ccg", + "start_line": 8, + "intent": "distinguish navigable references from dangling ones without deleting authored links.", + "reason": "distinguish navigable references from dangling ones without deleting authored links." + }, + "1804": { + "name": "CrossRefSource", + "qualified_name": "graph.CrossRefSource", + "kind": "type", + "file_path": "internal/domain/graph/crossref.go", + "namespace": "ccg", + "start_line": 17, + "intent": "keep room for future non-annotation signals (e.g. import mapping) without schema rework.", + "reason": "keep room for future non-annotation signals (e.g. import mapping) without schema rework." + }, + "1805": { + "name": "CrossRef", + "qualified_name": "graph.CrossRef", + "kind": "class", + "file_path": "internal/domain/graph/crossref.go", + "namespace": "ccg", + "start_line": 25, + "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", + "reason": "make annotation-declared repository links traversable and listable instead of plain tag text." + }, + "1808": { + "name": "CallEdgeKinds", + "qualified_name": "graph.CallEdgeKinds", + "kind": "function", + "file_path": "internal/domain/graph/edge.go", + "namespace": "ccg", + "start_line": 31, + "intent": "centralize call-kind handling for traversal and filtering paths.", + "reason": "centralize call-kind handling for traversal and filtering paths." + }, + "1809": { + "name": "IsCallKind", + "qualified_name": "graph.IsCallKind", + "kind": "function", + "file_path": "internal/domain/graph/edge.go", + "namespace": "ccg", + "start_line": 39, + "intent": "centralize call-kind handling for traversal and filtering paths.", + "reason": "centralize call-kind handling for traversal and filtering paths." + }, + "1814": { + "name": "internal/domain/graph/identity.go", + "qualified_name": "internal/domain/graph/identity.go", + "kind": "file", + "file_path": "internal/domain/graph/identity.go", + "namespace": "ccg", + "start_line": 1, + "intent": "give ranking a key that survives re-indexing, which the node id does not.", + "reason": "give ranking a key that survives re-indexing, which the node id does not." + }, + "1815": { + "name": "Identity", + "qualified_name": "graph.Identity", + "kind": "class", + "file_path": "internal/domain/graph/identity.go", + "namespace": "ccg", + "start_line": 18, + "intent": "give ranking a key that survives re-indexing, which the node id does not.", + "reason": "give ranking a key that survives re-indexing, which the node id does not." + }, + "1816": { + "name": "Identity", + "qualified_name": "graph.Node.Identity", + "kind": "function", + "file_path": "internal/domain/graph/identity.go", + "namespace": "ccg", + "start_line": 28, + "intent": "read a node's stable identity without repeating which fields make it up.", + "reason": "read a node's stable identity without repeating which fields make it up." + }, + "1817": { + "name": "CompareIdentity", + "qualified_name": "graph.CompareIdentity", + "kind": "function", + "file_path": "internal/domain/graph/identity.go", + "namespace": "ccg", + "start_line": 46, + "intent": "give every layer of search one tie-break, so two layers cannot disagree about who comes first.", + "reason": "give every layer of search one tie-break, so two layers cannot disagree about who comes first." + }, + "1818": { + "name": "internal/domain/graph/inherits_fingerprint.go", + "qualified_name": "internal/domain/graph/inherits_fingerprint.go", + "kind": "file", + "file_path": "internal/domain/graph/inherits_fingerprint.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep child, file, and parent data in one stable payload for edge resolution.", + "reason": "keep child, file, and parent data in one stable payload for edge resolution." + }, + "1819": { + "name": "inheritsFingerprintV2", + "qualified_name": "graph.inheritsFingerprintV2", + "kind": "class", + "file_path": "internal/domain/graph/inherits_fingerprint.go", + "namespace": "ccg", + "start_line": 12, + "intent": "keep child, file, and parent data in one stable payload for edge resolution.", + "reason": "keep child, file, and parent data in one stable payload for edge resolution." + }, + "182": { + "name": "impactRadiusMetadata", + "qualified_name": "mcp.impactRadiusMetadata", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 26, + "intent": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", + "reason": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload." + }, + "1820": { + "name": "BuildInheritsFingerprintV2", + "qualified_name": "graph.BuildInheritsFingerprintV2", + "kind": "function", + "file_path": "internal/domain/graph/inherits_fingerprint.go", + "namespace": "ccg", + "start_line": 20, + "intent": "provide an unambiguous fingerprint contract for inheritance edges across languages.", + "reason": "provide an unambiguous fingerprint contract for inheritance edges across languages." + }, + "1821": { + "name": "ParseInheritsFingerprint", + "qualified_name": "graph.ParseInheritsFingerprint", + "kind": "function", + "file_path": "internal/domain/graph/inherits_fingerprint.go", + "namespace": "ccg", + "start_line": 30, + "intent": "keep resolver compatibility while parsers migrate to the unambiguous inherits fingerprint format.", + "reason": "keep resolver compatibility while parsers migrate to the unambiguous inherits fingerprint format." + }, + "1824": { + "name": "Node", + "qualified_name": "graph.Node", + "kind": "class", + "file_path": "internal/domain/graph/node.go", + "namespace": "ccg", + "start_line": 23, + "intent": "파일 내 선언의 정체성과 위치 정보를 영속화한다.", + "reason": "파일 내 선언의 정체성과 위치 정보를 영속화한다." + }, + "1825": { + "name": "Intent", + "qualified_name": "graph.Node.Intent", + "kind": "function", + "file_path": "internal/domain/graph/node.go", + "namespace": "ccg", + "start_line": 51, + "intent": "give search one line of author-written purpose to show beside a result.", + "reason": "give search one line of author-written purpose to show beside a result." + }, + "1826": { + "name": "RecordedReason", + "qualified_name": "graph.Node.RecordedReason", + "kind": "function", + "file_path": "internal/domain/graph/node.go", + "namespace": "ccg", + "start_line": 80, + "intent": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", + "reason": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to." + }, + "1828": { + "name": "ParseCacheEntry", + "qualified_name": "graph.ParseCacheEntry", + "kind": "class", + "file_path": "internal/domain/graph/parse_cache.go", + "namespace": "ccg", + "start_line": 8, + "intent": "bound cache growth per active source path while validating the complete semantic cache identity.", + "reason": "bound cache growth per active source path while validating the complete semantic cache identity." + }, + "183": { + "name": "impactRadiusResponse", + "qualified_name": "mcp.impactRadiusResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 35, + "intent": "preserve a stable typed response envelope for impact-radius queries.", + "reason": "preserve a stable typed response envelope for impact-radius queries." + }, + "1830": { + "name": "SchemaVersion", + "qualified_name": "graph.SchemaVersion", + "kind": "class", + "file_path": "internal/domain/graph/schema_version.go", + "namespace": "ccg", + "start_line": 8, + "intent": "let runtime commands fail fast when explicit migrations were not run.", + "reason": "let runtime commands fail fast when explicit migrations were not run." + }, + "1831": { + "name": "TableName", + "qualified_name": "graph.SchemaVersion.TableName", + "kind": "function", + "file_path": "internal/domain/graph/schema_version.go", + "namespace": "ccg", + "start_line": 16, + "intent": "keep runtime schema checks aligned with explicit migration bookkeeping.", + "reason": "keep runtime schema checks aligned with explicit migration bookkeeping." + }, + "1836": { + "name": "UnresolvedEdgeCandidate", + "qualified_name": "graph.UnresolvedEdgeCandidate", + "kind": "class", + "file_path": "internal/domain/graph/unresolved.go", + "namespace": "ccg", + "start_line": 8, + "intent": "let newly added symbols select affected unchanged callers without reparsing the whole graph.", + "reason": "let newly added symbols select affected unchanged callers without reparsing the whole graph." + }, + "1837": { + "name": "Edge", + "qualified_name": "graph.UnresolvedEdgeCandidate.Edge", + "kind": "function", + "file_path": "internal/domain/graph/unresolved.go", + "namespace": "ccg", + "start_line": 23, + "intent": "keep unresolved storage separate from traversable graph edges while reusing the resolver contract.", + "reason": "keep unresolved storage separate from traversable graph edges while reusing the resolver contract." + }, + "1838": { + "name": "UnresolvedIndexState", + "qualified_name": "graph.UnresolvedIndexState", + "kind": "class", + "file_path": "internal/domain/graph/unresolved.go", + "namespace": "ccg", + "start_line": 29, + "intent": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", + "reason": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut." + }, + "184": { + "name": "traceFlowMember", + "qualified_name": "mcp.traceFlowMember", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 43, + "intent": "serialize flow member references without exposing the full node record.", + "reason": "serialize flow member references without exposing the full node record." + }, + "1840": { + "name": "Ref", + "qualified_name": "reference.Ref", + "kind": "class", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 15, + "intent": "represent cross-namespace @see links without coupling annotations to graph storage.", + "reason": "represent cross-namespace @see links without coupling annotations to graph storage." + }, + "1841": { + "name": "Is", + "qualified_name": "reference.Is", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 25, + "intent": "let callers branch between local @see values and cross-namespace CCG refs cheaply.", + "reason": "let callers branch between local @see values and cross-namespace CCG refs cheaply." + }, + "1842": { + "name": "Parse", + "qualified_name": "reference.Parse", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 33, + "intent": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", + "reason": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations." + }, + "1843": { + "name": "Display", + "qualified_name": "reference.Ref.Display", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 75, + "intent": "shorten ccg refs while preserving namespace, path, and symbol identity.", + "reason": "shorten ccg refs while preserving namespace, path, and symbol identity." + }, + "1844": { + "name": "validateNamespace", + "qualified_name": "reference.validateNamespace", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 90, + "intent": "reject namespace values that could escape namespace storage roots.", + "reason": "reject namespace values that could escape namespace storage roots." + }, + "1845": { + "name": "normalizeRefPath", + "qualified_name": "reference.normalizeRefPath", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 101, + "intent": "normalize the URI path part into the same slash-separated file paths used by graph nodes.", + "reason": "normalize the URI path part into the same slash-separated file paths used by graph nodes." + }, + "1846": { + "name": "scopeFor", + "qualified_name": "reference.scopeFor", + "kind": "function", + "file_path": "internal/domain/reference/ref.go", + "namespace": "ccg", + "start_line": 127, + "intent": "classify refs for clients that want to render namespace, path, and symbol scopes differently.", + "reason": "classify refs for clients that want to render namespace, path, and symbol scopes differently." + }, + "1847": { + "name": "internal/domain/reference/similarity.go", + "qualified_name": "internal/domain/reference/similarity.go", + "kind": "file", + "file_path": "internal/domain/reference/similarity.go", + "namespace": "ccg", + "start_line": 1, + "intent": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution.", + "reason": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution." + }, + "1848": { + "name": "CommonSuffixDepth", + "qualified_name": "reference.CommonSuffixDepth", + "kind": "function", + "file_path": "internal/domain/reference/similarity.go", + "namespace": "ccg", + "start_line": 8, + "intent": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution.", + "reason": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution." + }, + "185": { + "name": "traceFlowMetadata", + "qualified_name": "mcp.traceFlowMetadata", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 51, + "intent": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", + "reason": "explain whether traceFlow truncated members and whether fallback edges contributed to the result." + }, + "1851": { + "name": "Telemetry", + "qualified_name": "obs.Telemetry", + "kind": "class", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 36, + "intent": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다.", + "reason": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다." + }, + "1852": { + "name": "Setup", + "qualified_name": "obs.Setup", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 49, + "intent": "endpoint 유무에 따라 local-only tracing 또는 OTLP export tracing을 초기화한다.", + "reason": "endpoint 유무에 따라 local-only tracing 또는 OTLP export tracing을 초기화한다." + }, + "1854": { + "name": "StartServerSpan", + "qualified_name": "obs.Telemetry.StartServerSpan", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 99, + "intent": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다.", + "reason": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다." + }, + "1857": { + "name": "start", + "qualified_name": "obs.Telemetry.start", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 118, + "intent": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다.", + "reason": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다." + }, + "1858": { + "name": "SetGlobal", + "qualified_name": "obs.SetGlobal", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 131, + "intent": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", + "reason": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다." + }, + "1859": { + "name": "Global", + "qualified_name": "obs.Global", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 143, + "intent": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다.", + "reason": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다." + }, + "186": { + "name": "traceFlowResponse", + "qualified_name": "mcp.traceFlowResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 61, + "intent": "preserve a stable response envelope for traced flow results and their evidence.", + "reason": "preserve a stable response envelope for traced flow results and their evidence." + }, + "1860": { + "name": "ContextWithHTTPTrace", + "qualified_name": "obs.ContextWithHTTPTrace", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 151, + "intent": "HTTP 요청의 traceparent와 baggage를 downstream span 시작에 연결한다.", + "reason": "HTTP 요청의 traceparent와 baggage를 downstream span 시작에 연결한다." + }, + "1861": { + "name": "ServerSpan", + "qualified_name": "obs.ServerSpan", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 163, + "intent": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", + "reason": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다." + }, + "1862": { + "name": "StartSpan", + "qualified_name": "obs.StartSpan", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 169, + "intent": "런타임 내부 작업을 현재 trace 아래 새 span으로 감싼다.", + "reason": "런타임 내부 작업을 현재 trace 아래 새 span으로 감싼다." + }, + "1864": { + "name": "TraceLogArgs", + "qualified_name": "obs.TraceLogArgs", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 181, + "intent": "span이 있는 컨텍스트를 slog 필드(trace_id, span_id, sampled)로 바꾼다.", + "reason": "span이 있는 컨텍스트를 slog 필드(trace_id, span_id, sampled)로 바꾼다." + }, + "1866": { + "name": "nonEmpty", + "qualified_name": "obs.nonEmpty", + "kind": "function", + "file_path": "internal/obs/trace.go", + "namespace": "ccg", + "start_line": 207, + "intent": "service name 같은 설정값이 비었을 때 안정적인 기본값을 사용하게 한다.", + "reason": "service name 같은 설정값이 비었을 때 안정적인 기본값을 사용하게 한다." + }, + "1868": { + "name": "MatchExcludes", + "qualified_name": "pathspec.MatchExcludes", + "kind": "function", + "file_path": "internal/pathspec/match.go", + "namespace": "ccg", + "start_line": 24, + "intent": "설정과 CLI에서 받은 제외 패턴을 상대 경로에 일관되게 적용한다.", + "reason": "설정과 CLI에서 받은 제외 패턴을 상대 경로에 일관되게 적용한다." + }, + "187": { + "name": "detectChangesEntry", + "qualified_name": "mcp.detectChangesEntry", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 70, + "intent": "preserve a stable per-item DTO for detectChanges pagination results.", + "reason": "preserve a stable per-item DTO for detectChanges pagination results." + }, + "1870": { + "name": "MatchIncludePaths", + "qualified_name": "pathspec.MatchIncludePaths", + "kind": "function", + "file_path": "internal/pathspec/match.go", + "namespace": "ccg", + "start_line": 77, + "intent": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", + "reason": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors." + }, + "1871": { + "name": "HasPathPrefix", + "qualified_name": "pathspec.HasPathPrefix", + "kind": "function", + "file_path": "internal/pathspec/match.go", + "namespace": "ccg", + "start_line": 91, + "intent": "compare include path scopes after normalization so callers can test path containment reliably.", + "reason": "compare include path scopes after normalization so callers can test path containment reliably." + }, + "1872": { + "name": "normalizeIncludePath", + "qualified_name": "pathspec.normalizeIncludePath", + "kind": "function", + "file_path": "internal/pathspec/match.go", + "namespace": "ccg", + "start_line": 102, + "intent": "guarantee comparisons treat \"./foo\", \"foo\", and \"foo/\" as the same logical path.", + "reason": "guarantee comparisons treat \"./foo\", \"foo\", and \"foo/\" as the same logical path." + }, + "1874": { + "name": "Components", + "qualified_name": "mcpruntime.Components", + "kind": "class", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 33, + "intent": "share one MCP assembly path without making the MCP runtime import its parent composition package.", + "reason": "share one MCP assembly path without making the MCP runtime import its parent composition package." + }, + "1875": { + "name": "Options", + "qualified_name": "mcpruntime.Options", + "kind": "class", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 46, + "intent": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", + "reason": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code." + }, + "1876": { + "name": "Instance", + "qualified_name": "mcpruntime.Instance", + "kind": "class", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 61, + "intent": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", + "reason": "share MCP server construction while keeping stdio and HTTP transports in separate packages." + }, + "1877": { + "name": "New", + "qualified_name": "mcpruntime.New", + "kind": "function", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 74, + "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", + "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary." + }, + "1878": { + "name": "Close", + "qualified_name": "mcpruntime.Instance.Close", + "kind": "function", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 138, + "intent": "provide one idempotent cleanup path for transport-specific runners.", + "reason": "provide one idempotent cleanup path for transport-specific runners." + }, + "1879": { + "name": "RunStdio", + "qualified_name": "mcpruntime.RunStdio", + "kind": "function", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 157, + "intent": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", + "reason": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code." + }, + "188": { + "name": "detectChangesResponse", + "qualified_name": "mcp.detectChangesResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 79, + "intent": "expose diff-risk results with both legacy entries and shared pagination fields.", + "reason": "expose diff-risk results with both legacy entries and shared pagination fields." + }, + "1880": { + "name": "FlushQueryCache", + "qualified_name": "mcpruntime.FlushQueryCache", + "kind": "function", + "file_path": "internal/runtime/mcp/runtime.go", + "namespace": "ccg", + "start_line": 185, + "intent": "let graph updates invalidate shared MCP cache without coupling to transport packages.", + "reason": "let graph updates invalidate shared MCP cache without coupling to transport packages." + }, + "1882": { + "name": "RunHTTP", + "qualified_name": "remote.RunHTTP", + "kind": "function", + "file_path": "internal/runtime/remote/http.go", + "namespace": "ccg", + "start_line": 31, + "intent": "keep all remote runtime construction outside inbound adapters and the local ccg binary.", + "reason": "keep all remote runtime construction outside inbound adapters and the local ccg binary." + }, + "1883": { + "name": "buildRepoSyncHTTP", + "qualified_name": "remote.buildRepoSyncHTTP", + "kind": "function", + "file_path": "internal/runtime/remote/http.go", + "namespace": "ccg", + "start_line": 100, + "intent": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook.", + "reason": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook." + }, + "1885": { + "name": "Runtime", + "qualified_name": "runtime.Runtime", + "kind": "class", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 26, + "intent": "provide one dependency assembly path for local CLI and self-hosted server binaries.", + "reason": "provide one dependency assembly path for local CLI and self-hosted server binaries." + }, + "1886": { + "name": "NewRuntime", + "qualified_name": "runtime.NewRuntime", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 43, + "intent": "initialize parser walkers once before command-specific database setup runs.", + "reason": "initialize parser walkers once before command-specific database setup runs." + }, + "1887": { + "name": "MCPComponents", + "qualified_name": "runtime.Runtime.MCPComponents", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 55, + "intent": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters.", + "reason": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters." + }, + "1888": { + "name": "Init", + "qualified_name": "runtime.Runtime.Init", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 66, + "intent": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", + "reason": "keep schema validation and graph storage wiring identical across ccg and ccg-server." + }, + "1889": { + "name": "Migrate", + "qualified_name": "runtime.Runtime.Migrate", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 103, + "intent": "expose migration execution without coupling binaries to migration internals.", + "reason": "expose migration execution without coupling binaries to migration internals." + }, + "189": { + "name": "affectedFlowEntry", + "qualified_name": "mcp.affectedFlowEntry", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 88, + "intent": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", + "reason": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers." + }, + "1890": { + "name": "Close", + "qualified_name": "runtime.Runtime.Close", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 119, + "intent": "give both binaries one cleanup path for shared dependencies.", + "reason": "give both binaries one cleanup path for shared dependencies." + }, + "1891": { + "name": "BuildWalkers", + "qualified_name": "runtime.BuildWalkers", + "kind": "function", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 142, + "intent": "register supported language walkers for build, update, and MCP execution paths.", + "reason": "register supported language walkers for build, update, and MCP execution paths." + }, + "1892": { + "name": "langEntry", + "qualified_name": "runtime.langEntry", + "kind": "class", + "file_path": "internal/runtime/runtime.go", + "namespace": "ccg", + "start_line": 145, + "intent": "keep language specs and extension aliases together during registry initialization.", + "reason": "keep language specs and extension aliases together during registry initialization." + }, + "1893": { + "name": "internal/safepath/namespace.go", + "qualified_name": "internal/safepath/namespace.go", + "kind": "file", + "file_path": "internal/safepath/namespace.go", + "namespace": "ccg", + "start_line": 1, + "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", + "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards." + }, + "1894": { + "name": "ValidateNamespacePath", + "qualified_name": "safepath.ValidateNamespacePath", + "kind": "function", + "file_path": "internal/safepath/namespace.go", + "namespace": "ccg", + "start_line": 12, + "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", + "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards." + }, + "1896": { + "name": "EnsureNoSymlinkInPath", + "qualified_name": "safepath.EnsureNoSymlinkInPath", + "kind": "function", + "file_path": "internal/safepath/safepath.go", + "namespace": "ccg", + "start_line": 18, + "intent": "prevent symlink traversal from escaping a trusted root before any filesystem mutation.", + "reason": "prevent symlink traversal from escaping a trusted root before any filesystem mutation." + }, + "1897": { + "name": "Canonical", + "qualified_name": "safepath.Canonical", + "kind": "function", + "file_path": "internal/safepath/safepath.go", + "namespace": "ccg", + "start_line": 48, + "intent": "normalize user-supplied paths before containment comparison to prevent symlink-based escapes.", + "reason": "normalize user-supplied paths before containment comparison to prevent symlink-based escapes." + }, + "1898": { + "name": "IsWithinRoot", + "qualified_name": "safepath.IsWithinRoot", + "kind": "function", + "file_path": "internal/safepath/safepath.go", + "namespace": "ccg", + "start_line": 76, + "intent": "detect path traversal by checking the relative path does not escape upward.", + "reason": "detect path traversal by checking the relative path does not escape upward." + }, + "190": { + "name": "affectedFlowsResponse", + "qualified_name": "mcp.affectedFlowsResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 96, + "intent": "expose affected stored flows with backward-compatible aliases and pagination metadata.", + "reason": "expose affected stored flows with backward-compatible aliases and pagination metadata." + }, + "1900": { + "name": "getPlatformKey", + "qualified_name": "getPlatformKey", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 22, + "intent": "identify the current OS and CPU architecture for picking the matching ccg release asset.", + "reason": "identify the current OS and CPU architecture for picking the matching ccg release asset." + }, + "1901": { + "name": "getAssetName", + "qualified_name": "getAssetName", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 29, + "intent": "map the current platform key to the published ccg release asset name and abort if unsupported.", + "reason": "map the current platform key to the published ccg release asset name and abort if unsupported." + }, + "1902": { + "name": "getDownloadUrl", + "qualified_name": "getDownloadUrl", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 41, + "intent": "build the GitHub release download URL for the current ccg version and platform archive.", + "reason": "build the GitHub release download URL for the current ccg version and platform archive." + }, + "1903": { + "name": "followRedirects", + "qualified_name": "followRedirects", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 48, + "intent": "recursively follow HTTP redirects while downloading the release archive.", + "reason": "recursively follow HTTP redirects while downloading the release archive." + }, + "1904": { + "name": "download", + "qualified_name": "download", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 67, + "intent": "fetch a release archive over HTTPS while transparently following redirects.", + "reason": "fetch a release archive over HTTPS while transparently following redirects." + }, + "1905": { + "name": "installExtractedBinary", + "qualified_name": "installExtractedBinary", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 74, + "intent": "move one extracted executable into the stable npm package bin path.", + "reason": "move one extracted executable into the stable npm package bin path." + }, + "1906": { + "name": "install", + "qualified_name": "install", + "kind": "function", + "file_path": "npm/install.js", + "namespace": "ccg", + "start_line": 92, + "intent": "download and extract platform-specific ccg and ccg-server binaries into the npm package bin directory during install.", + "reason": "download and extract platform-specific ccg and ccg-server binaries into the npm package bin directory during install." + }, + "1909": { + "name": "SelectedDoc", + "qualified_name": "SelectedDoc", + "kind": "type", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 44, + "intent": "keep the minimal tree/search item data needed by the document viewer and context tray.", + "reason": "keep the minimal tree/search item data needed by the document viewer and context tray." + }, + "191": { + "name": "getImpactRadius", + "qualified_name": "mcp.handlers.getImpactRadius", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 110, + "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", + "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks." + }, + "1910": { + "name": "RetrieveEvidence", + "qualified_name": "RetrieveEvidence", + "kind": "type", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 56, + "intent": "preserve the tree nodes that caused a Retrieve result to rank.", + "reason": "preserve the tree nodes that caused a Retrieve result to rank." + }, + "1911": { + "name": "SearchMode", + "qualified_name": "SearchMode", + "kind": "type", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 68, + "intent": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", + "reason": "constrain the Wiki search control to keyword tree search or DB-backed retrieval." + }, + "1912": { + "name": "ViewMode", + "qualified_name": "ViewMode", + "kind": "type", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 71, + "intent": "switch the center work area between generated docs and the visual edge graph.", + "reason": "switch the center work area between generated docs and the visual edge graph." + }, + "1913": { + "name": "refresh", + "qualified_name": "refresh", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 119, + "intent": "reload namespace choices and recover from token changes.", + "reason": "reload namespace choices and recover from token changes." + }, + "1914": { + "name": "loadTree", + "qualified_name": "loadTree", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 137, + "intent": "load the active namespace's RAG tree into the left navigator.", + "reason": "load the active namespace's RAG tree into the left navigator." + }, + "1915": { + "name": "loadTreeChildren", + "qualified_name": "loadTreeChildren", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 153, + "intent": "load one expanded tree node on demand so the sidebar avoids fetching the full namespace tree.", + "reason": "load one expanded tree node on demand so the sidebar avoids fetching the full namespace tree." + }, + "1916": { + "name": "openDoc", + "qualified_name": "openDoc", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 165, + "intent": "open a selected tree/search item in the Markdown viewer.", + "reason": "open a selected tree/search item in the Markdown viewer." + }, + "1917": { + "name": "openDocInNamespace", + "qualified_name": "openDocInNamespace", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 170, + "intent": "open a selected item from a specific namespace without waiting for state propagation.", + "reason": "open a selected item from a specific namespace without waiting for state propagation." + }, + "1918": { + "name": "openRefDoc", + "qualified_name": "openRefDoc", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 195, + "intent": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details.", + "reason": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details." + }, + "1919": { + "name": "openRefGraph", + "qualified_name": "openRefGraph", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 210, + "intent": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", + "reason": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available." + }, + "192": { + "name": "traceFlow", + "qualified_name": "mcp.handlers.traceFlow", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 183, + "intent": "reconstruct the call flow containing the starting node so operators can understand execution context.", + "reason": "reconstruct the call flow containing the starting node so operators can understand execution context." + }, + "1920": { + "name": "runSearch", + "qualified_name": "runSearch", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 223, + "intent": "update search results for the active namespace.", + "reason": "update search results for the active namespace." + }, + "1921": { + "name": "copyContext", + "qualified_name": "copyContext", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 254, + "intent": "copy selected docs or summaries as one LLM-ready Markdown context block.", + "reason": "copy selected docs or summaries as one LLM-ready Markdown context block." + }, + "1923": { + "name": "addSelected", + "qualified_name": "addSelected", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 294, + "intent": "add a file or symbol summary to the context tray without duplicates.", + "reason": "add a file or symbol summary to the context tray without duplicates." + }, + "1924": { + "name": "removeSelected", + "qualified_name": "removeSelected", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 301, + "intent": "remove one context tray item by its stable path/label pair.", + "reason": "remove one context tray item by its stable path/label pair." + }, + "1925": { + "name": "openGraphNode", + "qualified_name": "openGraphNode", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 307, + "intent": "open a force-graph node through the same document/symbol viewer used by the tree.", + "reason": "open a force-graph node through the same document/symbol viewer used by the tree." + }, + "1927": { + "name": "toggleOpen", + "qualified_name": "toggleOpen", + "kind": "function", + "file_path": "web/wiki/src/App.tsx", + "namespace": "ccg", + "start_line": 505, + "intent": "expand one tree row by fetching children only when the user opens that node.", + "reason": "expand one tree row by fetching children only when the user opens that node." + }, + "1929": { + "name": "GraphViewProps", + "qualified_name": "GraphViewProps", + "kind": "type", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 19, + "intent": "configure the namespace graph viewer, focused ccg ref node navigation, and node-open callback.", + "reason": "configure the namespace graph viewer, focused ccg ref node navigation, and node-open callback." + }, + "193": { + "name": "detectChanges", + "qualified_name": "mcp.handlers.detectChanges", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 268, + "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", + "reason": "identify changed files and functions with elevated review risk from recent git diff hunks." + }, + "1930": { + "name": "CanvasNode", + "qualified_name": "CanvasNode", + "kind": "type", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 28, + "intent": "extend graph API nodes with a numeric value used by the force layout.", + "reason": "extend graph API nodes with a numeric value used by the force layout." + }, + "1931": { + "name": "CanvasLink", + "qualified_name": "CanvasLink", + "kind": "type", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 35, + "intent": "allow force-graph to replace link endpoints with resolved node objects after simulation starts.", + "reason": "allow force-graph to replace link endpoints with resolved node objects after simulation starts." + }, + "1932": { + "name": "resize", + "qualified_name": "resize", + "kind": "function", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 76, + "intent": "keep the canvas dimensions synchronized with the available center panel space.", + "reason": "keep the canvas dimensions synchronized with the available center panel space." + }, + "1933": { + "name": "load", + "qualified_name": "load", + "kind": "function", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 148, + "intent": "refresh graph data when namespace or token changes.", + "reason": "refresh graph data when namespace or token changes." + }, + "1934": { + "name": "edgeKindVisible", + "qualified_name": "edgeKindVisible", + "kind": "function", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 177, + "intent": "decide whether an edge kind should be visible under the active graph filters.", + "reason": "decide whether an edge kind should be visible under the active graph filters." + }, + "1935": { + "name": "configureForces", + "qualified_name": "configureForces", + "kind": "function", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 186, + "intent": "spread dense CCG graphs enough that zooming creates readable separation between nodes.", + "reason": "spread dense CCG graphs enough that zooming creates readable separation between nodes." + }, + "1936": { + "name": "focusNode", + "qualified_name": "focusNode", + "kind": "function", + "file_path": "web/wiki/src/GraphView.tsx", + "namespace": "ccg", + "start_line": 219, + "intent": "center and zoom the graph around a resolved ccg:// reference destination.", + "reason": "center and zoom the graph around a resolved ccg:// reference destination." + }, + "1937": { + "name": "web/wiki/src/api.ts", + "qualified_name": "web/wiki/src/api.ts", + "kind": "file", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 1, + "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", + "reason": "describe one node in the Wiki RAG tree returned by ccg-server." + }, + "1938": { + "name": "TreeNode", + "qualified_name": "TreeNode", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 3, + "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", + "reason": "describe one node in the Wiki RAG tree returned by ccg-server." + }, + "1939": { + "name": "NodeDetails", + "qualified_name": "NodeDetails", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 15, + "intent": "expose structured symbol metadata returned by DB-backed or snapshot-backed Wiki trees.", + "reason": "expose structured symbol metadata returned by DB-backed or snapshot-backed Wiki trees." + }, + "194": { + "name": "getAffectedFlows", + "qualified_name": "mcp.handlers.getAffectedFlows", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 340, + "intent": "trace flows touched by changed nodes so regression review can happen at the flow level.", + "reason": "trace flows touched by changed nodes so regression review can happen at the flow level." + }, + "1940": { + "name": "AnnotationDetails", + "qualified_name": "AnnotationDetails", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 25, + "intent": "carry annotation summary and tags for symbol detail rendering.", + "reason": "carry annotation summary and tags for symbol detail rendering." + }, + "1941": { + "name": "AnnotationTag", + "qualified_name": "AnnotationTag", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 32, + "intent": "mirror one CCG annotation tag in the browser API type system.", + "reason": "mirror one CCG annotation tag in the browser API type system." + }, + "1942": { + "name": "CCGRef", + "qualified_name": "CCGRef", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 42, + "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", + "reason": "describe a parsed ccg:// cross-namespace reference attached to @see annotations." + }, + "1943": { + "name": "TreeResponse", + "qualified_name": "TreeResponse", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 51, + "intent": "carry a namespace-scoped RAG tree payload from the Wiki API.", + "reason": "carry a namespace-scoped RAG tree payload from the Wiki API." + }, + "1944": { + "name": "SearchResult", + "qualified_name": "SearchResult", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 58, + "intent": "represent a tree search hit that can be opened or added to LLM context.", + "reason": "represent a tree search hit that can be opened or added to LLM context." + }, + "1945": { + "name": "RetrieveResult", + "qualified_name": "RetrieveResult", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 69, + "intent": "represent one DB-backed retrieval result with structured graph and annotation evidence.", + "reason": "represent one DB-backed retrieval result with structured graph and annotation evidence." + }, + "1946": { + "name": "GraphNode", + "qualified_name": "GraphNode", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 85, + "intent": "describe one graph database node exposed to the Wiki graph viewer.", + "reason": "describe one graph database node exposed to the Wiki graph viewer." + }, + "1947": { + "name": "GraphEdge", + "qualified_name": "GraphEdge", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 99, + "intent": "describe one graph database edge exposed to the Wiki graph viewer.", + "reason": "describe one graph database edge exposed to the Wiki graph viewer." + }, + "1948": { + "name": "GraphResponse", + "qualified_name": "GraphResponse", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 109, + "intent": "carry bounded namespace graph data for the visual graph tab.", + "reason": "carry bounded namespace graph data for the visual graph tab." + }, + "1949": { + "name": "DocResponse", + "qualified_name": "DocResponse", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 118, + "intent": "return generated Markdown content for one documentation path.", + "reason": "return generated Markdown content for one documentation path." + }, + "195": { + "name": "validateRepoRoot", + "qualified_name": "mcp.handlers.validateRepoRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 431, + "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", + "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem." + }, + "1950": { + "name": "RefTarget", + "qualified_name": "RefTarget", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 127, + "intent": "describe the Wiki and graph destination resolved from one ccg:// ref.", + "reason": "describe the Wiki and graph destination resolved from one ccg:// ref." + }, + "1951": { + "name": "RefResponse", + "qualified_name": "RefResponse", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 137, + "intent": "return the parsed ref plus the browser navigation target for a ccg:// link.", + "reason": "return the parsed ref plus the browser navigation target for a ccg:// link." + }, + "1952": { + "name": "ContextResponse", + "qualified_name": "ContextResponse", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 144, + "intent": "return a server-assembled Markdown bundle for selected docs.", + "reason": "return a server-assembled Markdown bundle for selected docs." + }, + "1953": { + "name": "APIError", + "qualified_name": "APIError", + "kind": "class", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 158, + "intent": "preserve HTTP status alongside user-facing Wiki API errors.", + "reason": "preserve HTTP status alongside user-facing Wiki API errors." + }, + "1954": { + "name": "constructor", + "qualified_name": "APIError.constructor", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 162, + "intent": "attach the HTTP status to a normal Error instance.", + "reason": "attach the HTTP status to a normal Error instance." + }, + "1955": { + "name": "request", + "qualified_name": "request", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 169, + "intent": "apply bearer auth and consistent JSON error handling to Wiki API calls.", + "reason": "apply bearer auth and consistent JSON error handling to Wiki API calls." + }, + "1956": { + "name": "listNamespaces", + "qualified_name": "listNamespaces", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 198, + "intent": "load namespaces available to the Wiki selector.", + "reason": "load namespaces available to the Wiki selector." + }, + "1957": { + "name": "TreeRequest", + "qualified_name": "TreeRequest", + "kind": "type", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 203, + "intent": "describe a bounded Wiki tree request used for lazy folder expansion.", + "reason": "describe a bounded Wiki tree request used for lazy folder expansion." + }, + "1958": { + "name": "getTree", + "qualified_name": "getTree", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 209, + "intent": "load the RAG tree or a bounded subtree for the active namespace.", + "reason": "load the RAG tree or a bounded subtree for the active namespace." + }, + "1959": { + "name": "getDoc", + "qualified_name": "getDoc", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 221, + "intent": "load generated Markdown for the selected tree item.", + "reason": "load generated Markdown for the selected tree item." + }, + "196": { + "name": "validateRepoRootWithin", + "qualified_name": "mcp.validateRepoRootWithin", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 439, + "intent": "prevent git-based analysis from reading paths outside the configured project boundaries.", + "reason": "prevent git-based analysis from reading paths outside the configured project boundaries." + }, + "1960": { + "name": "resolveRef", + "qualified_name": "resolveRef", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 227, + "intent": "resolve a ccg:// annotation reference for Wiki doc navigation and graph focus.", + "reason": "resolve a ccg:// annotation reference for Wiki doc navigation and graph focus." + }, + "1961": { + "name": "searchDocs", + "qualified_name": "searchDocs", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 233, + "intent": "search the active namespace's RAG tree by label and summary.", + "reason": "search the active namespace's RAG tree by label and summary." + }, + "1962": { + "name": "retrieveDocs", + "qualified_name": "retrieveDocs", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 242, + "intent": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", + "reason": "retrieve ranked generated docs using DB-backed graph and annotation evidence." + }, + "1963": { + "name": "getGraph", + "qualified_name": "getGraph", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 256, + "intent": "load a bounded namespace graph for the visual graph tab.", + "reason": "load a bounded namespace graph for the visual graph tab." + }, + "1964": { + "name": "buildContext", + "qualified_name": "buildContext", + "kind": "function", + "file_path": "web/wiki/src/api.ts", + "namespace": "ccg", + "start_line": 262, + "intent": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", + "reason": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block." + }, + "197": { + "name": "configuredAnalysisRoots", + "qualified_name": "mcp.configuredAnalysisRoots", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 463, + "intent": "build the allowlist used by path validation so each source of truth contributes exactly once.", + "reason": "build the allowlist used by path validation so each source of truth contributes exactly once." + }, + "198": { + "name": "sliceContainsString", + "qualified_name": "mcp.sliceContainsString", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 477, + "intent": "linear membership check for small string slices used by allowlist evaluation.", + "reason": "linear membership check for small string slices used by allowlist evaluation." + }, + "199": { + "name": "validatePathWithinAllowedRoots", + "qualified_name": "mcp.validatePathWithinAllowedRoots", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", + "namespace": "ccg", + "start_line": 484, + "intent": "enforce that user-supplied paths cannot escape the configured analysis boundary.", + "reason": "enforce that user-supplied paths cannot escape the configured analysis boundary." + }, + "201": { + "name": "minimalContextCommInfo", + "qualified_name": "mcp.minimalContextCommInfo", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_context.go", + "namespace": "ccg", + "start_line": 20, + "intent": "serialize minimal-context community summaries without introducing extra response fields.", + "reason": "serialize minimal-context community summaries without introducing extra response fields." + }, + "202": { + "name": "minimalContextFlowInfo", + "qualified_name": "mcp.minimalContextFlowInfo", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_context.go", + "namespace": "ccg", + "start_line": 27, + "intent": "serialize minimal-context flow summaries without introducing extra response fields.", + "reason": "serialize minimal-context flow summaries without introducing extra response fields." + }, + "203": { + "name": "minimalContextResponse", + "qualified_name": "mcp.minimalContextResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_context.go", + "namespace": "ccg", + "start_line": 34, + "intent": "keep the minimal-context wire shape explicit without changing serialized output.", + "reason": "keep the minimal-context wire shape explicit without changing serialized output." + }, + "204": { + "name": "getMinimalContext", + "qualified_name": "mcp.handlers.getMinimalContext", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_context.go", + "namespace": "ccg", + "start_line": 49, + "intent": "give agents a cheap first read of namespace state before they spend tokens on deeper graph queries.", + "reason": "give agents a cheap first read of namespace state before they spend tokens on deeper graph queries." + }, + "205": { + "name": "suggestTools", + "qualified_name": "mcp.suggestTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_context.go", + "namespace": "ccg", + "start_line": 166, + "intent": "steer callers toward high-signal graph operations without requiring them to know the full tool catalog.", + "reason": "steer callers toward high-signal graph operations without requiring them to know the full tool catalog." + }, + "207": { + "name": "crossRefItem", + "qualified_name": "mcp.crossRefItem", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", + "namespace": "ccg", + "start_line": 17, + "intent": "expose symbolic target identity and derived resolution state without internal row metadata.", + "reason": "expose symbolic target identity and derived resolution state without internal row metadata." + }, + "208": { + "name": "listCrossRefsResponse", + "qualified_name": "mcp.listCrossRefsResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", + "namespace": "ccg", + "start_line": 31, + "intent": "keep the requested namespace and direction visible next to the reference list.", + "reason": "keep the requested namespace and direction visible next to the reference list." + }, + "209": { + "name": "listCrossRefs", + "qualified_name": "mcp.handlers.listCrossRefs", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", + "namespace": "ccg", + "start_line": 42, + "intent": "give agents a repository-level dependency map derived from ccg:// annotations.", + "reason": "give agents a repository-level dependency map derived from ccg:// annotations." + }, + "211": { + "name": "describeDecl", + "qualified_name": "mcp.describeDecl", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_describe.go", + "namespace": "ccg", + "start_line": 35, + "intent": "give a reader a name, a line to open, and why it exists.", + "reason": "give a reader a name, a line to open, and why it exists." + }, + "212": { + "name": "describeChild", + "qualified_name": "mcp.describeChild", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_describe.go", + "namespace": "ccg", + "start_line": 47, + "intent": "let a caller descend one step at a time instead of reading a whole subtree.", + "reason": "let a caller descend one step at a time instead of reading a whole subtree." + }, + "213": { + "name": "describeSuggestion", + "qualified_name": "mcp.describeSuggestion", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_describe.go", + "namespace": "ccg", + "start_line": 56, + "intent": "turn a wrong path into the right one instead of into an empty answer.", + "reason": "turn a wrong path into the right one instead of into an empty answer." + }, + "214": { + "name": "describeResponse", + "qualified_name": "mcp.describeResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_describe.go", + "namespace": "ccg", + "start_line": 72, + "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", + "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess." + }, + "216": { + "name": "newDescribeResponse", + "qualified_name": "mcp.newDescribeResponse", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_describe.go", + "namespace": "ccg", + "start_line": 126, + "intent": "keep one conversion so the tool's shape cannot drift from the service's.", + "reason": "keep one conversion so the tool's shape cannot drift from the service's." + }, + "219": { + "name": "ragIndexRoot", + "qualified_name": "mcp.handlers.ragIndexRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_docs.go", + "namespace": "ccg", + "start_line": 17, + "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", + "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts." + }, + "220": { + "name": "getDocContent", + "qualified_name": "mcp.handlers.getDocContent", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_docs.go", + "namespace": "ccg", + "start_line": 32, + "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", + "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions." + }, + "221": { + "name": "resolveSafeRoot", + "qualified_name": "mcp.resolveSafeRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_docs.go", + "namespace": "ccg", + "start_line": 86, + "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", + "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks." + }, + "222": { + "name": "safePathUnderRoot", + "qualified_name": "mcp.safePathUnderRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_docs.go", + "namespace": "ccg", + "start_line": 113, + "intent": "reject relative paths that would resolve outside the resolved docs root.", + "reason": "reject relative paths that would resolve outside the resolved docs root." + }, + "224": { + "name": "graphFlowInfo", + "qualified_name": "mcp.graphFlowInfo", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_graph.go", + "namespace": "ccg", + "start_line": 13, + "intent": "serialize listFlows results with the legacy response shape.", + "reason": "serialize listFlows results with the legacy response shape." + }, + "226": { + "name": "listFlows", + "qualified_name": "mcp.handlers.listFlows", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_graph.go", + "namespace": "ccg", + "start_line": 33, + "intent": "Exposes stored call flows in a summarized format to aid in exploration and prioritization.", + "reason": "Exposes stored call flows in a summarized format to aid in exploration and prioritization." + }, + "227": { + "name": "derivedStateFlows", + "qualified_name": "mcp.derivedStateFlows", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_graph.go", + "namespace": "ccg", + "start_line": 83, + "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", + "reason": "describe flow-membership freshness so callers know when to re-run postprocess." + }, + "228": { + "name": "derivedStateSummary", + "qualified_name": "mcp.derivedStateSummary", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_graph.go", + "namespace": "ccg", + "start_line": 94, + "intent": "merge community and flow freshness hints into a single derived-state map for status responses.", + "reason": "merge community and flow freshness hints into a single derived-state map for status responses." + }, + "230": { + "name": "namespaceCount", + "qualified_name": "mcp.namespaceCount", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_namespace.go", + "namespace": "ccg", + "start_line": 14, + "intent": "give list_namespaces a typed row for the distinct-namespace aggregate.", + "reason": "give list_namespaces a typed row for the distinct-namespace aggregate." + }, + "231": { + "name": "listNamespacesResponse", + "qualified_name": "mcp.listNamespacesResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_namespace.go", + "namespace": "ccg", + "start_line": 21, + "intent": "report which namespaces contain graph data so callers can scope later queries.", + "reason": "report which namespaces contain graph data so callers can scope later queries." + }, + "232": { + "name": "listNamespaces", + "qualified_name": "mcp.handlers.listNamespaces", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_namespace.go", + "namespace": "ccg", + "start_line": 31, + "intent": "let agents discover available namespaces before scoping search or graph queries.", + "reason": "let agents discover available namespaces before scoping search or graph queries." + }, + "234": { + "name": "buildOrUpdateGraphResponse", + "qualified_name": "mcp.buildOrUpdateGraphResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 22, + "intent": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format.", + "reason": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format." + }, + "235": { + "name": "runPostprocessResponse", + "qualified_name": "mcp.runPostprocessResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 33, + "intent": "serialize run_postprocess results with a fixed JSON schema without changing the wire format.", + "reason": "serialize run_postprocess results with a fixed JSON schema without changing the wire format." + }, + "236": { + "name": "refreshSearchDocuments", + "qualified_name": "mcp.handlers.refreshSearchDocuments", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 43, + "intent": "refresh search documents through the injected override, defaulting to the service impl.", + "reason": "refresh search documents through the injected override, defaulting to the service impl." + }, + "237": { + "name": "withParseLimitsFromRequest", + "qualified_name": "mcp.handlers.withParseLimitsFromRequest", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 51, + "intent": "apply per-request parse limits without mutating the shared handler dependency configuration.", + "reason": "apply per-request parse limits without mutating the shared handler dependency configuration." + }, + "238": { + "name": "graphService", + "qualified_name": "mcp.handlers.graphService", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 66, + "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", + "reason": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request." + }, + "239": { + "name": "parseProject", + "qualified_name": "mcp.handlers.parseProject", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 96, + "intent": "Loads the entire project into the graph store using a simple parsing tool.", + "reason": "Loads the entire project into the graph store using a simple parsing tool." + }, + "240": { + "name": "buildOrUpdateGraph", + "qualified_name": "mcp.handlers.buildOrUpdateGraph", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 141, + "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", + "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing." + }, + "241": { + "name": "runPostprocess", + "qualified_name": "mcp.handlers.runPostprocess", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 282, + "intent": "Independently regenerates communities and search indexes from existing graph data and reports availability for flow bulk rebuilds.", + "reason": "Independently regenerates communities and search indexes from existing graph data and reports availability for flow bulk rebuilds." + }, + "242": { + "name": "validateAnalysisPath", + "qualified_name": "mcp.handlers.validateAnalysisPath", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 355, + "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", + "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins." + }, + "243": { + "name": "appendUniqueStrings", + "qualified_name": "mcp.appendUniqueStrings", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_parse.go", + "namespace": "ccg", + "start_line": 378, + "intent": "append values to a slice while preserving uniqueness for skipped-step reporting.", + "reason": "append values to a slice while preserving uniqueness for skipped-step reporting." + }, + "245": { + "name": "annotationTagItem", + "qualified_name": "mcp.annotationTagItem", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 29, + "intent": "expose annotation tags with typed fields for getAnnotation callers.", + "reason": "expose annotation tags with typed fields for getAnnotation callers." + }, + "246": { + "name": "annotationResponse", + "qualified_name": "mcp.annotationResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 40, + "intent": "preserve a stable response envelope for annotation summary, context, and tags.", + "reason": "preserve a stable response envelope for annotation summary, context, and tags." + }, + "247": { + "name": "queryGraphEvidence", + "qualified_name": "mcp.queryGraphEvidence", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 48, + "intent": "expose edge location details that justify caller/callee confidence labels.", + "reason": "expose edge location details that justify caller/callee confidence labels." + }, + "248": { + "name": "queryGraphResultItem", + "qualified_name": "mcp.queryGraphResultItem", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 56, + "intent": "preserve a stable DTO for paged graph traversal results.", + "reason": "preserve a stable DTO for paged graph traversal results." + }, + "249": { + "name": "queryGraphMetadata", + "qualified_name": "mcp.queryGraphMetadata", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 69, + "intent": "explain result counts, truncation, and strict-versus-tentative composition in queryGraph responses.", + "reason": "explain result counts, truncation, and strict-versus-tentative composition in queryGraph responses." + }, + "250": { + "name": "queryGraphResponse", + "qualified_name": "mcp.queryGraphResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 83, + "intent": "preserve a stable response envelope for predefined graph traversals and their evidence.", + "reason": "preserve a stable response envelope for predefined graph traversals and their evidence." + }, + "251": { + "name": "federatedNamespaceEntry", + "qualified_name": "mcp.federatedNamespaceEntry", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 93, + "intent": "label per-namespace payloads and isolate per-namespace failures in federated reads.", + "reason": "label per-namespace payloads and isolate per-namespace failures in federated reads." + }, + "253": { + "name": "listGraphStatsResponse", + "qualified_name": "mcp.listGraphStatsResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 115, + "intent": "preserve a stable typed JSON response for graph statistics without changing the wire format.", + "reason": "preserve a stable typed JSON response for graph statistics without changing the wire format." + }, + "254": { + "name": "getNode", + "qualified_name": "mcp.handlers.getNode", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 130, + "intent": "look up a node by qualified name so callers can retrieve its core identity and location metadata.", + "reason": "look up a node by qualified name so callers can retrieve its core identity and location metadata." + }, + "255": { + "name": "search", + "qualified_name": "mcp.handlers.search", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 177, + "intent": "search graph nodes efficiently by keyword and optional path prefix filtering.", + "reason": "search graph nodes efficiently by keyword and optional path prefix filtering." + }, + "256": { + "name": "searchFederated", + "qualified_name": "mcp.handlers.searchFederated", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 228, + "intent": "answer one search across several repositories with per-item namespace labels.", + "reason": "answer one search across several repositories with per-item namespace labels." + }, + "257": { + "name": "getAnnotation", + "qualified_name": "mcp.handlers.getAnnotation", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 254, + "intent": "fetch stored annotation tags and summary data so semantic search results can show business context.", + "reason": "fetch stored annotation tags and summary data so semantic search results can show business context." + }, + "258": { + "name": "queryGraph", + "qualified_name": "mcp.handlers.queryGraph", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 314, + "intent": "expose repeated graph traversals through one pattern-driven tool entry point.", + "reason": "expose repeated graph traversals through one pattern-driven tool entry point." + }, + "259": { + "name": "queryGraphFederatedResponse", + "qualified_name": "mcp.queryGraphFederatedResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 368, + "intent": "group per-namespace traversal outcomes under one envelope with per-namespace errors.", + "reason": "group per-namespace traversal outcomes under one envelope with per-namespace errors." + }, + "260": { + "name": "queryGraphFederated", + "qualified_name": "mcp.handlers.queryGraphFederated", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 376, + "intent": "keep federated traversal per-namespace so a missing target in one namespace never fails the rest.", + "reason": "keep federated traversal per-namespace so a missing target in one namespace never fails the rest." + }, + "261": { + "name": "queryGraphInNamespace", + "qualified_name": "mcp.handlers.queryGraphInNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 405, + "intent": "share one traversal implementation between single-namespace and federated query_graph calls.", + "reason": "share one traversal implementation between single-namespace and federated query_graph calls." + }, + "262": { + "name": "callQueryPatternEdges", + "qualified_name": "mcp.handlers.callQueryPatternEdges", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 554, + "intent": "limit evidence lookup to the response page to avoid scanning full graph.", + "reason": "limit evidence lookup to the response page to avoid scanning full graph." + }, + "263": { + "name": "listGraphStats", + "qualified_name": "mcp.handlers.listGraphStats", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 586, + "intent": "summarize the current graph load state with kind and language distributions.", + "reason": "summarize the current graph load state with kind and language distributions." + }, + "264": { + "name": "graphStatsInNamespace", + "qualified_name": "mcp.handlers.graphStatsInNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 610, + "intent": "share one statistics assembly between single-namespace and federated calls.", + "reason": "share one statistics assembly between single-namespace and federated calls." + }, + "265": { + "name": "federatedGraphStatsEntry", + "qualified_name": "mcp.federatedGraphStatsEntry", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 627, + "intent": "keep per-namespace statistics separable instead of summing unrelated graphs.", + "reason": "keep per-namespace statistics separable instead of summing unrelated graphs." + }, + "266": { + "name": "listGraphStatsFederated", + "qualified_name": "mcp.handlers.listGraphStatsFederated", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 634, + "intent": "give one call visibility over several repositories without merging their counts.", + "reason": "give one call visibility over several repositories without merging their counts." + }, + "267": { + "name": "validateQueryGraphLimit", + "qualified_name": "mcp.validateQueryGraphLimit", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 651, + "intent": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination.", + "reason": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination." + }, + "268": { + "name": "compactQueryTargetAmbiguity", + "qualified_name": "mcp.compactQueryTargetAmbiguity", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handler_query.go", + "namespace": "ccg", + "start_line": 663, + "intent": "compress ambiguous short-symbol matches into one line so callers can choose the intended node.", + "reason": "compress ambiguous short-symbol matches into one line so callers can choose the intended node." + }, + "270": { + "name": "pagination", + "qualified_name": "mcp.pagination", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 23, + "intent": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract.", + "reason": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract." + }, + "271": { + "name": "handlers", + "qualified_name": "mcp.handlers", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 33, + "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", + "reason": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache." + }, + "272": { + "name": "logger", + "qualified_name": "mcp.handlers.logger", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 41, + "intent": "give handlers a consistent logging interface without repeating nil checks.", + "reason": "give handlers a consistent logging interface without repeating nil checks." + }, + "273": { + "name": "applyNamespace", + "qualified_name": "mcp.handlers.applyNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 50, + "intent": "attach the requested namespace to context before downstream stores and analyzers run.", + "reason": "attach the requested namespace to context before downstream stores and analyzers run." + }, + "274": { + "name": "cachedExecute", + "qualified_name": "mcp.handlers.cachedExecute", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 62, + "intent": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", + "reason": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped." + }, + "275": { + "name": "resolveNamespace", + "qualified_name": "mcp.resolveNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 98, + "intent": "prefer an explicit request namespace while falling back to the namespace already carried on context.", + "reason": "prefer an explicit request namespace while falling back to the namespace already carried on context." + }, + "276": { + "name": "requestNamespace", + "qualified_name": "mcp.requestNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 106, + "intent": "read the canonical namespace isolation argument.", + "reason": "read the canonical namespace isolation argument." + }, + "277": { + "name": "requestNamespaces", + "qualified_name": "mcp.requestNamespaces", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 113, + "intent": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", + "reason": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched." + }, + "278": { + "name": "makeCacheKey", + "qualified_name": "mcp.makeCacheKey", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 137, + "intent": "turn request parameters into a stable string key so tool-result caching can reuse previous responses.", + "reason": "turn request parameters into a stable string key so tool-result caching can reuse previous responses." + }, + "279": { + "name": "marshalJSON", + "qualified_name": "mcp.marshalJSON", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 149, + "intent": "serialize handler payloads into a stable JSON string for MCP responses and cache keys.", + "reason": "serialize handler payloads into a stable JSON string for MCP responses and cache keys." + }, + "280": { + "name": "toolResultErr", + "qualified_name": "mcp.toolResultErr", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 160, + "intent": "preserve the MCP error response that should be returned to the user inside normal Go error flow.", + "reason": "preserve the MCP error response that should be returned to the user inside normal Go error flow." + }, + "282": { + "name": "newToolResultErr", + "qualified_name": "mcp.newToolResultErr", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 175, + "intent": "propagate tool failures upward together with the MCP error response that should be shown to callers.", + "reason": "propagate tool failures upward together with the MCP error response that should be shown to callers." + }, + "283": { + "name": "missingParamResult", + "qualified_name": "mcp.missingParamResult", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 185, + "intent": "convert missing required parameters into one consistent user-input error response.", + "reason": "convert missing required parameters into one consistent user-input error response." + }, + "284": { + "name": "nodeNotFoundErr", + "qualified_name": "mcp.nodeNotFoundErr", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 192, + "intent": "reuse one consistent node-not-found message across handlers.", + "reason": "reuse one consistent node-not-found message across handlers." + }, + "285": { + "name": "validatePositiveLimit", + "qualified_name": "mcp.validatePositiveLimit", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 197, + "intent": "reject zero and negative list limits before handlers hit database queries.", + "reason": "reject zero and negative list limits before handlers hit database queries." + }, + "286": { + "name": "validateOffset", + "qualified_name": "mcp.validateOffset", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 213, + "intent": "let a caller who mistyped an offset read what went wrong instead of a transport failure.", + "reason": "let a caller who mistyped an offset read what went wrong instead of a transport failure." + }, + "287": { + "name": "unwrapToolResultErr", + "qualified_name": "mcp.unwrapToolResultErr", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 223, + "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", + "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point." + }, + "288": { + "name": "finalizeToolResult", + "qualified_name": "mcp.finalizeToolResult", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 238, + "intent": "normalize success strings and user-facing tool errors at one common handler exit path.", + "reason": "normalize success strings and user-facing tool errors at one common handler exit path." + }, + "289": { + "name": "nodeSummary", + "qualified_name": "mcp.nodeSummary", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 251, + "intent": "reuse one typed node representation across multiple tool responses.", + "reason": "reuse one typed node representation across multiple tool responses." + }, + "290": { + "name": "nodeToSummary", + "qualified_name": "mcp.nodeToSummary", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/handlers.go", + "namespace": "ccg", + "start_line": 264, + "intent": "reuse one typed node representation across multiple tool responses.", + "reason": "reuse one typed node representation across multiple tool responses." + }, + "292": { + "name": "LimitHTTPBody", + "qualified_name": "mcp.LimitHTTPBody", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/http.go", + "namespace": "ccg", + "start_line": 14, + "intent": "cap request memory usage before MCP handlers allocate or parse large request bodies.", + "reason": "cap request memory usage before MCP handlers allocate or parse large request bodies." + }, + "294": { + "name": "namespaceRoot", + "qualified_name": "mcp.handlers.namespaceRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", + "namespace": "ccg", + "start_line": 16, + "intent": "give namespace path resolution one shared root, defaulting to \"namespaces\".", + "reason": "give namespace path resolution one shared root, defaulting to \"namespaces\"." + }, + "295": { + "name": "safeNamespaceRoot", + "qualified_name": "mcp.handlers.safeNamespaceRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", + "namespace": "ccg", + "start_line": 27, + "intent": "resolve namespace paths under a trusted, real filesystem location.", + "reason": "resolve namespace paths under a trusted, real filesystem location." + }, + "296": { + "name": "resolveNamespacePath", + "qualified_name": "mcp.handlers.resolveNamespacePath", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", + "namespace": "ccg", + "start_line": 47, + "intent": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", + "reason": "reject path traversal and symlink escapes before any namespace-scoped filesystem read." + }, + "297": { + "name": "validateNamespacePath", + "qualified_name": "mcp.validateNamespacePath", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", + "namespace": "ccg", + "start_line": 72, + "intent": "keep namespace path validation in one place shared across handler files.", + "reason": "keep namespace path validation in one place shared across handler files." + }, + "298": { + "name": "ensureNoSymlinkInPath", + "qualified_name": "mcp.ensureNoSymlinkInPath", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", + "namespace": "ccg", + "start_line": 78, + "intent": "prevent symlink traversal from escaping the namespace root before a read.", + "reason": "prevent symlink traversal from escaping the namespace root before a read." + }, + "300": { + "name": "promptHandlers", + "qualified_name": "mcp.promptHandlers", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 28, + "intent": "Groups dependencies so prompt handlers can reuse the shared database and analyzers.", + "reason": "Groups dependencies so prompt handlers can reuse the shared database and analyzers." + }, + "302": { + "name": "reviewChanges", + "qualified_name": "mcp.promptHandlers.reviewChanges", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 44, + "intent": "Provides a single view of high-risk functions before reviewing changes.", + "reason": "Provides a single view of high-risk functions before reviewing changes." + }, + "303": { + "name": "debugIssue", + "qualified_name": "mcp.promptHandlers.debugIssue", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 92, + "intent": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description.", + "reason": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description." + }, + "304": { + "name": "onboardDeveloper", + "qualified_name": "mcp.promptHandlers.onboardDeveloper", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 186, + "intent": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", + "reason": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions." + }, + "305": { + "name": "langStat", + "qualified_name": "mcp.langStat", + "kind": "class", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 201, + "intent": "sort language counts without exposing a transport type to application ports.", + "reason": "sort language counts without exposing a transport type to application ports." + }, + "306": { + "name": "preMergeCheck", + "qualified_name": "mcp.promptHandlers.preMergeCheck", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 242, + "intent": "Consolidates merge-time check items into a single prompt to assist with pre-release verification.", + "reason": "Consolidates merge-time check items into a single prompt to assist with pre-release verification." + }, + "307": { + "name": "promptLimitArg", + "qualified_name": "mcp.promptLimitArg", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 285, + "intent": "clamp the optional prompt limit argument to the handler's hard cap.", + "reason": "clamp the optional prompt limit argument to the handler's hard cap." + }, + "308": { + "name": "appendPromptTruncation", + "qualified_name": "mcp.appendPromptTruncation", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 299, + "intent": "append a visible truncation marker when a prompt section omits extra items.", + "reason": "append a visible truncation marker when a prompt section omits extra items." + }, + "310": { + "name": "promptResult", + "qualified_name": "mcp.promptResult", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 320, + "intent": "Enables prompt handlers to generate consistent user message responses from plain strings.", + "reason": "Enables prompt handlers to generate consistent user message responses from plain strings." + }, + "311": { + "name": "resolvePromptNamespace", + "qualified_name": "mcp.resolvePromptNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 335, + "intent": "pick the namespace for a prompt invocation, preferring an explicit argument over context.", + "reason": "pick the namespace for a prompt invocation, preferring an explicit argument over context." + }, + "312": { + "name": "promptNamespaceRoot", + "qualified_name": "mcp.promptNamespaceRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts.go", + "namespace": "ccg", + "start_line": 343, + "intent": "resolve the on-disk root used to validate prompt repo paths, falling back to the namespace default.", + "reason": "resolve the on-disk root used to validate prompt repo paths, falling back to the namespace default." + }, + "314": { + "name": "registerPrompts", + "qualified_name": "mcp.registerPrompts", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/prompts_register.go", + "namespace": "ccg", + "start_line": 13, + "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", + "reason": "package common review, onboarding, and debugging flows into reusable server prompts." + }, + "316": { + "name": "NewServer", + "qualified_name": "mcp.NewServer", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/server.go", + "namespace": "ccg", + "start_line": 16, + "intent": "Configures a server instance that exposes code graph features as MCP tools and prompts.", + "reason": "Configures a server instance that exposes code graph features as MCP tools and prompts." + }, + "318": { + "name": "analysisTools", + "qualified_name": "mcp.analysisTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_analysis.go", + "namespace": "ccg", + "start_line": 11, + "intent": "keep analysis capabilities grouped so server startup can expose them consistently.", + "reason": "keep analysis capabilities grouped so server startup can expose them consistently." + }, + "320": { + "name": "contextTools", + "qualified_name": "mcp.contextTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_context.go", + "namespace": "ccg", + "start_line": 11, + "intent": "keep the context-oriented MCP surface grouped and reusable during server startup.", + "reason": "keep the context-oriented MCP surface grouped and reusable during server startup." + }, + "322": { + "name": "docsTools", + "qualified_name": "mcp.docsTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_docs.go", + "namespace": "ccg", + "start_line": 11, + "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", + "reason": "keep documentation retrieval flows discoverable as one MCP tool family." + }, + "324": { + "name": "graphTools", + "qualified_name": "mcp.graphTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_graph.go", + "namespace": "ccg", + "start_line": 11, + "intent": "expose high-level graph inspection separately from low-level query primitives.", + "reason": "expose high-level graph inspection separately from low-level query primitives." + }, + "326": { + "name": "parseTools", + "qualified_name": "mcp.parseTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_parse.go", + "namespace": "ccg", + "start_line": 11, + "intent": "keep parsing and postprocess entry points available as one operational tool family.", + "reason": "keep parsing and postprocess entry points available as one operational tool family." + }, + "328": { + "name": "withNamespaceParam", + "qualified_name": "mcp.withNamespaceParam", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_query.go", + "namespace": "ccg", + "start_line": 11, + "intent": "give every namespace-aware MCP tool the same isolation parameter.", + "reason": "give every namespace-aware MCP tool the same isolation parameter." + }, + "329": { + "name": "withFederatedNamespaceParams", + "qualified_name": "mcp.withFederatedNamespaceParams", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_query.go", + "namespace": "ccg", + "start_line": 19, + "intent": "let federated read tools accept an explicit namespace set alongside the canonical single namespace.", + "reason": "let federated read tools accept an explicit namespace set alongside the canonical single namespace." + }, + "330": { + "name": "queryTools", + "qualified_name": "mcp.queryTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_query.go", + "namespace": "ccg", + "start_line": 27, + "intent": "expose reusable graph query primitives that other prompts and agents can compose.", + "reason": "expose reusable graph query primitives that other prompts and agents can compose." + }, + "332": { + "name": "registerTools", + "qualified_name": "mcp.registerTools", + "kind": "function", + "file_path": "internal/adapters/inbound/mcp/tools_register.go", + "namespace": "ccg", + "start_line": 10, + "intent": "centralize tool registration order so new tool families plug into one startup path.", + "reason": "centralize tool registration order so new tool families plug into one startup path." + }, + "334": { + "name": "SyncFunc", + "qualified_name": "webhook.SyncFunc", + "kind": "type", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 22, + "intent": "define the callback signature webhook intake invokes to trigger repository sync.", + "reason": "define the callback signature webhook intake invokes to trigger repository sync." + }, + "335": { + "name": "WebhookHandler", + "qualified_name": "webhook.WebhookHandler", + "kind": "class", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 25, + "intent": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler.", + "reason": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler." + }, + "336": { + "name": "WebhookHandlerConfig", + "qualified_name": "webhook.WebhookHandlerConfig", + "kind": "class", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 34, + "intent": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", + "reason": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch." + }, + "337": { + "name": "NewWebhookHandler", + "qualified_name": "webhook.NewWebhookHandler", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 49, + "intent": "keep the default construction path small while routing all configuration through the shared config builder.", + "reason": "keep the default construction path small while routing all configuration through the shared config builder." + }, + "338": { + "name": "NewWebhookHandlerWithOptions", + "qualified_name": "webhook.NewWebhookHandlerWithOptions", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 57, + "intent": "preserve older call sites while the config-based constructor owns the actual assembly logic.", + "reason": "preserve older call sites while the config-based constructor owns the actual assembly logic." + }, + "339": { + "name": "NewWebhookHandlerWithConfig", + "qualified_name": "webhook.NewWebhookHandlerWithConfig", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 65, + "intent": "make webhook intake configurable without duplicating constructor logic across CLI and tests.", + "reason": "make webhook intake configurable without duplicating constructor logic across CLI and tests." + }, + "340": { + "name": "pushEvent", + "qualified_name": "webhook.pushEvent", + "kind": "class", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 74, + "intent": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch.", + "reason": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch." + }, + "341": { + "name": "ServeHTTP", + "qualified_name": "webhook.WebhookHandler.ServeHTTP", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 93, + "intent": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", + "reason": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline." + }, + "342": { + "name": "verifySignature", + "qualified_name": "webhook.WebhookHandler.verifySignature", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 177, + "intent": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", + "reason": "authenticate webhook payloads before the sync pipeline trusts their repository metadata." + }, + "343": { + "name": "isDeletedBranchPush", + "qualified_name": "webhook.isDeletedBranchPush", + "kind": "function", + "file_path": "internal/adapters/inbound/webhook/handler.go", + "namespace": "ccg", + "start_line": 198, + "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", + "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head." + }, + "345": { + "name": "Config", + "qualified_name": "wikiserver.Config", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 33, + "intent": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data.", + "reason": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data." + }, + "346": { + "name": "Server", + "qualified_name": "wikiserver.Server", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 46, + "intent": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers.", + "reason": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers." + }, + "347": { + "name": "New", + "qualified_name": "wikiserver.New", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 57, + "intent": "fail server startup early when --wiki-dir points at an unusable dist directory.", + "reason": "fail server startup early when --wiki-dir points at an unusable dist directory." + }, + "348": { + "name": "StaticHandler", + "qualified_name": "wikiserver.Server.StaticHandler", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 93, + "intent": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", + "reason": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary." + }, + "349": { + "name": "APIHandler", + "qualified_name": "wikiserver.Server.APIHandler", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 118, + "intent": "provide browser-friendly access to namespaces, Wiki trees, docs, search, and copied context.", + "reason": "provide browser-friendly access to namespaces, Wiki trees, docs, search, and copied context." + }, + "350": { + "name": "safeStaticPath", + "qualified_name": "wikiserver.Server.safeStaticPath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 132, + "intent": "resolve a request path under the static dist directory without allowing traversal.", + "reason": "resolve a request path under the static dist directory without allowing traversal." + }, + "351": { + "name": "handleNamespaces", + "qualified_name": "wikiserver.Server.handleNamespaces", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 146, + "intent": "return namespaces discovered from graph data.", + "reason": "return namespaces discovered from graph data." + }, + "352": { + "name": "handleTree", + "qualified_name": "wikiserver.Server.handleTree", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 172, + "intent": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", + "reason": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads." + }, + "353": { + "name": "handleSearch", + "qualified_name": "wikiserver.Server.handleSearch", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 199, + "intent": "search Wiki tree labels and summaries for the active namespace.", + "reason": "search Wiki tree labels and summaries for the active namespace." + }, + "354": { + "name": "handleRetrieve", + "qualified_name": "wikiserver.Server.handleRetrieve", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 237, + "intent": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract.", + "reason": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract." + }, + "355": { + "name": "readDBFallbackDoc", + "qualified_name": "wikiserver.Server.readDBFallbackDoc", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 275, + "intent": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", + "reason": "read DB fallback document content without crossing from a named namespace into shared/global docs roots." + }, + "356": { + "name": "handleGraph", + "qualified_name": "wikiserver.Server.handleGraph", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 283, + "intent": "return a bounded namespace graph for the browser force-directed graph viewer.", + "reason": "return a bounded namespace graph for the browser force-directed graph viewer." + }, + "357": { + "name": "handleDoc", + "qualified_name": "wikiserver.Server.handleDoc", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 332, + "intent": "read one generated Markdown document for display in the Wiki viewer.", + "reason": "read one generated Markdown document for display in the Wiki viewer." + }, + "358": { + "name": "handleRef", + "qualified_name": "wikiserver.Server.handleRef", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 376, + "intent": "resolve a ccg:// annotation reference to a Wiki target and optional graph node.", + "reason": "resolve a ccg:// annotation reference to a Wiki target and optional graph node." + }, + "359": { + "name": "handleContext", + "qualified_name": "wikiserver.Server.handleContext", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 424, + "intent": "assemble selected docs or summaries into one Markdown block for LLM context.", + "reason": "assemble selected docs or summaries into one Markdown block for LLM context." + }, + "360": { + "name": "loadWikiTree", + "qualified_name": "wikiserver.Server.loadWikiTree", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 481, + "intent": "load a Wiki tree from DB rows for browser navigation and return built_at metadata.", + "reason": "load a Wiki tree from DB rows for browser navigation and return built_at metadata." + }, + "361": { + "name": "loadWikiTreeRange", + "qualified_name": "wikiserver.Server.loadWikiTreeRange", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 486, + "intent": "build one bounded Wiki tree range from DB rows for lazy browser navigation.", + "reason": "build one bounded Wiki tree range from DB rows for lazy browser navigation." + }, + "362": { + "name": "readDoc", + "qualified_name": "wikiserver.Server.readDoc", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 499, + "intent": "enforce doc size limits before returning generated Markdown content.", + "reason": "enforce doc size limits before returning generated Markdown content." + }, + "363": { + "name": "readDocUnderRoot", + "qualified_name": "wikiserver.Server.readDocUnderRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 508, + "intent": "read a generated doc path from one explicit root with the standard Wiki size limit.", + "reason": "read a generated doc path from one explicit root with the standard Wiki size limit." + }, + "364": { + "name": "resolveDocPath", + "qualified_name": "wikiserver.Server.resolveDocPath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 523, + "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", + "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots." + }, + "365": { + "name": "findRefGraphNode", + "qualified_name": "wikiserver.Server.findRefGraphNode", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 570, + "intent": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", + "reason": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination." + }, + "366": { + "name": "retrieveResult", + "qualified_name": "wikiserver.retrieveResult", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 589, + "intent": "keep the browser contract stable while the answer behind it changes pipelines.", + "reason": "keep the browser contract stable while the answer behind it changes pipelines." + }, + "367": { + "name": "retrieveResultFromFile", + "qualified_name": "wikiserver.retrieveResultFromFile", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 608, + "intent": "show a file through the reasons its declarations gave, not just its path.", + "reason": "show a file through the reasons its declarations gave, not just its path." + }, + "368": { + "name": "contextRequest", + "qualified_name": "wikiserver.contextRequest", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 660, + "intent": "decode selected Wiki document paths from the context-copy request body.", + "reason": "decode selected Wiki document paths from the context-copy request body." + }, + "369": { + "name": "contextItem", + "qualified_name": "wikiserver.contextItem", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 666, + "intent": "report whether one requested context item was found in docs or tree summaries.", + "reason": "report whether one requested context item was found in docs or tree summaries." + }, + "370": { + "name": "contextResponse", + "qualified_name": "wikiserver.contextResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 675, + "intent": "return the assembled Markdown and per-item resolution status.", + "reason": "return the assembled Markdown and per-item resolution status." + }, + "371": { + "name": "refResponse", + "qualified_name": "wikiserver.refResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 681, + "intent": "return the resolved Wiki navigation target for one ccg:// ref.", + "reason": "return the resolved Wiki navigation target for one ccg:// ref." + }, + "372": { + "name": "refTarget", + "qualified_name": "wikiserver.refTarget", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 688, + "intent": "describe the doc and graph destinations available for a resolved ccg:// ref.", + "reason": "describe the doc and graph destinations available for a resolved ccg:// ref." + }, + "373": { + "name": "graphNode", + "qualified_name": "wikiserver.graphNode", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 698, + "intent": "describe one graph node in the Wiki force graph API.", + "reason": "describe one graph node in the Wiki force graph API." + }, + "374": { + "name": "graphEdge", + "qualified_name": "wikiserver.graphEdge", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 712, + "intent": "describe one directed graph edge in the Wiki force graph API.", + "reason": "describe one directed graph edge in the Wiki force graph API." + }, + "375": { + "name": "graphResponse", + "qualified_name": "wikiserver.graphResponse", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 722, + "intent": "return bounded graph data and truncation metadata to the Wiki UI.", + "reason": "return bounded graph data and truncation metadata to the Wiki UI." + }, + "376": { + "name": "annotationMarkdownBlock", + "qualified_name": "wikiserver.annotationMarkdownBlock", + "kind": "class", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 732, + "intent": "keep annotation Markdown output stable while preserving original tag ordering by first label occurrence.", + "reason": "keep annotation Markdown output stable while preserving original tag ordering by first label occurrence." + }, + "377": { + "name": "graphViewErrorMessage", + "qualified_name": "wikiserver.graphViewErrorMessage", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 738, + "intent": "map application graph-view stages back to the established Wiki HTTP error contract.", + "reason": "map application graph-view stages back to the established Wiki HTTP error contract." + }, + "378": { + "name": "graphNodeFromModel", + "qualified_name": "wikiserver.graphNodeFromModel", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 756, + "intent": "convert persisted graph node metadata into a browser graph payload.", + "reason": "convert persisted graph node metadata into a browser graph payload." + }, + "379": { + "name": "graphEdgeFromModel", + "qualified_name": "wikiserver.graphEdgeFromModel", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 789, + "intent": "convert persisted edge metadata into a stable browser graph edge payload.", + "reason": "convert persisted edge metadata into a stable browser graph edge payload." + }, + "380": { + "name": "docPathForSource", + "qualified_name": "wikiserver.docPathForSource", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 801, + "intent": "convert repository-relative source paths to their generated Markdown doc path.", + "reason": "convert repository-relative source paths to their generated Markdown doc path." + }, + "381": { + "name": "readDocFile", + "qualified_name": "wikiserver.readDocFile", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 810, + "intent": "enforce generated doc size limits and read the resolved Markdown file.", + "reason": "enforce generated doc size limits and read the resolved Markdown file." + }, + "382": { + "name": "findDocPath", + "qualified_name": "wikiserver.findDocPath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 829, + "intent": "find a tree node by its generated doc_path value.", + "reason": "find a tree node by its generated doc_path value." + }, + "383": { + "name": "findRefTreeNode", + "qualified_name": "wikiserver.findRefTreeNode", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 845, + "intent": "locate the Wiki tree node that best matches a parsed ccg:// ref.", + "reason": "locate the Wiki tree node that best matches a parsed ccg:// ref." + }, + "384": { + "name": "refPathMatchesTree", + "qualified_name": "wikiserver.refPathMatchesTree", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 864, + "intent": "compare a ccg:// path/symbol target against one Wiki tree node.", + "reason": "compare a ccg:// path/symbol target against one Wiki tree node." + }, + "385": { + "name": "refTargetFromMatches", + "qualified_name": "wikiserver.refTargetFromMatches", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 889, + "intent": "merge tree and graph matches into one browser navigation payload.", + "reason": "merge tree and graph matches into one browser navigation payload." + }, + "386": { + "name": "annotationDetailFromModel", + "qualified_name": "wikiserver.annotationDetailFromModel", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 923, + "intent": "convert a stored annotation into the same details shape used by wiki-index.json.", + "reason": "convert a stored annotation into the same details shape used by wiki-index.json." + }, + "387": { + "name": "sameRefPath", + "qualified_name": "wikiserver.sameRefPath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 939, + "intent": "match ccg:// file paths against graph and Wiki slash-separated paths.", + "reason": "match ccg:// file paths against graph and Wiki slash-separated paths." + }, + "388": { + "name": "symbolMatches", + "qualified_name": "wikiserver.symbolMatches", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 944, + "intent": "allow short symbol refs to match names and language-qualified names.", + "reason": "allow short symbol refs to match names and language-qualified names." + }, + "389": { + "name": "nodeMarkdown", + "qualified_name": "wikiserver.nodeMarkdown", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 955, + "intent": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", + "reason": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists." + }, + "390": { + "name": "nodeMarkdownSections", + "qualified_name": "wikiserver.nodeMarkdownSections", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 981, + "intent": "group fallback child nodes into stable sections that the Wiki visual renderer can cardify.", + "reason": "group fallback child nodes into stable sections that the Wiki visual renderer can cardify." + }, + "391": { + "name": "nodeMarkdownSection", + "qualified_name": "wikiserver.nodeMarkdownSection", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 991, + "intent": "map graph node kinds to generated docs section names for DB-backed Wiki fallback.", + "reason": "map graph node kinds to generated docs section names for DB-backed Wiki fallback." + }, + "392": { + "name": "nodeMarkdownChild", + "qualified_name": "wikiserver.nodeMarkdownChild", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1013, + "intent": "render one fallback tree child in the same symbol-card Markdown shape as generated docs.", + "reason": "render one fallback tree child in the same symbol-card Markdown shape as generated docs." + }, + "393": { + "name": "annotationMarkdownBlocks", + "qualified_name": "wikiserver.annotationMarkdownBlocks", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1049, + "intent": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", + "reason": "format annotation tags into labels already understood by the Wiki generated-doc renderer." + }, + "394": { + "name": "annotationTagMarkdownValue", + "qualified_name": "wikiserver.annotationTagMarkdownValue", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1111, + "intent": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON.", + "reason": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON." + }, + "395": { + "name": "formatParamMarkdownTag", + "qualified_name": "wikiserver.formatParamMarkdownTag", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1123, + "intent": "format @param tags consistently with browser-side generated doc fallback.", + "reason": "format @param tags consistently with browser-side generated doc fallback." + }, + "396": { + "name": "cleanMarkdownText", + "qualified_name": "wikiserver.cleanMarkdownText", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1138, + "intent": "keep fallback Markdown attributes single-line so the visual parser can read them predictably.", + "reason": "keep fallback Markdown attributes single-line so the visual parser can read them predictably." + }, + "397": { + "name": "markdownLineRange", + "qualified_name": "wikiserver.markdownLineRange", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1143, + "intent": "format graph node source ranges for generated-doc-compatible fallback Markdown.", + "reason": "format graph node source ranges for generated-doc-compatible fallback Markdown." + }, + "398": { + "name": "namespaceParam", + "qualified_name": "wikiserver.namespaceParam", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1157, + "intent": "normalize and validate the namespace query parameter shared by Wiki API endpoints.", + "reason": "normalize and validate the namespace query parameter shared by Wiki API endpoints." + }, + "399": { + "name": "validateNamespace", + "qualified_name": "wikiserver.validateNamespace", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1167, + "intent": "keep namespace path validation aligned with namespace filesystem rules.", + "reason": "keep namespace path validation aligned with namespace filesystem rules." + }, + "400": { + "name": "graphEdgeKindsParam", + "qualified_name": "wikiserver.graphEdgeKindsParam", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1175, + "intent": "parse the optional edge_kinds filter for the Wiki graph API.", + "reason": "parse the optional edge_kinds filter for the Wiki graph API." + }, + "401": { + "name": "boundedIntParam", + "qualified_name": "wikiserver.boundedIntParam", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1211, + "intent": "parse bounded integer query parameters for lightweight API pagination and tree depth.", + "reason": "parse bounded integer query parameters for lightweight API pagination and tree depth." + }, + "402": { + "name": "requireMethod", + "qualified_name": "wikiserver.requireMethod", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1227, + "intent": "reject unsupported HTTP methods with a consistent status code.", + "reason": "reject unsupported HTTP methods with a consistent status code." + }, + "404": { + "name": "writeError", + "qualified_name": "wikiserver.writeError", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1243, + "intent": "write a compact JSON error payload for browser API callers.", + "reason": "write a compact JSON error payload for browser API callers." + }, + "405": { + "name": "statusForReadErr", + "qualified_name": "wikiserver.statusForReadErr", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1252, + "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", + "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes." + }, + "406": { + "name": "safePath", + "qualified_name": "wikiserver.safePath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1266, + "intent": "resolve a relative path under one root while rejecting traversal and symlink escapes.", + "reason": "resolve a relative path under one root while rejecting traversal and symlink escapes." + }, + "407": { + "name": "safeAbsolutePath", + "qualified_name": "wikiserver.safeAbsolutePath", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1292, + "intent": "validate an absolute wiki-index path against one approved root.", + "reason": "validate an absolute wiki-index path against one approved root." + }, + "408": { + "name": "realPathRoot", + "qualified_name": "wikiserver.realPathRoot", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1311, + "intent": "resolve an allowed root to an absolute symlink-aware path for containment checks.", + "reason": "resolve an allowed root to an absolute symlink-aware path for containment checks." + }, + "409": { + "name": "resolveExistingDir", + "qualified_name": "wikiserver.resolveExistingDir", + "kind": "function", + "file_path": "internal/adapters/inbound/wikihttp/server.go", + "namespace": "ccg", + "start_line": 1326, + "intent": "resolve and validate an existing static asset directory.", + "reason": "resolve and validate an existing static asset directory." + }, + "410": { + "name": "internal/adapters/outbound/configfiles/includes.go", + "qualified_name": "internal/adapters/outbound/configfiles/includes.go", + "kind": "file", + "file_path": "internal/adapters/outbound/configfiles/includes.go", + "namespace": "ccg", + "start_line": 1, + "intent": "adapt repository include and exclude configuration parsing to the reposync application port.", + "reason": "adapt repository include and exclude configuration parsing to the reposync application port." + }, + "411": { + "name": "BuildScope", + "qualified_name": "configfiles.BuildScope", + "kind": "class", + "file_path": "internal/adapters/outbound/configfiles/includes.go", + "namespace": "ccg", + "start_line": 18, + "intent": "adapt repository include and exclude configuration parsing to the reposync application port.", + "reason": "adapt repository include and exclude configuration parsing to the reposync application port." + }, + "412": { + "name": "Load", + "qualified_name": "configfiles.BuildScope.Load", + "kind": "function", + "file_path": "internal/adapters/outbound/configfiles/includes.go", + "namespace": "ccg", + "start_line": 23, + "intent": "own repository build scope configuration I/O for webhook synchronization.", + "reason": "own repository build scope configuration I/O for webhook synchronization." + }, + "414": { + "name": "Root", + "qualified_name": "contentfiles.Root", + "kind": "class", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 16, + "intent": "centralize containment, symlink rejection, and atomic replacement for generated docs.", + "reason": "centralize containment, symlink rejection, and atomic replacement for generated docs." + }, + "415": { + "name": "NewRoot", + "qualified_name": "contentfiles.NewRoot", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 20, + "intent": "prevent application policy from handling absolute output paths.", + "reason": "prevent application policy from handling absolute output paths." + }, + "416": { + "name": "path", + "qualified_name": "contentfiles.Root.path", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 23, + "intent": "resolve a relative generated path only when every existing component remains inside the configured root and is not a symlink.", + "reason": "resolve a relative generated path only when every existing component remains inside the configured root and is not a symlink." + }, + "417": { + "name": "Validate", + "qualified_name": "contentfiles.Root.Validate", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 60, + "intent": "fail generation preflight before any output when a path could escape or traverse a symlink.", + "reason": "fail generation preflight before any output when a path could escape or traverse a symlink." + }, + "418": { + "name": "Read", + "qualified_name": "contentfiles.Root.Read", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 64, + "intent": "support manifest and managed-file policy without exposing absolute paths.", + "reason": "support manifest and managed-file policy without exposing absolute paths." + }, + "419": { + "name": "Write", + "qualified_name": "contentfiles.Root.Write", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 79, + "intent": "persist generated output only after safe-root validation and durable temporary-file completion.", + "reason": "persist generated output only after safe-root validation and durable temporary-file completion." + }, + "420": { + "name": "Remove", + "qualified_name": "contentfiles.Root.Remove", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 116, + "intent": "prune only the relative generated path selected by application manifest policy.", + "reason": "prune only the relative generated path selected by application manifest policy." + }, + "421": { + "name": "ModTime", + "qualified_name": "contentfiles.Root.ModTime", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 130, + "intent": "let docs lint compare source and generated timestamps through a narrow port.", + "reason": "let docs lint compare source and generated timestamps through a narrow port." + }, + "422": { + "name": "MarkdownFiles", + "qualified_name": "contentfiles.Root.MarkdownFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 147, + "intent": "provide default-namespace lint fallback when no manifest exists.", + "reason": "provide default-namespace lint fallback when no manifest exists." + }, + "423": { + "name": "syncDir", + "qualified_name": "contentfiles.syncDir", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/root.go", + "namespace": "ccg", + "start_line": 167, + "intent": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", + "reason": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior." + }, + "425": { + "name": "WikiIndexWriter", + "qualified_name": "contentfiles.WikiIndexWriter", + "kind": "class", + "file_path": "internal/adapters/outbound/contentfiles/wiki.go", + "namespace": "ccg", + "start_line": 19, + "intent": "prevent readers from observing partial built-in Wiki index snapshots.", + "reason": "prevent readers from observing partial built-in Wiki index snapshots." + }, + "426": { + "name": "NewWikiIndexWriter", + "qualified_name": "contentfiles.NewWikiIndexWriter", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/wiki.go", + "namespace": "ccg", + "start_line": 25, + "intent": "preserve the default .ccg output root while allowing CLI-configured state paths.", + "reason": "preserve the default .ccg output root while allowing CLI-configured state paths." + }, + "427": { + "name": "indexPath", + "qualified_name": "contentfiles.WikiIndexWriter.indexPath", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/wiki.go", + "namespace": "ccg", + "start_line": 28, + "intent": "map default and validated single-segment namespaces to their compatibility snapshot location.", + "reason": "map default and validated single-segment namespaces to their compatibility snapshot location." + }, + "428": { + "name": "WriteWikiIndex", + "qualified_name": "contentfiles.WikiIndexWriter.WriteWikiIndex", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/wiki.go", + "namespace": "ccg", + "start_line": 45, + "intent": "preserve the versioned built-in Wiki snapshot format at its namespace-specific path.", + "reason": "preserve the versioned built-in Wiki snapshot format at its namespace-specific path." + }, + "429": { + "name": "LoadWikiIndex", + "qualified_name": "contentfiles.LoadWikiIndex", + "kind": "function", + "file_path": "internal/adapters/outbound/contentfiles/wiki.go", + "namespace": "ccg", + "start_line": 78, + "intent": "round-trip compatibility fixtures and fallback readers through the outbound file adapter.", + "reason": "round-trip compatibility fixtures and fallback readers through the outbound file adapter." + }, + "430": { + "name": "internal/adapters/outbound/gitexec/git.go", + "qualified_name": "internal/adapters/outbound/gitexec/git.go", + "kind": "file", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 1, + "intent": "provide GitClient behavior using the local git executable", + "reason": "provide GitClient behavior using the local git executable" + }, + "431": { + "name": "ExecGitClient", + "qualified_name": "gitexec.ExecGitClient", + "kind": "class", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 20, + "intent": "provide GitClient behavior using the local git executable", + "reason": "provide GitClient behavior using the local git executable" + }, + "432": { + "name": "NewExecGitClient", + "qualified_name": "gitexec.NewExecGitClient", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 31, + "intent": "construct a GitClient that reads diffs from the local repository", + "reason": "construct a GitClient that reads diffs from the local repository" + }, + "433": { + "name": "ChangedFiles", + "qualified_name": "gitexec.ExecGitClient.ChangedFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 43, + "intent": "identify which repository paths changed since a base revision", + "reason": "identify which repository paths changed since a base revision" + }, + "434": { + "name": "DiffHunks", + "qualified_name": "gitexec.ExecGitClient.DiffHunks", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 75, + "intent": "map git diff output into file-level hunk ranges for overlap analysis", + "reason": "map git diff output into file-level hunk ranges for overlap analysis" + }, + "435": { + "name": "validateBaseRef", + "qualified_name": "gitexec.validateBaseRef", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 114, + "intent": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag.", + "reason": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag." + }, + "436": { + "name": "runGitLimited", + "qualified_name": "gitexec.runGitLimited", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 126, + "intent": "share a single bounded git invocation helper across diff operations", + "reason": "share a single bounded git invocation helper across diff operations" + }, + "437": { + "name": "runGitLimitedWithMax", + "qualified_name": "gitexec.runGitLimitedWithMax", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 134, + "intent": "prevent runaway git output from exhausting memory while preserving original errors", + "reason": "prevent runaway git output from exhausting memory while preserving original errors" + }, + "438": { + "name": "parseHunkHeader", + "qualified_name": "gitexec.parseHunkHeader", + "kind": "function", + "file_path": "internal/adapters/outbound/gitexec/git.go", + "namespace": "ccg", + "start_line": 172, + "intent": "decode git hunk metadata into line numbers usable for overlap checks", + "reason": "decode git hunk metadata into line numbers usable for overlap checks" + }, + "440": { + "name": "GitAuth", + "qualified_name": "gitrepo.GitAuth", + "kind": "class", + "file_path": "internal/adapters/outbound/gitrepo/auth.go", + "namespace": "ccg", + "start_line": 23, + "intent": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", + "reason": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch." + }, + "441": { + "name": "Resolve", + "qualified_name": "gitrepo.GitAuth.Resolve", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/auth.go", + "namespace": "ccg", + "start_line": 37, + "intent": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", + "reason": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites." + }, + "442": { + "name": "GenerateAppJWT", + "qualified_name": "gitrepo.GenerateAppJWT", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/auth.go", + "namespace": "ccg", + "start_line": 58, + "intent": "mint the app identity token needed to exchange for installation-scoped repository access.", + "reason": "mint the app identity token needed to exchange for installation-scoped repository access." + }, + "444": { + "name": "Checkout", + "qualified_name": "gitrepo.Checkout", + "kind": "class", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 32, + "intent": "expose one locked checkout capability while retaining go-git types inside the adapter.", + "reason": "expose one locked checkout capability while retaining go-git types inside the adapter." + }, + "445": { + "name": "NewCheckout", + "qualified_name": "gitrepo.NewCheckout", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 42, + "intent": "bind repository root, lock coordination, and transport authentication once at composition.", + "reason": "bind repository root, lock coordination, and transport authentication once at composition." + }, + "446": { + "name": "Sync", + "qualified_name": "gitrepo.Checkout.Sync", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 49, + "intent": "make the requested namespace checkout match the admitted remote branch before graph update.", + "reason": "make the requested namespace checkout match the admitted remote branch before graph update." + }, + "447": { + "name": "RepoLocker", + "qualified_name": "gitrepo.RepoLocker", + "kind": "class", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 60, + "intent": "keep repository-scoped git operations serialized across concurrent webhook deliveries.", + "reason": "keep repository-scoped git operations serialized across concurrent webhook deliveries." + }, + "448": { + "name": "repoLockMetadata", + "qualified_name": "gitrepo.repoLockMetadata", + "kind": "class", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 67, + "intent": "persist enough lock provenance to detect and clean up stale repository lock files safely.", + "reason": "persist enough lock provenance to detect and clean up stale repository lock files safely." + }, + "449": { + "name": "NewRepoLocker", + "qualified_name": "gitrepo.NewRepoLocker", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 78, + "intent": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree.", + "reason": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree." + }, + "450": { + "name": "WithLock", + "qualified_name": "gitrepo.RepoLocker.WithLock", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 91, + "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", + "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout." + }, + "451": { + "name": "acquireLocal", + "qualified_name": "gitrepo.RepoLocker.acquireLocal", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 114, + "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", + "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted." + }, + "452": { + "name": "acquireFilesystemLock", + "qualified_name": "gitrepo.acquireFilesystemLock", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 134, + "intent": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", + "reason": "coordinate repository sync across processes by creating an exclusive lock file under the repo root." + }, + "453": { + "name": "writeRepoLockMetadata", + "qualified_name": "gitrepo.writeRepoLockMetadata", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 176, + "intent": "write lock ownership metadata so stale lock cleanup can be diagnosed from the filesystem.", + "reason": "write lock ownership metadata so stale lock cleanup can be diagnosed from the filesystem." + }, + "454": { + "name": "removeStaleFilesystemLock", + "qualified_name": "gitrepo.removeStaleFilesystemLock", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 195, + "intent": "discard abandoned repository lock files after the stale timeout elapses.", + "reason": "discard abandoned repository lock files after the stale timeout elapses." + }, + "455": { + "name": "lockFileName", + "qualified_name": "gitrepo.lockFileName", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 211, + "intent": "convert repository names into stable lock-safe filenames.", + "reason": "convert repository names into stable lock-safe filenames." + }, + "456": { + "name": "RepoDir", + "qualified_name": "gitrepo.RepoDir", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 219, + "intent": "keep namespace naming stable across clone, pull, and downstream build steps.", + "reason": "keep namespace naming stable across clone, pull, and downstream build steps." + }, + "457": { + "name": "CloneOrPull", + "qualified_name": "gitrepo.CloneOrPull", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 227, + "intent": "give webhook handlers a branch-agnostic entry point for standard repo refresh.", + "reason": "give webhook handlers a branch-agnostic entry point for standard repo refresh." + }, + "458": { + "name": "CloneOrPullBranch", + "qualified_name": "gitrepo.CloneOrPullBranch", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 236, + "intent": "reuse the same repo sync path for first clone and subsequent updates.", + "reason": "reuse the same repo sync path for first clone and subsequent updates." + }, + "459": { + "name": "CloneOrPullBranchLocked", + "qualified_name": "gitrepo.CloneOrPullBranchLocked", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 258, + "intent": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", + "reason": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously." + }, + "460": { + "name": "sanitizeURL", + "qualified_name": "gitrepo.sanitizeURL", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 268, + "intent": "log clone URLs without leaking embedded credentials.", + "reason": "log clone URLs without leaking embedded credentials." + }, + "461": { + "name": "cloneRepo", + "qualified_name": "gitrepo.cloneRepo", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 281, + "intent": "perform the first namespace clone via a temp directory so partially cloned repos are never promoted.", + "reason": "perform the first namespace clone via a temp directory so partially cloned repos are never promoted." + }, + "462": { + "name": "syncRepoBranch", + "qualified_name": "gitrepo.syncRepoBranch", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 329, + "intent": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds.", + "reason": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds." + }, + "463": { + "name": "fetchOptions", + "qualified_name": "gitrepo.fetchOptions", + "kind": "function", + "file_path": "internal/adapters/outbound/gitrepo/checkout.go", + "namespace": "ccg", + "start_line": 375, + "intent": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", + "reason": "build fetch options that keep sync traffic branch-scoped and shallow when possible." + }, + "465": { + "name": "NodesByFiles", + "qualified_name": "graphgorm.Store.NodesByFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/changes.go", + "namespace": "ccg", + "start_line": 16, + "intent": "supply diff-overlap inputs without exposing database filters to change policy.", + "reason": "supply diff-overlap inputs without exposing database filters to change policy." + }, + "466": { + "name": "outgoingEdgeCount", + "qualified_name": "graphgorm.outgoingEdgeCount", + "kind": "class", + "file_path": "internal/adapters/outbound/graphgorm/changes.go", + "namespace": "ccg", + "start_line": 31, + "intent": "carry one grouped edge-count projection from GORM into the change-risk repository result.", + "reason": "carry one grouped edge-count projection from GORM into the change-risk repository result." + }, + "467": { + "name": "OutgoingEdgeCounts", + "qualified_name": "graphgorm.Store.OutgoingEdgeCounts", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/changes.go", + "namespace": "ccg", + "start_line": 38, + "intent": "provide risk-weight inputs through one grouped persistence query.", + "reason": "provide risk-weight inputs through one grouped persistence query." + }, + "469": { + "name": "CrossNamespaceReader", + "qualified_name": "graphgorm.CrossNamespaceReader", + "kind": "class", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 19, + "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", + "reason": "let impact and flow analysis walk across repository boundaries declared by annotations." + }, + "470": { + "name": "CrossNamespaceReader", + "qualified_name": "graphgorm.Store.CrossNamespaceReader", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 25, + "intent": "derive the cross-repository read surface from an existing store without new wiring inputs.", + "reason": "derive the cross-repository read surface from an existing store without new wiring inputs." + }, + "471": { + "name": "GetEdgesFrom", + "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 31, + "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", + "reason": "satisfy the impact analyzer contract for cross-namespace traversal." + }, + "472": { + "name": "GetEdgesFromNodes", + "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFromNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 37, + "intent": "expand traversal frontiers across repository boundaries in one query pair.", + "reason": "expand traversal frontiers across repository boundaries in one query pair." + }, + "473": { + "name": "GetEdgesTo", + "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 56, + "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", + "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal." + }, + "474": { + "name": "GetEdgesToNodes", + "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 62, + "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", + "reason": "let impact analysis find foreign namespaces that depend on the target nodes." + }, + "475": { + "name": "GetNodeByID", + "qualified_name": "graphgorm.CrossNamespaceReader.GetNodeByID", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 81, + "intent": "resolve traversal frontiers that crossed into another namespace.", + "reason": "resolve traversal frontiers that crossed into another namespace." + }, + "476": { + "name": "GetNodesByIDs", + "qualified_name": "graphgorm.CrossNamespaceReader.GetNodesByIDs", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 95, + "intent": "load result nodes for cross-namespace traversals in one query.", + "reason": "load result nodes for cross-namespace traversals in one query." + }, + "477": { + "name": "crossRefEdges", + "qualified_name": "graphgorm.crossRefEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", + "namespace": "ccg", + "start_line": 108, + "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges.", + "reason": "reuse existing traversal algorithms unchanged by presenting refs as edges." + }, + "479": { + "name": "ListAnnotationCCGRefs", + "qualified_name": "graphgorm.Store.ListAnnotationCCGRefs", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 21, + "intent": "collect the source facts for rebuilding a namespace's outbound cross refs.", + "reason": "collect the source facts for rebuilding a namespace's outbound cross refs." + }, + "480": { + "name": "ResolveCCGRef", + "qualified_name": "graphgorm.Store.ResolveCCGRef", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 41, + "intent": "give cross-ref materialization the concrete node identity behind a symbolic reference.", + "reason": "give cross-ref materialization the concrete node identity behind a symbolic reference." + }, + "481": { + "name": "ReplaceCrossRefsFrom", + "qualified_name": "graphgorm.Store.ReplaceCrossRefsFrom", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 65, + "intent": "make outbound cross-ref state a pure function of the namespace's current annotations.", + "reason": "make outbound cross-ref state a pure function of the namespace's current annotations." + }, + "482": { + "name": "ListInboundCrossRefs", + "qualified_name": "graphgorm.Store.ListInboundCrossRefs", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 84, + "intent": "select the rows whose resolution may change after this namespace rebuilds.", + "reason": "select the rows whose resolution may change after this namespace rebuilds." + }, + "483": { + "name": "ListOutboundCrossRefs", + "qualified_name": "graphgorm.Store.ListOutboundCrossRefs", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 98, + "intent": "expose a namespace's declared external dependencies for listing and analysis.", + "reason": "expose a namespace's declared external dependencies for listing and analysis." + }, + "484": { + "name": "UpdateCrossRefResolution", + "qualified_name": "graphgorm.Store.UpdateCrossRefResolution", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/crossref.go", + "namespace": "ccg", + "start_line": 113, + "intent": "remap or invalidate a reference after its target namespace rebuilt.", + "reason": "remap or invalidate a reference after its target namespace rebuilt." + }, + "486": { + "name": "Snapshot", + "qualified_name": "graphgorm.Store.Snapshot", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "namespace": "ccg", + "start_line": 18, + "intent": "load documentable nodes and their annotations from one namespace.", + "reason": "load documentable nodes and their annotations from one namespace." + }, + "487": { + "name": "OutgoingDocEdges", + "qualified_name": "graphgorm.Store.OutgoingDocEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "namespace": "ccg", + "start_line": 45, + "intent": "load call/import relationships rendered beneath symbol documentation.", + "reason": "load call/import relationships rendered beneath symbol documentation." + }, + "488": { + "name": "QualifiedNameExists", + "qualified_name": "graphgorm.Store.QualifiedNameExists", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "namespace": "ccg", + "start_line": 66, + "intent": "validate local @see targets within the active docs namespace.", + "reason": "validate local @see targets within the active docs namespace." + }, + "489": { + "name": "CCGRefExists", + "qualified_name": "graphgorm.Store.CCGRefExists", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "namespace": "ccg", + "start_line": 77, + "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", + "reason": "validate parsed cross-namespace ccg references against graph path and symbol semantics." + }, + "490": { + "name": "ccgRefNodeQuery", + "qualified_name": "graphgorm.Store.ccgRefNodeQuery", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/docs.go", + "namespace": "ccg", + "start_line": 86, + "intent": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", + "reason": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree." + }, + "492": { + "name": "WithinFlowRebuild", + "qualified_name": "graphgorm.Store.WithinFlowRebuild", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/flow.go", + "namespace": "ccg", + "start_line": 20, + "intent": "implement the analysis flow unit of work without exposing GORM to application policy.", + "reason": "implement the analysis flow unit of work without exposing GORM to application policy." + }, + "493": { + "name": "DeleteFlows", + "qualified_name": "graphgorm.Store.DeleteFlows", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/flow.go", + "namespace": "ccg", + "start_line": 29, + "intent": "clear stale flow state before a transaction-scoped rebuild.", + "reason": "clear stale flow state before a transaction-scoped rebuild." + }, + "494": { + "name": "FindFlowEntrypoints", + "qualified_name": "graphgorm.Store.FindFlowEntrypoints", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/flow.go", + "namespace": "ccg", + "start_line": 47, + "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", + "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy." + }, + "495": { + "name": "CreateFlow", + "qualified_name": "graphgorm.Store.CreateFlow", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/flow.go", + "namespace": "ccg", + "start_line": 67, + "intent": "store traced flow aggregates while keeping generated IDs visible to application results.", + "reason": "store traced flow aggregates while keeping generated IDs visible to application results." + }, + "497": { + "name": "RelatedNodes", + "qualified_name": "graphgorm.Store.RelatedNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/query.go", + "namespace": "ccg", + "start_line": 18, + "intent": "implement namespace-scoped relationship joins behind the analysis query repository.", + "reason": "implement namespace-scoped relationship joins behind the analysis query repository." + }, + "498": { + "name": "NodesByFile", + "qualified_name": "graphgorm.Store.NodesByFile", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/query.go", + "namespace": "ccg", + "start_line": 57, + "intent": "supply file-summary inputs without exposing database filtering to app policy.", + "reason": "supply file-summary inputs without exposing database filtering to app policy." + }, + "499": { + "name": "NodesByExactName", + "qualified_name": "graphgorm.Store.NodesByExactName", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/query.go", + "namespace": "ccg", + "start_line": 63, + "intent": "support exact-name fallback suggestions through the analysis repository.", + "reason": "support exact-name fallback suggestions through the analysis repository." + }, + "501": { + "name": "NamespacesPage", + "qualified_name": "graphgorm.Store.NamespacesPage", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 15, + "intent": "load one stable global namespace page with node counts.", + "reason": "load one stable global namespace page with node counts." + }, + "502": { + "name": "FlowsPage", + "qualified_name": "graphgorm.Store.FlowsPage", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 28, + "intent": "load one stable namespace-scoped stored-flow page with member counts.", + "reason": "load one stable namespace-scoped stored-flow page with member counts." + }, + "503": { + "name": "CallEdges", + "qualified_name": "graphgorm.Store.CallEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 50, + "intent": "select the strongest call evidence edge for each requested peer node.", + "reason": "select the strongest call evidence edge for each requested peer node." + }, + "504": { + "name": "AffectedFlowsPage", + "qualified_name": "graphgorm.Store.AffectedFlowsPage", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 79, + "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", + "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows." + }, + "505": { + "name": "UntestedCount", + "qualified_name": "graphgorm.Store.UntestedCount", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 115, + "intent": "count requested nodes without a namespace-scoped tested_by edge.", + "reason": "count requested nodes without a namespace-scoped tested_by edge." + }, + "506": { + "name": "TopCommunities", + "qualified_name": "graphgorm.Store.TopCommunities", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 127, + "intent": "rank namespace communities by stored membership count.", + "reason": "rank namespace communities by stored membership count." + }, + "507": { + "name": "TopFlows", + "qualified_name": "graphgorm.Store.TopFlows", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", + "namespace": "ccg", + "start_line": 134, + "intent": "rank namespace flows by stored membership count.", + "reason": "rank namespace flows by stored membership count." + }, + "510": { + "name": "GraphStatistics", + "qualified_name": "graphgorm.Store.GraphStatistics", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/statistics.go", + "namespace": "ccg", + "start_line": 25, + "intent": "implement the application statistics port while preserving namespace filtering and aggregate semantics.", + "reason": "implement the application statistics port while preserving namespace filtering and aggregate semantics." + }, + "512": { + "name": "Store", + "qualified_name": "graphgorm.Store", + "kind": "class", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 24, + "intent": "implement the graph repository contract through a GORM DB handle.", + "reason": "implement the graph repository contract through a GORM DB handle." + }, + "513": { + "name": "New", + "qualified_name": "graphgorm.New", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 32, + "intent": "initialize the GraphStore implementation with the injected DB handle.", + "reason": "initialize the GraphStore implementation with the injected DB handle." + }, + "514": { + "name": "AutoMigrate", + "qualified_name": "graphgorm.Store.AutoMigrate", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 39, + "intent": "prepare the GORM model tables required for graph persistence.", + "reason": "prepare the GORM model tables required for graph persistence." + }, + "515": { + "name": "LoadParseResult", + "qualified_name": "graphgorm.Store.LoadParseResult", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 66, + "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", + "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes." + }, + "516": { + "name": "StoreParseResult", + "qualified_name": "graphgorm.Store.StoreParseResult", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 85, + "intent": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", + "reason": "retain one bounded current cache entry per source path instead of accumulating every historical hash." + }, + "517": { + "name": "UpsertNodes", + "qualified_name": "graphgorm.Store.UpsertNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 106, + "intent": "apply parsed result nodes in bulk without creating duplicates.", + "reason": "apply parsed result nodes in bulk without creating duplicates." + }, + "518": { + "name": "GetNode", + "qualified_name": "graphgorm.Store.GetNode", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 131, + "intent": "find one node by the declaration's qualified name.", + "reason": "find one node by the declaration's qualified name." + }, + "519": { + "name": "GetNodeByID", + "qualified_name": "graphgorm.Store.GetNodeByID", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 147, + "intent": "find one node by its internal identifier.", + "reason": "find one node by its internal identifier." + }, + "521": { + "name": "GetNodesByQualifiedNames", + "qualified_name": "graphgorm.Store.GetNodesByQualifiedNames", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 178, + "intent": "build a fast lookup map for qualified-name-based reference resolution.", + "reason": "build a fast lookup map for qualified-name-based reference resolution." + }, + "522": { + "name": "GetNodesByFile", + "qualified_name": "graphgorm.Store.GetNodesByFile", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 196, + "intent": "load declarations parsed from a specific source file.", + "reason": "load declarations parsed from a specific source file." + }, + "523": { + "name": "GetNodesByFiles", + "qualified_name": "graphgorm.Store.GetNodesByFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 208, + "intent": "return declarations for a file set grouped by path.", + "reason": "return declarations for a file set grouped by path." + }, + "524": { + "name": "ListFileNodes", + "qualified_name": "graphgorm.Store.ListFileNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 226, + "intent": "expose namespace-scoped file identity and hash state without leaking the database handle.", + "reason": "expose namespace-scoped file identity and hash state without leaking the database handle." + }, + "525": { + "name": "ListImportFileNodes", + "qualified_name": "graphgorm.Store.ListImportFileNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 241, + "intent": "let full builds create an in-memory import suffix index without reloading all file nodes per import.", + "reason": "let full builds create an in-memory import suffix index without reloading all file nodes per import." + }, + "526": { + "name": "GetFileNodesByPathSuffix", + "qualified_name": "graphgorm.Store.GetFileNodesByPathSuffix", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 254, + "intent": "let import edge resolution bind repo-local import paths back to stored file nodes.", + "reason": "let import edge resolution bind repo-local import paths back to stored file nodes." + }, + "527": { + "name": "DeleteNodesByFile", + "qualified_name": "graphgorm.Store.DeleteNodesByFile", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 299, + "intent": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", + "reason": "keep the single-file API compatible while delegating cleanup to the bounded batch path." + }, + "528": { + "name": "DeleteNodesByFiles", + "qualified_name": "graphgorm.Store.DeleteNodesByFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 307, + "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", + "reason": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk." + }, + "529": { + "name": "deleteNodeScope", + "qualified_name": "graphgorm.deleteNodeScope", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 337, + "intent": "centralize node-dependent cleanup while keeping node IDs inside database subqueries.", + "reason": "centralize node-dependent cleanup while keeping node IDs inside database subqueries." + }, + "530": { + "name": "DeleteGraph", + "qualified_name": "graphgorm.Store.DeleteGraph", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 379, + "intent": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", + "reason": "replace namespace-scoped state before a full rebuild or include_paths rebuild." + }, + "531": { + "name": "UpsertEdges", + "qualified_name": "graphgorm.Store.UpsertEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 418, + "intent": "apply graph relationships in bulk without duplicates.", + "reason": "apply graph relationships in bulk without duplicates." + }, + "532": { + "name": "GetEdgesFrom", + "qualified_name": "graphgorm.Store.GetEdgesFrom", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 439, + "intent": "load outbound relationships for a specific declaration.", + "reason": "load outbound relationships for a specific declaration." + }, + "533": { + "name": "GetEdgesFromNodes", + "qualified_name": "graphgorm.Store.GetEdgesFromNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 457, + "intent": "load outbound relationships for multiple declarations in one call.", + "reason": "load outbound relationships for multiple declarations in one call." + }, + "534": { + "name": "GetEdgesTo", + "qualified_name": "graphgorm.Store.GetEdgesTo", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 477, + "intent": "load inbound relationships for a specific declaration.", + "reason": "load inbound relationships for a specific declaration." + }, + "535": { + "name": "GetEdgesToNodes", + "qualified_name": "graphgorm.Store.GetEdgesToNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 495, + "intent": "load inbound relationships for multiple declarations in one call.", + "reason": "load inbound relationships for multiple declarations in one call." + }, + "536": { + "name": "DeleteEdgesByFile", + "qualified_name": "graphgorm.Store.DeleteEdgesByFile", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 516, + "intent": "selectively clean existing relationships during file-scoped updates.", + "reason": "selectively clean existing relationships during file-scoped updates." + }, + "537": { + "name": "DeletePackageSemanticEdges", + "qualified_name": "graphgorm.Store.DeletePackageSemanticEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 525, + "intent": "replace stale package semantic relationships without exposing persistence queries to the application layer.", + "reason": "replace stale package semantic relationships without exposing persistence queries to the application layer." + }, + "538": { + "name": "UpsertAnnotation", + "qualified_name": "graphgorm.Store.UpsertAnnotation", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 543, + "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", + "reason": "keep the single-annotation API compatible while delegating persistence to the batch path." + }, + "539": { + "name": "UpsertAnnotations", + "qualified_name": "graphgorm.Store.UpsertAnnotations", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 552, + "intent": "collapse per-annotation lookup and write round trips into bounded batch operations.", + "reason": "collapse per-annotation lookup and write round trips into bounded batch operations." + }, + "540": { + "name": "GetAnnotation", + "qualified_name": "graphgorm.Store.GetAnnotation", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 639, + "intent": "load a node's structured comment and tags together for search and display.", + "reason": "load a node's structured comment and tags together for search and display." + }, + "541": { + "name": "WithTx", + "qualified_name": "graphgorm.Store.WithTx", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 660, + "intent": "allow multiple repository operations to run atomically as one unit.", + "reason": "allow multiple repository operations to run atomically as one unit." + }, + "542": { + "name": "WithTxDB", + "qualified_name": "graphgorm.Store.WithTxDB", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/store.go", + "namespace": "ccg", + "start_line": 670, + "intent": "let graph persistence and DB-backed derived-state updates share a single transaction.", + "reason": "let graph persistence and DB-backed derived-state updates share a single transaction." + }, + "544": { + "name": "SearchWriterFactory", + "qualified_name": "graphgorm.SearchWriterFactory", + "kind": "type", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 15, + "intent": "construct derived-state persistence with the same transaction handle as graph persistence.", + "reason": "construct derived-state persistence with the same transaction handle as graph persistence." + }, + "545": { + "name": "UnitOfWork", + "qualified_name": "graphgorm.UnitOfWork", + "kind": "class", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 19, + "intent": "coordinate graph and search writes without exposing GORM to application policy.", + "reason": "coordinate graph and search writes without exposing GORM to application policy." + }, + "546": { + "name": "NewUnitOfWork", + "qualified_name": "graphgorm.NewUnitOfWork", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 28, + "intent": "inject the database transaction owner and transaction-scoped search writer factory.", + "reason": "inject the database transaction owner and transaction-scoped search writer factory." + }, + "547": { + "name": "transaction", + "qualified_name": "graphgorm.transaction", + "kind": "class", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 34, + "intent": "keep the shared transaction handle private while satisfying the ingest transaction port.", + "reason": "keep the shared transaction handle private while satisfying the ingest transaction port." + }, + "548": { + "name": "Graph", + "qualified_name": "graphgorm.transaction.Graph", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 43, + "intent": "supply transaction-scoped graph operations to the ingest callback.", + "reason": "supply transaction-scoped graph operations to the ingest callback." + }, + "549": { + "name": "Search", + "qualified_name": "graphgorm.transaction.Search", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 47, + "intent": "supply transaction-scoped search operations to the ingest callback.", + "reason": "supply transaction-scoped search operations to the ingest callback." + }, + "550": { + "name": "WithinTransaction", + "qualified_name": "graphgorm.UnitOfWork.WithinTransaction", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/transaction.go", + "namespace": "ccg", + "start_line": 53, + "intent": "commit graph and derived search state together or roll both back on any callback error.", + "reason": "commit graph and derived search state together or roll both back on any callback error." + }, + "552": { + "name": "UpsertUnresolvedEdges", + "qualified_name": "graphgorm.Store.UpsertUnresolvedEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 24, + "intent": "retain unresolved syntax candidates until a future symbol addition can resolve them.", + "reason": "retain unresolved syntax candidates until a future symbol addition can resolve them." + }, + "553": { + "name": "FindUnresolvedEdgesByLookupKeys", + "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByLookupKeys", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 45, + "intent": "use the reverse index to identify affected unchanged source files.", + "reason": "use the reverse index to identify affected unchanged source files." + }, + "554": { + "name": "FindUnresolvedEdgesByFiles", + "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByFiles", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 75, + "intent": "replay import warmup and related edges together after reverse-index selection narrows source files.", + "reason": "replay import warmup and related edges together after reverse-index selection narrows source files." + }, + "555": { + "name": "DeleteUnresolvedEdgesByFingerprints", + "qualified_name": "graphgorm.Store.DeleteUnresolvedEdgesByFingerprints", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 104, + "intent": "keep the reverse index limited to relationships that still lack endpoints.", + "reason": "keep the reverse index limited to relationships that still lack endpoints." + }, + "556": { + "name": "unresolvedIndexHashes", + "qualified_name": "graphgorm.unresolvedIndexHashes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 123, + "intent": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries.", + "reason": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries." + }, + "558": { + "name": "UnresolvedIndexReady", + "qualified_name": "graphgorm.Store.UnresolvedIndexReady", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 138, + "intent": "gate semi-naive update on complete historical unresolved-edge coverage produced by the expected algorithm and parsers.", + "reason": "gate semi-naive update on complete historical unresolved-edge coverage produced by the expected algorithm and parsers." + }, + "559": { + "name": "MarkUnresolvedIndexReady", + "qualified_name": "graphgorm.Store.MarkUnresolvedIndexReady", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", + "namespace": "ccg", + "start_line": 157, + "intent": "distinguish a compatible legitimately empty reverse index from stale or uninitialized state.", + "reason": "distinguish a compatible legitimately empty reverse index from stale or uninitialized state." + }, + "561": { + "name": "Namespaces", + "qualified_name": "graphgorm.Store.Namespaces", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 25, + "intent": "implement Wiki namespace discovery without exposing persistence to HTTP.", + "reason": "implement Wiki namespace discovery without exposing persistence to HTTP." + }, + "562": { + "name": "NavigationNodes", + "qualified_name": "graphgorm.Store.NavigationNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 32, + "intent": "load the stable graph snapshot from which the eager Wiki hierarchy is derived.", + "reason": "load the stable graph snapshot from which the eager Wiki hierarchy is derived." + }, + "563": { + "name": "PathNodes", + "qualified_name": "graphgorm.Store.PathNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 39, + "intent": "load stable path-bearing candidates below one lazy Wiki folder or package.", + "reason": "load stable path-bearing candidates below one lazy Wiki folder or package." + }, + "564": { + "name": "StoredNode", + "qualified_name": "graphgorm.Store.StoredNode", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 50, + "intent": "resolve one stored package or file used as a lazy Wiki root.", + "reason": "resolve one stored package or file used as a lazy Wiki root." + }, + "565": { + "name": "SymbolNode", + "qualified_name": "graphgorm.Store.SymbolNode", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 62, + "intent": "resolve the first deterministic symbol match used by direct lazy navigation.", + "reason": "resolve the first deterministic symbol match used by direct lazy navigation." + }, + "566": { + "name": "FileSymbols", + "qualified_name": "graphgorm.Store.FileSymbols", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 74, + "intent": "load stable symbol children for one lazy Wiki file node.", + "reason": "load stable symbol children for one lazy Wiki file node." + }, + "567": { + "name": "Annotations", + "qualified_name": "graphgorm.Store.Annotations", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 81, + "intent": "batch-load Wiki annotations with deterministic tag ordering.", + "reason": "batch-load Wiki annotations with deterministic tag ordering." + }, + "568": { + "name": "HasSymbol", + "qualified_name": "graphgorm.Store.HasSymbol", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 98, + "intent": "answer whether a lazy file node has expandable symbol children.", + "reason": "answer whether a lazy file node has expandable symbol children." + }, + "569": { + "name": "GraphView", + "qualified_name": "graphgorm.Store.GraphView", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 106, + "intent": "implement the Wiki force-graph read port with deterministic ordering and limits.", + "reason": "implement the Wiki force-graph read port with deterministic ordering and limits." + }, + "570": { + "name": "ResolveReference", + "qualified_name": "graphgorm.Store.ResolveReference", + "kind": "function", + "file_path": "internal/adapters/outbound/graphgorm/wiki.go", + "namespace": "ccg", + "start_line": 134, + "intent": "resolve Wiki reference navigation while keeping GORM filtering and preload behavior in the outbound adapter.", + "reason": "resolve Wiki reference navigation while keeping GORM filtering and preload behavior in the outbound adapter." + }, + "572": { + "name": "internal/adapters/outbound/reposyncgraph/updater.go", + "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", + "kind": "file", + "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", + "namespace": "ccg", + "start_line": 1, + "intent": "preserve ingest workflow composition behind the repository sync graph port.", + "reason": "preserve ingest workflow composition behind the repository sync graph port." + }, + "573": { + "name": "Updater", + "qualified_name": "reposyncgraph.Updater", + "kind": "class", + "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", + "namespace": "ccg", + "start_line": 13, + "intent": "preserve ingest workflow composition behind the repository sync graph port.", + "reason": "preserve ingest workflow composition behind the repository sync graph port." + }, + "574": { + "name": "Update", + "qualified_name": "reposyncgraph.Updater.Update", + "kind": "function", + "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", + "namespace": "ccg", + "start_line": 20, + "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", + "reason": "replace one synchronized repository namespace using the existing incremental ingest contract." + }, + "576": { + "name": "Hooks", + "qualified_name": "reposyncobs.Hooks", + "kind": "class", + "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", + "namespace": "ccg", + "start_line": 14, + "intent": "adapt OpenTelemetry spans and trace log fields to reposync observability hooks.", + "reason": "adapt OpenTelemetry spans and trace log fields to reposync observability hooks." + }, + "577": { + "name": "Start", + "qualified_name": "reposyncobs.Hooks.Start", + "kind": "function", + "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", + "namespace": "ccg", + "start_line": 19, + "intent": "attach repository and branch attributes to app-owned queue operations.", + "reason": "attach repository and branch attributes to app-owned queue operations." + }, + "578": { + "name": "LogArgs", + "qualified_name": "reposyncobs.Hooks.LogArgs", + "kind": "function", + "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", + "namespace": "ccg", + "start_line": 25, + "intent": "preserve trace correlation fields on repository sync queue logs.", + "reason": "preserve trace correlation fields on repository sync queue logs." + }, + "58": { + "name": "main", + "qualified_name": "main.main", + "kind": "function", + "file_path": "cmd/ccg/main.go", + "namespace": "ccg", + "start_line": 24, + "intent": "assemble local CLI dependencies and guarantee cleanup on command failure.", + "reason": "assemble local CLI dependencies and guarantee cleanup on command failure." + }, + "580": { + "name": "Backend", + "qualified_name": "searchsql.Backend", + "kind": "type", + "file_path": "internal/adapters/outbound/searchsql/backend.go", + "namespace": "ccg", + "start_line": 28, + "intent": "provide one interface for backend-specific search index migration, rebuild, and query operations.", + "reason": "provide one interface for backend-specific search index migration, rebuild, and query operations." + }, + "581": { + "name": "loadNodesInOrder", + "qualified_name": "searchsql.loadNodesInOrder", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/backend.go", + "namespace": "ccg", + "start_line": 70, + "intent": "keep the ranked order across the round trip that loads the nodes themselves.", + "reason": "keep the ranked order across the round trip that loads the nodes themselves." + }, + "583": { + "name": "PostgresBackend", + "qualified_name": "searchsql.PostgresBackend", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 20, + "intent": "Handles full-text search indexing and querying in a PostgreSQL environment.", + "reason": "Handles full-text search indexing and querying in a PostgreSQL environment." + }, + "585": { + "name": "Migrate", + "qualified_name": "searchsql.PostgresBackend.Migrate", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 35, + "intent": "give tests and callers a one-call schema setup that reuses the production migrations.", + "reason": "give tests and callers a one-call schema setup that reuses the production migrations." + }, + "586": { + "name": "Rebuild", + "qualified_name": "searchsql.PostgresBackend.Rebuild", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 49, + "intent": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows.", + "reason": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows." + }, + "587": { + "name": "RebuildNodes", + "qualified_name": "searchsql.PostgresBackend.RebuildNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 67, + "intent": "Avoids full namespace tsv updates during incremental update paths.", + "reason": "Avoids full namespace tsv updates during incremental update paths." + }, + "588": { + "name": "PurgeNamespace", + "qualified_name": "searchsql.PostgresBackend.PurgeNamespace", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 96, + "intent": "Aligns with the Backend interface and maintains consistency in the namespace purge path.", + "reason": "Aligns with the Backend interface and maintains consistency in the namespace purge path." + }, + "589": { + "name": "resultRow", + "qualified_name": "searchsql.resultRow", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 102, + "intent": "decode the single-column tsquery result before joining back to nodes.", + "reason": "decode the single-column tsquery result before joining back to nodes." + }, + "590": { + "name": "matchRows", + "qualified_name": "searchsql.PostgresBackend.matchRows", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 122, + "intent": "let Query run the same retrieval twice with a different expression.", + "reason": "let Query run the same retrieval twice with a different expression." + }, + "591": { + "name": "Query", + "qualified_name": "searchsql.PostgresBackend.Query", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 145, + "intent": "Converts the user's search term into a prefix tsquery to find related nodes.", + "reason": "Converts the user's search term into a prefix tsquery to find related nodes." + }, + "592": { + "name": "MatchIntent", + "qualified_name": "searchsql.PostgresBackend.MatchIntent", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/postgres.go", + "namespace": "ccg", + "start_line": 196, + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on.", + "reason": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." + }, + "594": { + "name": "Reader", + "qualified_name": "searchsql.Reader", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 20, + "intent": "adapt raw SQL backend and GORM operations to app/search read ports.", + "reason": "adapt raw SQL backend and GORM operations to app/search read ports." + }, + "595": { + "name": "NewReader", + "qualified_name": "searchsql.NewReader", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 29, + "intent": "keep database handles out of application service construction.", + "reason": "keep database handles out of application service construction." + }, + "596": { + "name": "Query", + "qualified_name": "searchsql.Reader.Query", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 35, + "intent": "implement the bound candidate-search port without exposing a DB argument.", + "reason": "implement the bound candidate-search port without exposing a DB argument." + }, + "597": { + "name": "QueryIntent", + "qualified_name": "searchsql.Reader.QueryIntent", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 55, + "intent": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", + "reason": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend." + }, + "598": { + "name": "intentTerms", + "qualified_name": "searchsql.intentTerms", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 108, + "intent": "keep the application layer free of the scoring package's types.", + "reason": "keep the application layer free of the scoring package's types." + }, + "599": { + "name": "annotationCoverage", + "qualified_name": "searchsql.Reader.annotationCoverage", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 132, + "intent": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\".", + "reason": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\"." + }, + "60": { + "name": "main", + "qualified_name": "main.main", + "kind": "function", + "file_path": "cmd/ccg-server/main.go", + "namespace": "ccg", + "start_line": 27, + "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", + "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary." + }, + "600": { + "name": "intentCorpusSize", + "qualified_name": "searchsql.Reader.intentCorpusSize", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/retrieval.go", + "namespace": "ccg", + "start_line": 160, + "intent": "give the scorer the denominator that makes a common word common.", + "reason": "give the scorer the denominator that makes a common word common." + }, + "602": { + "name": "SanitizeFTS5", + "qualified_name": "searchsql.SanitizeFTS5", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 18, + "intent": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", + "reason": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters." + }, + "603": { + "name": "SanitizeIntentFTS5", + "qualified_name": "searchsql.SanitizeIntentFTS5", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 39, + "intent": "let a sentence-shaped question match a sentence-shaped reason.", + "reason": "let a sentence-shaped question match a sentence-shaped reason." + }, + "604": { + "name": "SanitizePostgresTSQuery", + "qualified_name": "searchsql.SanitizePostgresTSQuery", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 47, + "intent": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior.", + "reason": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior." + }, + "605": { + "name": "SanitizePostgresIntentTSQuery", + "qualified_name": "searchsql.SanitizePostgresIntentTSQuery", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 57, + "intent": "let a sentence-shaped question match a sentence-shaped reason on PostgreSQL.", + "reason": "let a sentence-shaped question match a sentence-shaped reason on PostgreSQL." + }, + "606": { + "name": "alwaysPrefix", + "qualified_name": "searchsql.alwaysPrefix", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 63, + "intent": "keep prefix expansion the default for the shared search index.", + "reason": "keep prefix expansion the default for the shared search index." + }, + "607": { + "name": "intentTerm", + "qualified_name": "searchsql.intentTerm", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 76, + "intent": "keep a short question word from reaching an identifier spelled inside a recorded reason.", + "reason": "keep a short question word from reaching an identifier spelled inside a recorded reason." + }, + "608": { + "name": "buildPrefixQuery", + "qualified_name": "searchsql.buildPrefixQuery", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 92, + "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", + "reason": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax." + }, + "609": { + "name": "extractExactNameToken", + "qualified_name": "searchsql.extractExactNameToken", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 117, + "intent": "treat only single-identifier queries as eligible for exact-name promotion.", + "reason": "treat only single-identifier queries as eligible for exact-name promotion." + }, + "61": { + "name": "newRootCmd", + "qualified_name": "main.newRootCmd", + "kind": "function", + "file_path": "cmd/ccg-server/main.go", + "namespace": "ccg", + "start_line": 42, + "intent": "keep self-hosted server flags separate from the local ccg CLI.", + "reason": "keep self-hosted server flags separate from the local ccg CLI." + }, + "610": { + "name": "promoteExactNameMatch", + "qualified_name": "searchsql.promoteExactNameMatch", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sanitize.go", + "namespace": "ccg", + "start_line": 128, + "intent": "move an exact symbol-name hit to the front of search results to improve precision.", + "reason": "move an exact symbol-name hit to the front of search results to improve precision." + }, + "612": { + "name": "SQLiteBackend", + "qualified_name": "searchsql.SQLiteBackend", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 31, + "intent": "Handles full-text search indexing and querying in a SQLite environment.", + "reason": "Handles full-text search indexing and querying in a SQLite environment." + }, + "613": { + "name": "NewSQLiteBackend", + "qualified_name": "searchsql.NewSQLiteBackend", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 39, + "intent": "Provides a Backend implementation specifically for SQLite.", + "reason": "Provides a Backend implementation specifically for SQLite." + }, + "614": { + "name": "Migrate", + "qualified_name": "searchsql.SQLiteBackend.Migrate", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 47, + "intent": "Creates a full-text search index table for SQLite.", + "reason": "Creates a full-text search index table for SQLite." + }, + "615": { + "name": "migrateIntentTable", + "qualified_name": "searchsql.SQLiteBackend.migrateIntentTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 78, + "intent": "give recorded reasons their own index so an intent question is never scored against identifier text.", + "reason": "give recorded reasons their own index so an intent question is never scored against identifier text." + }, + "616": { + "name": "Rebuild", + "qualified_name": "searchsql.SQLiteBackend.Rebuild", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 104, + "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", + "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes." + }, + "617": { + "name": "RebuildNodes", + "qualified_name": "searchsql.SQLiteBackend.RebuildNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 113, + "intent": "Avoids full namespace FTS reloading during incremental update paths.", + "reason": "Avoids full namespace FTS reloading during incremental update paths." + }, + "618": { + "name": "PurgeNamespace", + "qualified_name": "searchsql.SQLiteBackend.PurgeNamespace", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 125, + "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", + "reason": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion." + }, + "619": { + "name": "rebuildTable", + "qualified_name": "searchsql.SQLiteBackend.rebuildTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 151, + "intent": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", + "reason": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces." + }, + "62": { + "name": "parseLogLevel", + "qualified_name": "main.parseLogLevel", + "kind": "function", + "file_path": "cmd/ccg-server/main.go", + "namespace": "ccg", + "start_line": 157, + "intent": "normalize server log-level input consistently with ccg.", + "reason": "normalize server log-level input consistently with ccg." + }, + "620": { + "name": "rebuildTableNodes", + "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 183, + "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", + "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild." + }, + "621": { + "name": "rebuildIntentTable", + "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 219, + "intent": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces.", + "reason": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces." + }, + "622": { + "name": "rebuildIntentTableNodes", + "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTableNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 246, + "intent": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", + "reason": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild." + }, + "623": { + "name": "ftsRow", + "qualified_name": "searchsql.ftsRow", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 277, + "intent": "decode the single-column FTS result before joining back to nodes.", + "reason": "decode the single-column FTS result before joining back to nodes." + }, + "624": { + "name": "matchRows", + "qualified_name": "searchsql.SQLiteBackend.matchRows", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 305, + "intent": "let Query run the same retrieval twice with a different expression.", + "reason": "let Query run the same retrieval twice with a different expression." + }, + "625": { + "name": "Query", + "qualified_name": "searchsql.SQLiteBackend.Query", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 334, + "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", + "reason": "Converts the user's search term into a SQLite FTS prefix query to find nodes." + }, + "626": { + "name": "MatchIntent", + "qualified_name": "searchsql.SQLiteBackend.MatchIntent", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 378, + "intent": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on.", + "reason": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." + }, + "627": { + "name": "upgradeLegacyFTSTable", + "qualified_name": "searchsql.SQLiteBackend.upgradeLegacyFTSTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 405, + "intent": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", + "reason": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot." + }, + "628": { + "name": "insertSQLiteFTSBatch", + "qualified_name": "searchsql.insertSQLiteFTSBatch", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 437, + "intent": "push many rows in a single statement so rebuild paths avoid per-row round trips.", + "reason": "push many rows in a single statement so rebuild paths avoid per-row round trips." + }, + "629": { + "name": "insertSQLiteIntentBatch", + "qualified_name": "searchsql.insertSQLiteIntentBatch", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 449, + "intent": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", + "reason": "push many reasons in a single statement so rebuild paths avoid per-row round trips." + }, + "63": { + "name": "internal/adapters/inbound/cli/build.go", + "qualified_name": "internal/adapters/inbound/cli/build.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/build.go", + "namespace": "ccg", + "start_line": 1, + "intent": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", + "reason": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다." + }, + "630": { + "name": "buildSQLiteIntentInsert", + "qualified_name": "searchsql.buildSQLiteIntentInsert", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 464, + "intent": "keep the intent index limited to reasons that were actually written down.", + "reason": "keep the intent index limited to reasons that were actually written down." + }, + "631": { + "name": "createSQLiteIntentFTSTable", + "qualified_name": "searchsql.createSQLiteIntentFTSTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 491, + "intent": "create an FTS5 table whose only indexed text is the reason a node exists.", + "reason": "create an FTS5 table whose only indexed text is the reason a node exists." + }, + "632": { + "name": "buildSQLiteFTSInsert", + "qualified_name": "searchsql.buildSQLiteFTSInsert", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 503, + "intent": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", + "reason": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead." + }, + "633": { + "name": "sqliteColumnExists", + "qualified_name": "searchsql.sqliteColumnExists", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 523, + "intent": "gate schema migrations on actual table layout instead of guessing from version markers.", + "reason": "gate schema migrations on actual table layout instead of guessing from version markers." + }, + "634": { + "name": "createSQLiteFTSTable", + "qualified_name": "searchsql.createSQLiteFTSTable", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 548, + "intent": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", + "reason": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows." + }, + "635": { + "name": "sqliteTableExists", + "qualified_name": "searchsql.sqliteTableExists", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/sqlite.go", + "namespace": "ccg", + "start_line": 562, + "intent": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", + "reason": "let migration code branch on table presence without depending on GORM AutoMigrate side effects." + }, + "637": { + "name": "Writer", + "qualified_name": "searchsql.Writer", + "kind": "class", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 41, + "intent": "provide a transaction-scoped SearchWriter implementation for ingest unit-of-work adapters.", + "reason": "provide a transaction-scoped SearchWriter implementation for ingest unit-of-work adapters." + }, + "638": { + "name": "NewSearchWriter", + "qualified_name": "searchsql.NewSearchWriter", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 51, + "intent": "construct a search writer that can share an ingest transaction with graph persistence.", + "reason": "construct a search writer that can share an ingest transaction with graph persistence." + }, + "64": { + "name": "newBuildCmd", + "qualified_name": "cli.newBuildCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/build.go", + "namespace": "ccg", + "start_line": 20, + "intent": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", + "reason": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다." + }, + "640": { + "name": "RebuildAll", + "qualified_name": "searchsql.Writer.RebuildAll", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 69, + "intent": "implement the full derived-search refresh required by a graph build.", + "reason": "implement the full derived-search refresh required by a graph build." + }, + "641": { + "name": "RefreshDocuments", + "qualified_name": "searchsql.Writer.RefreshDocuments", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 86, + "intent": "implement the first application maintenance stage without exposing the database handle.", + "reason": "implement the first application maintenance stage without exposing the database handle." + }, + "642": { + "name": "RebuildIndex", + "qualified_name": "searchsql.Writer.RebuildIndex", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 95, + "intent": "implement the second application maintenance stage without exposing backend or database handles.", + "reason": "implement the second application maintenance stage without exposing backend or database handles." + }, + "643": { + "name": "RebuildNodes", + "qualified_name": "searchsql.Writer.RebuildNodes", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 105, + "intent": "implement the incremental derived-search refresh required by graph updates.", + "reason": "implement the incremental derived-search refresh required by graph updates." + }, + "644": { + "name": "RefreshSearchDocuments", + "qualified_name": "searchsql.RefreshSearchDocuments", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 122, + "intent": "keep derived search documents consistent with graph state before FTS rebuilds", + "reason": "keep derived search documents consistent with graph state before FTS rebuilds" + }, + "645": { + "name": "RefreshSearchDocumentsFor", + "qualified_name": "searchsql.RefreshSearchDocumentsFor", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 131, + "intent": "incremental update 경로에서 영향받은 문서만 갱신한다.", + "reason": "incremental update 경로에서 영향받은 문서만 갱신한다." + }, + "646": { + "name": "refreshSearchDocuments", + "qualified_name": "searchsql.refreshSearchDocuments", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 145, + "intent": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", + "reason": "regenerate FTS content from the latest nodes and annotations in batches to bound memory." + }, + "647": { + "name": "scopedNodeIDsForChunk", + "qualified_name": "searchsql.scopedNodeIDsForChunk", + "kind": "function", + "file_path": "internal/adapters/outbound/searchsql/writer.go", + "namespace": "ccg", + "start_line": 267, + "intent": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", + "reason": "keep search rebuild SQL within the SQLite/Postgres parameter limit." + }, + "649": { + "name": "NodeTypeMapping", + "qualified_name": "treesitter.NodeTypeMapping", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 13, + "intent": "describe how grammar-specific node names translate into model semantics", + "reason": "describe how grammar-specific node names translate into model semantics" + }, + "65": { + "name": "internal/adapters/inbound/cli/docs.go", + "qualified_name": "internal/adapters/inbound/cli/docs.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 1, + "intent": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", + "reason": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다." + }, + "650": { + "name": "PackageDiscovery", + "qualified_name": "treesitter.PackageDiscovery", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 28, + "intent": "let each language define its own multi-file import model without changing the ingest workflow service.", + "reason": "let each language define its own multi-file import model without changing the ingest workflow service." + }, + "651": { + "name": "NoopPackageDiscovery", + "qualified_name": "treesitter.NoopPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 34, + "intent": "provide a default no-op implementation of the PackageDiscovery interface.", + "reason": "provide a default no-op implementation of the PackageDiscovery interface." + }, + "652": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.NoopPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 38, + "intent": "let callers reuse one package-discovery flow even when a language has no package model.", + "reason": "let callers reuse one package-discovery flow even when a language has no package model." + }, + "653": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.Walker.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 44, + "intent": "implement the ingest package-discovery port without exposing LangSpec to the application.", + "reason": "implement the ingest package-discovery port without exposing LangSpec to the application." + }, + "654": { + "name": "PackageEdges", + "qualified_name": "treesitter.Walker.PackageEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 50, + "intent": "implement the ingest package-edge port while keeping language semantics inside the Tree-sitter adapter.", + "reason": "implement the ingest package-edge port while keeping language semantics inside the Tree-sitter adapter." + }, + "655": { + "name": "LangSpec", + "qualified_name": "treesitter.LangSpec", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 56, + "intent": "centralize language-specific AST node names, test conventions, and extraction hints", + "reason": "centralize language-specific AST node names, test conventions, and extraction hints" + }, + "656": { + "name": "PackageDiscoveryOrDefault", + "qualified_name": "treesitter.PackageDiscoveryOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/langspec.go", + "namespace": "ccg", + "start_line": 210, + "intent": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal", + "reason": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal" + }, + "657": { + "name": "internal/adapters/outbound/treesitter/package_discovery.go", + "qualified_name": "internal/adapters/outbound/treesitter/package_discovery.go", + "kind": "file", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 1, + "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", + "reason": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved." + }, + "658": { + "name": "PythonPackageDiscovery", + "qualified_name": "treesitter.PythonPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 17, + "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", + "reason": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved." + }, + "659": { + "name": "TypeScriptPackageDiscovery", + "qualified_name": "treesitter.TypeScriptPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 21, + "intent": "map TypeScript source directories to package.json- and tsconfig-based import paths.", + "reason": "map TypeScript source directories to package.json- and tsconfig-based import paths." + }, + "66": { + "name": "newDocsCmd", + "qualified_name": "cli.newDocsCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 22, + "intent": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", + "reason": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다." + }, + "660": { + "name": "JavaScriptPackageDiscovery", + "qualified_name": "treesitter.JavaScriptPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 25, + "intent": "map JavaScript source directories to package.json-based import paths.", + "reason": "map JavaScript source directories to package.json-based import paths." + }, + "661": { + "name": "JavaPackageDiscovery", + "qualified_name": "treesitter.JavaPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 29, + "intent": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets.", + "reason": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets." + }, + "662": { + "name": "KotlinPackageDiscovery", + "qualified_name": "treesitter.KotlinPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 33, + "intent": "map Kotlin package headers to package nodes so imports and package containment use declared package names.", + "reason": "map Kotlin package headers to package nodes so imports and package containment use declared package names." + }, + "663": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 37, + "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", + "reason": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages." + }, + "664": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.TypeScriptPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 82, + "intent": "create package nodes for package.json paths and tsconfig alias paths that imports can target.", + "reason": "create package nodes for package.json paths and tsconfig alias paths that imports can target." + }, + "665": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.JavaScriptPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 93, + "intent": "create package nodes for JavaScript directories using package.json-derived import paths.", + "reason": "create package nodes for JavaScript directories using package.json-derived import paths." + }, + "666": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 103, + "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", + "reason": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses." + }, + "667": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 145, + "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", + "reason": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets." + }, + "668": { + "name": "GoPackageDiscovery", + "qualified_name": "treesitter.GoPackageDiscovery", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 189, + "intent": "model a Go import path as one package node that contains every non-test file in that package.", + "reason": "model a Go import path as one package node that contains every non-test file in that package." + }, + "669": { + "name": "DiscoverPackages", + "qualified_name": "treesitter.GoPackageDiscovery.DiscoverPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 193, + "intent": "walk the repository to identify Go packages and their source files.", + "reason": "walk the repository to identify Go packages and their source files." + }, + "67": { + "name": "docsWikiOptions", + "qualified_name": "cli.docsWikiOptions", + "kind": "class", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 81, + "intent": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options.", + "reason": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options." + }, + "670": { + "name": "rememberPackage", + "qualified_name": "treesitter.rememberPackage", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 249, + "intent": "handle multiple declarations of the same import path by merging files or detecting inconsistencies.", + "reason": "handle multiple declarations of the same import path by merging files or detecting inconsistencies." + }, + "671": { + "name": "rememberSplitPackage", + "qualified_name": "treesitter.rememberSplitPackage", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 269, + "intent": "support JVM source-set layouts where one package is intentionally spread across main/test directories.", + "reason": "support JVM source-set layouts where one package is intentionally spread across main/test directories." + }, + "672": { + "name": "mergeSplitPackageDir", + "qualified_name": "treesitter.mergeSplitPackageDir", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 291, + "intent": "keep package nodes deterministic even when files come from multiple source roots.", + "reason": "keep package nodes deterministic even when files come from multiple source roots." + }, + "673": { + "name": "appendUniquePackageFile", + "qualified_name": "treesitter.appendUniquePackageFile", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 312, + "intent": "ensure the file list for a package remains unique without duplicates.", + "reason": "ensure the file list for a package remains unique without duplicates." + }, + "674": { + "name": "pythonDirToImportPath", + "qualified_name": "treesitter.pythonDirToImportPath", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 330, + "intent": "normalize filesystem package directories into the import-path form used by package nodes.", + "reason": "normalize filesystem package directories into the import-path form used by package nodes." + }, + "675": { + "name": "pathBaseName", + "qualified_name": "treesitter.pathBaseName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 340, + "intent": "derive the short package name from an import path without introducing language-specific branches elsewhere.", + "reason": "derive the short package name from an import path without introducing language-specific branches elsewhere." + }, + "676": { + "name": "nodePackageDiscoveryConfig", + "qualified_name": "treesitter.nodePackageDiscoveryConfig", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 351, + "intent": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", + "reason": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript." + }, + "677": { + "name": "nodePackageJSON", + "qualified_name": "treesitter.nodePackageJSON", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 360, + "intent": "keep package metadata parsing minimal while deriving package-node qualified names.", + "reason": "keep package metadata parsing minimal while deriving package-node qualified names." + }, + "678": { + "name": "nodeTSConfig", + "qualified_name": "treesitter.nodeTSConfig", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 367, + "intent": "derive additional package-node import paths from compiler aliases.", + "reason": "derive additional package-node import paths from compiler aliases." + }, + "679": { + "name": "nodePackageScope", + "qualified_name": "treesitter.nodePackageScope", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 377, + "intent": "map repository files back to the package node that should own their imports.", + "reason": "map repository files back to the package node that should own their imports." + }, + "68": { + "name": "buildDocsWikiIndex", + "qualified_name": "cli.buildDocsWikiIndex", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 92, + "intent": "build the compatibility snapshot used when DB-backed Wiki navigation is unavailable.", + "reason": "build the compatibility snapshot used when DB-backed Wiki navigation is unavailable." + }, + "680": { + "name": "nodeAliasScope", + "qualified_name": "treesitter.nodeAliasScope", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 384, + "intent": "resolve aliased Node imports against the package node scope they belong to.", + "reason": "resolve aliased Node imports against the package node scope they belong to." + }, + "681": { + "name": "discoverNodePackages", + "qualified_name": "treesitter.discoverNodePackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 392, + "intent": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently.", + "reason": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently." + }, + "682": { + "name": "readNodePackageManifest", + "qualified_name": "treesitter.readNodePackageManifest", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 458, + "intent": "use repository and workspace manifest metadata to build Node-family import paths.", + "reason": "use repository and workspace manifest metadata to build Node-family import paths." + }, + "683": { + "name": "readTSConfigAliasPrefixes", + "qualified_name": "treesitter.readTSConfigAliasPrefixes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 476, + "intent": "derive alternate package-node import paths for aliased TypeScript imports.", + "reason": "derive alternate package-node import paths for aliased TypeScript imports." + }, + "684": { + "name": "readTSConfigAliasPrefixesSeen", + "qualified_name": "treesitter.readTSConfigAliasPrefixesSeen", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 482, + "intent": "merge inherited alias prefixes from nested tsconfig chains into one import-path map.", + "reason": "merge inherited alias prefixes from nested tsconfig chains into one import-path map." + }, + "685": { + "name": "nodeImportPathsForPath", + "qualified_name": "treesitter.nodeImportPathsForPath", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 552, + "intent": "register both directory package nodes and file-level alias nodes for Node ecosystem imports.", + "reason": "register both directory package nodes and file-level alias nodes for Node ecosystem imports." + }, + "686": { + "name": "discoverNodePackageScopes", + "qualified_name": "treesitter.discoverNodePackageScopes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 593, + "intent": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", + "reason": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere." + }, + "687": { + "name": "discoverTSConfigAliasScopes", + "qualified_name": "treesitter.discoverTSConfigAliasScopes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 614, + "intent": "let nested packages contribute their own alias prefixes for monorepo-local imports.", + "reason": "let nested packages contribute their own alias prefixes for monorepo-local imports." + }, + "688": { + "name": "bestNodePackageScope", + "qualified_name": "treesitter.bestNodePackageScope", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 662, + "intent": "prefer workspace package names over the root package when files live under nested package roots.", + "reason": "prefer workspace package names over the root package when files live under nested package roots." + }, + "689": { + "name": "parseNodeWorkspaces", + "qualified_name": "treesitter.parseNodeWorkspaces", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 674, + "intent": "support both array and object forms used by npm/Yarn/Bun workspace configs.", + "reason": "support both array and object forms used by npm/Yarn/Bun workspace configs." + }, + "69": { + "name": "resolveRagIndexDir", + "qualified_name": "cli.resolveRagIndexDir", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 111, + "intent": "keep docs-generated Wiki output aligned with the configured index directory.", + "reason": "keep docs-generated Wiki output aligned with the configured index directory." + }, + "690": { + "name": "readPNPMWorkspacePatterns", + "qualified_name": "treesitter.readPNPMWorkspacePatterns", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 693, + "intent": "include pnpm-managed workspace package roots in Node-family package discovery.", + "reason": "include pnpm-managed workspace package roots in Node-family package discovery." + }, + "691": { + "name": "workspacePackageRoots", + "qualified_name": "treesitter.workspacePackageRoots", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 729, + "intent": "map workspace manifests to concrete package directories without parsing unrelated nested packages.", + "reason": "map workspace manifests to concrete package directories without parsing unrelated nested packages." + }, + "692": { + "name": "splitWorkspacePatterns", + "qualified_name": "treesitter.splitWorkspacePatterns", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 771, + "intent": "normalize npm/pnpm workspace pattern lists before matching concrete package roots.", + "reason": "normalize npm/pnpm workspace pattern lists before matching concrete package roots." + }, + "693": { + "name": "matchesWorkspacePatterns", + "qualified_name": "treesitter.matchesWorkspacePatterns", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 793, + "intent": "apply include-first and negate-after semantics consistently across workspace root discovery.", + "reason": "apply include-first and negate-after semantics consistently across workspace root discovery." + }, + "694": { + "name": "workspacePatternMatch", + "qualified_name": "treesitter.workspacePatternMatch", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 815, + "intent": "keep workspace package discovery independent from shell-specific glob expansion.", + "reason": "keep workspace package discovery independent from shell-specific glob expansion." + }, + "695": { + "name": "workspacePatternMatchParts", + "qualified_name": "treesitter.workspacePatternMatchParts", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 826, + "intent": "implement **-aware workspace glob semantics for package root discovery.", + "reason": "implement **-aware workspace glob semantics for package root discovery." + }, + "696": { + "name": "resolveTSConfigExtends", + "qualified_name": "treesitter.resolveTSConfigExtends", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 853, + "intent": "let nested tsconfig files inherit baseUrl/paths from local parent configs.", + "reason": "let nested tsconfig files inherit baseUrl/paths from local parent configs." + }, + "697": { + "name": "joinNodeImportPath", + "qualified_name": "treesitter.joinNodeImportPath", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 869, + "intent": "keep package-node qualified names aligned with JS/TS import strings.", + "reason": "keep package-node qualified names aligned with JS/TS import strings." + }, + "698": { + "name": "trimNodeWildcard", + "qualified_name": "treesitter.trimNodeWildcard", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 883, + "intent": "normalize alias rules before matching them against source directories.", + "reason": "normalize alias rules before matching them against source directories." + }, + "699": { + "name": "dirMatchesPrefix", + "qualified_name": "treesitter.dirMatchesPrefix", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 893, + "intent": "match source directories against tsconfig path targets without partial-segment false positives.", + "reason": "match source directories against tsconfig path targets without partial-segment false positives." + }, + "70": { + "name": "resolveRagDescription", + "qualified_name": "cli.resolveRagDescription", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/docs.go", + "namespace": "ccg", + "start_line": 123, + "intent": "keep the docs-generated Wiki root summary aligned with configuration.", + "reason": "keep the docs-generated Wiki root summary aligned with configuration." + }, + "700": { + "name": "pathMatchesPrefix", + "qualified_name": "treesitter.pathMatchesPrefix", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 904, + "intent": "match concrete source file paths against tsconfig alias target roots.", + "reason": "match concrete source file paths against tsconfig alias target roots." + }, + "701": { + "name": "stripJSONComments", + "qualified_name": "treesitter.stripJSONComments", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 915, + "intent": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", + "reason": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency." + }, + "702": { + "name": "containsString", + "qualified_name": "treesitter.containsString", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 971, + "intent": "keep extension checks simple without importing extra helpers.", + "reason": "keep extension checks simple without importing extra helpers." + }, + "703": { + "name": "readGoModulePath", + "qualified_name": "treesitter.readGoModulePath", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 982, + "intent": "identify the repository's root import path for Go package normalization.", + "reason": "identify the repository's root import path for Go package normalization." + }, + "704": { + "name": "readGoPackageClause", + "qualified_name": "treesitter.readGoPackageClause", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 1004, + "intent": "determine the local package name to assist in constructing qualified names.", + "reason": "determine the local package name to assist in constructing qualified names." + }, + "705": { + "name": "readJavaPackageDeclaration", + "qualified_name": "treesitter.readJavaPackageDeclaration", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 1030, + "intent": "use the language-declared package as the authoritative import path for Java package nodes.", + "reason": "use the language-declared package as the authoritative import path for Java package nodes." + }, + "706": { + "name": "readKotlinPackageHeader", + "qualified_name": "treesitter.readKotlinPackageHeader", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", + "namespace": "ccg", + "start_line": 1054, + "intent": "use the language-declared package as the authoritative import path for Kotlin package nodes.", + "reason": "use the language-declared package as the authoritative import path for Kotlin package nodes." + }, + "708": { + "name": "LanguageSemantics", + "qualified_name": "treesitter.LanguageSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 15, + "intent": "keep language-specific inference opt-in while the generic parser remains shared.", + "reason": "keep language-specific inference opt-in while the generic parser remains shared." + }, + "709": { + "name": "CallRewriteSemantics", + "qualified_name": "treesitter.CallRewriteSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 21, + "intent": "avoid forcing languages without call rewrite needs to implement no-op methods.", + "reason": "avoid forcing languages without call rewrite needs to implement no-op methods." + }, + "710": { + "name": "DefinitionSemantics", + "qualified_name": "treesitter.DefinitionSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 27, + "intent": "let languages enrich parsed definitions without adding language branches to Walker.", + "reason": "let languages enrich parsed definitions without adding language branches to Walker." + }, + "711": { + "name": "DefinitionNameSemantics", + "qualified_name": "treesitter.DefinitionNameSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 33, + "intent": "let languages normalize captured definition names before node and edge fingerprints are emitted.", + "reason": "let languages normalize captured definition names before node and edge fingerprints are emitted." + }, + "712": { + "name": "RelationshipSemantics", + "qualified_name": "treesitter.RelationshipSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 39, + "intent": "let languages normalize query-captured relationships through the same definition path.", + "reason": "let languages normalize query-captured relationships through the same definition path." + }, + "713": { + "name": "PackageSemantics", + "qualified_name": "treesitter.PackageSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 45, + "intent": "let languages derive relationships that require package-wide context without widening Walker's per-file parse path.", + "reason": "let languages derive relationships that require package-wide context without widening Walker's per-file parse path." + }, + "714": { + "name": "CommentSemantics", + "qualified_name": "treesitter.CommentSemantics", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 51, + "intent": "let languages contribute docstrings or similar constructs without Walker language branches.", + "reason": "let languages contribute docstrings or similar constructs without Walker language branches." + }, + "715": { + "name": "CallRewriter", + "qualified_name": "treesitter.CallRewriter", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 57, + "intent": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", + "reason": "let language specs recover dynamic dispatch targets without adding language branches to Walker." + }, + "716": { + "name": "CallRewriteContext", + "qualified_name": "treesitter.CallRewriteContext", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 63, + "intent": "provide enough call-site metadata for languages with assignment or dispatch-sensitive call names.", + "reason": "provide enough call-site metadata for languages with assignment or dispatch-sensitive call names." + }, + "717": { + "name": "SemanticContext", + "qualified_name": "treesitter.SemanticContext", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 74, + "intent": "avoid expanding Walker with one-off language branches as graph inference grows.", + "reason": "avoid expanding Walker with one-off language branches as graph inference grows." + }, + "718": { + "name": "DefinitionContext", + "qualified_name": "treesitter.DefinitionContext", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 94, + "intent": "expose definition-local AST state so languages can derive extra edges and metadata.", + "reason": "expose definition-local AST state so languages can derive extra edges and metadata." + }, + "719": { + "name": "DefinitionResult", + "qualified_name": "treesitter.DefinitionResult", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 108, + "intent": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", + "reason": "keep Walker generic while still allowing languages to accumulate interfaces and edges." + }, + "720": { + "name": "CommentContext", + "qualified_name": "treesitter.CommentContext", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 115, + "intent": "expose AST and file content so languages can surface docstrings as comment blocks.", + "reason": "expose AST and file content so languages can surface docstrings as comment blocks." + }, + "721": { + "name": "WithImportPackages", + "qualified_name": "treesitter.WithImportPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 124, + "intent": "let build/update provide package-clause-aware import normalization without widening parser interfaces.", + "reason": "let build/update provide package-clause-aware import normalization without widening parser interfaces." + }, + "722": { + "name": "WithGoImportPackages", + "qualified_name": "treesitter.WithGoImportPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 130, + "intent": "preserve compatibility for callers using the original Go-specific helper.", + "reason": "preserve compatibility for callers using the original Go-specific helper." + }, + "723": { + "name": "importPackagesFromContext", + "qualified_name": "treesitter.importPackagesFromContext", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 136, + "intent": "let Go-specific semantic helpers reuse package-name mappings without widening APIs.", + "reason": "let Go-specific semantic helpers reuse package-name mappings without widening APIs." + }, + "724": { + "name": "WithFilePackages", + "qualified_name": "treesitter.WithFilePackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 142, + "intent": "let parsers stamp package-less languages with a deterministic file-level package prefix.", + "reason": "let parsers stamp package-less languages with a deterministic file-level package prefix." + }, + "725": { + "name": "filePackagesFromContext", + "qualified_name": "treesitter.filePackagesFromContext", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 148, + "intent": "let walkers seed qualified names from a file's canonical import path when no package capture exists.", + "reason": "let walkers seed qualified names from a file's canonical import path when no package capture exists." + }, + "726": { + "name": "NoopSemantics", + "qualified_name": "treesitter.NoopSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 154, + "intent": "provide a safe fallback semantics hook when a language does not define extra graph enrichment.", + "reason": "provide a safe fallback semantics hook when a language does not define extra graph enrichment." + }, + "727": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.NoopSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 158, + "intent": "satisfy the LanguageSemantics interface with a no-op implementation.", + "reason": "satisfy the LanguageSemantics interface with a no-op implementation." + }, + "728": { + "name": "NoopCallRewriter", + "qualified_name": "treesitter.NoopCallRewriter", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 164, + "intent": "provide the default empty implementation for language specs without call rewrite rules.", + "reason": "provide the default empty implementation for language specs without call rewrite rules." + }, + "729": { + "name": "RewriteCall", + "qualified_name": "treesitter.NoopCallRewriter.RewriteCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 168, + "intent": "satisfy CallRewriter for languages without additional call inference.", + "reason": "satisfy CallRewriter for languages without additional call inference." + }, + "73": { + "name": "newHooksCmd", + "qualified_name": "cli.newHooksCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/hooks.go", + "namespace": "ccg", + "start_line": 31, + "intent": "git hook 관리 하위 명령을 하나의 네임스페이스 아래로 묶는다.", + "reason": "git hook 관리 하위 명령을 하나의 네임스페이스 아래로 묶는다." + }, + "730": { + "name": "semanticsOrDefault", + "qualified_name": "treesitter.semanticsOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 174, + "intent": "ensure a non-nil LanguageSemantics implementation is always available during parsing.", + "reason": "ensure a non-nil LanguageSemantics implementation is always available during parsing." + }, + "731": { + "name": "callRewriterOrDefault", + "qualified_name": "treesitter.callRewriterOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 183, + "intent": "keep call rewriting optional so languages without call inference avoid boilerplate.", + "reason": "keep call rewriting optional so languages without call inference avoid boilerplate." + }, + "732": { + "name": "definitionResultOrDefault", + "qualified_name": "treesitter.definitionResultOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 194, + "intent": "keep Walker generic while allowing opt-in definition hooks.", + "reason": "keep Walker generic while allowing opt-in definition hooks." + }, + "733": { + "name": "definitionNameOrDefault", + "qualified_name": "treesitter.definitionNameOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 203, + "intent": "centralize per-language symbol-name normalization behind an optional hook.", + "reason": "centralize per-language symbol-name normalization behind an optional hook." + }, + "734": { + "name": "implementedTypesOrDefault", + "qualified_name": "treesitter.implementedTypesOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 214, + "intent": "centralize query-captured implements relationships behind an optional language hook.", + "reason": "centralize query-captured implements relationships behind an optional language hook." + }, + "735": { + "name": "additionalCommentsOrDefault", + "qualified_name": "treesitter.additionalCommentsOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 223, + "intent": "let languages expose docstring-like constructs without affecting generic comment extraction.", + "reason": "let languages expose docstring-like constructs without affecting generic comment extraction." + }, + "736": { + "name": "packageEdgesOrDefault", + "qualified_name": "treesitter.packageEdgesOrDefault", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 232, + "intent": "centralize package-level enrichment behind an optional semantics hook.", + "reason": "centralize package-level enrichment behind an optional semantics hook." + }, + "737": { + "name": "PackageEdgesFor", + "qualified_name": "treesitter.PackageEdgesFor", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 241, + "intent": "let build/update orchestration reuse optional package-level enrichment hooks.", + "reason": "let build/update orchestration reuse optional package-level enrichment hooks." + }, + "738": { + "name": "SemanticsForLanguage", + "qualified_name": "treesitter.SemanticsForLanguage", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics.go", + "namespace": "ccg", + "start_line": 247, + "intent": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", + "reason": "let non-parser orchestration reuse the centralized language semantics registry without local language switches." + }, + "739": { + "name": "internal/adapters/outbound/treesitter/semantics_go.go", + "qualified_name": "internal/adapters/outbound/treesitter/semantics_go.go", + "kind": "file", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 1, + "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", + "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + }, + "740": { + "name": "GoSemantics", + "qualified_name": "treesitter.GoSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 17, + "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", + "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + }, + "741": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.GoSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 21, + "intent": "identify \"implements\" relationships using both structural and explicit compile-time assertions.", + "reason": "identify \"implements\" relationships using both structural and explicit compile-time assertions." + }, + "742": { + "name": "PackageEdges", + "qualified_name": "treesitter.GoSemantics.PackageEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 29, + "intent": "support Go's implicit structural typing when interfaces and methods are split across files in one package.", + "reason": "support Go's implicit structural typing when interfaces and methods are split across files in one package." + }, + "743": { + "name": "EnrichDefinition", + "qualified_name": "treesitter.GoSemantics.EnrichDefinition", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 35, + "intent": "move Go definition enrichment out of Walker and behind an optional semantics hook.", + "reason": "move Go definition enrichment out of Walker and behind an optional semantics hook." + }, + "744": { + "name": "CallRewriter", + "qualified_name": "treesitter.GoSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 65, + "intent": "preserve interface dispatch context for calls made through asserted variables.", + "reason": "preserve interface dispatch context for calls made through asserted variables." + }, + "745": { + "name": "goAssertionCallRewriter", + "qualified_name": "treesitter.goAssertionCallRewriter", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 72, + "intent": "keep Go assertion call inference behind the language semantics hook.", + "reason": "keep Go assertion call inference behind the language semantics hook." + }, + "746": { + "name": "RewriteCall", + "qualified_name": "treesitter.goAssertionCallRewriter.RewriteCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 78, + "intent": "preserve interface dispatch context for calls made through asserted variables.", + "reason": "preserve interface dispatch context for calls made through asserted variables." + }, + "747": { + "name": "receiverTypeBinding", + "qualified_name": "treesitter.receiverTypeBinding", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 104, + "intent": "bind assignment-sensitive call rewrites without exposing language details to Walker.", + "reason": "bind assignment-sensitive call rewrites without exposing language details to Walker." + }, + "748": { + "name": "collectGoAssertionCallBindings", + "qualified_name": "treesitter.collectGoAssertionCallBindings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 111, + "intent": "support later call-name rewriting when an asserted interface variable is used.", + "reason": "support later call-name rewriting when an asserted interface variable is used." + }, + "749": { + "name": "extractGoAssertionCallBinding", + "qualified_name": "treesitter.extractGoAssertionCallBinding", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 139, + "intent": "capture enough metadata to rewrite subsequent selector calls on asserted variables.", + "reason": "capture enough metadata to rewrite subsequent selector calls on asserted variables." + }, + "75": { + "name": "internal/adapters/inbound/cli/init.go", + "qualified_name": "internal/adapters/inbound/cli/init.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/init.go", + "namespace": "ccg", + "start_line": 1, + "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", + "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다." + }, + "750": { + "name": "goAssertionCallSourceType", + "qualified_name": "treesitter.goAssertionCallSourceType", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 167, + "intent": "preserve canonical import-qualified interface names so rewritten calls resolve precisely.", + "reason": "preserve canonical import-qualified interface names so rewritten calls resolve precisely." + }, + "751": { + "name": "goAssertionAssignedName", + "qualified_name": "treesitter.goAssertionAssignedName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 179, + "intent": "bind rewritten Go assertion calls to the local variable name that receives the assertion result.", + "reason": "bind rewritten Go assertion calls to the local variable name that receives the assertion result." + }, + "752": { + "name": "goAssertionVarSpecAssignedName", + "qualified_name": "treesitter.goAssertionVarSpecAssignedName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 194, + "intent": "recover var-spec bindings so type-assertion rewrites work for multi-value declarations.", + "reason": "recover var-spec bindings so type-assertion rewrites work for multi-value declarations." + }, + "753": { + "name": "goAssertionExprIndex", + "qualified_name": "treesitter.goAssertionExprIndex", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 209, + "intent": "align the asserted expression with the matching assignment target in tuple-style Go statements.", + "reason": "align the asserted expression with the matching assignment target in tuple-style Go statements." + }, + "754": { + "name": "goAssignedNameAt", + "qualified_name": "treesitter.goAssignedNameAt", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 230, + "intent": "map assertion result positions back to local names without duplicating assignment-shape parsing.", + "reason": "map assertion result positions back to local names without duplicating assignment-shape parsing." + }, + "755": { + "name": "goAssignmentIdent", + "qualified_name": "treesitter.goAssignmentIdent", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 245, + "intent": "reject blanks and non-identifiers before storing assertion-based name bindings.", + "reason": "reject blanks and non-identifiers before storing assertion-based name bindings." + }, + "756": { + "name": "goNodeContains", + "qualified_name": "treesitter.goNodeContains", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 255, + "intent": "detect which tuple element owns a type assertion when matching assignment shapes.", + "reason": "detect which tuple element owns a type assertion when matching assignment shapes." + }, + "757": { + "name": "isGoIdent", + "qualified_name": "treesitter.isGoIdent", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 269, + "intent": "reject non-identifier assignment targets when extracting assertion bindings.", + "reason": "reject non-identifier assignment targets when extracting assertion bindings." + }, + "758": { + "name": "goStructuralImplements", + "qualified_name": "treesitter.goStructuralImplements", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 284, + "intent": "support Go's implicit structural typing by matching concrete method names against package-wide interface declarations.", + "reason": "support Go's implicit structural typing by matching concrete method names against package-wide interface declarations." + }, + "759": { + "name": "goAssertionImplements", + "qualified_name": "treesitter.goAssertionImplements", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 328, + "intent": "extract \"implements\" relationships from common Go idioms like `var _ Interface = (*Concrete)(nil)`.", + "reason": "extract \"implements\" relationships from common Go idioms like `var _ Interface = (*Concrete)(nil)`." + }, + "76": { + "name": "newInitCmd", + "qualified_name": "cli.newInitCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/init.go", + "namespace": "ccg", + "start_line": 37, + "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", + "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다." + }, + "760": { + "name": "goImportAliases", + "qualified_name": "treesitter.goImportAliases", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 359, + "intent": "resolve locally-used package names to their canonical import targets during parsing.", + "reason": "resolve locally-used package names to their canonical import targets during parsing." + }, + "761": { + "name": "defaultGoImportName", + "qualified_name": "treesitter.defaultGoImportName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 395, + "intent": "approximate the package name used in Go source by taking the base segment of the import path.", + "reason": "approximate the package name used in Go source by taking the base segment of the import path." + }, + "762": { + "name": "isGoMajorVersionSegment", + "qualified_name": "treesitter.isGoMajorVersionSegment", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 409, + "intent": "handle Go modules with semantic versioning segments in their import paths.", + "reason": "handle Go modules with semantic versioning segments in their import paths." + }, + "763": { + "name": "trimGoVersionSuffix", + "qualified_name": "treesitter.trimGoVersionSuffix", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 419, + "intent": "normalize Go package names by stripping legacy gopkg.in-style version suffixes.", + "reason": "normalize Go package names by stripping legacy gopkg.in-style version suffixes." + }, + "765": { + "name": "extractGoAssertionConcrete", + "qualified_name": "treesitter.extractGoAssertionConcrete", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 473, + "intent": "keep concrete-type extraction in one place so new assertion shapes\nare easy to add without bloating goAssertionSpec.", + "reason": "keep concrete-type extraction in one place so new assertion shapes\nare easy to add without bloating goAssertionSpec." + }, + "766": { + "name": "normalizeGoTypeName", + "qualified_name": "treesitter.normalizeGoTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", + "namespace": "ccg", + "start_line": 485, + "intent": "ensure Go type names (e.g., pkg.Type) are mapped to their correct package namespaces.", + "reason": "ensure Go type names (e.g., pkg.Type) are mapped to their correct package namespaces." + }, + "77": { + "name": "resolveInitDest", + "qualified_name": "cli.resolveInitDest", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/init.go", + "namespace": "ccg", + "start_line": 87, + "intent": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", + "reason": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다." + }, + "770": { + "name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "qualified_name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "kind": "file", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 1, + "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", + "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." + }, + "771": { + "name": "TypeScriptSemantics", + "qualified_name": "treesitter.TypeScriptSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 16, + "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", + "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." + }, + "772": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.TypeScriptSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 20, + "intent": "capture TypeScript class hierarchy semantics directly from the parsed AST.", + "reason": "capture TypeScript class hierarchy semantics directly from the parsed AST." + }, + "773": { + "name": "ImplementedTypes", + "qualified_name": "treesitter.TypeScriptSemantics.ImplementedTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 68, + "intent": "keep explicit query captures and AST-derived hierarchy parsing on one normalization path.", + "reason": "keep explicit query captures and AST-derived hierarchy parsing on one normalization path." + }, + "774": { + "name": "CallRewriter", + "qualified_name": "treesitter.TypeScriptSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 81, + "intent": "rewrite member-call chains only when explicit type annotations prove each hop.", + "reason": "rewrite member-call chains only when explicit type annotations prove each hop." + }, + "775": { + "name": "qualifyTypeScriptHeritageTypeName", + "qualified_name": "treesitter.qualifyTypeScriptHeritageTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 91, + "intent": "keep TypeScript extends and implements targets consistently qualified before edge creation.", + "reason": "keep TypeScript extends and implements targets consistently qualified before edge creation." + }, + "776": { + "name": "qualifySameFileTypeName", + "qualified_name": "treesitter.qualifySameFileTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 103, + "intent": "keep same-file TypeScript references aligned with the file's package context.", + "reason": "keep same-file TypeScript references aligned with the file's package context." + }, + "777": { + "name": "typeScriptImportPackages", + "qualified_name": "treesitter.typeScriptImportPackages", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 123, + "intent": "resolve TypeScript imports into package context for heritage qualification.", + "reason": "resolve TypeScript imports into package context for heritage qualification." + }, + "778": { + "name": "collectTypeScriptReceiverBindings", + "qualified_name": "treesitter.collectTypeScriptReceiverBindings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 164, + "intent": "seed conservative receiver rewriting with only textually provable TypeScript type annotations.", + "reason": "seed conservative receiver rewriting with only textually provable TypeScript type annotations." + }, + "779": { + "name": "collectTypeScriptMemberTypes", + "qualified_name": "treesitter.collectTypeScriptMemberTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 185, + "intent": "prove intermediate member hops before rewriting TypeScript call chains.", + "reason": "prove intermediate member hops before rewriting TypeScript call chains." + }, + "78": { + "name": "internal/adapters/inbound/cli/lint.go", + "qualified_name": "internal/adapters/inbound/cli/lint.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 1, + "intent": "ensure rule matching uses consistent category keys regardless of input spelling", + "reason": "ensure rule matching uses consistent category keys regardless of input spelling" + }, + "780": { + "name": "typescriptReceiverChain", + "qualified_name": "treesitter.typescriptReceiverChain", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 196, + "intent": "recover member-call hops directly from the AST when callee text is insufficient.", + "reason": "recover member-call hops directly from the AST when callee text is insufficient." + }, + "781": { + "name": "collectTypeScriptMembersFromText", + "qualified_name": "treesitter.collectTypeScriptMembersFromText", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 211, + "intent": "avoid depending on grammar-specific field captures when proving member-chain types.", + "reason": "avoid depending on grammar-specific field captures when proving member-chain types." + }, + "782": { + "name": "typescriptClassName", + "qualified_name": "treesitter.typescriptClassName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 247, + "intent": "isolate TypeScript class-name lookup from heritage parsing logic.", + "reason": "isolate TypeScript class-name lookup from heritage parsing logic." + }, + "783": { + "name": "typescriptHeritage", + "qualified_name": "treesitter.typescriptHeritage", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 259, + "intent": "parse class_heritage text conservatively so hierarchy edges can be emitted without query changes.", + "reason": "parse class_heritage text conservatively so hierarchy edges can be emitted without query changes." + }, + "784": { + "name": "parseTypeScriptHeritageNode", + "qualified_name": "treesitter.parseTypeScriptHeritageNode", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 278, + "intent": "avoid comma-splitting inside generic arguments by preferring grammar-aware node traversal.", + "reason": "avoid comma-splitting inside generic arguments by preferring grammar-aware node traversal." + }, + "785": { + "name": "parseTypeScriptHeritageText", + "qualified_name": "treesitter.parseTypeScriptHeritageText", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 306, + "intent": "keep TypeScript inheritance extraction robust even when tree-sitter child field names differ across grammar revisions.", + "reason": "keep TypeScript inheritance extraction robust even when tree-sitter child field names differ across grammar revisions." + }, + "786": { + "name": "firstTypeScriptTypeName", + "qualified_name": "treesitter.firstTypeScriptTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 334, + "intent": "extract stable edge endpoint names from extends/implements clauses.", + "reason": "extract stable edge endpoint names from extends/implements clauses." + }, + "787": { + "name": "firstNamedTypeReference", + "qualified_name": "treesitter.firstNamedTypeReference", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 352, + "intent": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", + "reason": "recover stable hierarchy targets from AST nodes instead of brittle text slicing." + }, + "788": { + "name": "namedTypeReferences", + "qualified_name": "treesitter.namedTypeReferences", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 362, + "intent": "collect direct type reference children while tolerating grammar node-name changes.", + "reason": "collect direct type reference children while tolerating grammar node-name changes." + }, + "789": { + "name": "JavaScriptSemantics", + "qualified_name": "treesitter.JavaScriptSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 394, + "intent": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript.", + "reason": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript." + }, + "79": { + "name": "normalizeLintCategory", + "qualified_name": "cli.normalizeLintCategory", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 22, + "intent": "ensure rule matching uses consistent category keys regardless of input spelling", + "reason": "ensure rule matching uses consistent category keys regardless of input spelling" + }, + "790": { + "name": "ImplementedTypes", + "qualified_name": "treesitter.JavaScriptSemantics.ImplementedTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 398, + "intent": "satisfy shared relationship normalization without inventing JS interface semantics.", + "reason": "satisfy shared relationship normalization without inventing JS interface semantics." + }, + "791": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.JavaScriptSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 404, + "intent": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics.", + "reason": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics." + }, + "792": { + "name": "javascriptClassName", + "qualified_name": "treesitter.javascriptClassName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 438, + "intent": "isolate JavaScript class-name lookup from hierarchy extraction logic.", + "reason": "isolate JavaScript class-name lookup from hierarchy extraction logic." + }, + "793": { + "name": "explicitReceiverTypeCallRewriter", + "qualified_name": "treesitter.explicitReceiverTypeCallRewriter", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 450, + "intent": "preserve conservative member-call rewriting when each hop is proven by explicit type annotations.", + "reason": "preserve conservative member-call rewriting when each hop is proven by explicit type annotations." + }, + "794": { + "name": "RewriteCall", + "qualified_name": "treesitter.explicitReceiverTypeCallRewriter.RewriteCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 458, + "intent": "preserve conservative receiver dispatch by upgrading only typed call chains into owner-qualified selectors.", + "reason": "preserve conservative receiver dispatch by upgrading only typed call chains into owner-qualified selectors." + }, + "795": { + "name": "callChainFromCallee", + "qualified_name": "treesitter.callChainFromCallee", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 492, + "intent": "share one normalized chain representation across language-specific receiver rewriters.", + "reason": "share one normalized chain representation across language-specific receiver rewriters." + }, + "796": { + "name": "memberChainFromNode", + "qualified_name": "treesitter.memberChainFromNode", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 498, + "intent": "reuse AST-derived selector parsing when raw callee strings are incomplete.", + "reason": "reuse AST-derived selector parsing when raw callee strings are incomplete." + }, + "797": { + "name": "selectorChainFromText", + "qualified_name": "treesitter.selectorChainFromText", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 507, + "intent": "share one normalized selector chain representation across call rewriting helpers.", + "reason": "share one normalized selector chain representation across call rewriting helpers." + }, + "799": { + "name": "normalizeReceiverTypeName", + "qualified_name": "treesitter.normalizeReceiverTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", + "namespace": "ccg", + "start_line": 547, + "intent": "canonicalize explicit type names before they are used as receiver-chain proof.", + "reason": "canonicalize explicit type names before they are used as receiver-chain proof." + }, + "80": { + "name": "lintRuleMatches", + "qualified_name": "cli.lintRuleMatches", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 37, + "intent": "determine if a single ignore rule covers a specific lint finding", + "reason": "determine if a single ignore rule covers a specific lint finding" + }, + "803": { + "name": "CallRewriter", + "qualified_name": "treesitter.JavaSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 20, + "intent": "rewrite member-call chains only when local/field declarations prove the receiver types.", + "reason": "rewrite member-call chains only when local/field declarations prove the receiver types." + }, + "804": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.JavaSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 31, + "intent": "capture Java class hierarchy semantics with package-qualified child names when available.", + "reason": "capture Java class hierarchy semantics with package-qualified child names when available." + }, + "805": { + "name": "ImplementedTypes", + "qualified_name": "treesitter.JavaSemantics.ImplementedTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 79, + "intent": "keep generic-safe relationship extraction consistent between direct hierarchy parsing and query captures.", + "reason": "keep generic-safe relationship extraction consistent between direct hierarchy parsing and query captures." + }, + "806": { + "name": "KotlinSemantics", + "qualified_name": "treesitter.KotlinSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 96, + "intent": "emit Kotlin hierarchy edges from declaration text while preserving package-qualified child names.", + "reason": "emit Kotlin hierarchy edges from declaration text while preserving package-qualified child names." + }, + "807": { + "name": "CallRewriter", + "qualified_name": "treesitter.KotlinSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 100, + "intent": "rewrite member-call chains only when explicit property/value types prove the receiver chain.", + "reason": "rewrite member-call chains only when explicit property/value types prove the receiver chain." + }, + "808": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.KotlinSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 111, + "intent": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", + "reason": "capture Kotlin supertype relationships by parsing the declaration head after ':'." + }, + "809": { + "name": "ImplementedTypes", + "qualified_name": "treesitter.KotlinSemantics.ImplementedTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 159, + "intent": "keep declaration-time and query-time interface extraction aligned for Kotlin.", + "reason": "keep declaration-time and query-time interface extraction aligned for Kotlin." + }, + "81": { + "name": "filterIgnoredLintReport", + "qualified_name": "cli.filterIgnoredLintReport", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 57, + "intent": "strip suppressed findings before display and strict-mode counting", + "reason": "strip suppressed findings before display and strict-mode counting" + }, + "810": { + "name": "javaClassName", + "qualified_name": "treesitter.javaClassName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 176, + "intent": "isolate Java class-name lookup from hierarchy parsing logic.", + "reason": "isolate Java class-name lookup from hierarchy parsing logic." + }, + "811": { + "name": "parseJavaClassHierarchy", + "qualified_name": "treesitter.parseJavaClassHierarchy", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 188, + "intent": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions.", + "reason": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions." + }, + "812": { + "name": "javaClassHierarchy", + "qualified_name": "treesitter.javaClassHierarchy", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 223, + "intent": "prefer grammar-aware traversal so commas inside generics do not split hierarchy targets.", + "reason": "prefer grammar-aware traversal so commas inside generics do not split hierarchy targets." + }, + "814": { + "name": "qualifyTypeName", + "qualified_name": "treesitter.qualifyTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 263, + "intent": "preserve package context for hierarchy edges so resolvers can bind them deterministically.", + "reason": "preserve package context for hierarchy edges so resolvers can bind them deterministically." + }, + "815": { + "name": "qualifyImportedTypeName", + "qualified_name": "treesitter.qualifyImportedTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 273, + "intent": "let hierarchy edges point to imported types across packages when declarations use short names.", + "reason": "let hierarchy edges point to imported types across packages when declarations use short names." + }, + "816": { + "name": "collectJavaReceiverBindings", + "qualified_name": "treesitter.collectJavaReceiverBindings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 288, + "intent": "enable conservative receiver call rewriting without requiring full Java type checking.", + "reason": "enable conservative receiver call rewriting without requiring full Java type checking." + }, + "817": { + "name": "collectJavaMemberTypes", + "qualified_name": "treesitter.collectJavaMemberTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 309, + "intent": "prove intermediate receiver hops before rewriting Java member-call chains.", + "reason": "prove intermediate receiver hops before rewriting Java member-call chains." + }, + "818": { + "name": "collectKotlinReceiverBindings", + "qualified_name": "treesitter.collectKotlinReceiverBindings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 320, + "intent": "support conservative Kotlin receiver call rewriting without smart-cast inference.", + "reason": "support conservative Kotlin receiver call rewriting without smart-cast inference." + }, + "819": { + "name": "collectKotlinMemberTypes", + "qualified_name": "treesitter.collectKotlinMemberTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 341, + "intent": "prove receiver-member chains before rewriting Kotlin call selectors.", + "reason": "prove receiver-member chains before rewriting Kotlin call selectors." + }, + "82": { + "name": "countNonIgnoredWithRules", + "qualified_name": "cli.countNonIgnoredWithRules", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 108, + "intent": "compute the strict-mode failure count against an explicit rule set", + "reason": "compute the strict-mode failure count against an explicit rule set" + }, + "820": { + "name": "collectJVMMembersFromText", + "qualified_name": "treesitter.collectJVMMembersFromText", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 357, + "intent": "share one conservative member-type extractor across Java and Kotlin receiver rewriting.", + "reason": "share one conservative member-type extractor across Java and Kotlin receiver rewriting." + }, + "821": { + "name": "qualifyJVMReceiverTypeName", + "qualified_name": "treesitter.qualifyJVMReceiverTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 400, + "intent": "keep receiver rewriting and hierarchy edges on the same qualified type names.", + "reason": "keep receiver rewriting and hierarchy edges on the same qualified type names." + }, + "823": { + "name": "jvmReceiverChain", + "qualified_name": "treesitter.jvmReceiverChain", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 472, + "intent": "recover member-call hops from the AST when raw callee text is not enough.", + "reason": "recover member-call hops from the AST when raw callee text is not enough." + }, + "824": { + "name": "importAliasesBySimpleName", + "qualified_name": "treesitter.importAliasesBySimpleName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 496, + "intent": "support cross-package hierarchy resolution by recovering fully qualified imported type names from source imports.", + "reason": "support cross-package hierarchy resolution by recovering fully qualified imported type names from source imports." + }, + "825": { + "name": "normalizeImportedTypePath", + "qualified_name": "treesitter.normalizeImportedTypePath", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 525, + "intent": "extract the imported symbol target from Java/Kotlin import syntax for later hierarchy qualification.", + "reason": "extract the imported symbol target from Java/Kotlin import syntax for later hierarchy qualification." + }, + "826": { + "name": "kotlinClassName", + "qualified_name": "treesitter.kotlinClassName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 547, + "intent": "isolate Kotlin declaration-name lookup from supertype parsing logic.", + "reason": "isolate Kotlin declaration-name lookup from supertype parsing logic." + }, + "829": { + "name": "kotlinSupertypes", + "qualified_name": "treesitter.kotlinSupertypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 669, + "intent": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes.", + "reason": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes." + }, + "832": { + "name": "firstJVMTypeReference", + "qualified_name": "treesitter.firstJVMTypeReference", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 736, + "intent": "share simple type extraction between Java and Kotlin hierarchy walkers.", + "reason": "share simple type extraction between Java and Kotlin hierarchy walkers." + }, + "833": { + "name": "jvmTypeReferences", + "qualified_name": "treesitter.jvmTypeReferences", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 746, + "intent": "recover hierarchy endpoints from grammar nodes while remaining tolerant of parser version differences.", + "reason": "recover hierarchy endpoints from grammar nodes while remaining tolerant of parser version differences." + }, + "835": { + "name": "normalizeKotlinSupertypeName", + "qualified_name": "treesitter.normalizeKotlinSupertypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", + "namespace": "ccg", + "start_line": 825, + "intent": "derive stable edge endpoint names from Kotlin declaration heads.", + "reason": "derive stable edge endpoint names from Kotlin declaration heads." + }, + "836": { + "name": "internal/adapters/outbound/treesitter/semantics_python.go", + "qualified_name": "internal/adapters/outbound/treesitter/semantics_python.go", + "kind": "file", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 1, + "intent": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", + "reason": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic." + }, + "837": { + "name": "PythonSemantics", + "qualified_name": "treesitter.PythonSemantics", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 13, + "intent": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", + "reason": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic." + }, + "838": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.PythonSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 17, + "intent": "capture Python class inheritance from the AST so type hierarchy queries work without query-only special cases.", + "reason": "capture Python class inheritance from the AST so type hierarchy queries work without query-only special cases." + }, + "839": { + "name": "AdditionalComments", + "qualified_name": "treesitter.PythonSemantics.AdditionalComments", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 50, + "intent": "surface docstrings through the same binder pipeline used for ordinary comments.", + "reason": "surface docstrings through the same binder pipeline used for ordinary comments." + }, + "84": { + "name": "flattenLintRules", + "qualified_name": "cli.flattenLintRules", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 177, + "intent": "handle the multiple concrete types viper may return for a YAML sequence", + "reason": "handle the multiple concrete types viper may return for a YAML sequence" + }, + "840": { + "name": "pythonClassName", + "qualified_name": "treesitter.pythonClassName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 56, + "intent": "keep Python inheritance extraction logic small and explicit by isolating class-name lookup.", + "reason": "keep Python inheritance extraction logic small and explicit by isolating class-name lookup." + }, + "841": { + "name": "pythonClassParents", + "qualified_name": "treesitter.pythonClassParents", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 68, + "intent": "read the tree-sitter-python superclasses field into simple parent names for inherits edges.", + "reason": "read the tree-sitter-python superclasses field into simple parent names for inherits edges." + }, + "843": { + "name": "collectPythonDocstrings", + "qualified_name": "treesitter.collectPythonDocstrings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 115, + "intent": "move Python docstring extraction out of Walker while preserving binder-facing behavior.", + "reason": "move Python docstring extraction out of Walker while preserving binder-facing behavior." + }, + "844": { + "name": "walkPythonDocstrings", + "qualified_name": "treesitter.walkPythonDocstrings", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 123, + "intent": "implement Python docstring discovery separately from the generic Walker.", + "reason": "implement Python docstring discovery separately from the generic Walker." + }, + "845": { + "name": "tryExtractPythonDocstring", + "qualified_name": "treesitter.tryExtractPythonDocstring", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 143, + "intent": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", + "reason": "encapsulate docstring acceptance rules so tests can lock the behavior precisely." + }, + "846": { + "name": "isSupportedPythonDocstringLiteral", + "qualified_name": "treesitter.isSupportedPythonDocstringLiteral", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 207, + "intent": "accept only Python string literal forms that can legally act as docstrings.", + "reason": "accept only Python string literal forms that can legally act as docstrings." + }, + "847": { + "name": "isFirstStringExprStmt", + "qualified_name": "treesitter.isFirstStringExprStmt", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", + "namespace": "ccg", + "start_line": 225, + "intent": "preserve Python docstring semantics that only the leading string literal counts.", + "reason": "preserve Python docstring semantics that only the leading string literal counts." + }, + "85": { + "name": "parseLintRule", + "qualified_name": "cli.parseLintRule", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 208, + "intent": "normalize heterogeneous viper/YAML map representations into a single lintRule struct", + "reason": "normalize heterogeneous viper/YAML map representations into a single lintRule struct" + }, + "850": { + "name": "AdditionalEdges", + "qualified_name": "treesitter.RustSemantics.AdditionalEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 17, + "intent": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks.", + "reason": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks." + }, + "851": { + "name": "CallRewriter", + "qualified_name": "treesitter.RustSemantics.CallRewriter", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 23, + "intent": "preserve exact trait path and optional concrete type information without changing generic walker logic.", + "reason": "preserve exact trait path and optional concrete type information without changing generic walker logic." + }, + "852": { + "name": "DefinitionName", + "qualified_name": "treesitter.RustSemantics.DefinitionName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 30, + "intent": "keep impl_item class names stable when the captured type includes generic arguments.", + "reason": "keep impl_item class names stable when the captured type includes generic arguments." + }, + "854": { + "name": "rustImplTraitName", + "qualified_name": "treesitter.rustImplTraitName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 59, + "intent": "recover stable trait identifiers before implementation edges are emitted.", + "reason": "recover stable trait identifiers before implementation edges are emitted." + }, + "855": { + "name": "rustQualifiedCallRewriter", + "qualified_name": "treesitter.rustQualifiedCallRewriter", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 72, + "intent": "preserve trait and concrete type information in Rust call rewriting without broadening matching.", + "reason": "preserve trait and concrete type information in Rust call rewriting without broadening matching." + }, + "856": { + "name": "RewriteCall", + "qualified_name": "treesitter.rustQualifiedCallRewriter.RewriteCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 78, + "intent": "preserve trait owner information in Rust call fingerprints without changing generic walker behavior.", + "reason": "preserve trait owner information in Rust call fingerprints without changing generic walker behavior." + }, + "857": { + "name": "rustParseQualifiedTraitCall", + "qualified_name": "treesitter.rustParseQualifiedTraitCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 105, + "intent": "split Rust qualified trait calls into trait and method components for rewriting.", + "reason": "split Rust qualified trait calls into trait and method components for rewriting." + }, + "858": { + "name": "rustParseUFCSCall", + "qualified_name": "treesitter.rustParseUFCSCall", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 120, + "intent": "recover concrete-type and trait information from Rust UFCS call syntax.", + "reason": "recover concrete-type and trait information from Rust UFCS call syntax." + }, + "859": { + "name": "rustNormalizeTypeName", + "qualified_name": "treesitter.rustNormalizeTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 145, + "intent": "keep Rust type and trait names stable across impl headers and rewritten calls.", + "reason": "keep Rust type and trait names stable across impl headers and rewritten calls." + }, + "860": { + "name": "rustQualifyImportedTypeName", + "qualified_name": "treesitter.rustQualifyImportedTypeName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 171, + "intent": "preserve full Rust paths when rewritten calls refer to imported trait names.", + "reason": "preserve full Rust paths when rewritten calls refer to imported trait names." + }, + "861": { + "name": "rustImportAliases", + "qualified_name": "treesitter.rustImportAliases", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 186, + "intent": "support Rust trait call normalization when code references imported names.", + "reason": "support Rust trait call normalization when code references imported names." + }, + "862": { + "name": "rustCollectImportAliases", + "qualified_name": "treesitter.rustCollectImportAliases", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 212, + "intent": "reuse nested Rust use-tree parsing while accumulating import aliases into one map.", + "reason": "reuse nested Rust use-tree parsing while accumulating import aliases into one map." + }, + "863": { + "name": "rustExpandUseDeclaration", + "qualified_name": "treesitter.rustExpandUseDeclaration", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 227, + "intent": "flatten nested use trees so alias extraction can treat every import uniformly.", + "reason": "flatten nested use trees so alias extraction can treat every import uniformly." + }, + "864": { + "name": "rustTrimUseDeclaration", + "qualified_name": "treesitter.rustTrimUseDeclaration", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 266, + "intent": "normalize Rust use declarations before nested path expansion logic runs.", + "reason": "normalize Rust use declarations before nested path expansion logic runs." + }, + "865": { + "name": "rustImportAliasEntry", + "qualified_name": "treesitter.rustImportAliasEntry", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 276, + "intent": "support both explicit `as` aliases and default basename aliases for Rust imports.", + "reason": "support both explicit `as` aliases and default basename aliases for Rust imports." + }, + "866": { + "name": "rustMatchingBrace", + "qualified_name": "treesitter.rustMatchingBrace", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 291, + "intent": "parse nested Rust use trees without confusing sibling branches for the current scope.", + "reason": "parse nested Rust use trees without confusing sibling branches for the current scope." + }, + "867": { + "name": "rustMatchingAngle", + "qualified_name": "treesitter.rustMatchingAngle", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 309, + "intent": "parse nested generic syntax in Rust UFCS selectors without losing the outer boundary.", + "reason": "parse nested generic syntax in Rust UFCS selectors without losing the outer boundary." + }, + "868": { + "name": "rustTopLevelAsIndex", + "qualified_name": "treesitter.rustTopLevelAsIndex", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 327, + "intent": "split concrete and trait types only when nested generic syntax is balanced.", + "reason": "split concrete and trait types only when nested generic syntax is balanced." + }, + "869": { + "name": "rustSplitTopLevel", + "qualified_name": "treesitter.rustSplitTopLevel", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", + "namespace": "ccg", + "start_line": 361, + "intent": "flatten Rust use-tree members without breaking nested grouped imports.", + "reason": "flatten Rust use-tree members without breaking nested grouped imports." + }, + "87": { + "name": "lintRule", + "qualified_name": "cli.lintRule", + "kind": "class", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 252, + "intent": "carry the pattern, category, and action that determine how a lint finding is handled", + "reason": "carry the pattern, category, and action that determine how a lint finding is handled" + }, + "871": { + "name": "Walker", + "qualified_name": "treesitter.Walker", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 41, + "intent": "turn language-specific ASTs into the project's normalized code graph representation", + "reason": "turn language-specific ASTs into the project's normalized code graph representation" + }, + "873": { + "name": "WalkerOption", + "qualified_name": "treesitter.WalkerOption", + "kind": "type", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 68, + "intent": "allow caller-supplied dependencies such as logging without expanding constructor arguments", + "reason": "allow caller-supplied dependencies such as logging without expanding constructor arguments" + }, + "874": { + "name": "WithLogger", + "qualified_name": "treesitter.WithLogger", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 73, + "intent": "let callers route parser diagnostics through their preferred slog.Logger", + "reason": "let callers route parser diagnostics through their preferred slog.Logger" + }, + "875": { + "name": "NewWalker", + "qualified_name": "treesitter.NewWalker", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 84, + "intent": "amortize parser and query compilation cost across many file parses", + "reason": "amortize parser and query compilation cost across many file parses" + }, + "876": { + "name": "ParseCacheVersion", + "qualified_name": "treesitter.Walker.ParseCacheVersion", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 127, + "intent": "invalidate full-build parse cache entries when language queries or parser semantics change.", + "reason": "invalidate full-build parse cache entries when language queries or parser semantics change." + }, + "877": { + "name": "Spec", + "qualified_name": "treesitter.Walker.Spec", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 136, + "intent": "expose the configured language rules and query paths for this walker instance", + "reason": "expose the configured language rules and query paths for this walker instance" + }, + "878": { + "name": "Close", + "qualified_name": "treesitter.Walker.Close", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 147, + "intent": "free parser-side native resources once file parsing is complete", + "reason": "free parser-side native resources once file parsing is complete" + }, + "879": { + "name": "Language", + "qualified_name": "treesitter.Walker.Language", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 158, + "intent": "expose the language handled by this Walker for downstream coordination", + "reason": "expose the language handled by this Walker for downstream coordination" + }, + "88": { + "name": "newLintCmd", + "qualified_name": "cli.newLintCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/lint.go", + "namespace": "ccg", + "start_line": 261, + "intent": "문서 품질 점검(orphan/missing/stale/annotation)을 하나의 CLI 흐름으로 제공한다.", + "reason": "문서 품질 점검(orphan/missing/stale/annotation)을 하나의 CLI 흐름으로 제공한다." + }, + "880": { + "name": "Parse", + "qualified_name": "treesitter.Walker.Parse", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 165, + "intent": "provide the basic parsing entry point when callers do not need comments or custom context", + "reason": "provide the basic parsing entry point when callers do not need comments or custom context" + }, + "881": { + "name": "ParseWithContext", + "qualified_name": "treesitter.Walker.ParseWithContext", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 173, + "intent": "let callers cancel Tree-sitter parsing through context propagation", + "reason": "let callers cancel Tree-sitter parsing through context propagation" + }, + "882": { + "name": "ParseWithComments", + "qualified_name": "treesitter.Walker.ParseWithComments", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 184, + "intent": "produce the full parse result needed for graph building and annotation binding", + "reason": "produce the full parse result needed for graph building and annotation binding" + }, + "883": { + "name": "ParseWithCommentsAndMetadata", + "qualified_name": "treesitter.Walker.ParseWithCommentsAndMetadata", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 191, + "intent": "give build/update paths access to interface method metadata needed for package-wide relationship inference.", + "reason": "give build/update paths access to interface method metadata needed for package-wide relationship inference." + }, + "884": { + "name": "executeQueries", + "qualified_name": "treesitter.Walker.executeQueries", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 279, + "intent": "map Tree-sitter query captures into normalized graph entities for one file", + "reason": "map Tree-sitter query captures into normalized graph entities for one file" + }, + "885": { + "name": "nodeKey", + "qualified_name": "treesitter.nodeKey", + "kind": "class", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 290, + "intent": "key duplicate symbol matches by name and source span during one query execution.", + "reason": "key duplicate symbol matches by name and source span during one query execution." + }, + "886": { + "name": "extractCallName", + "qualified_name": "treesitter.Walker.extractCallName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 538, + "intent": "derive stable callee names for call edge fingerprints across grammars", + "reason": "derive stable callee names for call edge fingerprints across grammars" + }, + "888": { + "name": "inferEnclosingReceiver", + "qualified_name": "treesitter.Walker.inferEnclosingReceiver", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 558, + "intent": "preserve method qualified names when a language query does not capture an explicit receiver.", + "reason": "preserve method qualified names when a language query does not capture an explicit receiver." + }, + "889": { + "name": "mapDefTypeToNodeKind", + "qualified_name": "treesitter.Walker.mapDefTypeToNodeKind", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 574, + "intent": "keep language query captures aligned with graph node categorization", + "reason": "keep language query captures aligned with graph node categorization" + }, + "89": { + "name": "internal/adapters/inbound/cli/migrate.go", + "qualified_name": "internal/adapters/inbound/cli/migrate.go", + "kind": "file", + "file_path": "internal/adapters/inbound/cli/migrate.go", + "namespace": "ccg", + "start_line": 1, + "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", + "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run." + }, + "890": { + "name": "buildQualifiedName", + "qualified_name": "treesitter.Walker.buildQualifiedName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 590, + "intent": "generate graph keys that distinguish methods from package-level declarations", + "reason": "generate graph keys that distinguish methods from package-level declarations" + }, + "891": { + "name": "resolveTestedBy", + "qualified_name": "treesitter.Walker.resolveTestedBy", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 606, + "intent": "connect production functions to enclosing tests without language-specific test frameworks", + "reason": "connect production functions to enclosing tests without language-specific test frameworks" + }, + "892": { + "name": "ExtractComments", + "qualified_name": "treesitter.Walker.ExtractComments", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 647, + "intent": "expose comment extraction without forcing callers to build nodes and edges", + "reason": "expose comment extraction without forcing callers to build nodes and edges" + }, + "893": { + "name": "parseSourceCtx", + "qualified_name": "treesitter.Walker.parseSourceCtx", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 665, + "intent": "let long parses honor caller cancellation while reusing pooled parsers for throughput.", + "reason": "let long parses honor caller cancellation while reusing pooled parsers for throughput." + }, + "894": { + "name": "collectComments", + "qualified_name": "treesitter.Walker.collectComments", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 702, + "intent": "keep documentation comments together so binders can attach them as a single unit", + "reason": "keep documentation comments together so binders can attach them as a single unit" + }, + "895": { + "name": "acquireParser", + "qualified_name": "treesitter.Walker.acquireParser", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 746, + "intent": "amortize parser construction cost across many parses on the same language.", + "reason": "amortize parser construction cost across many parses on the same language." + }, + "896": { + "name": "releaseParser", + "qualified_name": "treesitter.Walker.releaseParser", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 760, + "intent": "keep allocated parsers alive between parses instead of letting them be garbage collected.", + "reason": "keep allocated parsers alive between parses instead of letting them be garbage collected." + }, + "897": { + "name": "getLanguage", + "qualified_name": "treesitter.Walker.getLanguage", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 770, + "intent": "bind configured language names to the concrete parser implementation", + "reason": "bind configured language names to the concrete parser implementation" + }, + "898": { + "name": "exportPackageInterfaces", + "qualified_name": "treesitter.exportPackageInterfaces", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 803, + "intent": "expose package interface summaries without leaking walker-private helper types.", + "reason": "expose package interface summaries without leaking walker-private helper types." + }, + "899": { + "name": "contentForImplementedTypes", + "qualified_name": "treesitter.contentForImplementedTypes", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 816, + "intent": "normalize raw implements captures into a shared slice before language-specific enrichment.", + "reason": "normalize raw implements captures into a shared slice before language-specific enrichment." + }, + "90": { + "name": "MigrateConfig", + "qualified_name": "cli.MigrateConfig", + "kind": "class", + "file_path": "internal/adapters/inbound/cli/migrate.go", + "namespace": "ccg", + "start_line": 15, + "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", + "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run." + }, + "900": { + "name": "appendUniqueEdges", + "qualified_name": "treesitter.appendUniqueEdges", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 829, + "intent": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges.", + "reason": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges." + }, + "901": { + "name": "appendUniqueInterfaces", + "qualified_name": "treesitter.appendUniqueInterfaces", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 846, + "intent": "avoid repeating package interface metadata when multiple query patterns capture the same interface.", + "reason": "avoid repeating package interface metadata when multiple query patterns capture the same interface." + }, + "903": { + "name": "isTestName", + "qualified_name": "treesitter.isTestName", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 911, + "intent": "avoid misclassifying production symbols like testimonialCard or TestConfig as tests.", + "reason": "avoid misclassifying production symbols like testimonialCard or TestConfig as tests." + }, + "906": { + "name": "rangesOverlap", + "qualified_name": "treesitter.rangesOverlap", + "kind": "function", + "file_path": "internal/adapters/outbound/treesitter/walker.go", + "namespace": "ccg", + "start_line": 954, + "intent": "detect whether two symbol captures refer to overlapping source spans", + "reason": "detect whether two symbol captures refer to overlapping source spans" + }, + "908": { + "name": "GitClient", + "qualified_name": "changes.GitClient", + "kind": "type", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 22, + "intent": "abstract git operations so risk analysis can consume changed files and hunks", + "reason": "abstract git operations so risk analysis can consume changed files and hunks" + }, + "909": { + "name": "Hunk", + "qualified_name": "changes.Hunk", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 29, + "intent": "represent a diff segment that can be matched against graph nodes", + "reason": "represent a diff segment that can be matched against graph nodes" + }, + "91": { + "name": "newMigrateCmd", + "qualified_name": "cli.newMigrateCmd", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/migrate.go", + "namespace": "ccg", + "start_line": 24, + "intent": "separate schema changes from normal runtime startup.", + "reason": "separate schema changes from normal runtime startup." + }, + "910": { + "name": "RiskEntry", + "qualified_name": "changes.RiskEntry", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 37, + "intent": "return the changed node together with overlap count and computed risk", + "reason": "return the changed node together with overlap count and computed risk" + }, + "911": { + "name": "Result", + "qualified_name": "changes.Result", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 45, + "intent": "expose paged change-risk results while keeping legacy callers working with []RiskEntry.", + "reason": "expose paged change-risk results while keeping legacy callers working with []RiskEntry." + }, + "912": { + "name": "Service", + "qualified_name": "changes.Service", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 52, + "intent": "identify changed nodes and score how risky they are to modify", + "reason": "identify changed nodes and score how risky they are to modify" + }, + "913": { + "name": "New", + "qualified_name": "changes.New", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 59, + "intent": "wire database and git dependencies into a reusable analyzer", + "reason": "wire database and git dependencies into a reusable analyzer" + }, + "914": { + "name": "AnalyzePage", + "qualified_name": "changes.Service.AnalyzePage", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 67, + "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", + "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose." + }, + "915": { + "name": "ChangedNodeIDs", + "qualified_name": "changes.Service.ChangedNodeIDs", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 105, + "intent": "let downstream analyzers reuse change detection without paying risk-score or AnalyzePage pagination-loop costs.", + "reason": "let downstream analyzers reuse change detection without paying risk-score or AnalyzePage pagination-loop costs." + }, + "916": { + "name": "changedNodeHits", + "qualified_name": "changes.Service.changedNodeHits", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 125, + "intent": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", + "reason": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup." + }, + "917": { + "name": "collectDiffHunks", + "qualified_name": "changes.Service.collectDiffHunks", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 136, + "intent": "gather the minimal diff context needed before matching git changes back to graph nodes.", + "reason": "gather the minimal diff context needed before matching git changes back to graph nodes." + }, + "918": { + "name": "sortNodesForChangeOrder", + "qualified_name": "changes.sortNodesForChangeOrder", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 162, + "intent": "prevent flow lookups from depending on database or map iteration order.", + "reason": "prevent flow lookups from depending on database or map iteration order." + }, + "919": { + "name": "hitInfo", + "qualified_name": "changes.hitInfo", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 179, + "intent": "keep per-node diff overlap counts available until final risk scoring runs.", + "reason": "keep per-node diff overlap counts available until final risk scoring runs." + }, + "92": { + "name": "resolveMigrationsDir", + "qualified_name": "cli.resolveMigrationsDir", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/migrate.go", + "namespace": "ccg", + "start_line": 58, + "intent": "resolve migration directory precedence between flag, config, and environment defaults.", + "reason": "resolve migration directory precedence between flag, config, and environment defaults." + }, + "920": { + "name": "matchHunksToNodes", + "qualified_name": "changes.matchHunksToNodes", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 186, + "intent": "translate file-level diff hunks into the graph nodes that were actually touched.", + "reason": "translate file-level diff hunks into the graph nodes that were actually touched." + }, + "921": { + "name": "riskCandidate", + "qualified_name": "changes.riskCandidate", + "kind": "class", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 210, + "intent": "separate risk ordering from response entry allocation for paged consumers.", + "reason": "separate risk ordering from response entry allocation for paged consumers." + }, + "922": { + "name": "selectTopRiskCandidates", + "qualified_name": "changes.selectTopRiskCandidates", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 218, + "intent": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window.", + "reason": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window." + }, + "923": { + "name": "computeTopRiskCandidates", + "qualified_name": "changes.computeTopRiskCandidates", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 224, + "intent": "keep legacy Analyze behavior available while letting paged callers avoid full candidate allocation and full sorting.", + "reason": "keep legacy Analyze behavior available while letting paged callers avoid full candidate allocation and full sorting." + }, + "924": { + "name": "compareRiskCandidates", + "qualified_name": "changes.compareRiskCandidates", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 272, + "intent": "centralize legacy Analyze ordering so heap selection and final sorting stay consistent.", + "reason": "centralize legacy Analyze ordering so heap selection and final sorting stay consistent." + }, + "925": { + "name": "sortRiskCandidates", + "qualified_name": "changes.sortRiskCandidates", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 308, + "intent": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work.", + "reason": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work." + }, + "926": { + "name": "riskCandidateHeap", + "qualified_name": "changes.riskCandidateHeap", + "kind": "type", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 316, + "intent": "select the top AnalyzePage window without allocating or sorting the full candidate set.", + "reason": "select the top AnalyzePage window without allocating or sorting the full candidate set." + }, + "928": { + "name": "Less", + "qualified_name": "changes.riskCandidateHeap.Less", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 322, + "intent": "invert risk ordering so the heap root stays the worst retained candidate.", + "reason": "invert risk ordering so the heap root stays the worst retained candidate." + }, + "930": { + "name": "Push", + "qualified_name": "changes.riskCandidateHeap.Push", + "kind": "function", + "file_path": "internal/app/analyze/changes/service.go", + "namespace": "ccg", + "start_line": 333, + "intent": "append a retained risk candidate supplied by container/heap.", + "reason": "append a retained risk candidate supplied by container/heap." + }, + "934": { + "name": "Config", + "qualified_name": "flow.Config", + "kind": "class", + "file_path": "internal/app/analyze/flow/builder.go", + "namespace": "ccg", + "start_line": 14, + "intent": "provides an extension point for stored flow rebuild configuration.", + "reason": "provides an extension point for stored flow rebuild configuration." + }, + "935": { + "name": "Stats", + "qualified_name": "flow.Stats", + "kind": "class", + "file_path": "internal/app/analyze/flow/builder.go", + "namespace": "ccg", + "start_line": 18, + "intent": "returns the size of the rebuilt stored flow as a post-process result.", + "reason": "returns the size of the rebuilt stored flow as a post-process result." + }, + "936": { + "name": "Builder", + "qualified_name": "flow.Builder", + "kind": "class", + "file_path": "internal/app/analyze/flow/builder.go", + "namespace": "ccg", + "start_line": 25, + "intent": "persists traced flows per entrypoint back into the flows table.", + "reason": "persists traced flows per entrypoint back into the flows table." + }, + "937": { + "name": "NewBuilder", + "qualified_name": "flow.NewBuilder", + "kind": "function", + "file_path": "internal/app/analyze/flow/builder.go", + "namespace": "ccg", + "start_line": 31, + "intent": "binds the database and graph reader to create a stored flow rebuild service.", + "reason": "binds the database and graph reader to create a stored flow rebuild service." + }, + "938": { + "name": "Rebuild", + "qualified_name": "flow.Builder.Rebuild", + "kind": "function", + "file_path": "internal/app/analyze/flow/builder.go", + "namespace": "ccg", + "start_line": 44, + "intent": "refreshes list_flows by replacing all stored flows within the namespace.", + "reason": "refreshes list_flows by replacing all stored flows within the namespace." + }, + "94": { + "name": "shouldSkipDBInit", + "qualified_name": "cli.shouldSkipDBInit", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/root.go", + "namespace": "ccg", + "start_line": 30, + "intent": "특정 커맨드나 플래그 설정에 따라 DB 초기화 단계를 건너뛸지 결정한다.", + "reason": "특정 커맨드나 플래그 설정에 따라 DB 초기화 단계를 건너뛸지 결정한다." + }, + "940": { + "name": "EdgeReader", + "qualified_name": "flow.EdgeReader", + "kind": "type", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 14, + "intent": "abstract graph reads so flow tracing can follow call edges from any store", + "reason": "abstract graph reads so flow tracing can follow call edges from any store" + }, + "941": { + "name": "Tracer", + "qualified_name": "flow.Tracer", + "kind": "class", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 21, + "intent": "produce reusable flow records that describe reachable call paths", + "reason": "produce reusable flow records that describe reachable call paths" + }, + "942": { + "name": "nodeBatchReader", + "qualified_name": "flow.nodeBatchReader", + "kind": "type", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 27, + "intent": "let cross-namespace readers label foreign members without widening the EdgeReader contract.", + "reason": "let cross-namespace readers label foreign members without widening the EdgeReader contract." + }, + "943": { + "name": "stampMemberNamespaces", + "qualified_name": "flow.Tracer.stampMemberNamespaces", + "kind": "function", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 35, + "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", + "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace." + }, + "944": { + "name": "TraceOptions", + "qualified_name": "flow.TraceOptions", + "kind": "class", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 62, + "intent": "let callers cap traversal cost when tracing large call graphs", + "reason": "let callers cap traversal cost when tracing large call graphs" + }, + "945": { + "name": "TraceResult", + "qualified_name": "flow.TraceResult", + "kind": "class", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 69, + "intent": "communicate truncation status alongside the produced flow", + "reason": "communicate truncation status alongside the produced flow" + }, + "946": { + "name": "defaultTraceOptions", + "qualified_name": "flow.defaultTraceOptions", + "kind": "function", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 81, + "intent": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", + "reason": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode." + }, + "947": { + "name": "New", + "qualified_name": "flow.New", + "kind": "function", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 92, + "intent": "construct a tracer bound to a graph edge reader", + "reason": "construct a tracer bound to a graph edge reader" + }, + "948": { + "name": "TraceFlow", + "qualified_name": "flow.Tracer.TraceFlow", + "kind": "function", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 102, + "intent": "capture the reachable call chain from one entry node as a flow", + "reason": "capture the reachable call chain from one entry node as a flow" + }, + "949": { + "name": "TraceFlowBounded", + "qualified_name": "flow.Tracer.TraceFlowBounded", + "kind": "function", + "file_path": "internal/app/analyze/flow/flow.go", + "namespace": "ccg", + "start_line": 117, + "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", + "reason": "expose a flow trace variant that can stop early when MaxNodes is reached" + }, + "951": { + "name": "EdgeReader", + "qualified_name": "impact.EdgeReader", + "kind": "type", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 13, + "intent": "abstract bidirectional edge and node lookups for blast-radius traversal", + "reason": "abstract bidirectional edge and node lookups for blast-radius traversal" + }, + "952": { + "name": "Analyzer", + "qualified_name": "impact.Analyzer", + "kind": "class", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 24, + "intent": "estimate which nodes may be affected by a change", + "reason": "estimate which nodes may be affected by a change" + }, + "953": { + "name": "RadiusOptions", + "qualified_name": "impact.RadiusOptions", + "kind": "class", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 30, + "intent": "let callers limit BFS depth and visited node count for safety", + "reason": "let callers limit BFS depth and visited node count for safety" + }, + "955": { + "name": "New", + "qualified_name": "impact.New", + "kind": "function", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 47, + "intent": "construct a blast-radius analyzer around a graph reader", + "reason": "construct a blast-radius analyzer around a graph reader" + }, + "956": { + "name": "ImpactRadius", + "qualified_name": "impact.Analyzer.ImpactRadius", + "kind": "function", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 60, + "intent": "identify blast radius of code changes for risk assessment", + "reason": "identify blast radius of code changes for risk assessment" + }, + "957": { + "name": "ImpactRadiusBounded", + "qualified_name": "impact.Analyzer.ImpactRadiusBounded", + "kind": "function", + "file_path": "internal/app/analyze/impact/impact.go", + "namespace": "ccg", + "start_line": 76, + "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", + "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers" + }, + "959": { + "name": "FlowRebuildStore", + "qualified_name": "analyze.FlowRebuildStore", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 12, + "intent": "let flow application policy trace and replace flows without importing a database adapter.", + "reason": "let flow application policy trace and replace flows without importing a database adapter." + }, + "960": { + "name": "FlowUnitOfWork", + "qualified_name": "analyze.FlowUnitOfWork", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 22, + "intent": "ensure stale-flow deletion and every replacement flow commit or roll back together.", + "reason": "ensure stale-flow deletion and every replacement flow commit or roll back together." + }, + "961": { + "name": "EdgeDirection", + "qualified_name": "analyze.EdgeDirection", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 28, + "intent": "express incoming and outgoing graph queries without leaking SQL join details.", + "reason": "express incoming and outgoing graph queries without leaking SQL join details." + }, + "962": { + "name": "RelatedNodesRequest", + "qualified_name": "analyze.RelatedNodesRequest", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 37, + "intent": "carry graph-query scope and pagination from application policy to persistence.", + "reason": "carry graph-query scope and pagination from application policy to persistence." + }, + "963": { + "name": "RelatedNodesPage", + "qualified_name": "analyze.RelatedNodesPage", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 47, + "intent": "keep pagination totals coupled to the same namespace-scoped relationship query.", + "reason": "keep pagination totals coupled to the same namespace-scoped relationship query." + }, + "964": { + "name": "QueryRepository", + "qualified_name": "analyze.QueryRepository", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 54, + "intent": "keep query defaults and response mapping in app code while isolating database joins and filters.", + "reason": "keep query defaults and response mapping in app code while isolating database joins and filters." + }, + "965": { + "name": "ChangeRepository", + "qualified_name": "analyze.ChangeRepository", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 62, + "intent": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms.", + "reason": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms." + }, + "966": { + "name": "GraphStatistics", + "qualified_name": "analyze.GraphStatistics", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 70, + "intent": "keep graph totals and grouped distributions independent of database query types.", + "reason": "keep graph totals and grouped distributions independent of database query types." + }, + "967": { + "name": "KindCount", + "qualified_name": "analyze.KindCount", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 85, + "intent": "preserve database aggregate row ordering for CLI-compatible rendering.", + "reason": "preserve database aggregate row ordering for CLI-compatible rendering." + }, + "968": { + "name": "StatisticsReader", + "qualified_name": "analyze.StatisticsReader", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 92, + "intent": "let CLI and MCP status surfaces share typed graph facts without receiving a database handle.", + "reason": "let CLI and MCP status surfaces share typed graph facts without receiving a database handle." + }, + "969": { + "name": "GraphLookup", + "qualified_name": "analyze.GraphLookup", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 98, + "intent": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", + "reason": "keep MCP graph lookups on an application-owned port instead of a global storage contract." + }, + "970": { + "name": "NamespaceSummary", + "qualified_name": "analyze.NamespaceSummary", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 105, + "intent": "carry namespace discovery results independently of MCP response types.", + "reason": "carry namespace discovery results independently of MCP response types." + }, + "971": { + "name": "FlowSummary", + "qualified_name": "analyze.FlowSummary", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 112, + "intent": "carry bounded stored-flow facts independently of persistence rows.", + "reason": "carry bounded stored-flow facts independently of persistence rows." + }, + "972": { + "name": "AffectedFlow", + "qualified_name": "analyze.AffectedFlow", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 121, + "intent": "carry change-to-flow overlap facts from analysis persistence to application consumers.", + "reason": "carry change-to-flow overlap facts from analysis persistence to application consumers." + }, + "973": { + "name": "NamedCount", + "qualified_name": "analyze.NamedCount", + "kind": "class", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 129, + "intent": "represent ranked membership aggregates without exposing SQL scan structs.", + "reason": "represent ranked membership aggregates without exposing SQL scan structs." + }, + "974": { + "name": "GraphReadRepository", + "qualified_name": "analyze.GraphReadRepository", + "kind": "type", + "file_path": "internal/app/analyze/ports.go", + "namespace": "ccg", + "start_line": 136, + "intent": "centralize namespace-safe aggregate and evidence queries without exposing GORM to handlers.", + "reason": "centralize namespace-safe aggregate and evidence queries without exposing GORM to handlers." + }, + "976": { + "name": "Service", + "qualified_name": "query.Service", + "kind": "class", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 15, + "intent": "provide reusable higher-level graph lookups for MCP queries", + "reason": "provide reusable higher-level graph lookups for MCP queries" + }, + "977": { + "name": "New", + "qualified_name": "query.New", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 21, + "intent": "construct a service for common graph traversal queries", + "reason": "construct a service for common graph traversal queries" + }, + "978": { + "name": "nodesByEdge", + "qualified_name": "query.Service.nodesByEdge", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 31, + "intent": "centralize directional edge-query logic shared by predefined graph queries", + "reason": "centralize directional edge-query logic shared by predefined graph queries" + }, + "979": { + "name": "nodesByEdgeWithOptions", + "qualified_name": "query.Service.nodesByEdgeWithOptions", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 38, + "intent": "let strict graph queries exclude fallback call edges without changing legacy defaults.", + "reason": "let strict graph queries exclude fallback call edges without changing legacy defaults." + }, + "980": { + "name": "nodesByEdgePageWithOptions", + "qualified_name": "query.Service.nodesByEdgePageWithOptions", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 48, + "intent": "provide paginated graph query results without changing legacy return shape for non-paged callers.", + "reason": "provide paginated graph query results without changing legacy return shape for non-paged callers." + }, + "981": { + "name": "CallersOf", + "qualified_name": "query.Service.CallersOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 80, + "intent": "find upstream callers of a function or method node", + "reason": "find upstream callers of a function or method node" + }, + "982": { + "name": "CallersOfPage", + "qualified_name": "query.Service.CallersOfPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 86, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "983": { + "name": "CallersOfWithOptions", + "qualified_name": "query.Service.CallersOfWithOptions", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 92, + "intent": "support strict caller lookups that ignore fallback-derived edges when requested.", + "reason": "support strict caller lookups that ignore fallback-derived edges when requested." + }, + "984": { + "name": "CalleesOf", + "qualified_name": "query.Service.CalleesOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 99, + "intent": "find downstream call dependencies of a function or method node", + "reason": "find downstream call dependencies of a function or method node" + }, + "985": { + "name": "CalleesOfPage", + "qualified_name": "query.Service.CalleesOfPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 105, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "986": { + "name": "CalleesOfWithOptions", + "qualified_name": "query.Service.CalleesOfWithOptions", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 111, + "intent": "support strict callee lookups that ignore fallback-derived edges when requested.", + "reason": "support strict callee lookups that ignore fallback-derived edges when requested." + }, + "987": { + "name": "ImportsOf", + "qualified_name": "query.Service.ImportsOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 117, + "intent": "reveal outgoing import dependencies for a file or package node", + "reason": "reveal outgoing import dependencies for a file or package node" + }, + "988": { + "name": "ImportsOfPage", + "qualified_name": "query.Service.ImportsOfPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 123, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "989": { + "name": "ImportersOf", + "qualified_name": "query.Service.ImportersOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 129, + "intent": "reveal reverse import dependencies pointing at the target node", + "reason": "reveal reverse import dependencies pointing at the target node" + }, + "99": { + "name": "resolveOutDir", + "qualified_name": "cli.resolveOutDir", + "kind": "function", + "file_path": "internal/adapters/inbound/cli/root.go", + "namespace": "ccg", + "start_line": 190, + "intent": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", + "reason": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다." + }, + "990": { + "name": "ImportersOfPage", + "qualified_name": "query.Service.ImportersOfPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 135, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "991": { + "name": "ChildrenOf", + "qualified_name": "query.Service.ChildrenOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 141, + "intent": "enumerate structural children contained within a file or type node", + "reason": "enumerate structural children contained within a file or type node" + }, + "992": { + "name": "TestsFor", + "qualified_name": "query.Service.TestsFor", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 147, + "intent": "find test nodes linked to the target via tested_by edges", + "reason": "find test nodes linked to the target via tested_by edges" + }, + "993": { + "name": "TestsForPage", + "qualified_name": "query.Service.TestsForPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 153, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "994": { + "name": "InheritorsOf", + "qualified_name": "query.Service.InheritorsOf", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 159, + "intent": "find derived types that point to the target through inheritance edges", + "reason": "find derived types that point to the target through inheritance edges" + }, + "995": { + "name": "InheritorsOfPage", + "qualified_name": "query.Service.InheritorsOfPage", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 165, + "intent": "support paginated query_graph response pagination and cache metadata.", + "reason": "support paginated query_graph response pagination and cache metadata." + }, + "996": { + "name": "FindExactNameMatches", + "qualified_name": "query.Service.FindExactNameMatches", + "kind": "function", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 171, + "intent": "support MCP fallback from short symbol names to fully qualified graph nodes.", + "reason": "support MCP fallback from short symbol names to fully qualified graph nodes." + }, + "997": { + "name": "PagedNodes", + "qualified_name": "query.PagedNodes", + "kind": "class", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 193, + "intent": "carry paginated graph query rows together with the total match count for MCP responses.", + "reason": "carry paginated graph query rows together with the total match count for MCP responses." + }, + "998": { + "name": "CandidateMatch", + "qualified_name": "query.CandidateMatch", + "kind": "class", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 200, + "intent": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", + "reason": "provide compact, stable target suggestions when a short symbol name matches multiple nodes." + }, + "999": { + "name": "QueryOptions", + "qualified_name": "query.QueryOptions", + "kind": "class", + "file_path": "internal/app/analyze/query/service.go", + "namespace": "ccg", + "start_line": 209, + "intent": "let callers choose between compatibility mode and strict call-edge analysis.", + "reason": "let callers choose between compatibility mode and strict call-edge analysis." + } }, - "SanitizeFTS5": {}, - "UnresolvedEdgeCandidate": {}, - "annot": { - "corpus": 1901, - "terms": [ - { - "text": "annot", - "in_reasons": 68 - } - ], - "hits": [ - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "annot" - ] - }, - { - "id": 567, - "name": "Annotations", - "qualified_name": "graphgorm.Store.Annotations", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "batch-load Wiki annotations with deterministic tag ordering.", - "reason": "batch-load Wiki annotations with deterministic tag ordering.", - "terms": [ - "annot" - ] - }, - { - "id": 1661, - "name": "nodeIDs", - "qualified_name": "wiki.nodeIDs", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "collect graph node IDs for batch annotation lookup.", - "reason": "collect graph node IDs for batch annotation lookup.", - "terms": [ - "annot" - ] - }, - { - "id": 1780, - "name": "NewNormalizer", - "qualified_name": "annotation.NewNormalizer", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "provide a reusable comment normalizer for annotation extraction", - "reason": "provide a reusable comment normalizer for annotation extraction", - "terms": [ - "annot" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "annot" - ] - }, - { - "id": 245, - "name": "annotationTagItem", - "qualified_name": "mcp.annotationTagItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose annotation tags with typed fields for getAnnotation callers.", - "reason": "expose annotation tags with typed fields for getAnnotation callers.", - "terms": [ - "annot" - ] - }, - { - "id": 486, - "name": "Snapshot", - "qualified_name": "graphgorm.Store.Snapshot", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load documentable nodes and their annotations from one namespace.", - "reason": "load documentable nodes and their annotations from one namespace.", - "terms": [ - "annot" - ] - }, - { - "id": 1643, - "name": "materializeLazyEntries", - "qualified_name": "wiki.Builder.materializeLazyEntries", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "convert collected lazy child entries into annotated TreeNode DTOs.", - "reason": "convert collected lazy child entries into annotated TreeNode DTOs.", - "terms": [ - "annot" - ] - }, - { - "id": 1778, - "name": "internal/domain/annotation/normalizer.go", - "qualified_name": "internal/domain/annotation/normalizer.go", - "kind": "file", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "annot" - ] - }, - { - "id": 1779, - "name": "Normalizer", - "qualified_name": "annotation.Normalizer", - "kind": "class", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "annot" - ] - }, - { - "id": 1790, - "name": "NewParser", - "qualified_name": "annotation.NewParser", - "kind": "function", - "file_path": "internal/domain/annotation/parser.go", - "intent": "provide a reusable annotation parser instance for binding pipelines", - "reason": "provide a reusable annotation parser instance for binding pipelines", - "terms": [ - "annot" - ] - }, - { - "id": 1935, - "name": "AnnotationDetails", - "qualified_name": "AnnotationDetails", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry annotation summary and tags for symbol detail rendering.", - "reason": "carry annotation summary and tags for symbol detail rendering.", - "terms": [ - "annot" - ] - }, - { - "id": 1081, - "name": "hasContent", - "qualified_name": "binding.hasContent", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "skip empty annotation payloads before they are bound to nodes", - "reason": "skip empty annotation payloads before they are bound to nodes", - "terms": [ - "annot" - ] - }, - { - "id": 1668, - "name": "detailsForNode", - "qualified_name": "wiki.detailsForNode", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "expose full structured annotation metadata for Wiki symbol detail views.", - "reason": "expose full structured annotation metadata for Wiki symbol detail views.", - "terms": [ - "annot" - ] - }, - { - "id": 1837, - "name": "Parse", - "qualified_name": "reference.Parse", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "reason": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 209, - "name": "listCrossRefs", - "qualified_name": "mcp.handlers.listCrossRefs", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", - "intent": "give agents a repository-level dependency map derived from ccg:// annotations.", - "reason": "give agents a repository-level dependency map derived from ccg:// annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 246, - "name": "annotationResponse", - "qualified_name": "mcp.annotationResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable response envelope for annotation summary, context, and tags.", - "reason": "preserve a stable response envelope for annotation summary, context, and tags.", - "terms": [ - "annot" - ] - }, - { - "id": 778, - "name": "collectTypeScriptReceiverBindings", - "qualified_name": "treesitter.collectTypeScriptReceiverBindings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "seed conservative receiver rewriting with only textually provable TypeScript type annotations.", - "reason": "seed conservative receiver rewriting with only textually provable TypeScript type annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 1076, - "name": "Binder", - "qualified_name": "binding.Binder", - "kind": "class", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "attach normalized and parsed annotations to nodes based on source proximity", - "reason": "attach normalized and parsed annotations to nodes based on source proximity", - "terms": [ - "annot" - ] - }, - { - "id": 1078, - "name": "Bind", - "qualified_name": "binding.Binder.Bind", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "build node-to-annotation bindings from parsed comments and node positions", - "reason": "build node-to-annotation bindings from parsed comments and node positions", - "terms": [ - "annot" - ] - }, - { - "id": 1645, - "name": "loadAnnotations", - "qualified_name": "wiki.Builder.loadAnnotations", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "batch-load annotations for lazy tree nodes while preserving tag order.", - "reason": "batch-load annotations for lazy tree nodes while preserving tag order.", - "terms": [ - "annot" - ] - }, - { - "id": 1674, - "name": "AnnotationDetail", - "qualified_name": "wiki.AnnotationDetail", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "serialize annotation summary, context, and tags in a UI-friendly shape.", - "reason": "serialize annotation summary, context, and tags in a UI-friendly shape.", - "terms": [ - "annot" - ] - }, - { - "id": 1680, - "name": "Search", - "qualified_name": "wiki.Search", - "kind": "function", - "file_path": "internal/app/wiki/model.go", - "intent": "문서 인덱스 트리에서 제목, 요약, 구조화 annotation 기반 키워드 탐색을 제공한다.", - "reason": "문서 인덱스 트리에서 제목, 요약, 구조화 annotation 기반 키워드 탐색을 제공한다.", - "terms": [ - "annot" - ] - }, - { - "id": 1835, - "name": "Ref", - "qualified_name": "reference.Ref", - "kind": "class", - "file_path": "internal/domain/reference/ref.go", - "intent": "represent cross-namespace @see links without coupling annotations to graph storage.", - "reason": "represent cross-namespace @see links without coupling annotations to graph storage.", - "terms": [ - "annot" - ] - }, - { - "id": 1936, - "name": "AnnotationTag", - "qualified_name": "AnnotationTag", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "mirror one CCG annotation tag in the browser API type system.", - "reason": "mirror one CCG annotation tag in the browser API type system.", - "terms": [ - "annot" - ] - }, - { - "id": 1937, - "name": "CCGRef", - "qualified_name": "CCGRef", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "reason": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 1957, - "name": "retrieveDocs", - "qualified_name": "retrieveDocs", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "reason": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "terms": [ - "annot" - ] - }, - { - "id": 88, - "name": "newLintCmd", - "qualified_name": "cli.newLintCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "문서 품질 점검(orphan/missing/stale/annotation)을 하나의 CLI 흐름으로 제공한다.", - "reason": "문서 품질 점검(orphan/missing/stale/annotation)을 하나의 CLI 흐름으로 제공한다.", - "terms": [ - "annot" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 527, - "name": "DeleteNodesByFile", - "qualified_name": "graphgorm.Store.DeleteNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "reason": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "terms": [ - "annot" - ] - }, - { - "id": 539, - "name": "UpsertAnnotations", - "qualified_name": "graphgorm.Store.UpsertAnnotations", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "reason": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "terms": [ - "annot" - ] - }, - { - "id": 774, - "name": "CallRewriter", - "qualified_name": "treesitter.TypeScriptSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "rewrite member-call chains only when explicit type annotations prove each hop.", - "reason": "rewrite member-call chains only when explicit type annotations prove each hop.", - "terms": [ - "annot" - ] - }, - { - "id": 882, - "name": "ParseWithComments", - "qualified_name": "treesitter.Walker.ParseWithComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "produce the full parse result needed for graph building and annotation binding", - "reason": "produce the full parse result needed for graph building and annotation binding", - "terms": [ - "annot" - ] - }, - { - "id": 1005, - "name": "Service", - "qualified_name": "crossref.Service", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "reason": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "terms": [ - "annot" - ] - }, - { - "id": 1073, - "name": "internal/app/ingest/binding/binder.go", - "qualified_name": "internal/app/ingest/binding/binder.go", - "kind": "file", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "preserve comment text with source line bounds during parse-to-annotation binding", - "reason": "preserve comment text with source line bounds during parse-to-annotation binding", - "terms": [ - "annot" - ] - }, - { - "id": 1074, - "name": "CommentBlock", - "qualified_name": "binding.CommentBlock", - "kind": "class", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "preserve comment text with source line bounds during parse-to-annotation binding", - "reason": "preserve comment text with source line bounds during parse-to-annotation binding", - "terms": [ - "annot" - ] - }, - { - "id": 1296, - "name": "parsedBuildNodeBatch", - "qualified_name": "workflow.parsedBuildNodeBatch", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep node persistence and annotation binding aligned to the same source snapshot.", - "reason": "keep node persistence and annotation binding aligned to the same source snapshot.", - "terms": [ - "annot" - ] - }, - { - "id": 1520, - "name": "BuildContent", - "qualified_name": "document.BuildContent", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns.", - "reason": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns.", - "terms": [ - "annot" - ] - }, - { - "id": 1642, - "name": "loadPathNodes", - "qualified_name": "wiki.Builder.loadPathNodes", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "query package/file path candidates under a folder prefix without loading annotations.", - "reason": "query package/file path candidates under a folder prefix without loading annotations.", - "terms": [ - "annot" - ] - }, - { - "id": 1673, - "name": "NodeDetails", - "qualified_name": "wiki.NodeDetails", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "reason": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "terms": [ - "annot" - ] - }, - { - "id": 1676, - "name": "DocTagDetailFromModel", - "qualified_name": "wiki.DocTagDetailFromModel", - "kind": "function", - "file_path": "internal/app/wiki/model.go", - "intent": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows.", - "reason": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows.", - "terms": [ - "annot" - ] - }, - { - "id": 1781, - "name": "Normalize", - "qualified_name": "annotation.Normalizer.Normalize", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "turn raw source comments into plain text consumable by the annotation parser", - "reason": "turn raw source comments into plain text consumable by the annotation parser", - "terms": [ - "annot" - ] - }, - { - "id": 1782, - "name": "isGoDirective", - "qualified_name": "annotation.isGoDirective", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "exclude `//go:*` pragma lines from annotation normalization so tag values stay clean", - "reason": "exclude `//go:*` pragma lines from annotation normalization so tag values stay clean", - "terms": [ - "annot" - ] - }, - { - "id": 1793, - "name": "extractTypePrefix", - "qualified_name": "annotation.extractTypePrefix", - "kind": "function", - "file_path": "internal/domain/annotation/parser.go", - "intent": "separate type annotation from name/description portion for param/return/throws tags", - "reason": "separate type annotation from name/description portion for param/return/throws tags", - "terms": [ - "annot" - ] - }, - { - "id": 1940, - "name": "RetrieveResult", - "qualified_name": "RetrieveResult", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "represent one DB-backed retrieval result with structured graph and annotation evidence.", - "reason": "represent one DB-backed retrieval result with structured graph and annotation evidence.", - "terms": [ - "annot" - ] - }, - { - "id": 1955, - "name": "resolveRef", - "qualified_name": "resolveRef", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "resolve a ccg:// annotation reference for Wiki doc navigation and graph focus.", - "reason": "resolve a ccg:// annotation reference for Wiki doc navigation and graph focus.", - "terms": [ - "annot" - ] - }, - { - "id": 358, - "name": "handleRef", - "qualified_name": "wikiserver.Server.handleRef", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a ccg:// annotation reference to a Wiki target and optional graph node.", - "reason": "resolve a ccg:// annotation reference to a Wiki target and optional graph node.", - "terms": [ - "annot" - ] - }, - { - "id": 393, - "name": "annotationMarkdownBlocks", - "qualified_name": "wikiserver.annotationMarkdownBlocks", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "reason": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "terms": [ - "annot" - ] - }, - { - "id": 394, - "name": "annotationTagMarkdownValue", - "qualified_name": "wikiserver.annotationTagMarkdownValue", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON.", - "reason": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON.", - "terms": [ - "annot" - ] - }, - { - "id": 1011, - "name": "rebuildOutbound", - "qualified_name": "crossref.Service.rebuildOutbound", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "replace the namespace's outbound rows with rows derived from its current annotations.", - "reason": "replace the namespace's outbound rows with rows derived from its current annotations.", - "terms": [ - "annot" - ] - } - ] + "documents": { + "1": { + "node_id": 58, + "content": "assemble local CLI dependencies and guarantee cleanup on command failure." + }, + "10": { + "node_id": 68, + "content": "build the compatibility snapshot used when DB-backed Wiki navigation is unavailable." + }, + "100": { + "node_id": 145, + "content": "운영 진단용 상태를 종합해 HTTP 상태 코드와 JSON payload로 노출한다." + }, + "1000": { + "node_id": 1054, + "content": "load the active namespace manifest for lint without hiding whether it exists." + }, + "1001": { + "node_id": 1055, + "content": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged." + }, + "1002": { + "node_id": 1057, + "content": "keep path containment, symlink checks, and filesystem mutation outside docs policy." + }, + "1004": { + "node_id": 1059, + "content": "isolate generated-format and lint policy from GORM query construction." + }, + "1005": { + "node_id": 1060, + "content": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다." + }, + "1006": { + "node_id": 1061, + "content": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다." + }, + "1007": { + "node_id": 1062, + "content": "문서 렌더러가 파일 단위로 반복할 수 있게 입력 데이터를 재구성한다." + }, + "1008": { + "node_id": 1063, + "content": "단일 소스 파일 문서를 실제 산출물로 저장한다." + }, + "1009": { + "node_id": 1064, + "content": "전체 파일 문서에 대한 탐색용 index.md를 저장한다." + }, + "101": { + "node_id": 146, + "content": "readiness 판단에서 웹훅 큐가 트래픽 차단 상태인지 빠르게 판정한다." + }, + "1010": { + "node_id": 1065, + "content": "파일 수준 어노테이션과 심볼 정보를 사람이 읽는 Markdown으로 직렬화한다." + }, + "1012": { + "node_id": 1067, + "content": "생성된 모든 파일 문서와 심볼에 대한 탐색용 표를 만든다." + }, + "1017": { + "node_id": 1072, + "content": "@param 같이 이름과 값을 함께 출력해야 하는 태그를 보존해 전달한다." + }, + "1018": { + "node_id": 1073, + "content": "preserve comment text with source line bounds during parse-to-annotation binding" + }, + "1019": { + "node_id": 1074, + "content": "preserve comment text with source line bounds during parse-to-annotation binding" + }, + "102": { + "node_id": 147, + "content": "큐 포화나 장시간 지연이 readiness 실패 조건인지 공통 규칙으로 판단한다." + }, + "1020": { + "node_id": 1075, + "content": "represent the result of associating one comment block with one graph node" + }, + "1021": { + "node_id": 1076, + "content": "attach normalized and parsed annotations to nodes based on source proximity" + }, + "1022": { + "node_id": 1077, + "content": "compose the normalizer and parser used during comment-to-node binding" + }, + "1023": { + "node_id": 1078, + "content": "build node-to-annotation bindings from parsed comments and node positions" + }, + "1024": { + "node_id": 1078, + "content": "gap=1 always binds; gap\u003e1 binds only if all lines between are blank (Look-Between)" + }, + "1025": { + "node_id": 1079, + "content": "classify a single source line as non-code (passthrough) for binding logic" + }, + "1026": { + "node_id": 1080, + "content": "determine if real code exists between a comment and declaration for Look-Between binding" + }, + "1027": { + "node_id": 1081, + "content": "skip empty annotation payloads before they are bound to nodes" + }, + "1028": { + "node_id": 1083, + "content": "retain only the edge-resolution input needed after source bytes are released." + }, + "1029": { + "node_id": 1084, + "content": "keep large staged updates independent of the total parsed edge count in memory." + }, + "103": { + "node_id": 147, + "content": "tracked_repos가 max_tracked_repos에 도달하면 not_ready로 본다." + }, + "1030": { + "node_id": 1085, + "content": "preserve parsed cross-batch edges until every changed node has been applied." + }, + "1031": { + "node_id": 1086, + "content": "isolate temporary staged-update data so cleanup cannot affect persistent graph state." + }, + "1032": { + "node_id": 1087, + "content": "defer cross-file edge resolution until all batch-local node replacements are complete." + }, + "1033": { + "node_id": 1088, + "content": "let edge resolution remain bounded by the original source batch size." + }, + "1034": { + "node_id": 1089, + "content": "ensure successful and failed staged updates do not retain temporary source-derived data." + }, + "1035": { + "node_id": 1091, + "content": "avoid expanding the legacy incremental Store contract for lightweight test doubles." + }, + "1036": { + "node_id": 1092, + "content": "keep staged reconciliation compatible with custom stores that do not expose the bulk file-node query." + }, + "1037": { + "node_id": 1093, + "content": "keep staged resolution behavior aligned with the underlying graph store capabilities." + }, + "1038": { + "node_id": 1094, + "content": "replace repeated suffix database scans with one transaction-local file-node snapshot." + }, + "1039": { + "node_id": 1095, + "content": "scope cached import paths to one update transaction and avoid stale store-wide state." + }, + "104": { + "node_id": 148, + "content": "최근 성공보다 최신 실패가 남아 있는 큐 상태를 degraded로 분류한다." + }, + "1040": { + "node_id": 1096, + "content": "preserve the legacy lookup fallback while avoiding repeated scans for staged bulk updates." + }, + "1041": { + "node_id": 1097, + "content": "retain historical implements resolution while the lookup decorates import lookups." + }, + "1042": { + "node_id": 1098, + "content": "abstract graph storage so changed files can be reparsed and upserted" + }, + "1043": { + "node_id": 1099, + "content": "abstract graph storage so changed files can be reparsed and upserted" + }, + "1044": { + "node_id": 1100, + "content": "decouple incremental sync from language-specific parsing logic" + }, + "1045": { + "node_id": 1101, + "content": "allow incremental sync to reuse comment-aware parsing when available" + }, + "1046": { + "node_id": 1102, + "content": "avoid full rebuilds by reparsing only files whose content hash changed" + }, + "1047": { + "node_id": 1103, + "content": "customize incremental sync behavior without expanding the constructor signature" + }, + "1048": { + "node_id": 1104, + "content": "allow callers to observe incremental sync progress through structured logs" + }, + "1049": { + "node_id": 1105, + "content": "let incremental sync dispatch parsing per file extension for multi-language projects" + }, + "1050": { + "node_id": 1106, + "content": "wire storage, parser, and optional configuration into a sync coordinator" + }, + "1051": { + "node_id": 1107, + "content": "support multi-language incremental parsing without breaking the legacy single-parser constructor" + }, + "1052": { + "node_id": 1108, + "content": "avoid rebuilding the syncer for every Build/Update invocation." + }, + "1053": { + "node_id": 1109, + "content": "run incremental parsing when only current files are known" + }, + "1054": { + "node_id": 1110, + "content": "reconcile parsed graph state with the latest changed-file snapshot" + }, + "1055": { + "node_id": 1110, + "content": "unchanged files are skipped when the stored hash matches the incoming hash" + }, + "1056": { + "node_id": 1111, + "content": "let callers bind incremental sync to an existing transaction-scoped store" + }, + "1057": { + "node_id": 1112, + "content": "prevent spool-record ordering from removing edges whose endpoints are both replaced in one bulk update." + }, + "1058": { + "node_id": 1113, + "content": "keep bulk update node, edge, package, and search writes within one transaction." + }, + "1059": { + "node_id": 1114, + "content": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass." + }, + "1060": { + "node_id": 1115, + "content": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory." + }, + "1061": { + "node_id": 1115, + "content": "no edge is resolved until every supplied source batch and deletion has completed." + }, + "1062": { + "node_id": 1116, + "content": "release source content after node and annotation writes while preserving only edges required for cross-file resolution." + }, + "1063": { + "node_id": 1117, + "content": "preserve interface dispatch and import-backed call resolution during incremental sync updates." + }, + "1064": { + "node_id": 1118, + "content": "let staged reconciliation finish a global implements pass before resolving interface-dispatch calls." + }, + "1065": { + "node_id": 1119, + "content": "preserve file-local import warmup while making interface call resolution independent of spool record order." + }, + "1066": { + "node_id": 1120, + "content": "keep incremental candidate maintenance optional for legacy/custom store implementations." + }, + "1067": { + "node_id": 1121, + "content": "let multi-language projects sync without losing the single-parser fallback for callers using New." + }, + "1068": { + "node_id": 1122, + "content": "keep incremental persistence proportional to bounded batches instead of individual files or comments." + }, + "1069": { + "node_id": 1123, + "content": "prepare annotation rows for the flush-scoped bulk write without issuing per-file SQL." + }, + "107": { + "node_id": 152, + "content": "Reuses MCP read-tool responses in memory for frequently repeated queries." + }, + "1070": { + "node_id": 1124, + "content": "carry parsed nodes, edges, comments, and language state through the sync pipeline." + }, + "1071": { + "node_id": 1125, + "content": "prevent the FileInfo map from holding all source bytes after a file has been processed." + }, + "1072": { + "node_id": 1126, + "content": "keep incremental hash comparisons aligned with the stored graph rows." + }, + "1073": { + "node_id": 1127, + "content": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible." + }, + "1074": { + "node_id": 1128, + "content": "keep incremental sync logging aligned with chunked edge resolution output." + }, + "1075": { + "node_id": 1129, + "content": "serialize EdgeKind counters into diagnostics-friendly logging output." + }, + "1077": { + "node_id": 1131, + "content": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships." + }, + "1078": { + "node_id": 1132, + "content": "warm call-edge resolution with import context only for files that actually need it." + }, + "1079": { + "node_id": 1133, + "content": "ensure chunked call resolution sees import relationships before resolving dependent call edges." + }, + "1080": { + "node_id": 1133, + "content": "import edges are prepended only when the chunk contains call edges." + }, + "1081": { + "node_id": 1134, + "content": "cap incremental resolution work so large files do not create oversized resolve batches." + }, + "1082": { + "node_id": 1135, + "content": "disambiguate overloaded or repeated declarations sharing the same qualified name." + }, + "1083": { + "node_id": 1136, + "content": "provide a collision-free key for parser-neutral import package context." + }, + "1084": { + "node_id": 1137, + "content": "provide a collision-free key for parser-neutral import package context." + }, + "1085": { + "node_id": 1138, + "content": "provide a collision-free key for parser-neutral file package context." + }, + "1086": { + "node_id": 1139, + "content": "thread parser-neutral package names through build and update calls without adapter-specific APIs." + }, + "1087": { + "node_id": 1140, + "content": "let parser adapters consume application-owned package context without reversing dependencies." + }, + "1088": { + "node_id": 1141, + "content": "provide deterministic package prefixes for languages without package declarations." + }, + "1089": { + "node_id": 1142, + "content": "let parser adapters seed qualified names from application-owned file context." + }, + "109": { + "node_id": 154, + "content": "Returns only cached responses that are still within their validity period." + }, + "1090": { + "node_id": 1143, + "content": "prevent callers from mutating parser context maps after injection." + }, + "1091": { + "node_id": 1144, + "content": "centralize safe retrieval for ingest-owned parser context hints." + }, + "1092": { + "node_id": 1146, + "content": "carry comments and docstring ownership from parser adapters into ingest binding policy." + }, + "1093": { + "node_id": 1147, + "content": "preserve package-level implementation inference without exposing parser implementation types." + }, + "1094": { + "node_id": 1148, + "content": "let ingest coordinate package semantics through parser-owned metadata." + }, + "1095": { + "node_id": 1149, + "content": "let ingest create package nodes and membership edges without knowing language-specific discovery details." + }, + "1096": { + "node_id": 1150, + "content": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery." + }, + "1097": { + "node_id": 1151, + "content": "let parser adapters enrich multi-file packages without leaking AST types into ingest." + }, + "1098": { + "node_id": 1152, + "content": "parse source into domain graph values without exposing Tree-sitter or another parser implementation." + }, + "1099": { + "node_id": 1152, + "content": "full builds may invoke one Parser instance concurrently, so ParseWithContext implementations must isolate mutable parser state." + }, + "11": { + "node_id": 69, + "content": "keep docs-generated Wiki output aligned with the configured index directory." + }, + "110": { + "node_id": 155, + "content": "Stores read-tool results in the cache with the configured TTL." + }, + "1100": { + "node_id": 1153, + "content": "let ingest reuse parsed output only while parser behavior and embedded queries remain compatible." + }, + "1101": { + "node_id": 1154, + "content": "include every input known to affect parser output instead of trusting source content alone." + }, + "1102": { + "node_id": 1155, + "content": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend." + }, + "1103": { + "node_id": 1155, + "content": "cache failures are optimization misses and must not fail graph builds." + }, + "1104": { + "node_id": 1156, + "content": "select unchanged source edges affected by newly added symbols without exposing persistence details." + }, + "1105": { + "node_id": 1157, + "content": "make comment-aware parsing an optional ingest capability." + }, + "1106": { + "node_id": 1158, + "content": "expose package/interface metadata without coupling ingest to parser adapter structs." + }, + "1107": { + "node_id": 1159, + "content": "delegate language-specific package discovery while ingest owns traversal policy." + }, + "1108": { + "node_id": 1160, + "content": "derive language-specific package edges through a parser-neutral ingest contract." + }, + "1109": { + "node_id": 1161, + "content": "keep ingest graph reads and writes inside the unit-of-work boundary without exposing a persistence implementation." + }, + "111": { + "node_id": 156, + "content": "Invalidates all cached read results after a graph or index update." + }, + "1110": { + "node_id": 1162, + "content": "expose full and scoped search rebuilds as indivisible application operations." + }, + "1111": { + "node_id": 1162, + "content": "implementations must combine search-document refresh and backend index rebuild so callers cannot commit only one half." + }, + "1112": { + "node_id": 1163, + "content": "give an ingest callback transaction-scoped capabilities without exposing a raw database handle." + }, + "1113": { + "node_id": 1164, + "content": "commit graph and search changes together only when the callback succeeds." + }, + "1114": { + "node_id": 1165, + "content": "keep incremental update inputs owned by ingest rather than a concrete sync implementation." + }, + "1115": { + "node_id": 1166, + "content": "expose update results without coupling callers to the incremental implementation package." + }, + "1116": { + "node_id": 1167, + "content": "let ingest orchestrate batching and deletion policy through an implementation-neutral sync seam." + }, + "1117": { + "node_id": 1168, + "content": "keep incremental graph mutations inside the same unit of work as package and search updates." + }, + "1118": { + "node_id": 1169, + "content": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering." + }, + "1119": { + "node_id": 1170, + "content": "let workflow retain source spooling while incremental reconciliation controls node and edge phases." + }, + "112": { + "node_id": 157, + "content": "Safely stops the cleanup goroutine when the cache is no longer used." + }, + "1120": { + "node_id": 1171, + "content": "prevent batch order from affecting cross-file edge resolution during large updates." + }, + "1121": { + "node_id": 1171, + "content": "deletedFiles must contain only paths absent from the supplied source batches." + }, + "1122": { + "node_id": 1172, + "content": "preserve one atomic graph and search transaction while reconciling streamed update batches." + }, + "1123": { + "node_id": 1174, + "content": "keep Resolve generic while allowing languages to customize dispatch semantics." + }, + "1124": { + "node_id": 1174, + "content": "only languages with proven dispatch-specific behavior should implement this contract." + }, + "1125": { + "node_id": 1175, + "content": "centralize language-specific resolver lookup behind one internal seam." + }, + "1126": { + "node_id": 1177, + "content": "resolve many import paths from one immutable file-node snapshot without repeated store scans." + }, + "1127": { + "node_id": 1178, + "content": "share the exact-directory and longest-suffix import policy across build and staged update resolution." + }, + "1128": { + "node_id": 1179, + "content": "preserve GraphStore import lookup precedence using bounded map reads." + }, + "1129": { + "node_id": 1181, + "content": "retain a bounded set of representative dropped edges so operators can inspect fingerprints without flooding logs." + }, + "113": { + "node_id": 158, + "content": "drop one cache entry to keep total size at or below the configured maximum." + }, + "1130": { + "node_id": 1182, + "content": "surface enough aggregate context to debug why parsed edges did not become traversable graph edges." + }, + "1131": { + "node_id": 1183, + "content": "accumulate per-kind, per-file, and sampled unresolved-edge diagnostics during filtering." + }, + "1132": { + "node_id": 1184, + "content": "allow callers to suppress noisy unresolved-edge classes (e.g., expected external imports)." + }, + "1133": { + "node_id": 1185, + "content": "keep edge endpoint resolution independent of the concrete graph store." + }, + "1135": { + "node_id": 1187, + "content": "support resolving imports when only partial path information is available." + }, + "1136": { + "node_id": 1188, + "content": "cache and index nodes by various keys (file, name, QN) during a single Resolve pass." + }, + "1137": { + "node_id": 1189, + "content": "populate state with file nodes to support deeper resolution of imported symbols." + }, + "1138": { + "node_id": 1190, + "content": "ensure target file contents are available for cross-file resolution." + }, + "1139": { + "node_id": 1191, + "content": "enable cross-file interface resolution by loading historical data." + }, + "114": { + "node_id": 159, + "content": "Periodically removes expired cache entries to limit memory usage." + }, + "1140": { + "node_id": 1192, + "content": "batch load nodes needed to resolve polymorphic calls." + }, + "1141": { + "node_id": 1193, + "content": "batch add nodes to internal indexes." + }, + "1142": { + "node_id": 1194, + "content": "maintain consistent node indexing by ID, QN, file, and name." + }, + "1144": { + "node_id": 1196, + "content": "convert syntax-level edge fingerprints into traversable graph edges." + }, + "1145": { + "node_id": 1197, + "content": "allow callers to trade strictness for coverage in low-confidence call cases." + }, + "1146": { + "node_id": 1198, + "content": "preserve current strict resolution by default while supporting fallback mode for CI noise reduction." + }, + "1147": { + "node_id": 1199, + "content": "prevent unresolved syntax candidates from occupying fingerprints before they become traversable" + }, + "1148": { + "node_id": 1200, + "content": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging." + }, + "1149": { + "node_id": 1201, + "content": "keep edge filtering behavior stable while controlling noise from known-unresolvable patterns." + }, + "115": { + "node_id": 161, + "content": "Injects an abstract parser to combine language-specific parsing implementations on the server." + }, + "1150": { + "node_id": 1202, + "content": "let build and update persist unresolved syntax edges without changing query-visible graph semantics." + }, + "1151": { + "node_id": 1203, + "content": "prefer extra candidate replay over missing a caller that a newly added symbol can resolve." + }, + "1152": { + "node_id": 1204, + "content": "bound reverse-index rows to one per edge while matching newly added node simple names." + }, + "1153": { + "node_id": 1205, + "content": "match qualified names, simple names, and package/file path suffixes conservatively." + }, + "1154": { + "node_id": 1206, + "content": "make added-node lookup keys match the bounded simple target keys stored for unresolved edges." + }, + "1155": { + "node_id": 1207, + "content": "provide stable reason codes for unresolved-edge diagnostics and logging summaries." + }, + "1156": { + "node_id": 1208, + "content": "identify all files involved in a resolution pass to batch node lookups." + }, + "1157": { + "node_id": 1209, + "content": "prepare nodes for indexing and state population." + }, + "1158": { + "node_id": 1210, + "content": "enable fast lookup of symbols during endpoint resolution." + }, + "116": { + "node_id": 162, + "content": "inject a configured application change service without exposing Git or persistence implementations." + }, + "1160": { + "node_id": 1212, + "content": "resolve bare name references when they occur in the same file as the caller." + }, + "1161": { + "node_id": 1213, + "content": "provide quick access to file-level metadata during resolution." + }, + "1163": { + "node_id": 1215, + "content": "ensure unique symbol names are collected for batch lookups." + }, + "1164": { + "node_id": 1216, + "content": "support resolving local symbols that might be referenced without full qualification." + }, + "1165": { + "node_id": 1217, + "content": "find the unique caller and callee nodes for a call relationship." + }, + "1166": { + "node_id": 1218, + "content": "trade an unresolved edge for a stable best-effort relationship in fallback mode." + }, + "1167": { + "node_id": 1219, + "content": "normalize a candidate list before deterministic tie-breaking." + }, + "1168": { + "node_id": 1220, + "content": "keep callable candidate ordering deterministic so resolver output is stable across runs." + }, + "1169": { + "node_id": 1221, + "content": "link file nodes to the top-level symbols they define." + }, + "117": { + "node_id": 163, + "content": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk." + }, + "1170": { + "node_id": 1222, + "content": "capture implementation relationships and populate implementer cache." + }, + "1171": { + "node_id": 1223, + "content": "link importing files to their target packages or files." + }, + "1172": { + "node_id": 1224, + "content": "map language-specific import paths to physical file nodes in the graph." + }, + "1173": { + "node_id": 1225, + "content": "handle cases where import paths don't exactly match file system paths." + }, + "1174": { + "node_id": 1226, + "content": "ensure deterministic resolution when multiple files match an import path." + }, + "1175": { + "node_id": 1227, + "content": "return nil if multiple ambiguous packages match the QN." + }, + "1176": { + "node_id": 1228, + "content": "identify distinct files in a set of result nodes." + }, + "1177": { + "node_id": 1229, + "content": "link subclasses or derived types to their parents." + }, + "1178": { + "node_id": 1230, + "content": "bridge the gap between tests and the symbols they verify." + }, + "1179": { + "node_id": 1231, + "content": "locate the tested symbol by checking qualified and bare name matches." + }, + "118": { + "node_id": 164, + "content": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal." + }, + "1180": { + "node_id": 1232, + "content": "return nil if multiple ambiguous files match." + }, + "1182": { + "node_id": 1234, + "content": "keep unresolved-edge noise focused on internal graph-coverage gaps." + }, + "1183": { + "node_id": 1235, + "content": "classify import edges that are not expected to have local resolution targets." + }, + "1184": { + "node_id": 1236, + "content": "provide a stable parser for import-edge-specific diagnostics and filtering." + }, + "1185": { + "node_id": 1237, + "content": "retrieve subclass and parent names from the persisted fingerprint." + }, + "1186": { + "node_id": 1238, + "content": "retrieve test and production symbol names from the persisted fingerprint." + }, + "1187": { + "node_id": 1239, + "content": "resolve symbol references to physical type nodes in the graph." + }, + "1188": { + "node_id": 1240, + "content": "optimize resolution of 'this' or same-receiver method calls in Go." + }, + "1189": { + "node_id": 1241, + "content": "provide best-effort resolution for polymorphic calls by checking implementations." + }, + "119": { + "node_id": 165, + "content": "Injects a builder into the MCP handler that regenerates stored flow post-processing results." + }, + "1190": { + "node_id": 1242, + "content": "retrieve concrete and interface symbol names from the persisted fingerprint." + }, + "1191": { + "node_id": 1243, + "content": "determine the logical package context for a physical source file." + }, + "1192": { + "node_id": 1244, + "content": "apply Go visibility rules during symbol resolution." + }, + "1193": { + "node_id": 1245, + "content": "identify the source symbol (caller) for a relationship originating on a line." + }, + "1194": { + "node_id": 1246, + "content": "assist in finding the narrowest enclosing symbol for a given line." + }, + "1195": { + "node_id": 1247, + "content": "retrieve the callee symbol name from the persisted fingerprint." + }, + "1196": { + "node_id": 1248, + "content": "retrieve the target symbol name from the persisted fingerprint." + }, + "1197": { + "node_id": 1249, + "content": "determine the logical namespace for a symbol." + }, + "1198": { + "node_id": 1250, + "content": "avoid repeated nil checks before dispatch strategy lookup." + }, + "1199": { + "node_id": 1251, + "content": "extract the bare symbol name from a fully qualified name." + }, + "12": { + "node_id": 70, + "content": "keep the docs-generated Wiki root summary aligned with configuration." + }, + "120": { + "node_id": 166, + "content": "Simplifies handlers by abstracting standard graph queries into a single service interface." + }, + "1200": { + "node_id": 1252, + "content": "return nil if multiple ambiguous functions match the criteria." + }, + "1202": { + "node_id": 1254, + "content": "filter nodes by name before applying uniqueness check." + }, + "1204": { + "node_id": 1256, + "content": "prevent duplicate nodes in resolution result sets." + }, + "1205": { + "node_id": 1257, + "content": "deduplicate result sets before further processing or resolution." + }, + "1206": { + "node_id": 1258, + "content": "add conservative interface-like dispatch for languages that lack receiver-type inference." + }, + "1207": { + "node_id": 1259, + "content": "add conservative interface-like dispatch for languages that lack receiver-type inference." + }, + "1208": { + "node_id": 1260, + "content": "support registry-based lookup for explicit-owner language dispatch." + }, + "1209": { + "node_id": 1261, + "content": "preload fully qualified owner types before polymorphic dispatch resolution runs." + }, + "121": { + "node_id": 167, + "content": "Injects a syncer that reflects only changed files into the graph without full re-parsing." + }, + "1211": { + "node_id": 1263, + "content": "avoid inventing receiver inference when the call only proves an owner-qualified selector." + }, + "1212": { + "node_id": 1264, + "content": "preserve conservative interface-style dispatch for JVM/TypeScript selectors without broad receiver inference." + }, + "1213": { + "node_id": 1265, + "content": "reuse existing qualified-name prefixes when expanding short owner candidates." + }, + "1214": { + "node_id": 1266, + "content": "gate explicit-owner dispatch behind syntactic selectors that look like type-owned method calls." + }, + "1215": { + "node_id": 1267, + "content": "reuse implements edges to prefer concrete dispatch targets over abstract owner nodes when unique." + }, + "1216": { + "node_id": 1268, + "content": "normalize short and fully qualified owner names into one dispatch anchor before method lookup." + }, + "1217": { + "node_id": 1269, + "content": "preserve short-owner support without searching unrelated packages outside the caller namespace." + }, + "1218": { + "node_id": 1270, + "content": "isolate Go interface and receiver dispatch from the generic resolver flow." + }, + "1219": { + "node_id": 1271, + "content": "isolate Go interface and receiver dispatch from the generic resolver flow." + }, + "122": { + "node_id": 168, + "content": "group only the dependencies required by parse, build, update, and postprocess tools." + }, + "1220": { + "node_id": 1272, + "content": "support registry-based lookup for language-specific resolution." + }, + "1222": { + "node_id": 1274, + "content": "preload potential interface implementer methods before call resolution." + }, + "1223": { + "node_id": 1275, + "content": "preserve Go method-call resolution without hardcoding language checks in Resolve." + }, + "1224": { + "node_id": 1276, + "content": "preserve best-effort Go polymorphic dispatch behind the language seam." + }, + "1225": { + "node_id": 1277, + "content": "keep Go package naming rules in the Go dispatch strategy." + }, + "1226": { + "node_id": 1278, + "content": "support Go interface method dispatch by finding candidate concrete types." + }, + "1227": { + "node_id": 1279, + "content": "identify polymorphic call targets in Go selector expressions." + }, + "1229": { + "node_id": 1281, + "content": "extend interface-like dispatch beyond Go without broadening the generic resolver flow." + }, + "123": { + "node_id": 169, + "content": "group only the dependencies required by graph and search read tools." + }, + "1230": { + "node_id": 1282, + "content": "extend interface-like dispatch beyond Go without broadening the generic resolver flow." + }, + "1231": { + "node_id": 1283, + "content": "support registry-based lookup for language-specific resolution." + }, + "1233": { + "node_id": 1285, + "content": "preload possible impl methods for trait method dispatch before resolution." + }, + "1234": { + "node_id": 1286, + "content": "rely on the generic same-file fallback until Rust receiver-aware rewrites are needed." + }, + "1235": { + "node_id": 1287, + "content": "support non-Go trait dispatch when call rewriting produces Trait::method selectors." + }, + "1236": { + "node_id": 1288, + "content": "keep Rust naming rules localized even though current resolver use is minimal." + }, + "1237": { + "node_id": 1289, + "content": "normalize Rust trait call syntaxes before dispatch resolution chooses implementer methods." + }, + "1238": { + "node_id": 1290, + "content": "recover the trait owner and method name from conservative qualified trait call fingerprints." + }, + "1239": { + "node_id": 1291, + "content": "preserve concrete-type disambiguation when Rust calls are rewritten in UFCS form." + }, + "124": { + "node_id": 170, + "content": "let handlers enumerate repository-level dependencies without a store implementation dependency." + }, + "1240": { + "node_id": 1292, + "content": "narrow Rust trait dispatch candidates before method lookup so ambiguous impl sets stay unresolved." + }, + "1241": { + "node_id": 1293, + "content": "parse nested UFCS selectors without confusing generic argument brackets for the outer boundary." + }, + "1242": { + "node_id": 1294, + "content": "split concrete and trait types only when the separator is outside nested generic or tuple syntax." + }, + "1243": { + "node_id": 1296, + "content": "keep node persistence and annotation binding aligned to the same source snapshot." + }, + "1244": { + "node_id": 1297, + "content": "persist edges only after their referenced nodes exist in the graph." + }, + "1245": { + "node_id": 1298, + "content": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records." + }, + "1246": { + "node_id": 1299, + "content": "keep deterministic input sequencing separate from concurrent filesystem and parser work." + }, + "1247": { + "node_id": 1300, + "content": "let workers finish out of order while the coordinator preserves record order." + }, + "1248": { + "node_id": 1301, + "content": "defer comment binding until storage time while keeping per-file source line context available." + }, + "1249": { + "node_id": 1302, + "content": "amortize transaction overhead by persisting groups of files together while bounding memory." + }, + "125": { + "node_id": 171, + "content": "group only configured application analyzers and their read-model port." + }, + "1250": { + "node_id": 1303, + "content": "accumulate work between flushes so persistence happens in bounded chunks." + }, + "1251": { + "node_id": 1304, + "content": "bound transaction size so long builds do not balloon memory or transaction logs." + }, + "1252": { + "node_id": 1305, + "content": "recycle the batch struct without reallocating to keep build loops allocation-light." + }, + "1253": { + "node_id": 1306, + "content": "collect per-file annotations for one flush-scoped bulk write while preserving eager buffer release." + }, + "1254": { + "node_id": 1307, + "content": "perform a full graph build from the specified directory." + }, + "1255": { + "node_id": 1308, + "content": "reuse one transaction across graph writes and the coupled search index rebuild." + }, + "1256": { + "node_id": 1309, + "content": "pre-parse eligible files into spool records so the later build transaction can persist graph state from a stable snapshot." + }, + "1257": { + "node_id": 1310, + "content": "preserve build traversal policy and deterministic file order before concurrent parsing starts." + }, + "1258": { + "node_id": 1311, + "content": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory." + }, + "1259": { + "node_id": 1312, + "content": "keep each worker's filesystem, parser, and hash work isolated from shared build state." + }, + "126": { + "node_id": 171, + "content": "CrossImpact/CrossFlow/CrossRefs are optional; when nil the cross-namespace analysis surface reports itself unconfigured." + }, + "1260": { + "node_id": 1313, + "content": "rebuild the graph from scratch atomically so partial failures cannot leave stale state." + }, + "1261": { + "node_id": 1314, + "content": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents." + }, + "1262": { + "node_id": 1315, + "content": "persist all batch nodes before annotations and all edges so references can resolve with fewer store operations." + }, + "1263": { + "node_id": 1316, + "content": "avoid repeatedly scanning persisted file nodes for identical import paths during a full build." + }, + "1264": { + "node_id": 1317, + "content": "share immutable import file-node results across all resolver chunks in one build." + }, + "1265": { + "node_id": 1318, + "content": "retain the existing resolver lookup contract while making individual database-read costs observable." + }, + "1266": { + "node_id": 1319, + "content": "accumulate a single build-scoped timing without changing the observed operation result." + }, + "1267": { + "node_id": 1320, + "content": "measure node-ID store reads while preserving the resolver lookup contract." + }, + "1268": { + "node_id": 1321, + "content": "measure file-node store reads while preserving the resolver lookup contract." + }, + "1269": { + "node_id": 1322, + "content": "measure qualified-name store reads while preserving the resolver lookup contract." + }, + "127": { + "node_id": 172, + "content": "group transport runtime configuration separately from capability dependencies." + }, + "1270": { + "node_id": 1323, + "content": "measure implements-edge store reads while preserving the resolver lookup contract." + }, + "1271": { + "node_id": 1324, + "content": "eliminate repeated store scans while preserving the GraphStore lookup contract." + }, + "1272": { + "node_id": 1325, + "content": "attach parsed relationships to stored node IDs without depending on build batch order." + }, + "1273": { + "node_id": 1326, + "content": "measure edge-resolution database reads and writes without altering the existing resolution order or transaction." + }, + "1274": { + "node_id": 1327, + "content": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts." + }, + "1275": { + "node_id": 1328, + "content": "persist only original parsed edges after using import edges to enrich resolution context." + }, + "1276": { + "node_id": 1329, + "content": "populate the reverse index during full builds while keeping stores without the optional capability compatible." + }, + "1277": { + "node_id": 1330, + "content": "preserve import-aware call resolution without retaining a build-wide import map." + }, + "1278": { + "node_id": 1331, + "content": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files." + }, + "1279": { + "node_id": 1332, + "content": "keep build-time unresolved-edge reporting aligned with chunked edge resolution output." + }, + "128": { + "node_id": 173, + "content": "make each MCP capability's required application contracts explicit at composition time." + }, + "1280": { + "node_id": 1333, + "content": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows." + }, + "1281": { + "node_id": 1334, + "content": "serialize EdgeKind counters into diagnostics-friendly logging output." + }, + "1282": { + "node_id": 1335, + "content": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph." + }, + "1283": { + "node_id": 1336, + "content": "ensure interface fulfillment edges are handled before call dispatch resolution." + }, + "1284": { + "node_id": 1337, + "content": "ensure the edge resolver has enough context to resolve call targets through imports." + }, + "1285": { + "node_id": 1339, + "content": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes." + }, + "1286": { + "node_id": 1340, + "content": "prevent replacement races from turning a validated regular path into a followed symlink before reading." + }, + "1287": { + "node_id": 1341, + "content": "keep all secondary source reads on the same no-follow path as build and update ingestion." + }, + "1288": { + "node_id": 1342, + "content": "keep default source traversal exclusions local to the ingest workflow." + }, + "1289": { + "node_id": 1342, + "content": ".git, vendor, node_modules, and hidden directories except . are skipped." + }, + "129": { + "node_id": 175, + "content": "keep evidence payloads typed while exposing namespace and git provenance." + }, + "1290": { + "node_id": 1343, + "content": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing." + }, + "1291": { + "node_id": 1344, + "content": "surface comment blocks and language alongside nodes/edges so the binder can attach annotations." + }, + "1292": { + "node_id": 1345, + "content": "let callers surface a single structured failure or warning instead of one log entry per file." + }, + "1293": { + "node_id": 1346, + "content": "collect every offending path while keeping summary output bounded for logs." + }, + "1294": { + "node_id": 1347, + "content": "prevent log spam by collapsing per-file warnings into one phase-tagged entry." + }, + "1295": { + "node_id": 1348, + "content": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set." + }, + "1296": { + "node_id": 1349, + "content": "reject individual files that exceed the configured per-file parse budget before loading them into memory." + }, + "1297": { + "node_id": 1350, + "content": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit." + }, + "1298": { + "node_id": 1351, + "content": "keep IsDocstring and OwnerStartLine in sync between walker and binder types" + }, + "1299": { + "node_id": 1353, + "content": "share deletion-scope discovery across CLI and MCP incremental updates" + }, + "130": { + "node_id": 176, + "content": "preserve git evidence keys while making nil-versus-false behavior explicit." + }, + "1300": { + "node_id": 1354, + "content": "provide both deletion-scope file paths and per-file node projections from a single query." + }, + "1301": { + "node_id": 1355, + "content": "prevent partial-scope updates from deleting files that live outside the requested include paths." + }, + "1302": { + "node_id": 1356, + "content": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change." + }, + "1303": { + "node_id": 1357, + "content": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit." + }, + "1304": { + "node_id": 1359, + "content": "abstract build-time edge resolution so tests can inject resolver behavior per Service." + }, + "1305": { + "node_id": 1360, + "content": "let build/update trigger cross-ref materialization without depending on its implementation." + }, + "1307": { + "node_id": 1362, + "content": "resolve build edges through the injected resolver, defaulting to the production resolver." + }, + "1308": { + "node_id": 1363, + "content": "keep cross-namespace reference state current without making it a hard build dependency." + }, + "1309": { + "node_id": 1364, + "content": "keep service code logging-safe even when callers leave Logger nil." + }, + "131": { + "node_id": 177, + "content": "include namespace path and git state when available so LLM has traceable provenance." + }, + "1310": { + "node_id": 1365, + "content": "let tests inject custom parsers while still using the production walker registry by default." + }, + "1311": { + "node_id": 1366, + "content": "빌드 대상 경로와 탐색 범위를 호출자에서 제어하게 한다." + }, + "1312": { + "node_id": 1367, + "content": "CLI와 호출자가 빌드 결과 규모를 사용자에게 보여줄 수 있게 한다." + }, + "1313": { + "node_id": 1368, + "content": "expose actionable stage-level evidence so large-build regressions can be diagnosed without guessing." + }, + "1314": { + "node_id": 1369, + "content": "show which edge-resolution store operation dominates a full build without changing resolution behavior." + }, + "1315": { + "node_id": 1370, + "content": "expose actionable evidence for optimizing the remaining full-build bottleneck." + }, + "1316": { + "node_id": 1371, + "content": "reuse Service traversal and parse limit policy for CLI and MCP updates" + }, + "1317": { + "node_id": 1372, + "content": "give webhook/server callers a structured failure they can surface instead of silent partial sync" + }, + "1318": { + "node_id": 1373, + "content": "give operators a stable, single-line summary they can grep instead of dumping every path." + }, + "1319": { + "node_id": 1375, + "content": "select deterministic package discovery capabilities through the parser port." + }, + "132": { + "node_id": 178, + "content": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from." + }, + "1320": { + "node_id": 1376, + "content": "identify package boundaries and file memberships to populate the graph's package structure." + }, + "1321": { + "node_id": 1377, + "content": "discover packages through the ingest parser port without exposing adapter language specifications." + }, + "1322": { + "node_id": 1378, + "content": "keep package semantic enrichment behind the parser port instead of importing a parser adapter." + }, + "1323": { + "node_id": 1379, + "content": "ensure cross-package imports can be resolved using their semantic names." + }, + "1324": { + "node_id": 1380, + "content": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package." + }, + "1325": { + "node_id": 1381, + "content": "limit package semantic edge refresh work to packages whose file sets overlap the current update." + }, + "1326": { + "node_id": 1382, + "content": "reload package and interface metadata only for files participating in a package semantic refresh." + }, + "1327": { + "node_id": 1383, + "content": "let explicit parsers and fallback walkers be evaluated independently for package semantics." + }, + "1328": { + "node_id": 1384, + "content": "consolidate package discovery results while discarding conflicting definitions." + }, + "1329": { + "node_id": 1385, + "content": "normalize discovered package imports into the canonical names used when resolving cross-file imports during parsing." + }, + "133": { + "node_id": 179, + "content": "summarize git branch, commit, remote, and dirty state for namespace-scoped evidence blocks." + }, + "1330": { + "node_id": 1386, + "content": "seed parser qualified names from discovered package ownership without depending on map iteration order." + }, + "1331": { + "node_id": 1387, + "content": "project package metadata into the graph schema for persistence." + }, + "1332": { + "node_id": 1388, + "content": "estimate the edge overhead for package structural nodes." + }, + "1333": { + "node_id": 1389, + "content": "ensure package nodes exist before their member files are linked." + }, + "1334": { + "node_id": 1390, + "content": "populate the graph's structural hierarchy by connecting packages to their source files." + }, + "1335": { + "node_id": 1391, + "content": "keep package-related database operations stable across build runs." + }, + "1336": { + "node_id": 1392, + "content": "collect all files that need to be linked to their containing package nodes." + }, + "1337": { + "node_id": 1393, + "content": "ensure unambiguous node selection during structural edge linking." + }, + "1338": { + "node_id": 1394, + "content": "ensure package structural edges can be upserted without duplication." + }, + "1339": { + "node_id": 1395, + "content": "constrain package semantic refresh to import paths touched directly or by directory-level package splits." + }, + "134": { + "node_id": 180, + "content": "normalize git reference names into human-readable branch labels inside evidence metadata." + }, + "1340": { + "node_id": 1396, + "content": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers." + }, + "1341": { + "node_id": 1396, + "content": "additions to existing packages reparse package/directory peers; a wholly new package or source directory requires full-graph reconciliation because unresolved external callers are not persisted." + }, + "1342": { + "node_id": 1397, + "content": "preserve graph correctness when full-build fallback is unsafe or unavailable." + }, + "1343": { + "node_id": 1398, + "content": "maintain a unique set of strings while preserving insertion order for small sets." + }, + "1344": { + "node_id": 1399, + "content": "aggregate strings from multiple sources while filtering duplicates." + }, + "1345": { + "node_id": 1401, + "content": "cache reusable syntax results without duplicating source text or invocation-local byte accounting." + }, + "1346": { + "node_id": 1402, + "content": "keep durable cache payloads limited to parser output reused by later builds." + }, + "1347": { + "node_id": 1403, + "content": "reconstruct the same build spool contract on a cache hit as on a fresh parse." + }, + "1348": { + "node_id": 1404, + "content": "keep cache persistence independent of workflow-internal record types." + }, + "135": { + "node_id": 182, + "content": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload." + }, + "1350": { + "node_id": 1406, + "content": "bypass caching when a parser cannot prove how its output version is invalidated." + }, + "1351": { + "node_id": 1407, + "content": "invalidate cached syntax results when import or file-package normalization changes." + }, + "1352": { + "node_id": 1408, + "content": "keep change detection based on current content rather than serialized node state." + }, + "1353": { + "node_id": 1410, + "content": "let the build transaction stream parsed input from disk instead of holding all files in memory." + }, + "1354": { + "node_id": 1411, + "content": "decouple parsing from the build transaction so the DB tx only opens once parsing succeeds." + }, + "1355": { + "node_id": 1412, + "content": "stream incremental sync inputs from disk to bound peak memory." + }, + "1356": { + "node_id": 1413, + "content": "capture the current file set, hashes, and force-reparse decisions before the update transaction begins." + }, + "1357": { + "node_id": 1414, + "content": "persist parsed input for later transactional replay without holding it in memory." + }, + "1358": { + "node_id": 1415, + "content": "stream parsed input back into the build transaction one file at a time." + }, + "1359": { + "node_id": 1416, + "content": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory." + }, + "136": { + "node_id": 183, + "content": "preserve a stable typed response envelope for impact-radius queries." + }, + "1360": { + "node_id": 1417, + "content": "reclaim spool disk space whether the build succeeded or failed." + }, + "1361": { + "node_id": 1418, + "content": "persist update inputs for transactional replay without holding all batches in memory." + }, + "1362": { + "node_id": 1419, + "content": "stream update inputs back into the update transaction in batches." + }, + "1363": { + "node_id": 1420, + "content": "reclaim spool disk space whether the update succeeded or failed." + }, + "1364": { + "node_id": 1422, + "content": "prevent semi-naive replay from consuming unresolved candidates produced by incompatible parser/query or resolution behavior." + }, + "1365": { + "node_id": 1422, + "content": "bump unresolvedIndexAlgorithmVersion whenever unresolved candidate selection or endpoint resolution semantics change." + }, + "1366": { + "node_id": 1424, + "content": "centralize file collection, include path, parse limit, and search policy for update callers" + }, + "1367": { + "node_id": 1425, + "content": "carry the transaction-scoped update decision out to the orchestration layer without exposing a public result type." + }, + "1368": { + "node_id": 1426, + "content": "use the faster full-build write path for new packages without changing the Update result contract." + }, + "1369": { + "node_id": 1427, + "content": "prevent partial non-replacing updates from deleting graph data outside their include paths." + }, + "137": { + "node_id": 184, + "content": "serialize flow member references without exposing the full node record." + }, + "1370": { + "node_id": 1428, + "content": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path." + }, + "1371": { + "node_id": 1429, + "content": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate." + }, + "1372": { + "node_id": 1430, + "content": "capture the current update input set and file hashes before transactional incremental sync begins." + }, + "1373": { + "node_id": 1431, + "content": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved." + }, + "1374": { + "node_id": 1432, + "content": "seed semi-naive unresolved lookup from newly introduced source files only." + }, + "1375": { + "node_id": 1433, + "content": "replace graph-wide reparsing with reverse-index-driven edge reconciliation for new packages." + }, + "1376": { + "node_id": 1434, + "content": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory." + }, + "1377": { + "node_id": 1435, + "content": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory." + }, + "1378": { + "node_id": 1436, + "content": "identify which files contributed nodes that need to be re-indexed for search after an incremental update." + }, + "1379": { + "node_id": 1437, + "content": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown." + }, + "138": { + "node_id": 184, + "content": "Namespace is set only in cross-namespace mode so single-namespace responses stay unchanged." + }, + "1380": { + "node_id": 1437, + "content": "absence from current files means deletion only when the same path was not observed as unreadable." + }, + "1381": { + "node_id": 1438, + "content": "merge previously stored node IDs with newly created ones so the search index sees both removals and additions." + }, + "1382": { + "node_id": 1439, + "content": "avoid SQL parameter limits while collecting node IDs that need search index refresh." + }, + "1383": { + "node_id": 1440, + "content": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes." + }, + "1384": { + "node_id": 1441, + "content": "let the update loop aggregate per-batch results without each call site touching every field." + }, + "1385": { + "node_id": 1443, + "content": "reject tags and other Git refs before repository sync admission." + }, + "1386": { + "node_id": 1444, + "content": "preserve repository-backed namespace compatibility while removing owner segments." + }, + "1387": { + "node_id": 1445, + "content": "represent a single Atlantis-style repo pattern in a form cheap to evaluate per webhook." + }, + "1388": { + "node_id": 1446, + "content": "expose a stable shape for CLI/YAML config without leaking the internal compiled rule layout." + }, + "1389": { + "node_id": 1447, + "content": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local." + }, + "139": { + "node_id": 185, + "content": "explain whether traceFlow truncated members and whether fallback edges contributed to the result." + }, + "1390": { + "node_id": 1448, + "content": "provide a single matcher whose result depends on rule declaration order, where later matching rules override earlier ones." + }, + "1392": { + "node_id": 1450, + "content": "centralize Atlantis-style repo filtering so webhook dispatch can make one consistent allow decision." + }, + "1393": { + "node_id": 1451, + "content": "let callers gate repository-level sync before looking at branch-specific restrictions." + }, + "1394": { + "node_id": 1451, + "content": "rules are evaluated in declaration order and the last matching rule wins; a later allow rule overrides an earlier deny match and vice versa." + }, + "1395": { + "node_id": 1451, + "content": "a repository with no matching rule is denied (default-deny)." + }, + "1396": { + "node_id": 1452, + "content": "reject non-branch webhook refs before they can enter the sync pipeline." + }, + "1397": { + "node_id": 1453, + "content": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply." + }, + "1398": { + "node_id": 1453, + "content": "with no rules configured the result is always false (default-deny)." + }, + "1399": { + "node_id": 1453, + "content": "rules are evaluated in declaration order; each later matching rule replaces the prior decision, so a negate rule clears any previous allow and a subsequent allow rule re-enables the repo." + }, + "140": { + "node_id": 186, + "content": "preserve a stable response envelope for traced flow results and their evidence." + }, + "1400": { + "node_id": 1453, + "content": "when a non-negate rule matches but specifies no branches, the built-in defaults (\"main\", \"master\") are used." + }, + "1401": { + "node_id": 1454, + "content": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites." + }, + "1402": { + "node_id": 1455, + "content": "preserve compact CLI config while still supporting per-repository branch restrictions." + }, + "1403": { + "node_id": 1456, + "content": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists." + }, + "1404": { + "node_id": 1456, + "content": "deny rules are ignored because they only narrow the positive admission surface." + }, + "1405": { + "node_id": 1457, + "content": "identify configurations that can collide under the current repo-name namespace strategy." + }, + "1406": { + "node_id": 1458, + "content": "fail webhook startup before equal repo names from different owners can share checkout and graph state." + }, + "1407": { + "node_id": 1458, + "content": "repo-name namespaces are safe only when all positive allow rules are constrained to one non-wildcard owner." + }, + "1408": { + "node_id": 1459, + "content": "apply one compiled allow or deny pattern to a repository full name during filter evaluation." + }, + "1409": { + "node_id": 1461, + "content": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed." + }, + "141": { + "node_id": 187, + "content": "preserve a stable per-item DTO for detectChanges pagination results." + }, + "1410": { + "node_id": 1462, + "content": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL." + }, + "1411": { + "node_id": 1462, + "content": "each path segment must be non-empty and not equal to \".\" or \"..\"." + }, + "1412": { + "node_id": 1462, + "content": "path.Clean(repoFullName) must equal repoFullName and must not start with \"/\"." + }, + "1413": { + "node_id": 1463, + "content": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data." + }, + "1414": { + "node_id": 1463, + "content": "resulting path is path.Join(base.Path, repoPath) + \".git\"." + }, + "1415": { + "node_id": 1464, + "content": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets." + }, + "1416": { + "node_id": 1464, + "content": "baseURL must parse via url.ParseRequestURI and url.Parse without error." + }, + "1417": { + "node_id": 1464, + "content": "parsed scheme and host must be non-empty and Opaque must be empty." + }, + "1418": { + "node_id": 1465, + "content": "carry only trusted admission output into the checkout adapter." + }, + "1419": { + "node_id": 1466, + "content": "carry only trusted admission output into the checkout adapter." + }, + "142": { + "node_id": 188, + "content": "expose diff-risk results with both legacy entries and shared pagination fields." + }, + "1420": { + "node_id": 1467, + "content": "isolate checkout locking and Git implementation from sync ordering policy." + }, + "1421": { + "node_id": 1468, + "content": "carry include and exclude configuration together so every webhook update uses one coherent build scope." + }, + "1422": { + "node_id": 1469, + "content": "separate repository config file parsing from repository sync orchestration." + }, + "1423": { + "node_id": 1470, + "content": "preserve namespace, source scope, replace limits, and readability policy across the app boundary." + }, + "1424": { + "node_id": 1471, + "content": "report only update counts needed by repository sync observability." + }, + "1425": { + "node_id": 1472, + "content": "adapt repository sync to the ingest application without importing workflow types." + }, + "1426": { + "node_id": 1473, + "content": "keep derived query cache invalidation after successful repository graph commit." + }, + "1428": { + "node_id": 1475, + "content": "invoke the configured cache invalidation only when one exists." + }, + "1429": { + "node_id": 1477, + "content": "provide the queue-to-service invocation contract without transport ownership." + }, + "143": { + "node_id": 189, + "content": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers." + }, + "1430": { + "node_id": 1478, + "content": "allow tracing adapters to enrich contexts and logs while queue behavior remains infrastructure-free." + }, + "1431": { + "node_id": 1479, + "content": "preserve queue behavior when no observability adapter is configured." + }, + "1433": { + "node_id": 1481, + "content": "contribute no structured trace fields when observability is disabled." + }, + "1434": { + "node_id": 1482, + "content": "mark sync failures that should stop retry backoff immediately." + }, + "1435": { + "node_id": 1483, + "content": "expose the wrapped failure message so non-retryable errors print like the underlying error." + }, + "1437": { + "node_id": 1485, + "content": "wrap permanent sync failures so queue retry logic can short-circuit them." + }, + "1438": { + "node_id": 1486, + "content": "let retry logic stop early when a failure is known to be permanent for the current payload." + }, + "1439": { + "node_id": 1487, + "content": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote." + }, + "144": { + "node_id": 190, + "content": "expose affected stored flows with backward-compatible aliases and pagination metadata." + }, + "1440": { + "node_id": 1488, + "content": "provide conservative retry defaults for production webhook processing." + }, + "1441": { + "node_id": 1489, + "content": "capture the most recent sync request data per repository while it waits in the queue." + }, + "1442": { + "node_id": 1490, + "content": "expose per-repository queue state so operators can inspect backlog and failure hotspots." + }, + "1443": { + "node_id": 1491, + "content": "coordinate deduplicated per-repository sync execution across a worker pool." + }, + "1444": { + "node_id": 1492, + "content": "provide the smallest constructor for production webhook dispatch." + }, + "1445": { + "node_id": 1493, + "content": "allow server shutdown to cancel retries and worker waits cleanly." + }, + "1446": { + "node_id": 1494, + "content": "expose backoff customization without forcing every caller to build a full queue config." + }, + "1447": { + "node_id": 1495, + "content": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently." + }, + "1448": { + "node_id": 1496, + "content": "collapse repeated push events into one queued sync while preserving the newest branch and clone data." + }, + "1449": { + "node_id": 1496, + "content": "repeated events for the same repository replace payload data instead of enqueueing duplicate work." + }, + "145": { + "node_id": 191, + "content": "explore the blast radius of a node change so reviewers can prioritize follow-up checks." + }, + "1450": { + "node_id": 1497, + "content": "give the server a bounded, graceful shutdown path for in-flight webhook sync." + }, + "1451": { + "node_id": 1498, + "content": "expose enough queue state to diagnose backlog, failures, and hot repositories." + }, + "1452": { + "node_id": 1499, + "content": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue." + }, + "1453": { + "node_id": 1500, + "content": "merge queued payload state with historical success and failure data for one repository summary." + }, + "1454": { + "node_id": 1501, + "content": "surface the oldest outstanding queue age so operators can detect stuck work." + }, + "1455": { + "node_id": 1502, + "content": "run the main worker loop that drains deduplicated repository work items." + }, + "1456": { + "node_id": 1503, + "content": "protect webhook processing from transient git and network errors without retrying permanent failures forever." + }, + "1457": { + "node_id": 1504, + "content": "update queue-level and per-repository failure tracking after a terminal sync error." + }, + "1458": { + "node_id": 1505, + "content": "update the latest successful sync timestamps after a repository finishes cleanly." + }, + "1459": { + "node_id": 1506, + "content": "maintain a bounded MRU view of repository stats without unbounded growth." + }, + "146": { + "node_id": 192, + "content": "reconstruct the call flow containing the starting node so operators can understand execution context." + }, + "1460": { + "node_id": 1507, + "content": "isolate handler panics and merged cancellation logic around one sync attempt." + }, + "1461": { + "node_id": 1508, + "content": "block workers until the next deduplicated repository payload is ready for processing." + }, + "1462": { + "node_id": 1509, + "content": "requeue repositories that changed during processing or release payload state when work is complete." + }, + "1463": { + "node_id": 1510, + "content": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map." + }, + "1464": { + "node_id": 1511, + "content": "summarize queue-wide health and recent repository activity for observability." + }, + "1465": { + "node_id": 1512, + "content": "configure queue retry policy and memory bounds when constructing a SyncQueue." + }, + "1466": { + "node_id": 1513, + "content": "derive a comparable activity timestamp for sorting repository summaries." + }, + "1467": { + "node_id": 1514, + "content": "cancel a sync attempt when either the queue lifecycle or the payload-specific context is done." + }, + "1468": { + "node_id": 1516, + "content": "coordinate admitted repository checkout, config loading, graph replacement, and cache invalidation." + }, + "1469": { + "node_id": 1517, + "content": "make repository synchronization ordering reusable outside HTTP server composition." + }, + "147": { + "node_id": 193, + "content": "identify changed files and functions with elevated review risk from recent git diff hunks." + }, + "1470": { + "node_id": 1519, + "content": "let inbound orchestration trigger one complete search rebuild without receiving database/backend handles." + }, + "1471": { + "node_id": 1520, + "content": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns." + }, + "1472": { + "node_id": 1521, + "content": "index each reason a node exists as its own document, so writing one reason down never costs another its score." + }, + "1473": { + "node_id": 1522, + "content": "improve inner-word recall without inflating term frequency for repeated identity tokens." + }, + "1474": { + "node_id": 1523, + "content": "make basename, extension, and human language names searchable." + }, + "1475": { + "node_id": 1524, + "content": "preserve language-name recall for extension-only file paths." + }, + "1476": { + "node_id": 1526, + "content": "let a reader see which part of a result the query actually touched." + }, + "1477": { + "node_id": 1527, + "content": "carry a search hit together with the evidence that justifies showing it." + }, + "1478": { + "node_id": 1528, + "content": "key per-node intent evidence so it cannot leak onto another repository's node." + }, + "1479": { + "node_id": 1529, + "content": "carry the intent query's evidence into the list without the list depending on the intent packages." + }, + "148": { + "node_id": 194, + "content": "trace flows touched by changed nodes so regression review can happen at the flow level." + }, + "1480": { + "node_id": 1530, + "content": "WithReason never exceeds Declarations." + }, + "1481": { + "node_id": 1530, + "content": "let an empty answer say whether anyone ever recorded a reason to search." + }, + "1482": { + "node_id": 1531, + "content": "keep an unmeasured coverage from being reported as a measured zero." + }, + "1483": { + "node_id": 1532, + "content": "make the file, not the declaration, the thing a caller chooses between." + }, + "1484": { + "node_id": 1533, + "content": "let a caller weigh a file before reading any of its hits." + }, + "1485": { + "node_id": 1534, + "content": "make \"nothing to show\" a readable answer rather than an empty array." + }, + "1486": { + "node_id": 1535, + "content": "give renderers and measurements one sequence without losing the grouping." + }, + "1487": { + "node_id": 1536, + "content": "tell a page that answered something apart from one that merely has rows on it." + }, + "1488": { + "node_id": 1537, + "content": "Limit and Offset are both counted in files, never in hits, so paging never splits a file." + }, + "1489": { + "node_id": 1537, + "content": "keep the bounds a caller controls — page size, page position, strictness — in one argument." + }, + "149": { + "node_id": 194, + "content": "changed node collection runs once and does not page through detectChanges risk entries." + }, + "1490": { + "node_id": 1538, + "content": "give a reader or an agent a file list where every line states why it is there." + }, + "1491": { + "node_id": 1539, + "content": "name the cause of an empty answer, rather than guessing at a remedy for it." + }, + "1492": { + "node_id": 1540, + "content": "state a candidate's evidence in the same terms the ranker ordered it by." + }, + "1493": { + "node_id": 1541, + "content": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable." + }, + "1494": { + "node_id": 1541, + "content": "a single shared word is evidence; the query and the reason are compared as identifier tokens, so camelCase splits the same way on both sides." + }, + "1495": { + "node_id": 1542, + "content": "turn a ranked list of declarations into a ranked list of files to read." + }, + "1496": { + "node_id": 1543, + "content": "bound an answer by files, so paging through it never lands a reader mid-file." + }, + "1497": { + "node_id": 1544, + "content": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works." + }, + "1498": { + "node_id": 1545, + "content": "let each repository be paged through its own list without losing the shared ranking." + }, + "1499": { + "node_id": 1547, + "content": "expose original-case terms; lowercasing happens per consumer." + }, + "150": { + "node_id": 195, + "content": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem." + }, + "1500": { + "node_id": 1547, + "content": "only letter, digit, and underscore sequences survive tokenization." + }, + "1501": { + "node_id": 1548, + "content": "read a document the same way the query is read." + }, + "1502": { + "node_id": 1549, + "content": "normalize source identifiers into stable search-index tokens without language-specific dependencies." + }, + "1503": { + "node_id": 1550, + "content": "keep identifier tokenization limited to Unicode letters and digits." + }, + "1504": { + "node_id": 1552, + "content": "let search consume a bound intent-index implementation without a database handle." + }, + "1505": { + "node_id": 1553, + "content": "carry the reason a declaration ranked, not only that it ranked." + }, + "1506": { + "node_id": 1554, + "content": "let a reader weigh a match by how common the word that earned it is." + }, + "1507": { + "node_id": 1555, + "content": "WithReason never exceeds Declarations, because both are counted from the same derived index." + }, + "1508": { + "node_id": 1555, + "content": "let an answer say whether it came back empty because nobody wrote a reason down." + }, + "1509": { + "node_id": 1556, + "content": "keep the ranking and the evidence for it on one value, so neither can be reported without the other." + }, + "151": { + "node_id": 196, + "content": "prevent git-based analysis from reading paths outside the configured project boundaries." + }, + "1510": { + "node_id": 1557, + "content": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason." + }, + "1511": { + "node_id": 1559, + "content": "carry the exact indexed text into scoring so the score is computed over what was matched." + }, + "1512": { + "node_id": 1560, + "content": "keep the fields that make up the tie-break named in one place." + }, + "1513": { + "node_id": 1561, + "content": "say what earned a declaration its place, not only that it earned one." + }, + "1514": { + "node_id": 1562, + "content": "let a reader weigh a match by how common the word that earned it is." + }, + "1515": { + "node_id": 1563, + "content": "hand back what matched alongside what ranked, so a weak answer can be recognised as one." + }, + "1516": { + "node_id": 1566, + "content": "give a rare term more weight than a common one, which is the whole point of scoring here." + }, + "1517": { + "node_id": 1567, + "content": "stop a long or repetitive reason from outranking a short exact one." + }, + "1518": { + "node_id": 1569, + "content": "score the same terms the index was asked to match." + }, + "1519": { + "node_id": 1570, + "content": "measure one term's presence the same way the index matched it." + }, + "152": { + "node_id": 197, + "content": "build the allowlist used by path validation so each source of truth contributes exactly once." + }, + "1520": { + "node_id": 1571, + "content": "keep the scorer and the index agreeing on what counts as a match." + }, + "1521": { + "node_id": 1572, + "content": "measure a term against the misfire that motivated the rule, not against a raw length." + }, + "1522": { + "node_id": 1572, + "content": "non-ASCII terms always match by prefix, whatever their length." + }, + "1523": { + "node_id": 1574, + "content": "keep every paged entry point agreeing about which requests are askable." + }, + "1524": { + "node_id": 1576, + "content": "let a caller judge one term without copying the list." + }, + "1525": { + "node_id": 1577, + "content": "stop one unremarkable English word from deciding which results a query returns." + }, + "1526": { + "node_id": 1577, + "content": "a query made only of function words keeps every term, so it stays answerable." + }, + "1527": { + "node_id": 1578, + "content": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." + }, + "1528": { + "node_id": 1579, + "content": "let a caller explain a search result using the ranker's own signals instead of re-deriving them." + }, + "1529": { + "node_id": 1580, + "content": "give callers one question to ask before deciding a candidate is unexplainable." + }, + "153": { + "node_id": 198, + "content": "linear membership check for small string slices used by allowlist evaluation." + }, + "1530": { + "node_id": 1581, + "content": "expose the ranker's per-candidate evidence to the code that builds a result list." + }, + "1531": { + "node_id": 1583, + "content": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result." + }, + "1532": { + "node_id": 1583, + "content": "candidate pools stay between 50 and 500 rows regardless of the requested result limit." + }, + "1533": { + "node_id": 1584, + "content": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one." + }, + "1534": { + "node_id": 1585, + "content": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break." + }, + "1535": { + "node_id": 1586, + "content": "keep one ordering implementation for both single-list and multi-list retrieval." + }, + "1536": { + "node_id": 1587, + "content": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first." + }, + "1537": { + "node_id": 1588, + "content": "break structural ties by node identity so the order never depends on which backend retrieved the pool." + }, + "1538": { + "node_id": 1589, + "content": "apply the caller's result bound after candidate reranking." + }, + "1539": { + "node_id": 1590, + "content": "score query tokens against simple and qualified node identifiers." + }, + "154": { + "node_id": 199, + "content": "enforce that user-supplied paths cannot escape the configured analysis boundary." + }, + "1540": { + "node_id": 1591, + "content": "let a method be found by the type it belongs to, without turning a package name into an identifier match." + }, + "1541": { + "node_id": 1592, + "content": "score one query against several spellings of the same node." + }, + "1542": { + "node_id": 1593, + "content": "rank identifiers that contain the query by how prominently they contain it." + }, + "1543": { + "node_id": 1594, + "content": "make a match at a word boundary count for more than one reached by skipping runes." + }, + "1544": { + "node_id": 1595, + "content": "use matching path segments as a bounded secondary relevance signal." + }, + "1545": { + "node_id": 1597, + "content": "read a query once and hand each scorer the cut it can use." + }, + "1546": { + "node_id": 1598, + "content": "give callers one question to ask before scoring a candidate." + }, + "1547": { + "node_id": 1599, + "content": "stop a single shared character from standing as a candidate's only evidence." + }, + "1548": { + "node_id": 1600, + "content": "normalize free-text search input into comparable Unicode tokens." + }, + "1549": { + "node_id": 1601, + "content": "recognize separators that delimit meaningful source-path segments." + }, + "155": { + "node_id": 201, + "content": "serialize minimal-context community summaries without introducing extra response fields." + }, + "1550": { + "node_id": 1602, + "content": "keep acronym-prefixed identifiers scoring like their mixed-case spelling." + }, + "1551": { + "node_id": 1603, + "content": "recognize separators that delimit words inside a single identifier." + }, + "1552": { + "node_id": 1604, + "content": "extract the leaf identifier from a qualified name without allocating intermediate segments." + }, + "1553": { + "node_id": 1605, + "content": "convert a structural ordering to deterministic ordinal ranks so equally-scored candidates share one rank and fall through to the retrieval tie-break." + }, + "1554": { + "node_id": 1607, + "content": "keep the service on fetch-only ports so no backend or scoring package leaks in." + }, + "1555": { + "node_id": 1608, + "content": "give MCP and the CLI the same request shape so their answers stay comparable." + }, + "1556": { + "node_id": 1609, + "content": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter." + }, + "1557": { + "node_id": 1610, + "content": "keep construction trivial so composition roots stay declarative." + }, + "1558": { + "node_id": 1611, + "content": "answer a search with the files that can justify their place, not the backend's raw order." + }, + "1559": { + "node_id": 1612, + "content": "answer one search across several repositories with per-item namespace labels." + }, + "156": { + "node_id": 202, + "content": "serialize minimal-context flow summaries without introducing extra response fields." + }, + "1560": { + "node_id": 1612, + "content": "each namespace is queried in isolation and spends its own file budget, so no namespace with hits can be crowded off the page by another." + }, + "1561": { + "node_id": 1614, + "content": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for." + }, + "1562": { + "node_id": 1616, + "content": "keep a page already delivered from being reshuffled by the wider pool the next page fetches." + }, + "1563": { + "node_id": 1617, + "content": "give federated paging the same fixed prefix a single repository's paging has." + }, + "1564": { + "node_id": 1618, + "content": "apply the caller's path filter without renumbering the pool the order was decided from." + }, + "1565": { + "node_id": 1619, + "content": "keep the intent port's types out of the answer the surfaces serialize." + }, + "1566": { + "node_id": 1620, + "content": "make a federated answer's coverage cover every repository it searched." + }, + "1567": { + "node_id": 1621, + "content": "let a recorded reason put a node on the page without letting it reshuffle the name matches." + }, + "1568": { + "node_id": 1623, + "content": "preserve a stable per-item DTO for search responses." + }, + "1569": { + "node_id": 1623, + "content": "Namespace is set only in federated (multi-namespace) mode so single-namespace responses stay unchanged." + }, + "157": { + "node_id": 203, + "content": "keep the minimal-context wire shape explicit without changing serialized output." + }, + "1570": { + "node_id": 1624, + "content": "let a caller choose between files, then read inside the one it chose." + }, + "1571": { + "node_id": 1625, + "content": "make a search answer self-describing, including when it is empty." + }, + "1572": { + "node_id": 1626, + "content": "let a caller tell a short answer from the first page of a long one." + }, + "1573": { + "node_id": 1627, + "content": "an action names either a Tool with its Args or a Skill, never both, so a caller never has to guess which one to act on." + }, + "1574": { + "node_id": 1627, + "content": "turn what a search withheld into a step the caller can actually take." + }, + "1575": { + "node_id": 1628, + "content": "keep one conversion so no two search surfaces can drift apart." + }, + "1576": { + "node_id": 1629, + "content": "make the follow-up step obvious enough that an agent does not have to invent one." + }, + "1577": { + "node_id": 1631, + "content": "derive a package/file/symbol presentation tree directly from graph nodes." + }, + "1578": { + "node_id": 1632, + "content": "generate a UI-oriented tree independent of community detection and PageIndex retrieval." + }, + "1579": { + "node_id": 1633, + "content": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated." + }, + "158": { + "node_id": 204, + "content": "give agents a cheap first read of namespace state before they spend tokens on deeper graph queries." + }, + "1580": { + "node_id": 1634, + "content": "support GitHub-style lazy Wiki navigation without synthesizing the full tree for every folder expansion." + }, + "1581": { + "node_id": 1635, + "content": "build the selected lazy tree root without loading unrelated descendants." + }, + "1582": { + "node_id": 1636, + "content": "load a stored package or file tree node with annotation summary and expandable state." + }, + "1583": { + "node_id": 1637, + "content": "load a stored symbol tree node by qualified name for direct lazy navigation." + }, + "1584": { + "node_id": 1638, + "content": "populate a lazy tree node to the requested relative depth." + }, + "1585": { + "node_id": 1639, + "content": "resolve immediate children for one lazy Wiki tree node." + }, + "1586": { + "node_id": 1640, + "content": "list immediate folder children while allowing package nodes to replace same-path synthetic folders." + }, + "1587": { + "node_id": 1641, + "content": "list direct files inside one package node." + }, + "1588": { + "node_id": 1642, + "content": "list symbols declared inside one file node." + }, + "1589": { + "node_id": 1643, + "content": "query package/file path candidates under a folder prefix without loading annotations." + }, + "159": { + "node_id": 205, + "content": "steer callers toward high-signal graph operations without requiring them to know the full tool catalog." + }, + "1590": { + "node_id": 1644, + "content": "convert collected lazy child entries into annotated TreeNode DTOs." + }, + "1591": { + "node_id": 1645, + "content": "convert one graph node into the Wiki tree node shape used by full and lazy builders." + }, + "1592": { + "node_id": 1646, + "content": "batch-load annotations for lazy tree nodes while preserving tag order." + }, + "1593": { + "node_id": 1647, + "content": "test whether a folder or root path has any descendant package or file node." + }, + "1594": { + "node_id": 1648, + "content": "test whether a package node has direct file children." + }, + "1595": { + "node_id": 1649, + "content": "test whether a file node has symbol children." + }, + "1596": { + "node_id": 1650, + "content": "resolve the namespace used for both DB reads and wiki-index output paths." + }, + "1597": { + "node_id": 1651, + "content": "load the graph node set needed for Wiki navigation and summaries." + }, + "1598": { + "node_id": 1652, + "content": "convert a repository-relative source path to the generated Markdown doc path." + }, + "1599": { + "node_id": 1653, + "content": "hold mutable lookup maps while building the folder/package/file Wiki tree." + }, + "160": { + "node_id": 207, + "content": "expose symbolic target identity and derived resolution state without internal row metadata." + }, + "1600": { + "node_id": 1654, + "content": "create folder nodes for path segments that are not themselves packages." + }, + "1601": { + "node_id": 1655, + "content": "ensure a package node exists under its containing folder." + }, + "1602": { + "node_id": 1656, + "content": "create a file node under its package when available, otherwise under its directory folder." + }, + "1603": { + "node_id": 1657, + "content": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed." + }, + "1604": { + "node_id": 1658, + "content": "deduplicate file tree nodes while preserving the first useful summary and doc path." + }, + "1605": { + "node_id": 1659, + "content": "hold one immediate child candidate while lazy tree nodes are materialized." + }, + "1607": { + "node_id": 1661, + "content": "identify package nodes that represent the repository root rather than a sidebar child." + }, + "1608": { + "node_id": 1661, + "content": "the root package is folded into the Wiki root so top-level files are not duplicated under a synthetic \".\" package." + }, + "1609": { + "node_id": 1662, + "content": "collect graph node IDs for batch annotation lookup." + }, + "161": { + "node_id": 208, + "content": "keep the requested namespace and direction visible next to the reference list." + }, + "1610": { + "node_id": 1663, + "content": "expose symbol node kinds as strings for GORM IN clauses." + }, + "1611": { + "node_id": 1664, + "content": "centralize the symbol kinds eligible for built-in Wiki navigation." + }, + "1612": { + "node_id": 1665, + "content": "adapt legacy string kind sets into the repository's typed node-kind request." + }, + "1613": { + "node_id": 1666, + "content": "expose path-bearing node kinds that can imply folder and file tree entries." + }, + "1614": { + "node_id": 1667, + "content": "identify graph node kinds that should appear as symbols under a file in the Wiki tree." + }, + "1615": { + "node_id": 1668, + "content": "choose the summary text that makes a Wiki node useful for scanning and search." + }, + "1616": { + "node_id": 1669, + "content": "expose full structured annotation metadata for Wiki symbol detail views." + }, + "1617": { + "node_id": 1670, + "content": "keep Wiki tree output deterministic across builds." + }, + "1618": { + "node_id": 1671, + "content": "sort folders before packages, packages before files, and files before symbols." + }, + "1619": { + "node_id": 1673, + "content": "Wiki 탐색 트리에서 디렉터리, 패키지, 파일, 심볼을 동일 구조로 표현한다." + }, + "162": { + "node_id": 209, + "content": "give agents a repository-level dependency map derived from ccg:// annotations." + }, + "1620": { + "node_id": 1674, + "content": "let presentation indexes expose symbol annotations without requiring a generated file doc." + }, + "1621": { + "node_id": 1675, + "content": "serialize annotation summary, context, and tags in a UI-friendly shape." + }, + "1622": { + "node_id": 1676, + "content": "keep tag kind, type, name, and ordering available to browser renderers." + }, + "1623": { + "node_id": 1677, + "content": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows." + }, + "1625": { + "node_id": 1679, + "content": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata." + }, + "1626": { + "node_id": 1680, + "content": "검색 UI나 MCP 응답에서 표시할 최소 결과 정보를 담는다." + }, + "1627": { + "node_id": 1681, + "content": "문서 인덱스 트리에서 제목, 요약, 구조화 annotation 기반 키워드 탐색을 제공한다." + }, + "163": { + "node_id": 211, + "content": "give a reader a name, a line to open, and why it exists." + }, + "1630": { + "node_id": 1685, + "content": "carry viewer graph facts without exposing database queries to HTTP handlers." + }, + "1631": { + "node_id": 1686, + "content": "preserve stage-specific inbound error mapping without exposing database operations." + }, + "1633": { + "node_id": 1688, + "content": "satisfy error without leaking the application stage into the existing HTTP detail field." + }, + "1634": { + "node_id": 1689, + "content": "preserve errors.Is and errors.As behavior through graph-view stage classification." + }, + "1635": { + "node_id": 1690, + "content": "keep Wiki hierarchy and presentation policy independent of GORM query construction." + }, + "1636": { + "node_id": 1691, + "content": "let Wiki build policy choose namespace and payload without owning filesystem implementation." + }, + "1637": { + "node_id": 1693, + "content": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다." + }, + "1638": { + "node_id": 1694, + "content": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다." + }, + "1639": { + "node_id": 1695, + "content": "Wiki 호환 snapshot 출력 경로를 config helper로 재사용한다." + }, + "164": { + "node_id": 212, + "content": "let a caller descend one step at a time instead of reading a whole subtree." + }, + "1640": { + "node_id": 1696, + "content": "Wiki root summary에 포함할 프로젝트 설명 문자열을 config helper로 노출한다." + }, + "1641": { + "node_id": 1698, + "content": "isolate the namespace value in the context map from any other package's keys." + }, + "1642": { + "node_id": 1699, + "content": "normalize namespace query parameter values so store and DB-backed search layers always observe a non-empty namespace string." + }, + "1643": { + "node_id": 1700, + "content": "호출자 시그니처 변경 없이 store 레이어까지 namespace를 전달한다." + }, + "1644": { + "node_id": 1701, + "content": "store 내부에서 context로부터 namespace를 꺼내 쿼리 필터에 적용한다." + }, + "1645": { + "node_id": 1703, + "content": "abstract the pool configuration API so both real sql.DB handles and test doubles can share the same seam." + }, + "1646": { + "node_id": 1704, + "content": "centralize driver-specific GORM initialization and pool setup behind one entry point." + }, + "1647": { + "node_id": 1705, + "content": "apply connection-pool limits that match each database driver's concurrency model." + }, + "1648": { + "node_id": 1705, + "content": "sqlite is pinned to MaxOpenConns=1 because it supports only one writer at a time and FTS query workloads share the same DB file." + }, + "1649": { + "node_id": 1706, + "content": "select the full-text search backend implementation that matches the active database driver." + }, + "165": { + "node_id": 213, + "content": "turn a wrong path into the right one instead of into an empty answer." + }, + "1650": { + "node_id": 1706, + "content": "postgres uses the PostgreSQL backend and every other driver falls back to the SQLite backend." + }, + "1651": { + "node_id": 1708, + "content": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package." + }, + "1652": { + "node_id": 1709, + "content": "let a test build its own tables without a concurrently running test seeing or dropping them." + }, + "1653": { + "node_id": 1710, + "content": "replace the per-package \"open postgres and wipe the shared schema\" helper with one safe entry point." + }, + "1654": { + "node_id": 1711, + "content": "model \"a schema that exists for as long as one test does\" as a value with an explicit end." + }, + "1655": { + "node_id": 1712, + "content": "hand back a private, empty schema together with the means to remove it." + }, + "1656": { + "node_id": 1713, + "content": "keep a misconfigured DSN from letting the suite create and drop schemas in real data." + }, + "1657": { + "node_id": 1714, + "content": "make the private schema apply to every connection a pool opens, not just the first." + }, + "1658": { + "node_id": 1715, + "content": "leave a concurrently running test's schema untouched while removing this one." + }, + "1659": { + "node_id": 1716, + "content": "end the schema's life exactly once, reporting the drop failure ahead of the close failure." + }, + "166": { + "node_id": 214, + "content": "answer \"what is in here\" exactly, so the ranked tools never have to guess." + }, + "1660": { + "node_id": 1717, + "content": "avoid leaking a connection when the schema never became usable." + }, + "1661": { + "node_id": 1719, + "content": "keep an extension's operator classes reachable from a private schema without exposing public." + }, + "1662": { + "node_id": 1720, + "content": "settle the extension's location once so every test's search_path can name it." + }, + "1663": { + "node_id": 1722, + "content": "name a schema so that it cannot collide and so its age can be read back later." + }, + "1664": { + "node_id": 1723, + "content": "read a schema's age without a catalog column PostgreSQL does not have." + }, + "1665": { + "node_id": 1724, + "content": "stop schemas from a crashed run piling up without touching a running test's schema." + }, + "1666": { + "node_id": 1725, + "content": "bound how long a schema abandoned by a crashed run can survive." + }, + "1667": { + "node_id": 1726, + "content": "carry the schema in the connection string whether the DSN is a URL or key=value pairs." + }, + "1668": { + "node_id": 1727, + "content": "keep the existing skip-when-absent behaviour without swallowing genuine errors." + }, + "1669": { + "node_id": 1728, + "content": "keep embedded versioned SQL assets with the migration runtime that selects and executes them." + }, + "167": { + "node_id": 216, + "content": "keep one conversion so the tool's shape cannot drift from the service's." + }, + "1673": { + "node_id": 1732, + "content": "마이그레이션 파일이 embedded인지 external인지와 사용 드라이버를 함께 기록한다." + }, + "1679": { + "node_id": 1737, + "content": "기본 로컬 sqlite + 비초기화 상태일 때만 자동 마이그레이션을 허용한다." + }, + "168": { + "node_id": 219, + "content": "resolve the base directory that stores generated documentation and Wiki index artifacts." + }, + "1681": { + "node_id": 1739, + "content": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다." + }, + "1682": { + "node_id": 1739, + "content": "메모리 DB나 커스텀 파일명은 자동 마이그레이션 대상이 아니다." + }, + "1683": { + "node_id": 1740, + "content": "GORM DB와 migration source를 golang-migrate 실행 인스턴스로 결합한다." + }, + "1684": { + "node_id": 1741, + "content": "드라이버별 마이그레이션 입력을 source.Driver로 변환해 migrator 생성에 넘긴다." + }, + "1685": { + "node_id": 1742, + "content": "마이그레이션 디렉터리 설정값을 source kind와 경로 정보로 정규화한다." + }, + "1688": { + "node_id": 1745, + "content": "외부 migration source가 존재하는 실제 디렉터리인지 확인한다." + }, + "1689": { + "node_id": 1746, + "content": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다." + }, + "169": { + "node_id": 220, + "content": "Returns the content of a documentation file directly so agents can read detailed descriptions." + }, + "1691": { + "node_id": 1748, + "content": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다." + }, + "1692": { + "node_id": 1749, + "content": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다." + }, + "1693": { + "node_id": 1749, + "content": "dirty migration 상태는 런타임 시작 전에 반드시 실패시킨다." + }, + "1698": { + "node_id": 1753, + "content": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths." + }, + "17": { + "node_id": 73, + "content": "git hook 관리 하위 명령을 하나의 네임스페이스 아래로 묶는다." + }, + "170": { + "node_id": 220, + "content": "Documentation files exceeding 1MB are not returned." + }, + "1700": { + "node_id": 1755, + "content": "namespace 도입 이전 데이터셋을 기본 namespace로 올려 현재 모델과 호환시킨다." + }, + "1701": { + "node_id": 1756, + "content": "빈 namespace 데이터를 default namespace로 올리기 전에 중복 키 충돌을 차단한다." + }, + "1702": { + "node_id": 1757, + "content": "namespace 마이그레이션 충돌 리포트를 위한 최소 노드 식별자를 담는다." + }, + "1703": { + "node_id": 1758, + "content": "edge namespace 병합 시 fingerprint 충돌만 간단히 전달한다." + }, + "1704": { + "node_id": 1759, + "content": "search_documents namespace 병합 시 중복되는 node_id를 보고한다." + }, + "1705": { + "node_id": 1760, + "content": "community namespace 병합 시 key 충돌을 보고한다." + }, + "1706": { + "node_id": 1761, + "content": "SQLite 배포에서 FTS5 스키마와 모델 nullability 불변식을 확인한다." + }, + "1708": { + "node_id": 1763, + "content": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다." + }, + "1709": { + "node_id": 1764, + "content": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다." + }, + "171": { + "node_id": 221, + "content": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks." + }, + "1711": { + "node_id": 1766, + "content": "index presence can be verified during schema parity checks before query paths use them." + }, + "1712": { + "node_id": 1767, + "content": "SQLite 컬럼 존재 여부와 NOT NULL 속성을 한 번에 조회한다." + }, + "1713": { + "node_id": 1768, + "content": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다." + }, + "1714": { + "node_id": 1769, + "content": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다." + }, + "1715": { + "node_id": 1770, + "content": "SQLite 컬럼 메타데이터를 공개형 struct로 노출해 테스트와 검증 코드에서 재사용하게 한다." + }, + "1717": { + "node_id": 1771, + "content": "the answer describes the schema this connection uses, not a schema named in the query." + }, + "1719": { + "node_id": 1773, + "content": "외부 검증 코드가 PostgreSQL 컬럼 nullability를 재사용 가능한 API로 확인하게 한다." + }, + "172": { + "node_id": 221, + "content": "safe-root containment checks must happen after symlink evaluation." + }, + "1720": { + "node_id": 1774, + "content": "외부 검증 코드가 PostgreSQL 컬럼 타입을 재사용 가능한 API로 확인하게 한다." + }, + "1722": { + "node_id": 1775, + "content": "the answer describes the schema this connection uses, not a schema named in the query." + }, + "1723": { + "node_id": 1776, + "content": "외부 검증 코드가 Postgres 인덱스 존재 여부를 재사용 가능한 API로 확인하게 한다." + }, + "1725": { + "node_id": 1777, + "content": "trigger names are unique per table, not per database, so the answer is scoped to the schema this connection uses." + }, + "1726": { + "node_id": 1778, + "content": "외부 검증 코드가 Postgres 트리거 존재 여부를 재사용 가능한 API로 확인하게 한다." + }, + "1727": { + "node_id": 1779, + "content": "normalize comment text before annotation parsing across supported languages" + }, + "1728": { + "node_id": 1780, + "content": "normalize comment text before annotation parsing across supported languages" + }, + "1729": { + "node_id": 1781, + "content": "provide a reusable comment normalizer for annotation extraction" + }, + "173": { + "node_id": 222, + "content": "reject relative paths that would resolve outside the resolved docs root." + }, + "1730": { + "node_id": 1782, + "content": "turn raw source comments into plain text consumable by the annotation parser" + }, + "1731": { + "node_id": 1783, + "content": "exclude `//go:*` pragma lines from annotation normalization so tag values stay clean" + }, + "1732": { + "node_id": 1784, + "content": "keep only the inner documentation payload from block-style comments" + }, + "1733": { + "node_id": 1785, + "content": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms." + }, + "1734": { + "node_id": 1786, + "content": "accept docstrings with optional `r` or `u` prefixes without altering body content." + }, + "1735": { + "node_id": 1787, + "content": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling." + }, + "1736": { + "node_id": 1788, + "content": "normalize individual documentation lines across language comment syntaxes" + }, + "1737": { + "node_id": 1790, + "content": "convert stripped documentation text into graph.Annotation values" + }, + "1738": { + "node_id": 1791, + "content": "provide a reusable annotation parser instance for binding pipelines" + }, + "1739": { + "node_id": 1792, + "content": "extract machine-readable metadata from developer comments" + }, + "174": { + "node_id": 222, + "content": "traversal checks happen before symlink evaluation, and containment checks happen after it." + }, + "1741": { + "node_id": 1792, + "content": "recognized tags: param, return, see, intent, domainRule, sideEffect, mutates, requires, ensures" + }, + "1742": { + "node_id": 1792, + "content": "unknown tags are silently ignored\nParse extracts structured annotations from normalized comment text.\nReturns the annotation and a slice of unrecognized tag names (e.g. [\"domainrule\"] for a typo).\nCallers that do not need warnings can discard the second return value." + }, + "1743": { + "node_id": 1793, + "content": "decode one normalized tag line into a DocTag with ordinal tracking" + }, + "1744": { + "node_id": 1794, + "content": "separate type annotation from name/description portion for param/return/throws tags" + }, + "1748": { + "node_id": 1798, + "content": "어노테이션의 단일 구조화 태그 항목을 표현한다.\nType 필드는 YARD `@param [String] name ...` 또는 JSDoc `@param {string} name ...`에서\n추출한 타입 문자열을 보관한다 (param/throws/return에서 사용).\nTypeScript/JSDoc 복합 타입(`Record\u003cstring, Array\u003c{id: number, name: string}\u003e\u003e`)이\n수백 바이트에 이를 수 있어 text로 지정." + }, + "175": { + "node_id": 224, + "content": "serialize listFlows results with the legacy response shape." + }, + "1751": { + "node_id": 1801, + "content": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다." + }, + "1752": { + "node_id": 1803, + "content": "distinguish navigable references from dangling ones without deleting authored links." + }, + "1753": { + "node_id": 1804, + "content": "keep room for future non-annotation signals (e.g. import mapping) without schema rework." + }, + "1754": { + "node_id": 1805, + "content": "make annotation-declared repository links traversable and listable instead of plain tag text." + }, + "1755": { + "node_id": 1805, + "content": "target identity is symbolic (namespace, path, symbol); resolved_node_id is derived state that rebuilds change." + }, + "1756": { + "node_id": 1805, + "content": "rows for one source namespace are fully replaced on each build, so no uniqueness constraint is required." + }, + "1759": { + "node_id": 1808, + "content": "centralize call-kind handling for traversal and filtering paths." + }, + "1760": { + "node_id": 1809, + "content": "centralize call-kind handling for traversal and filtering paths." + }, + "1765": { + "node_id": 1814, + "content": "give ranking a key that survives re-indexing, which the node id does not." + }, + "1766": { + "node_id": 1815, + "content": "give ranking a key that survives re-indexing, which the node id does not." + }, + "1767": { + "node_id": 1816, + "content": "read a node's stable identity without repeating which fields make it up." + }, + "1768": { + "node_id": 1817, + "content": "give every layer of search one tie-break, so two layers cannot disagree about who comes first." + }, + "1769": { + "node_id": 1818, + "content": "keep child, file, and parent data in one stable payload for edge resolution." + }, + "177": { + "node_id": 226, + "content": "Exposes stored call flows in a summarized format to aid in exploration and prioritization." + }, + "1770": { + "node_id": 1819, + "content": "keep child, file, and parent data in one stable payload for edge resolution." + }, + "1771": { + "node_id": 1820, + "content": "provide an unambiguous fingerprint contract for inheritance edges across languages." + }, + "1772": { + "node_id": 1821, + "content": "keep resolver compatibility while parsers migrate to the unambiguous inherits fingerprint format." + }, + "1775": { + "node_id": 1824, + "content": "파일 내 선언의 정체성과 위치 정보를 영속화한다." + }, + "1776": { + "node_id": 1825, + "content": "give search one line of author-written purpose to show beside a result." + }, + "1777": { + "node_id": 1826, + "content": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to." + }, + "1778": { + "node_id": 1828, + "content": "bound cache growth per active source path while validating the complete semantic cache identity." + }, + "1779": { + "node_id": 1830, + "content": "let runtime commands fail fast when explicit migrations were not run." + }, + "178": { + "node_id": 227, + "content": "describe flow-membership freshness so callers know when to re-run postprocess." + }, + "1780": { + "node_id": 1831, + "content": "keep runtime schema checks aligned with explicit migration bookkeeping." + }, + "1784": { + "node_id": 1836, + "content": "let newly added symbols select affected unchanged callers without reparsing the whole graph." + }, + "1785": { + "node_id": 1837, + "content": "keep unresolved storage separate from traversable graph edges while reusing the resolver contract." + }, + "1786": { + "node_id": 1838, + "content": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut." + }, + "1787": { + "node_id": 1840, + "content": "represent cross-namespace @see links without coupling annotations to graph storage." + }, + "1788": { + "node_id": 1841, + "content": "let callers branch between local @see values and cross-namespace CCG refs cheaply." + }, + "1789": { + "node_id": 1842, + "content": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations." + }, + "179": { + "node_id": 228, + "content": "merge community and flow freshness hints into a single derived-state map for status responses." + }, + "1790": { + "node_id": 1842, + "content": "namespace is required and must be a single safe path segment." + }, + "1791": { + "node_id": 1842, + "content": "path and symbol are optional; a path with no symbol represents a file or package path." + }, + "1792": { + "node_id": 1843, + "content": "shorten ccg refs while preserving namespace, path, and symbol identity." + }, + "1793": { + "node_id": 1844, + "content": "reject namespace values that could escape namespace storage roots." + }, + "1794": { + "node_id": 1845, + "content": "normalize the URI path part into the same slash-separated file paths used by graph nodes." + }, + "1795": { + "node_id": 1846, + "content": "classify refs for clients that want to render namespace, path, and symbol scopes differently." + }, + "1796": { + "node_id": 1847, + "content": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution." + }, + "1797": { + "node_id": 1848, + "content": "provide one deterministic import-reference similarity score for graph lookup and ingest resolution." + }, + "1799": { + "node_id": 1851, + "content": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다." + }, + "180": { + "node_id": 230, + "content": "give list_namespaces a typed row for the distinct-namespace aggregate." + }, + "1800": { + "node_id": 1852, + "content": "endpoint 유무에 따라 local-only tracing 또는 OTLP export tracing을 초기화한다." + }, + "1802": { + "node_id": 1854, + "content": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다." + }, + "1805": { + "node_id": 1857, + "content": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다." + }, + "1806": { + "node_id": 1858, + "content": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다." + }, + "1807": { + "node_id": 1859, + "content": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다." + }, + "1808": { + "node_id": 1860, + "content": "HTTP 요청의 traceparent와 baggage를 downstream span 시작에 연결한다." + }, + "1809": { + "node_id": 1861, + "content": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다." + }, + "181": { + "node_id": 231, + "content": "report which namespaces contain graph data so callers can scope later queries." + }, + "1810": { + "node_id": 1862, + "content": "런타임 내부 작업을 현재 trace 아래 새 span으로 감싼다." + }, + "1812": { + "node_id": 1864, + "content": "span이 있는 컨텍스트를 slog 필드(trace_id, span_id, sampled)로 바꾼다." + }, + "1814": { + "node_id": 1866, + "content": "service name 같은 설정값이 비었을 때 안정적인 기본값을 사용하게 한다." + }, + "1816": { + "node_id": 1868, + "content": "슬래시가 없는 패턴은 파일 basename에만 매칭한다." + }, + "1818": { + "node_id": 1870, + "content": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors." + }, + "1819": { + "node_id": 1871, + "content": "compare include path scopes after normalization so callers can test path containment reliably." + }, + "182": { + "node_id": 232, + "content": "let agents discover available namespaces before scoping search or graph queries." + }, + "1820": { + "node_id": 1872, + "content": "guarantee comparisons treat \"./foo\", \"foo\", and \"foo/\" as the same logical path." + }, + "1821": { + "node_id": 1874, + "content": "share one MCP assembly path without making the MCP runtime import its parent composition package." + }, + "1822": { + "node_id": 1875, + "content": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code." + }, + "1823": { + "node_id": 1876, + "content": "share MCP server construction while keeping stdio and HTTP transports in separate packages." + }, + "1824": { + "node_id": 1877, + "content": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary." + }, + "1825": { + "node_id": 1878, + "content": "provide one idempotent cleanup path for transport-specific runners." + }, + "1826": { + "node_id": 1879, + "content": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code." + }, + "1827": { + "node_id": 1880, + "content": "let graph updates invalidate shared MCP cache without coupling to transport packages." + }, + "1828": { + "node_id": 1882, + "content": "keep all remote runtime construction outside inbound adapters and the local ccg binary." + }, + "1829": { + "node_id": 1883, + "content": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook." + }, + "183": { + "node_id": 234, + "content": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format." + }, + "1830": { + "node_id": 1885, + "content": "provide one dependency assembly path for local CLI and self-hosted server binaries." + }, + "1831": { + "node_id": 1886, + "content": "initialize parser walkers once before command-specific database setup runs." + }, + "1832": { + "node_id": 1887, + "content": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters." + }, + "1833": { + "node_id": 1888, + "content": "keep schema validation and graph storage wiring identical across ccg and ccg-server." + }, + "1834": { + "node_id": 1889, + "content": "expose migration execution without coupling binaries to migration internals." + }, + "1835": { + "node_id": 1890, + "content": "give both binaries one cleanup path for shared dependencies." + }, + "1836": { + "node_id": 1891, + "content": "register supported language walkers for build, update, and MCP execution paths." + }, + "1837": { + "node_id": 1892, + "content": "keep language specs and extension aliases together during registry initialization." + }, + "1838": { + "node_id": 1893, + "content": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards." + }, + "1839": { + "node_id": 1893, + "content": "namespace must be one safe segment; filePath must be relative and free of parent references." + }, + "184": { + "node_id": 235, + "content": "serialize run_postprocess results with a fixed JSON schema without changing the wire format." + }, + "1840": { + "node_id": 1894, + "content": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards." + }, + "1841": { + "node_id": 1894, + "content": "namespace must be one safe segment; filePath must be relative and free of parent references." + }, + "1842": { + "node_id": 1896, + "content": "prevent symlink traversal from escaping a trusted root before any filesystem mutation." + }, + "1843": { + "node_id": 1897, + "content": "normalize user-supplied paths before containment comparison to prevent symlink-based escapes." + }, + "1844": { + "node_id": 1898, + "content": "detect path traversal by checking the relative path does not escape upward." + }, + "1845": { + "node_id": 1900, + "content": "identify the current OS and CPU architecture for picking the matching ccg release asset." + }, + "1846": { + "node_id": 1901, + "content": "map the current platform key to the published ccg release asset name and abort if unsupported." + }, + "1847": { + "node_id": 1902, + "content": "build the GitHub release download URL for the current ccg version and platform archive." + }, + "1848": { + "node_id": 1903, + "content": "recursively follow HTTP redirects while downloading the release archive." + }, + "1849": { + "node_id": 1904, + "content": "fetch a release archive over HTTPS while transparently following redirects." + }, + "185": { + "node_id": 236, + "content": "refresh search documents through the injected override, defaulting to the service impl." + }, + "1850": { + "node_id": 1905, + "content": "move one extracted executable into the stable npm package bin path." + }, + "1851": { + "node_id": 1906, + "content": "download and extract platform-specific ccg and ccg-server binaries into the npm package bin directory during install." + }, + "1852": { + "node_id": 1909, + "content": "keep the minimal tree/search item data needed by the document viewer and context tray." + }, + "1853": { + "node_id": 1910, + "content": "preserve the tree nodes that caused a Retrieve result to rank." + }, + "1854": { + "node_id": 1911, + "content": "constrain the Wiki search control to keyword tree search or DB-backed retrieval." + }, + "1855": { + "node_id": 1912, + "content": "switch the center work area between generated docs and the visual edge graph." + }, + "1856": { + "node_id": 1913, + "content": "reload namespace choices and recover from token changes." + }, + "1857": { + "node_id": 1914, + "content": "load the active namespace's RAG tree into the left navigator." + }, + "1858": { + "node_id": 1915, + "content": "load one expanded tree node on demand so the sidebar avoids fetching the full namespace tree." + }, + "1859": { + "node_id": 1916, + "content": "open a selected tree/search item in the Markdown viewer." + }, + "186": { + "node_id": 237, + "content": "apply per-request parse limits without mutating the shared handler dependency configuration." + }, + "1860": { + "node_id": 1917, + "content": "open a selected item from a specific namespace without waiting for state propagation." + }, + "1861": { + "node_id": 1918, + "content": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details." + }, + "1862": { + "node_id": 1919, + "content": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available." + }, + "1863": { + "node_id": 1920, + "content": "update search results for the active namespace." + }, + "1864": { + "node_id": 1921, + "content": "copy selected docs or summaries as one LLM-ready Markdown context block." + }, + "1866": { + "node_id": 1923, + "content": "add a file or symbol summary to the context tray without duplicates." + }, + "1867": { + "node_id": 1924, + "content": "remove one context tray item by its stable path/label pair." + }, + "1868": { + "node_id": 1925, + "content": "open a force-graph node through the same document/symbol viewer used by the tree." + }, + "187": { + "node_id": 238, + "content": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request." + }, + "1870": { + "node_id": 1927, + "content": "expand one tree row by fetching children only when the user opens that node." + }, + "1871": { + "node_id": 1929, + "content": "configure the namespace graph viewer, focused ccg ref node navigation, and node-open callback." + }, + "1872": { + "node_id": 1930, + "content": "extend graph API nodes with a numeric value used by the force layout." + }, + "1873": { + "node_id": 1931, + "content": "allow force-graph to replace link endpoints with resolved node objects after simulation starts." + }, + "1874": { + "node_id": 1932, + "content": "keep the canvas dimensions synchronized with the available center panel space." + }, + "1875": { + "node_id": 1933, + "content": "refresh graph data when namespace or token changes." + }, + "1876": { + "node_id": 1934, + "content": "decide whether an edge kind should be visible under the active graph filters." + }, + "1877": { + "node_id": 1935, + "content": "spread dense CCG graphs enough that zooming creates readable separation between nodes." + }, + "1878": { + "node_id": 1936, + "content": "center and zoom the graph around a resolved ccg:// reference destination." + }, + "1879": { + "node_id": 1937, + "content": "describe one node in the Wiki RAG tree returned by ccg-server." + }, + "188": { + "node_id": 239, + "content": "Loads the entire project into the graph store using a simple parsing tool." + }, + "1880": { + "node_id": 1938, + "content": "describe one node in the Wiki RAG tree returned by ccg-server." + }, + "1881": { + "node_id": 1939, + "content": "expose structured symbol metadata returned by DB-backed or snapshot-backed Wiki trees." + }, + "1882": { + "node_id": 1940, + "content": "carry annotation summary and tags for symbol detail rendering." + }, + "1883": { + "node_id": 1941, + "content": "mirror one CCG annotation tag in the browser API type system." + }, + "1884": { + "node_id": 1942, + "content": "describe a parsed ccg:// cross-namespace reference attached to @see annotations." + }, + "1885": { + "node_id": 1943, + "content": "carry a namespace-scoped RAG tree payload from the Wiki API." + }, + "1886": { + "node_id": 1944, + "content": "represent a tree search hit that can be opened or added to LLM context." + }, + "1887": { + "node_id": 1945, + "content": "represent one DB-backed retrieval result with structured graph and annotation evidence." + }, + "1888": { + "node_id": 1946, + "content": "describe one graph database node exposed to the Wiki graph viewer." + }, + "1889": { + "node_id": 1947, + "content": "describe one graph database edge exposed to the Wiki graph viewer." + }, + "189": { + "node_id": 240, + "content": "Synchronizes the code graph to the latest state and performs search and community post-processing." + }, + "1890": { + "node_id": 1948, + "content": "carry bounded namespace graph data for the visual graph tab." + }, + "1891": { + "node_id": 1949, + "content": "return generated Markdown content for one documentation path." + }, + "1892": { + "node_id": 1950, + "content": "describe the Wiki and graph destination resolved from one ccg:// ref." + }, + "1893": { + "node_id": 1951, + "content": "return the parsed ref plus the browser navigation target for a ccg:// link." + }, + "1894": { + "node_id": 1952, + "content": "return a server-assembled Markdown bundle for selected docs." + }, + "1895": { + "node_id": 1953, + "content": "preserve HTTP status alongside user-facing Wiki API errors." + }, + "1896": { + "node_id": 1954, + "content": "attach the HTTP status to a normal Error instance." + }, + "1897": { + "node_id": 1955, + "content": "apply bearer auth and consistent JSON error handling to Wiki API calls." + }, + "1898": { + "node_id": 1956, + "content": "load namespaces available to the Wiki selector." + }, + "1899": { + "node_id": 1957, + "content": "describe a bounded Wiki tree request used for lazy folder expansion." + }, + "19": { + "node_id": 75, + "content": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다." + }, + "190": { + "node_id": 240, + "content": "Always performs a full rebuild if the incremental syncer is not available." + }, + "1900": { + "node_id": 1958, + "content": "load the RAG tree or a bounded subtree for the active namespace." + }, + "1901": { + "node_id": 1959, + "content": "load generated Markdown for the selected tree item." + }, + "1902": { + "node_id": 1960, + "content": "resolve a ccg:// annotation reference for Wiki doc navigation and graph focus." + }, + "1903": { + "node_id": 1961, + "content": "search the active namespace's RAG tree by label and summary." + }, + "1904": { + "node_id": 1962, + "content": "retrieve ranked generated docs using DB-backed graph and annotation evidence." + }, + "1905": { + "node_id": 1963, + "content": "load a bounded namespace graph for the visual graph tab." + }, + "1906": { + "node_id": 1964, + "content": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block." + }, + "191": { + "node_id": 241, + "content": "Independently regenerates communities and search indexes from existing graph data and reports availability for flow bulk rebuilds." + }, + "192": { + "node_id": 242, + "content": "restrict parse and build requests to configured analysis roots before filesystem traversal begins." + }, + "193": { + "node_id": 242, + "content": "only paths contained in configured analysis roots may be parsed or rebuilt." + }, + "194": { + "node_id": 243, + "content": "append values to a slice while preserving uniqueness for skipped-step reporting." + }, + "195": { + "node_id": 245, + "content": "expose annotation tags with typed fields for getAnnotation callers." + }, + "196": { + "node_id": 246, + "content": "preserve a stable response envelope for annotation summary, context, and tags." + }, + "197": { + "node_id": 247, + "content": "expose edge location details that justify caller/callee confidence labels." + }, + "198": { + "node_id": 248, + "content": "preserve a stable DTO for paged graph traversal results." + }, + "199": { + "node_id": 249, + "content": "explain result counts, truncation, and strict-versus-tentative composition in queryGraph responses." + }, + "2": { + "node_id": 60, + "content": "run the self-hosted HTTP MCP/webhook server as a dedicated binary." + }, + "20": { + "node_id": 75, + "content": "--project와 --user는 동시에 사용할 수 없다." + }, + "200": { + "node_id": 250, + "content": "preserve a stable response envelope for predefined graph traversals and their evidence." + }, + "201": { + "node_id": 251, + "content": "label per-namespace payloads and isolate per-namespace failures in federated reads." + }, + "203": { + "node_id": 253, + "content": "preserve a stable typed JSON response for graph statistics without changing the wire format." + }, + "204": { + "node_id": 254, + "content": "look up a node by qualified name so callers can retrieve its core identity and location metadata." + }, + "205": { + "node_id": 255, + "content": "search graph nodes efficiently by keyword and optional path prefix filtering." + }, + "206": { + "node_id": 256, + "content": "answer one search across several repositories with per-item namespace labels." + }, + "207": { + "node_id": 256, + "content": "each namespace is queried in isolation; every namespace's hits keep their own backend rank when fused." + }, + "208": { + "node_id": 257, + "content": "fetch stored annotation tags and summary data so semantic search results can show business context." + }, + "209": { + "node_id": 258, + "content": "expose repeated graph traversals through one pattern-driven tool entry point." + }, + "21": { + "node_id": 76, + "content": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다." + }, + "210": { + "node_id": 258, + "content": "pattern must belong to the predefined query set." + }, + "211": { + "node_id": 259, + "content": "group per-namespace traversal outcomes under one envelope with per-namespace errors." + }, + "212": { + "node_id": 260, + "content": "keep federated traversal per-namespace so a missing target in one namespace never fails the rest." + }, + "213": { + "node_id": 261, + "content": "share one traversal implementation between single-namespace and federated query_graph calls." + }, + "214": { + "node_id": 262, + "content": "limit evidence lookup to the response page to avoid scanning full graph." + }, + "215": { + "node_id": 263, + "content": "summarize the current graph load state with kind and language distributions." + }, + "216": { + "node_id": 264, + "content": "share one statistics assembly between single-namespace and federated calls." + }, + "217": { + "node_id": 265, + "content": "keep per-namespace statistics separable instead of summing unrelated graphs." + }, + "218": { + "node_id": 266, + "content": "give one call visibility over several repositories without merging their counts." + }, + "219": { + "node_id": 267, + "content": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination." + }, + "22": { + "node_id": 76, + "content": "--project와 --user는 동시에 사용할 수 없다." + }, + "220": { + "node_id": 268, + "content": "compress ambiguous short-symbol matches into one line so callers can choose the intended node." + }, + "221": { + "node_id": 270, + "content": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract." + }, + "222": { + "node_id": 271, + "content": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache." + }, + "223": { + "node_id": 272, + "content": "give handlers a consistent logging interface without repeating nil checks." + }, + "224": { + "node_id": 273, + "content": "attach the requested namespace to context before downstream stores and analyzers run." + }, + "225": { + "node_id": 274, + "content": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped." + }, + "226": { + "node_id": 274, + "content": "namespace values are normalized before key generation." + }, + "227": { + "node_id": 275, + "content": "prefer an explicit request namespace while falling back to the namespace already carried on context." + }, + "228": { + "node_id": 275, + "content": "an explicit request namespace always overrides the namespace already on context." + }, + "229": { + "node_id": 276, + "content": "read the canonical namespace isolation argument." + }, + "23": { + "node_id": 77, + "content": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다." + }, + "230": { + "node_id": 277, + "content": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched." + }, + "231": { + "node_id": 277, + "content": "values are normalized and deduplicated; an empty selection means single-namespace mode." + }, + "232": { + "node_id": 278, + "content": "turn request parameters into a stable string key so tool-result caching can reuse previous responses." + }, + "233": { + "node_id": 279, + "content": "serialize handler payloads into a stable JSON string for MCP responses and cache keys." + }, + "234": { + "node_id": 280, + "content": "preserve the MCP error response that should be returned to the user inside normal Go error flow." + }, + "236": { + "node_id": 282, + "content": "propagate tool failures upward together with the MCP error response that should be shown to callers." + }, + "237": { + "node_id": 283, + "content": "convert missing required parameters into one consistent user-input error response." + }, + "238": { + "node_id": 284, + "content": "reuse one consistent node-not-found message across handlers." + }, + "239": { + "node_id": 285, + "content": "reject zero and negative list limits before handlers hit database queries." + }, + "240": { + "node_id": 286, + "content": "let a caller who mistyped an offset read what went wrong instead of a transport failure." + }, + "241": { + "node_id": 287, + "content": "recover user-facing MCP tool results from the internal error flow at one shared exit point." + }, + "242": { + "node_id": 288, + "content": "normalize success strings and user-facing tool errors at one common handler exit path." + }, + "243": { + "node_id": 289, + "content": "reuse one typed node representation across multiple tool responses." + }, + "244": { + "node_id": 289, + "content": "Namespace is set only by cross-namespace analysis so existing responses keep their wire format." + }, + "245": { + "node_id": 290, + "content": "reuse one typed node representation across multiple tool responses." + }, + "246": { + "node_id": 292, + "content": "cap request memory usage before MCP handlers allocate or parse large request bodies." + }, + "247": { + "node_id": 294, + "content": "give namespace path resolution one shared root, defaulting to \"namespaces\"." + }, + "248": { + "node_id": 295, + "content": "resolve namespace paths under a trusted, real filesystem location." + }, + "249": { + "node_id": 296, + "content": "reject path traversal and symlink escapes before any namespace-scoped filesystem read." + }, + "25": { + "node_id": 78, + "content": "\"deadref\" and \"drifted\" are accepted aliases for \"dead-ref\" and \"drift\"" + }, + "250": { + "node_id": 297, + "content": "keep namespace path validation in one place shared across handler files." + }, + "251": { + "node_id": 298, + "content": "prevent symlink traversal from escaping the namespace root before a read." + }, + "252": { + "node_id": 300, + "content": "Groups dependencies so prompt handlers can reuse the shared database and analyzers." + }, + "254": { + "node_id": 302, + "content": "Provides a single view of high-risk functions before reviewing changes." + }, + "255": { + "node_id": 303, + "content": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description." + }, + "256": { + "node_id": 304, + "content": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions." + }, + "257": { + "node_id": 305, + "content": "sort language counts without exposing a transport type to application ports." + }, + "258": { + "node_id": 306, + "content": "Consolidates merge-time check items into a single prompt to assist with pre-release verification." + }, + "259": { + "node_id": 307, + "content": "clamp the optional prompt limit argument to the handler's hard cap." + }, + "260": { + "node_id": 307, + "content": "invalid or non-positive prompt limits fall back to the section default instead of failing the prompt." + }, + "262": { + "node_id": 308, + "content": "prompt truncation messages show how many items were rendered, not an expensive total count." + }, + "264": { + "node_id": 310, + "content": "Enables prompt handlers to generate consistent user message responses from plain strings." + }, + "265": { + "node_id": 311, + "content": "pick the namespace for a prompt invocation, preferring an explicit argument over context." + }, + "266": { + "node_id": 312, + "content": "resolve the on-disk root used to validate prompt repo paths, falling back to the namespace default." + }, + "267": { + "node_id": 314, + "content": "package common review, onboarding, and debugging flows into reusable server prompts." + }, + "268": { + "node_id": 316, + "content": "Configures a server instance that exposes code graph features as MCP tools and prompts." + }, + "269": { + "node_id": 318, + "content": "keep analysis capabilities grouped so server startup can expose them consistently." + }, + "27": { + "node_id": 79, + "content": "\"deadref\" and \"drifted\" are accepted aliases for \"dead-ref\" and \"drift\"" + }, + "270": { + "node_id": 320, + "content": "keep the context-oriented MCP surface grouped and reusable during server startup." + }, + "271": { + "node_id": 322, + "content": "keep documentation retrieval flows discoverable as one MCP tool family." + }, + "272": { + "node_id": 324, + "content": "expose high-level graph inspection separately from low-level query primitives." + }, + "273": { + "node_id": 326, + "content": "keep parsing and postprocess entry points available as one operational tool family." + }, + "274": { + "node_id": 328, + "content": "give every namespace-aware MCP tool the same isolation parameter." + }, + "275": { + "node_id": 329, + "content": "let federated read tools accept an explicit namespace set alongside the canonical single namespace." + }, + "276": { + "node_id": 330, + "content": "expose reusable graph query primitives that other prompts and agents can compose." + }, + "277": { + "node_id": 332, + "content": "centralize tool registration order so new tool families plug into one startup path." + }, + "278": { + "node_id": 334, + "content": "define the callback signature webhook intake invokes to trigger repository sync." + }, + "279": { + "node_id": 335, + "content": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler." + }, + "28": { + "node_id": 80, + "content": "determine if a single ignore rule covers a specific lint finding" + }, + "280": { + "node_id": 336, + "content": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch." + }, + "281": { + "node_id": 337, + "content": "keep the default construction path small while routing all configuration through the shared config builder." + }, + "282": { + "node_id": 338, + "content": "preserve older call sites while the config-based constructor owns the actual assembly logic." + }, + "283": { + "node_id": 339, + "content": "make webhook intake configurable without duplicating constructor logic across CLI and tests." + }, + "284": { + "node_id": 340, + "content": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch." + }, + "285": { + "node_id": 341, + "content": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline." + }, + "286": { + "node_id": 341, + "content": "only signed push events for allowed repository/branch pairs are dispatched." + }, + "287": { + "node_id": 342, + "content": "authenticate webhook payloads before the sync pipeline trusts their repository metadata." + }, + "289": { + "node_id": 343, + "content": "skip webhook pushes that only report branch deletion instead of a syncable commit head." + }, + "29": { + "node_id": 80, + "content": "only rules with action \"ignore\" and a non-empty pattern are evaluated" + }, + "290": { + "node_id": 345, + "content": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data." + }, + "291": { + "node_id": 346, + "content": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers." + }, + "292": { + "node_id": 347, + "content": "fail server startup early when --wiki-dir points at an unusable dist directory." + }, + "293": { + "node_id": 348, + "content": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary." + }, + "294": { + "node_id": 349, + "content": "provide browser-friendly access to namespaces, Wiki trees, docs, search, and copied context." + }, + "295": { + "node_id": 350, + "content": "resolve a request path under the static dist directory without allowing traversal." + }, + "296": { + "node_id": 351, + "content": "return namespaces discovered from graph data." + }, + "297": { + "node_id": 352, + "content": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads." + }, + "298": { + "node_id": 353, + "content": "search Wiki tree labels and summaries for the active namespace." + }, + "299": { + "node_id": 354, + "content": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract." + }, + "3": { + "node_id": 61, + "content": "keep self-hosted server flags separate from the local ccg CLI." + }, + "30": { + "node_id": 80, + "content": "category matching is case-insensitive and alias-normalized before comparison" + }, + "300": { + "node_id": 355, + "content": "read DB fallback document content without crossing from a named namespace into shared/global docs roots." + }, + "301": { + "node_id": 355, + "content": "named namespace doc fallback must omit content rather than read another namespace's generated Markdown." + }, + "302": { + "node_id": 356, + "content": "return a bounded namespace graph for the browser force-directed graph viewer." + }, + "303": { + "node_id": 357, + "content": "read one generated Markdown document for display in the Wiki viewer." + }, + "304": { + "node_id": 358, + "content": "resolve a ccg:// annotation reference to a Wiki target and optional graph node." + }, + "305": { + "node_id": 359, + "content": "assemble selected docs or summaries into one Markdown block for LLM context." + }, + "306": { + "node_id": 360, + "content": "load a Wiki tree from DB rows for browser navigation and return built_at metadata." + }, + "307": { + "node_id": 361, + "content": "build one bounded Wiki tree range from DB rows for lazy browser navigation." + }, + "308": { + "node_id": 362, + "content": "enforce doc size limits before returning generated Markdown content." + }, + "309": { + "node_id": 363, + "content": "read a generated doc path from one explicit root with the standard Wiki size limit." + }, + "31": { + "node_id": 81, + "content": "strip suppressed findings before display and strict-mode counting" + }, + "310": { + "node_id": 364, + "content": "resolve a generated doc path under approved docs, RAG, or namespace roots." + }, + "311": { + "node_id": 364, + "content": "the working directory is only searched through its docs/ subtree; arbitrary\nrepository files (config, source, secrets) must never be readable through the doc API." + }, + "312": { + "node_id": 365, + "content": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination." + }, + "313": { + "node_id": 366, + "content": "keep the browser contract stable while the answer behind it changes pipelines." + }, + "314": { + "node_id": 367, + "content": "show a file through the reasons its declarations gave, not just its path." + }, + "315": { + "node_id": 368, + "content": "decode selected Wiki document paths from the context-copy request body." + }, + "316": { + "node_id": 369, + "content": "report whether one requested context item was found in docs or tree summaries." + }, + "317": { + "node_id": 370, + "content": "return the assembled Markdown and per-item resolution status." + }, + "318": { + "node_id": 371, + "content": "return the resolved Wiki navigation target for one ccg:// ref." + }, + "319": { + "node_id": 372, + "content": "describe the doc and graph destinations available for a resolved ccg:// ref." + }, + "32": { + "node_id": 82, + "content": "compute the strict-mode failure count against an explicit rule set" + }, + "320": { + "node_id": 373, + "content": "describe one graph node in the Wiki force graph API." + }, + "321": { + "node_id": 374, + "content": "describe one directed graph edge in the Wiki force graph API." + }, + "322": { + "node_id": 375, + "content": "return bounded graph data and truncation metadata to the Wiki UI." + }, + "323": { + "node_id": 376, + "content": "keep annotation Markdown output stable while preserving original tag ordering by first label occurrence." + }, + "324": { + "node_id": 377, + "content": "map application graph-view stages back to the established Wiki HTTP error contract." + }, + "325": { + "node_id": 378, + "content": "convert persisted graph node metadata into a browser graph payload." + }, + "326": { + "node_id": 379, + "content": "convert persisted edge metadata into a stable browser graph edge payload." + }, + "327": { + "node_id": 380, + "content": "convert repository-relative source paths to their generated Markdown doc path." + }, + "328": { + "node_id": 381, + "content": "enforce generated doc size limits and read the resolved Markdown file." + }, + "329": { + "node_id": 382, + "content": "find a tree node by its generated doc_path value." + }, + "330": { + "node_id": 383, + "content": "locate the Wiki tree node that best matches a parsed ccg:// ref." + }, + "331": { + "node_id": 384, + "content": "compare a ccg:// path/symbol target against one Wiki tree node." + }, + "332": { + "node_id": 385, + "content": "merge tree and graph matches into one browser navigation payload." + }, + "333": { + "node_id": 386, + "content": "convert a stored annotation into the same details shape used by wiki-index.json." + }, + "334": { + "node_id": 387, + "content": "match ccg:// file paths against graph and Wiki slash-separated paths." + }, + "335": { + "node_id": 388, + "content": "allow short symbol refs to match names and language-qualified names." + }, + "336": { + "node_id": 389, + "content": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists." + }, + "337": { + "node_id": 390, + "content": "group fallback child nodes into stable sections that the Wiki visual renderer can cardify." + }, + "338": { + "node_id": 391, + "content": "map graph node kinds to generated docs section names for DB-backed Wiki fallback." + }, + "339": { + "node_id": 392, + "content": "render one fallback tree child in the same symbol-card Markdown shape as generated docs." + }, + "340": { + "node_id": 393, + "content": "format annotation tags into labels already understood by the Wiki generated-doc renderer." + }, + "341": { + "node_id": 394, + "content": "preserve annotation tag name/type context in fallback Markdown without exposing raw JSON." + }, + "342": { + "node_id": 395, + "content": "format @param tags consistently with browser-side generated doc fallback." + }, + "343": { + "node_id": 396, + "content": "keep fallback Markdown attributes single-line so the visual parser can read them predictably." + }, + "344": { + "node_id": 397, + "content": "format graph node source ranges for generated-doc-compatible fallback Markdown." + }, + "345": { + "node_id": 398, + "content": "normalize and validate the namespace query parameter shared by Wiki API endpoints." + }, + "346": { + "node_id": 399, + "content": "keep namespace path validation aligned with namespace filesystem rules." + }, + "347": { + "node_id": 400, + "content": "parse the optional edge_kinds filter for the Wiki graph API." + }, + "348": { + "node_id": 401, + "content": "parse bounded integer query parameters for lightweight API pagination and tree depth." + }, + "349": { + "node_id": 402, + "content": "reject unsupported HTTP methods with a consistent status code." + }, + "35": { + "node_id": 84, + "content": "handle the multiple concrete types viper may return for a YAML sequence" + }, + "351": { + "node_id": 404, + "content": "write a compact JSON error payload for browser API callers." + }, + "352": { + "node_id": 405, + "content": "map filesystem and validation failures to browser-appropriate HTTP status codes." + }, + "353": { + "node_id": 406, + "content": "resolve a relative path under one root while rejecting traversal and symlink escapes." + }, + "354": { + "node_id": 407, + "content": "validate an absolute wiki-index path against one approved root." + }, + "355": { + "node_id": 408, + "content": "resolve an allowed root to an absolute symlink-aware path for containment checks." + }, + "356": { + "node_id": 409, + "content": "resolve and validate an existing static asset directory." + }, + "357": { + "node_id": 410, + "content": "adapt repository include and exclude configuration parsing to the reposync application port." + }, + "358": { + "node_id": 411, + "content": "adapt repository include and exclude configuration parsing to the reposync application port." + }, + "359": { + "node_id": 412, + "content": "own repository build scope configuration I/O for webhook synchronization." + }, + "360": { + "node_id": 414, + "content": "centralize containment, symlink rejection, and atomic replacement for generated docs." + }, + "361": { + "node_id": 415, + "content": "prevent application policy from handling absolute output paths." + }, + "362": { + "node_id": 416, + "content": "resolve a relative generated path only when every existing component remains inside the configured root and is not a symlink." + }, + "363": { + "node_id": 417, + "content": "fail generation preflight before any output when a path could escape or traverse a symlink." + }, + "364": { + "node_id": 418, + "content": "support manifest and managed-file policy without exposing absolute paths." + }, + "365": { + "node_id": 419, + "content": "persist generated output only after safe-root validation and durable temporary-file completion." + }, + "366": { + "node_id": 420, + "content": "prune only the relative generated path selected by application manifest policy." + }, + "367": { + "node_id": 420, + "content": "missing files are treated as an already-complete prune." + }, + "368": { + "node_id": 421, + "content": "let docs lint compare source and generated timestamps through a narrow port." + }, + "369": { + "node_id": 422, + "content": "provide default-namespace lint fallback when no manifest exists." + }, + "37": { + "node_id": 85, + "content": "normalize heterogeneous viper/YAML map representations into a single lintRule struct" + }, + "370": { + "node_id": 423, + "content": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior." + }, + "371": { + "node_id": 425, + "content": "prevent readers from observing partial built-in Wiki index snapshots." + }, + "372": { + "node_id": 426, + "content": "preserve the default .ccg output root while allowing CLI-configured state paths." + }, + "373": { + "node_id": 427, + "content": "map default and validated single-segment namespaces to their compatibility snapshot location." + }, + "374": { + "node_id": 428, + "content": "preserve the versioned built-in Wiki snapshot format at its namespace-specific path." + }, + "375": { + "node_id": 429, + "content": "round-trip compatibility fixtures and fallback readers through the outbound file adapter." + }, + "376": { + "node_id": 430, + "content": "provide GitClient behavior using the local git executable" + }, + "377": { + "node_id": 431, + "content": "provide GitClient behavior using the local git executable" + }, + "378": { + "node_id": 432, + "content": "construct a GitClient that reads diffs from the local repository" + }, + "379": { + "node_id": 433, + "content": "identify which repository paths changed since a base revision" + }, + "380": { + "node_id": 434, + "content": "map git diff output into file-level hunk ranges for overlap analysis" + }, + "381": { + "node_id": 435, + "content": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag." + }, + "382": { + "node_id": 436, + "content": "share a single bounded git invocation helper across diff operations" + }, + "383": { + "node_id": 437, + "content": "prevent runaway git output from exhausting memory while preserving original errors" + }, + "384": { + "node_id": 438, + "content": "decode git hunk metadata into line numbers usable for overlap checks" + }, + "385": { + "node_id": 440, + "content": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch." + }, + "386": { + "node_id": 441, + "content": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites." + }, + "387": { + "node_id": 441, + "content": "prefer SSHKeyPath first, then inline SSHKeyData, then InstallToken, and return nil auth if none are configured." + }, + "388": { + "node_id": 442, + "content": "mint the app identity token needed to exchange for installation-scoped repository access." + }, + "390": { + "node_id": 444, + "content": "expose one locked checkout capability while retaining go-git types inside the adapter." + }, + "391": { + "node_id": 445, + "content": "bind repository root, lock coordination, and transport authentication once at composition." + }, + "392": { + "node_id": 446, + "content": "make the requested namespace checkout match the admitted remote branch before graph update." + }, + "393": { + "node_id": 447, + "content": "keep repository-scoped git operations serialized across concurrent webhook deliveries." + }, + "394": { + "node_id": 448, + "content": "persist enough lock provenance to detect and clean up stale repository lock files safely." + }, + "395": { + "node_id": 449, + "content": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree." + }, + "396": { + "node_id": 450, + "content": "coordinate webhook workers across goroutines and processes before touching a repository checkout." + }, + "397": { + "node_id": 451, + "content": "gate same-process sync attempts for a repository before filesystem locking is attempted." + }, + "398": { + "node_id": 452, + "content": "coordinate repository sync across processes by creating an exclusive lock file under the repo root." + }, + "399": { + "node_id": 453, + "content": "write lock ownership metadata so stale lock cleanup can be diagnosed from the filesystem." + }, + "4": { + "node_id": 62, + "content": "normalize server log-level input consistently with ccg." + }, + "40": { + "node_id": 87, + "content": "carry the pattern, category, and action that determine how a lint finding is handled" + }, + "400": { + "node_id": 454, + "content": "discard abandoned repository lock files after the stale timeout elapses." + }, + "401": { + "node_id": 455, + "content": "convert repository names into stable lock-safe filenames." + }, + "402": { + "node_id": 456, + "content": "keep namespace naming stable across clone, pull, and downstream build steps." + }, + "403": { + "node_id": 457, + "content": "give webhook handlers a branch-agnostic entry point for standard repo refresh." + }, + "404": { + "node_id": 458, + "content": "reuse the same repo sync path for first clone and subsequent updates." + }, + "405": { + "node_id": 459, + "content": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously." + }, + "406": { + "node_id": 460, + "content": "log clone URLs without leaking embedded credentials." + }, + "407": { + "node_id": 461, + "content": "perform the first namespace clone via a temp directory so partially cloned repos are never promoted." + }, + "408": { + "node_id": 462, + "content": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds." + }, + "409": { + "node_id": 463, + "content": "build fetch options that keep sync traffic branch-scoped and shallow when possible." + }, + "41": { + "node_id": 88, + "content": "문서 품질 점검(orphan/missing/stale/annotation)을 하나의 CLI 흐름으로 제공한다." + }, + "410": { + "node_id": 465, + "content": "supply diff-overlap inputs without exposing database filters to change policy." + }, + "411": { + "node_id": 466, + "content": "carry one grouped edge-count projection from GORM into the change-risk repository result." + }, + "412": { + "node_id": 467, + "content": "provide risk-weight inputs through one grouped persistence query." + }, + "413": { + "node_id": 469, + "content": "let impact and flow analysis walk across repository boundaries declared by annotations." + }, + "414": { + "node_id": 469, + "content": "node ids are globally unique, so id-based reads are safe without a namespace filter." + }, + "415": { + "node_id": 470, + "content": "derive the cross-repository read surface from an existing store without new wiring inputs." + }, + "416": { + "node_id": 471, + "content": "satisfy the impact analyzer contract for cross-namespace traversal." + }, + "417": { + "node_id": 472, + "content": "expand traversal frontiers across repository boundaries in one query pair." + }, + "418": { + "node_id": 473, + "content": "satisfy the impact analyzer contract for reverse cross-namespace traversal." + }, + "419": { + "node_id": 474, + "content": "let impact analysis find foreign namespaces that depend on the target nodes." + }, + "42": { + "node_id": 89, + "content": "carry the driver, DSN, and migration source needed for one explicit schema migration run." + }, + "420": { + "node_id": 475, + "content": "resolve traversal frontiers that crossed into another namespace." + }, + "421": { + "node_id": 476, + "content": "load result nodes for cross-namespace traversals in one query." + }, + "422": { + "node_id": 477, + "content": "reuse existing traversal algorithms unchanged by presenting refs as edges." + }, + "423": { + "node_id": 479, + "content": "collect the source facts for rebuilding a namespace's outbound cross refs." + }, + "424": { + "node_id": 480, + "content": "give cross-ref materialization the concrete node identity behind a symbolic reference." + }, + "425": { + "node_id": 480, + "content": "namespace-scope refs resolve with a zero node id when the namespace has any nodes." + }, + "426": { + "node_id": 480, + "content": "path-scope refs prefer the file node of the path; remaining ties resolve to the lowest node id." + }, + "427": { + "node_id": 481, + "content": "make outbound cross-ref state a pure function of the namespace's current annotations." + }, + "428": { + "node_id": 482, + "content": "select the rows whose resolution may change after this namespace rebuilds." + }, + "429": { + "node_id": 482, + "content": "self-namespace refs are excluded because the outbound rebuild already re-resolved them." + }, + "43": { + "node_id": 90, + "content": "carry the driver, DSN, and migration source needed for one explicit schema migration run." + }, + "430": { + "node_id": 483, + "content": "expose a namespace's declared external dependencies for listing and analysis." + }, + "431": { + "node_id": 484, + "content": "remap or invalidate a reference after its target namespace rebuilt." + }, + "432": { + "node_id": 486, + "content": "load documentable nodes and their annotations from one namespace." + }, + "433": { + "node_id": 487, + "content": "load call/import relationships rendered beneath symbol documentation." + }, + "434": { + "node_id": 488, + "content": "validate local @see targets within the active docs namespace." + }, + "435": { + "node_id": 489, + "content": "validate parsed cross-namespace ccg references against graph path and symbol semantics." + }, + "436": { + "node_id": 490, + "content": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree." + }, + "437": { + "node_id": 490, + "content": "a path scope matches the file itself or any file under the path; a symbol scope matches name or qualified-name suffix." + }, + "438": { + "node_id": 492, + "content": "implement the analysis flow unit of work without exposing GORM to application policy." + }, + "439": { + "node_id": 493, + "content": "clear stale flow state before a transaction-scoped rebuild." + }, + "44": { + "node_id": 91, + "content": "separate schema changes from normal runtime startup." + }, + "440": { + "node_id": 494, + "content": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy." + }, + "441": { + "node_id": 494, + "content": "inbound detection includes every kind returned by graph.CallEdgeKinds." + }, + "442": { + "node_id": 495, + "content": "store traced flow aggregates while keeping generated IDs visible to application results." + }, + "443": { + "node_id": 497, + "content": "implement namespace-scoped relationship joins behind the analysis query repository." + }, + "444": { + "node_id": 498, + "content": "supply file-summary inputs without exposing database filtering to app policy." + }, + "445": { + "node_id": 499, + "content": "support exact-name fallback suggestions through the analysis repository." + }, + "446": { + "node_id": 501, + "content": "load one stable global namespace page with node counts." + }, + "447": { + "node_id": 502, + "content": "load one stable namespace-scoped stored-flow page with member counts." + }, + "448": { + "node_id": 503, + "content": "select the strongest call evidence edge for each requested peer node." + }, + "449": { + "node_id": 504, + "content": "map changed nodes to one deterministic page of namespace-scoped stored flows." + }, + "45": { + "node_id": 92, + "content": "resolve migration directory precedence between flag, config, and environment defaults." + }, + "450": { + "node_id": 505, + "content": "count requested nodes without a namespace-scoped tested_by edge." + }, + "451": { + "node_id": 506, + "content": "rank namespace communities by stored membership count." + }, + "452": { + "node_id": 507, + "content": "rank namespace flows by stored membership count." + }, + "454": { + "node_id": 510, + "content": "implement the application statistics port while preserving namespace filtering and aggregate semantics." + }, + "455": { + "node_id": 512, + "content": "implement the graph repository contract through a GORM DB handle." + }, + "456": { + "node_id": 513, + "content": "initialize the GraphStore implementation with the injected DB handle." + }, + "457": { + "node_id": 514, + "content": "prepare the GORM model tables required for graph persistence." + }, + "458": { + "node_id": 515, + "content": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes." + }, + "459": { + "node_id": 516, + "content": "retain one bounded current cache entry per source path instead of accumulating every historical hash." + }, + "46": { + "node_id": 94, + "content": "특정 커맨드나 플래그 설정에 따라 DB 초기화 단계를 건너뛸지 결정한다." + }, + "460": { + "node_id": 517, + "content": "apply parsed result nodes in bulk without creating duplicates." + }, + "461": { + "node_id": 518, + "content": "find one node by the declaration's qualified name." + }, + "462": { + "node_id": 519, + "content": "find one node by its internal identifier." + }, + "464": { + "node_id": 521, + "content": "build a fast lookup map for qualified-name-based reference resolution." + }, + "465": { + "node_id": 522, + "content": "load declarations parsed from a specific source file." + }, + "466": { + "node_id": 523, + "content": "return declarations for a file set grouped by path." + }, + "467": { + "node_id": 524, + "content": "expose namespace-scoped file identity and hash state without leaking the database handle." + }, + "468": { + "node_id": 525, + "content": "let full builds create an in-memory import suffix index without reloading all file nodes per import." + }, + "469": { + "node_id": 526, + "content": "let import edge resolution bind repo-local import paths back to stored file nodes." + }, + "470": { + "node_id": 527, + "content": "keep the single-file API compatible while delegating cleanup to the bounded batch path." + }, + "471": { + "node_id": 527, + "content": "connected edges and annotations must also be removed when deleting a file." + }, + "472": { + "node_id": 528, + "content": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk." + }, + "473": { + "node_id": 528, + "content": "only rows owned by the request namespace and rows connected to its deleted nodes may be removed." + }, + "474": { + "node_id": 529, + "content": "centralize node-dependent cleanup while keeping node IDs inside database subqueries." + }, + "475": { + "node_id": 530, + "content": "replace namespace-scoped state before a full rebuild or include_paths rebuild." + }, + "476": { + "node_id": 530, + "content": "namespace-owned search documents are deleted directly before node-scoped dependent cleanup." + }, + "477": { + "node_id": 531, + "content": "apply graph relationships in bulk without duplicates." + }, + "478": { + "node_id": 531, + "content": "edges with the same fingerprint must be stored only once." + }, + "479": { + "node_id": 532, + "content": "load outbound relationships for a specific declaration." + }, + "480": { + "node_id": 533, + "content": "load outbound relationships for multiple declarations in one call." + }, + "481": { + "node_id": 534, + "content": "load inbound relationships for a specific declaration." + }, + "482": { + "node_id": 535, + "content": "load inbound relationships for multiple declarations in one call." + }, + "483": { + "node_id": 536, + "content": "selectively clean existing relationships during file-scoped updates." + }, + "484": { + "node_id": 537, + "content": "replace stale package semantic relationships without exposing persistence queries to the application layer." + }, + "485": { + "node_id": 537, + "content": "only synthesized implements edges, identified by line zero, are eligible for deletion." + }, + "486": { + "node_id": 538, + "content": "keep the single-annotation API compatible while delegating persistence to the batch path." + }, + "487": { + "node_id": 538, + "content": "only one annotation must be kept per node_id." + }, + "488": { + "node_id": 539, + "content": "collapse per-annotation lookup and write round trips into bounded batch operations." + }, + "489": { + "node_id": 539, + "content": "every node must belong to the request namespace before any annotation in the batch is mutated." + }, + "490": { + "node_id": 540, + "content": "load a node's structured comment and tags together for search and display." + }, + "491": { + "node_id": 541, + "content": "allow multiple repository operations to run atomically as one unit." + }, + "492": { + "node_id": 542, + "content": "let graph persistence and DB-backed derived-state updates share a single transaction." + }, + "493": { + "node_id": 544, + "content": "construct derived-state persistence with the same transaction handle as graph persistence." + }, + "494": { + "node_id": 545, + "content": "coordinate graph and search writes without exposing GORM to application policy." + }, + "495": { + "node_id": 546, + "content": "inject the database transaction owner and transaction-scoped search writer factory." + }, + "496": { + "node_id": 547, + "content": "keep the shared transaction handle private while satisfying the ingest transaction port." + }, + "497": { + "node_id": 548, + "content": "supply transaction-scoped graph operations to the ingest callback." + }, + "498": { + "node_id": 549, + "content": "supply transaction-scoped search operations to the ingest callback." + }, + "499": { + "node_id": 550, + "content": "commit graph and derived search state together or roll both back on any callback error." + }, + "5": { + "node_id": 63, + "content": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다." + }, + "500": { + "node_id": 552, + "content": "retain unresolved syntax candidates until a future symbol addition can resolve them." + }, + "501": { + "node_id": 553, + "content": "use the reverse index to identify affected unchanged source files." + }, + "502": { + "node_id": 554, + "content": "replay import warmup and related edges together after reverse-index selection narrows source files." + }, + "503": { + "node_id": 555, + "content": "keep the reverse index limited to relationships that still lack endpoints." + }, + "504": { + "node_id": 556, + "content": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries." + }, + "505": { + "node_id": 558, + "content": "gate semi-naive update on complete historical unresolved-edge coverage produced by the expected algorithm and parsers." + }, + "506": { + "node_id": 559, + "content": "distinguish a compatible legitimately empty reverse index from stale or uninitialized state." + }, + "507": { + "node_id": 561, + "content": "implement Wiki namespace discovery without exposing persistence to HTTP." + }, + "508": { + "node_id": 562, + "content": "load the stable graph snapshot from which the eager Wiki hierarchy is derived." + }, + "509": { + "node_id": 563, + "content": "load stable path-bearing candidates below one lazy Wiki folder or package." + }, + "51": { + "node_id": 99, + "content": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다." + }, + "510": { + "node_id": 564, + "content": "resolve one stored package or file used as a lazy Wiki root." + }, + "511": { + "node_id": 565, + "content": "resolve the first deterministic symbol match used by direct lazy navigation." + }, + "512": { + "node_id": 566, + "content": "load stable symbol children for one lazy Wiki file node." + }, + "513": { + "node_id": 567, + "content": "batch-load Wiki annotations with deterministic tag ordering." + }, + "514": { + "node_id": 568, + "content": "answer whether a lazy file node has expandable symbol children." + }, + "515": { + "node_id": 569, + "content": "implement the Wiki force-graph read port with deterministic ordering and limits." + }, + "516": { + "node_id": 570, + "content": "resolve Wiki reference navigation while keeping GORM filtering and preload behavior in the outbound adapter." + }, + "518": { + "node_id": 572, + "content": "preserve ingest workflow composition behind the repository sync graph port." + }, + "519": { + "node_id": 573, + "content": "preserve ingest workflow composition behind the repository sync graph port." + }, + "52": { + "node_id": 100, + "content": "config의 namespace 설정이 --namespace 플래그 기본값에 가려지지 않도록 우선순위대로 해석한다." + }, + "520": { + "node_id": 574, + "content": "replace one synchronized repository namespace using the existing incremental ingest contract." + }, + "521": { + "node_id": 576, + "content": "adapt OpenTelemetry spans and trace log fields to reposync observability hooks." + }, + "522": { + "node_id": 577, + "content": "attach repository and branch attributes to app-owned queue operations." + }, + "523": { + "node_id": 578, + "content": "preserve trace correlation fields on repository sync queue logs." + }, + "524": { + "node_id": 580, + "content": "provide one interface for backend-specific search index migration, rebuild, and query operations." + }, + "525": { + "node_id": 581, + "content": "keep the ranked order across the round trip that loads the nodes themselves." + }, + "526": { + "node_id": 583, + "content": "Handles full-text search indexing and querying in a PostgreSQL environment." + }, + "528": { + "node_id": 585, + "content": "give tests and callers a one-call schema setup that reuses the production migrations." + }, + "529": { + "node_id": 586, + "content": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows." + }, + "530": { + "node_id": 587, + "content": "Avoids full namespace tsv updates during incremental update paths." + }, + "531": { + "node_id": 588, + "content": "Aligns with the Backend interface and maintains consistency in the namespace purge path." + }, + "532": { + "node_id": 589, + "content": "decode the single-column tsquery result before joining back to nodes." + }, + "533": { + "node_id": 590, + "content": "let Query run the same retrieval twice with a different expression." + }, + "534": { + "node_id": 591, + "content": "Converts the user's search term into a prefix tsquery to find related nodes." + }, + "535": { + "node_id": 592, + "content": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." + }, + "536": { + "node_id": 594, + "content": "adapt raw SQL backend and GORM operations to app/search read ports." + }, + "537": { + "node_id": 595, + "content": "keep database handles out of application service construction." + }, + "538": { + "node_id": 596, + "content": "implement the bound candidate-search port without exposing a DB argument." + }, + "539": { + "node_id": 597, + "content": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend." + }, + "540": { + "node_id": 598, + "content": "keep the application layer free of the scoring package's types." + }, + "541": { + "node_id": 599, + "content": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\"." + }, + "542": { + "node_id": 600, + "content": "give the scorer the denominator that makes a common word common." + }, + "543": { + "node_id": 602, + "content": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters." + }, + "546": { + "node_id": 603, + "content": "any-term matching is confined to the intent index, which holds no identifier text." + }, + "547": { + "node_id": 604, + "content": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior." + }, + "55": { + "node_id": 103, + "content": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다." + }, + "550": { + "node_id": 605, + "content": "any-term matching is confined to the intent index, which holds no identifier text." + }, + "551": { + "node_id": 606, + "content": "keep prefix expansion the default for the shared search index." + }, + "552": { + "node_id": 607, + "content": "keep a short question word from reaching an identifier spelled inside a recorded reason." + }, + "553": { + "node_id": 607, + "content": "only the intent index narrows a term to an exact match." + }, + "554": { + "node_id": 608, + "content": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax." + }, + "555": { + "node_id": 608, + "content": "camelCase input matches either its whole token or the conjunction of its identifier sub-tokens." + }, + "556": { + "node_id": 609, + "content": "treat only single-identifier queries as eligible for exact-name promotion." + }, + "557": { + "node_id": 609, + "content": "multi-token queries never produce an exact-name promotion target." + }, + "558": { + "node_id": 610, + "content": "move an exact symbol-name hit to the front of search results to improve precision." + }, + "559": { + "node_id": 612, + "content": "Handles full-text search indexing and querying in a SQLite environment." + }, + "560": { + "node_id": 613, + "content": "Provides a Backend implementation specifically for SQLite." + }, + "561": { + "node_id": 614, + "content": "Creates a full-text search index table for SQLite." + }, + "562": { + "node_id": 615, + "content": "give recorded reasons their own index so an intent question is never scored against identifier text." + }, + "563": { + "node_id": 616, + "content": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes." + }, + "564": { + "node_id": 616, + "content": "Index content must match the current snapshot of search_documents and search_reasons." + }, + "565": { + "node_id": 617, + "content": "Avoids full namespace FTS reloading during incremental update paths." + }, + "566": { + "node_id": 618, + "content": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion." + }, + "567": { + "node_id": 619, + "content": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces." + }, + "568": { + "node_id": 620, + "content": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild." + }, + "569": { + "node_id": 621, + "content": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces." + }, + "570": { + "node_id": 622, + "content": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild." + }, + "571": { + "node_id": 623, + "content": "decode the single-column FTS result before joining back to nodes." + }, + "572": { + "node_id": 624, + "content": "let Query run the same retrieval twice with a different expression." + }, + "573": { + "node_id": 625, + "content": "Converts the user's search term into a SQLite FTS prefix query to find nodes." + }, + "574": { + "node_id": 626, + "content": "hand every candidate reason to shared scoring, with the identity that scoring breaks ties on." + }, + "575": { + "node_id": 627, + "content": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot." + }, + "576": { + "node_id": 628, + "content": "push many rows in a single statement so rebuild paths avoid per-row round trips." + }, + "577": { + "node_id": 629, + "content": "push many reasons in a single statement so rebuild paths avoid per-row round trips." + }, + "578": { + "node_id": 630, + "content": "keep the intent index limited to reasons that were actually written down." + }, + "579": { + "node_id": 631, + "content": "create an FTS5 table whose only indexed text is the reason a node exists." + }, + "580": { + "node_id": 632, + "content": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead." + }, + "581": { + "node_id": 633, + "content": "gate schema migrations on actual table layout instead of guessing from version markers." + }, + "582": { + "node_id": 634, + "content": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows." + }, + "583": { + "node_id": 635, + "content": "let migration code branch on table presence without depending on GORM AutoMigrate side effects." + }, + "584": { + "node_id": 637, + "content": "provide a transaction-scoped SearchWriter implementation for ingest unit-of-work adapters." + }, + "585": { + "node_id": 638, + "content": "construct a search writer that can share an ingest transaction with graph persistence." + }, + "587": { + "node_id": 640, + "content": "implement the full derived-search refresh required by a graph build." + }, + "588": { + "node_id": 641, + "content": "implement the first application maintenance stage without exposing the database handle." + }, + "589": { + "node_id": 642, + "content": "implement the second application maintenance stage without exposing backend or database handles." + }, + "59": { + "node_id": 107, + "content": "keep --json output byte-stable and diffable while staying the MCP contract." + }, + "590": { + "node_id": 643, + "content": "implement the incremental derived-search refresh required by graph updates." + }, + "591": { + "node_id": 644, + "content": "keep derived search documents consistent with graph state before FTS rebuilds" + }, + "592": { + "node_id": 645, + "content": "incremental update 경로에서 영향받은 문서만 갱신한다." + }, + "593": { + "node_id": 646, + "content": "regenerate FTS content from the latest nodes and annotations in batches to bound memory." + }, + "594": { + "node_id": 647, + "content": "keep search rebuild SQL within the SQLite/Postgres parameter limit." + }, + "595": { + "node_id": 649, + "content": "describe how grammar-specific node names translate into model semantics" + }, + "596": { + "node_id": 650, + "content": "let each language define its own multi-file import model without changing the ingest workflow service." + }, + "597": { + "node_id": 651, + "content": "provide a default no-op implementation of the PackageDiscovery interface." + }, + "598": { + "node_id": 652, + "content": "let callers reuse one package-discovery flow even when a language has no package model." + }, + "599": { + "node_id": 653, + "content": "implement the ingest package-discovery port without exposing LangSpec to the application." + }, + "6": { + "node_id": 64, + "content": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다." + }, + "60": { + "node_id": 108, + "content": "an unindented line is a result; an indented line is commentary about the line above it." + }, + "600": { + "node_id": 654, + "content": "implement the ingest package-edge port while keeping language semantics inside the Tree-sitter adapter." + }, + "601": { + "node_id": 655, + "content": "centralize language-specific AST node names, test conventions, and extraction hints" + }, + "602": { + "node_id": 656, + "content": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal" + }, + "603": { + "node_id": 657, + "content": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved." + }, + "604": { + "node_id": 658, + "content": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved." + }, + "605": { + "node_id": 659, + "content": "map TypeScript source directories to package.json- and tsconfig-based import paths." + }, + "606": { + "node_id": 660, + "content": "map JavaScript source directories to package.json-based import paths." + }, + "607": { + "node_id": 661, + "content": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets." + }, + "608": { + "node_id": 662, + "content": "map Kotlin package headers to package nodes so imports and package containment use declared package names." + }, + "609": { + "node_id": 663, + "content": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages." + }, + "61": { + "node_id": 108, + "content": "let a reader see why each result is in the list without opening the file." + }, + "610": { + "node_id": 664, + "content": "create package nodes for package.json paths and tsconfig alias paths that imports can target." + }, + "611": { + "node_id": 665, + "content": "create package nodes for JavaScript directories using package.json-derived import paths." + }, + "612": { + "node_id": 666, + "content": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses." + }, + "613": { + "node_id": 667, + "content": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets." + }, + "614": { + "node_id": 668, + "content": "model a Go import path as one package node that contains every non-test file in that package." + }, + "615": { + "node_id": 669, + "content": "walk the repository to identify Go packages and their source files." + }, + "616": { + "node_id": 670, + "content": "handle multiple declarations of the same import path by merging files or detecting inconsistencies." + }, + "617": { + "node_id": 671, + "content": "support JVM source-set layouts where one package is intentionally spread across main/test directories." + }, + "618": { + "node_id": 672, + "content": "keep package nodes deterministic even when files come from multiple source roots." + }, + "619": { + "node_id": 673, + "content": "ensure the file list for a package remains unique without duplicates." + }, + "62": { + "node_id": 109, + "content": "name the parts of a result the query touched, in one glanceable token." + }, + "620": { + "node_id": 674, + "content": "normalize filesystem package directories into the import-path form used by package nodes." + }, + "621": { + "node_id": 675, + "content": "derive the short package name from an import path without introducing language-specific branches elsewhere." + }, + "622": { + "node_id": 676, + "content": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript." + }, + "623": { + "node_id": 677, + "content": "keep package metadata parsing minimal while deriving package-node qualified names." + }, + "624": { + "node_id": 678, + "content": "derive additional package-node import paths from compiler aliases." + }, + "625": { + "node_id": 679, + "content": "map repository files back to the package node that should own their imports." + }, + "626": { + "node_id": 680, + "content": "resolve aliased Node imports against the package node scope they belong to." + }, + "627": { + "node_id": 681, + "content": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently." + }, + "628": { + "node_id": 682, + "content": "use repository and workspace manifest metadata to build Node-family import paths." + }, + "629": { + "node_id": 683, + "content": "derive alternate package-node import paths for aliased TypeScript imports." + }, + "63": { + "node_id": 110, + "content": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting." + }, + "630": { + "node_id": 684, + "content": "merge inherited alias prefixes from nested tsconfig chains into one import-path map." + }, + "631": { + "node_id": 685, + "content": "register both directory package nodes and file-level alias nodes for Node ecosystem imports." + }, + "632": { + "node_id": 686, + "content": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere." + }, + "633": { + "node_id": 687, + "content": "let nested packages contribute their own alias prefixes for monorepo-local imports." + }, + "634": { + "node_id": 688, + "content": "prefer workspace package names over the root package when files live under nested package roots." + }, + "635": { + "node_id": 689, + "content": "support both array and object forms used by npm/Yarn/Bun workspace configs." + }, + "636": { + "node_id": 690, + "content": "include pnpm-managed workspace package roots in Node-family package discovery." + }, + "637": { + "node_id": 691, + "content": "map workspace manifests to concrete package directories without parsing unrelated nested packages." + }, + "638": { + "node_id": 692, + "content": "normalize npm/pnpm workspace pattern lists before matching concrete package roots." + }, + "639": { + "node_id": 693, + "content": "apply include-first and negate-after semantics consistently across workspace root discovery." + }, + "64": { + "node_id": 111, + "content": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting." + }, + "640": { + "node_id": 694, + "content": "keep workspace package discovery independent from shell-specific glob expansion." + }, + "641": { + "node_id": 695, + "content": "implement **-aware workspace glob semantics for package root discovery." + }, + "642": { + "node_id": 696, + "content": "let nested tsconfig files inherit baseUrl/paths from local parent configs." + }, + "643": { + "node_id": 697, + "content": "keep package-node qualified names aligned with JS/TS import strings." + }, + "644": { + "node_id": 698, + "content": "normalize alias rules before matching them against source directories." + }, + "645": { + "node_id": 699, + "content": "match source directories against tsconfig path targets without partial-segment false positives." + }, + "646": { + "node_id": 700, + "content": "match concrete source file paths against tsconfig alias target roots." + }, + "647": { + "node_id": 701, + "content": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency." + }, + "648": { + "node_id": 702, + "content": "keep extension checks simple without importing extra helpers." + }, + "649": { + "node_id": 703, + "content": "identify the repository's root import path for Go package normalization." + }, + "65": { + "node_id": 112, + "content": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server." + }, + "650": { + "node_id": 704, + "content": "determine the local package name to assist in constructing qualified names." + }, + "651": { + "node_id": 705, + "content": "use the language-declared package as the authoritative import path for Java package nodes." + }, + "652": { + "node_id": 706, + "content": "use the language-declared package as the authoritative import path for Kotlin package nodes." + }, + "653": { + "node_id": 708, + "content": "keep language-specific inference opt-in while the generic parser remains shared." + }, + "654": { + "node_id": 709, + "content": "avoid forcing languages without call rewrite needs to implement no-op methods." + }, + "655": { + "node_id": 710, + "content": "let languages enrich parsed definitions without adding language branches to Walker." + }, + "656": { + "node_id": 711, + "content": "let languages normalize captured definition names before node and edge fingerprints are emitted." + }, + "657": { + "node_id": 712, + "content": "let languages normalize query-captured relationships through the same definition path." + }, + "658": { + "node_id": 713, + "content": "let languages derive relationships that require package-wide context without widening Walker's per-file parse path." + }, + "659": { + "node_id": 714, + "content": "let languages contribute docstrings or similar constructs without Walker language branches." + }, + "66": { + "node_id": 113, + "content": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings." + }, + "660": { + "node_id": 715, + "content": "let language specs recover dynamic dispatch targets without adding language branches to Walker." + }, + "661": { + "node_id": 716, + "content": "provide enough call-site metadata for languages with assignment or dispatch-sensitive call names." + }, + "662": { + "node_id": 717, + "content": "avoid expanding Walker with one-off language branches as graph inference grows." + }, + "663": { + "node_id": 718, + "content": "expose definition-local AST state so languages can derive extra edges and metadata." + }, + "664": { + "node_id": 719, + "content": "keep Walker generic while still allowing languages to accumulate interfaces and edges." + }, + "665": { + "node_id": 720, + "content": "expose AST and file content so languages can surface docstrings as comment blocks." + }, + "666": { + "node_id": 721, + "content": "let build/update provide package-clause-aware import normalization without widening parser interfaces." + }, + "667": { + "node_id": 722, + "content": "preserve compatibility for callers using the original Go-specific helper." + }, + "668": { + "node_id": 723, + "content": "let Go-specific semantic helpers reuse package-name mappings without widening APIs." + }, + "669": { + "node_id": 724, + "content": "let parsers stamp package-less languages with a deterministic file-level package prefix." + }, + "67": { + "node_id": 114, + "content": "keep optional stdio MCP environment defaults small and explicit." + }, + "670": { + "node_id": 725, + "content": "let walkers seed qualified names from a file's canonical import path when no package capture exists." + }, + "671": { + "node_id": 726, + "content": "provide a safe fallback semantics hook when a language does not define extra graph enrichment." + }, + "672": { + "node_id": 727, + "content": "satisfy the LanguageSemantics interface with a no-op implementation." + }, + "673": { + "node_id": 728, + "content": "provide the default empty implementation for language specs without call rewrite rules." + }, + "674": { + "node_id": 729, + "content": "satisfy CallRewriter for languages without additional call inference." + }, + "675": { + "node_id": 730, + "content": "ensure a non-nil LanguageSemantics implementation is always available during parsing." + }, + "676": { + "node_id": 731, + "content": "keep call rewriting optional so languages without call inference avoid boilerplate." + }, + "677": { + "node_id": 732, + "content": "keep Walker generic while allowing opt-in definition hooks." + }, + "678": { + "node_id": 733, + "content": "centralize per-language symbol-name normalization behind an optional hook." + }, + "679": { + "node_id": 734, + "content": "centralize query-captured implements relationships behind an optional language hook." + }, + "680": { + "node_id": 735, + "content": "let languages expose docstring-like constructs without affecting generic comment extraction." + }, + "681": { + "node_id": 736, + "content": "centralize package-level enrichment behind an optional semantics hook." + }, + "682": { + "node_id": 737, + "content": "let build/update orchestration reuse optional package-level enrichment hooks." + }, + "683": { + "node_id": 738, + "content": "let non-parser orchestration reuse the centralized language semantics registry without local language switches." + }, + "684": { + "node_id": 739, + "content": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + }, + "685": { + "node_id": 740, + "content": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery." + }, + "686": { + "node_id": 741, + "content": "identify \"implements\" relationships using both structural and explicit compile-time assertions." + }, + "687": { + "node_id": 742, + "content": "support Go's implicit structural typing when interfaces and methods are split across files in one package." + }, + "688": { + "node_id": 743, + "content": "move Go definition enrichment out of Walker and behind an optional semantics hook." + }, + "689": { + "node_id": 744, + "content": "preserve interface dispatch context for calls made through asserted variables." + }, + "690": { + "node_id": 745, + "content": "keep Go assertion call inference behind the language semantics hook." + }, + "691": { + "node_id": 746, + "content": "preserve interface dispatch context for calls made through asserted variables." + }, + "692": { + "node_id": 747, + "content": "bind assignment-sensitive call rewrites without exposing language details to Walker." + }, + "693": { + "node_id": 748, + "content": "support later call-name rewriting when an asserted interface variable is used." + }, + "694": { + "node_id": 749, + "content": "capture enough metadata to rewrite subsequent selector calls on asserted variables." + }, + "695": { + "node_id": 750, + "content": "preserve canonical import-qualified interface names so rewritten calls resolve precisely." + }, + "696": { + "node_id": 751, + "content": "bind rewritten Go assertion calls to the local variable name that receives the assertion result." + }, + "697": { + "node_id": 752, + "content": "recover var-spec bindings so type-assertion rewrites work for multi-value declarations." + }, + "698": { + "node_id": 753, + "content": "align the asserted expression with the matching assignment target in tuple-style Go statements." + }, + "699": { + "node_id": 754, + "content": "map assertion result positions back to local names without duplicating assignment-shape parsing." + }, + "7": { + "node_id": 65, + "content": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다." + }, + "70": { + "node_id": 117, + "content": "compute the share of fallback call edges within all call-like edges for operator-facing health reporting." + }, + "700": { + "node_id": 755, + "content": "reject blanks and non-identifiers before storing assertion-based name bindings." + }, + "701": { + "node_id": 756, + "content": "detect which tuple element owns a type assertion when matching assignment shapes." + }, + "702": { + "node_id": 757, + "content": "reject non-identifier assignment targets when extracting assertion bindings." + }, + "703": { + "node_id": 758, + "content": "support Go's implicit structural typing by matching concrete method names against package-wide interface declarations." + }, + "704": { + "node_id": 759, + "content": "extract \"implements\" relationships from common Go idioms like `var _ Interface = (*Concrete)(nil)`." + }, + "705": { + "node_id": 760, + "content": "resolve locally-used package names to their canonical import targets during parsing." + }, + "706": { + "node_id": 761, + "content": "approximate the package name used in Go source by taking the base segment of the import path." + }, + "707": { + "node_id": 762, + "content": "handle Go modules with semantic versioning segments in their import paths." + }, + "708": { + "node_id": 763, + "content": "normalize Go package names by stripping legacy gopkg.in-style version suffixes." + }, + "71": { + "node_id": 118, + "content": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output." + }, + "710": { + "node_id": 765, + "content": "keep concrete-type extraction in one place so new assertion shapes\nare easy to add without bloating goAssertionSpec." + }, + "711": { + "node_id": 766, + "content": "ensure Go type names (e.g., pkg.Type) are mapped to their correct package namespaces." + }, + "715": { + "node_id": 770, + "content": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." + }, + "716": { + "node_id": 771, + "content": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker." + }, + "717": { + "node_id": 772, + "content": "capture TypeScript class hierarchy semantics directly from the parsed AST." + }, + "718": { + "node_id": 773, + "content": "keep explicit query captures and AST-derived hierarchy parsing on one normalization path." + }, + "719": { + "node_id": 774, + "content": "rewrite member-call chains only when explicit type annotations prove each hop." + }, + "72": { + "node_id": 119, + "content": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다." + }, + "720": { + "node_id": 775, + "content": "keep TypeScript extends and implements targets consistently qualified before edge creation." + }, + "721": { + "node_id": 776, + "content": "keep same-file TypeScript references aligned with the file's package context." + }, + "722": { + "node_id": 777, + "content": "resolve TypeScript imports into package context for heritage qualification." + }, + "723": { + "node_id": 778, + "content": "seed conservative receiver rewriting with only textually provable TypeScript type annotations." + }, + "724": { + "node_id": 779, + "content": "prove intermediate member hops before rewriting TypeScript call chains." + }, + "725": { + "node_id": 780, + "content": "recover member-call hops directly from the AST when callee text is insufficient." + }, + "726": { + "node_id": 781, + "content": "avoid depending on grammar-specific field captures when proving member-chain types." + }, + "727": { + "node_id": 782, + "content": "isolate TypeScript class-name lookup from heritage parsing logic." + }, + "728": { + "node_id": 783, + "content": "parse class_heritage text conservatively so hierarchy edges can be emitted without query changes." + }, + "729": { + "node_id": 784, + "content": "avoid comma-splitting inside generic arguments by preferring grammar-aware node traversal." + }, + "73": { + "node_id": 120, + "content": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다." + }, + "730": { + "node_id": 785, + "content": "keep TypeScript inheritance extraction robust even when tree-sitter child field names differ across grammar revisions." + }, + "731": { + "node_id": 786, + "content": "extract stable edge endpoint names from extends/implements clauses." + }, + "732": { + "node_id": 787, + "content": "recover stable hierarchy targets from AST nodes instead of brittle text slicing." + }, + "733": { + "node_id": 788, + "content": "collect direct type reference children while tolerating grammar node-name changes." + }, + "734": { + "node_id": 789, + "content": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript." + }, + "735": { + "node_id": 790, + "content": "satisfy shared relationship normalization without inventing JS interface semantics." + }, + "736": { + "node_id": 791, + "content": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics." + }, + "737": { + "node_id": 792, + "content": "isolate JavaScript class-name lookup from hierarchy extraction logic." + }, + "738": { + "node_id": 793, + "content": "preserve conservative member-call rewriting when each hop is proven by explicit type annotations." + }, + "739": { + "node_id": 794, + "content": "preserve conservative receiver dispatch by upgrading only typed call chains into owner-qualified selectors." + }, + "740": { + "node_id": 795, + "content": "share one normalized chain representation across language-specific receiver rewriters." + }, + "741": { + "node_id": 796, + "content": "reuse AST-derived selector parsing when raw callee strings are incomplete." + }, + "742": { + "node_id": 797, + "content": "share one normalized selector chain representation across call rewriting helpers." + }, + "744": { + "node_id": 799, + "content": "canonicalize explicit type names before they are used as receiver-chain proof." + }, + "748": { + "node_id": 803, + "content": "rewrite member-call chains only when local/field declarations prove the receiver types." + }, + "749": { + "node_id": 804, + "content": "capture Java class hierarchy semantics with package-qualified child names when available." + }, + "750": { + "node_id": 805, + "content": "keep generic-safe relationship extraction consistent between direct hierarchy parsing and query captures." + }, + "751": { + "node_id": 806, + "content": "emit Kotlin hierarchy edges from declaration text while preserving package-qualified child names." + }, + "752": { + "node_id": 807, + "content": "rewrite member-call chains only when explicit property/value types prove the receiver chain." + }, + "753": { + "node_id": 808, + "content": "capture Kotlin supertype relationships by parsing the declaration head after ':'." + }, + "754": { + "node_id": 809, + "content": "keep declaration-time and query-time interface extraction aligned for Kotlin." + }, + "755": { + "node_id": 810, + "content": "isolate Java class-name lookup from hierarchy parsing logic." + }, + "756": { + "node_id": 811, + "content": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions." + }, + "757": { + "node_id": 812, + "content": "prefer grammar-aware traversal so commas inside generics do not split hierarchy targets." + }, + "759": { + "node_id": 814, + "content": "preserve package context for hierarchy edges so resolvers can bind them deterministically." + }, + "760": { + "node_id": 815, + "content": "let hierarchy edges point to imported types across packages when declarations use short names." + }, + "761": { + "node_id": 816, + "content": "enable conservative receiver call rewriting without requiring full Java type checking." + }, + "762": { + "node_id": 817, + "content": "prove intermediate receiver hops before rewriting Java member-call chains." + }, + "763": { + "node_id": 818, + "content": "support conservative Kotlin receiver call rewriting without smart-cast inference." + }, + "764": { + "node_id": 819, + "content": "prove receiver-member chains before rewriting Kotlin call selectors." + }, + "765": { + "node_id": 820, + "content": "share one conservative member-type extractor across Java and Kotlin receiver rewriting." + }, + "766": { + "node_id": 821, + "content": "keep receiver rewriting and hierarchy edges on the same qualified type names." + }, + "768": { + "node_id": 823, + "content": "recover member-call hops from the AST when raw callee text is not enough." + }, + "769": { + "node_id": 824, + "content": "support cross-package hierarchy resolution by recovering fully qualified imported type names from source imports." + }, + "77": { + "node_id": 125, + "content": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer." + }, + "770": { + "node_id": 825, + "content": "extract the imported symbol target from Java/Kotlin import syntax for later hierarchy qualification." + }, + "771": { + "node_id": 826, + "content": "isolate Kotlin declaration-name lookup from supertype parsing logic." + }, + "774": { + "node_id": 829, + "content": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes." + }, + "777": { + "node_id": 832, + "content": "share simple type extraction between Java and Kotlin hierarchy walkers." + }, + "778": { + "node_id": 833, + "content": "recover hierarchy endpoints from grammar nodes while remaining tolerant of parser version differences." + }, + "78": { + "node_id": 126, + "content": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer." + }, + "780": { + "node_id": 835, + "content": "derive stable edge endpoint names from Kotlin declaration heads." + }, + "781": { + "node_id": 836, + "content": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic." + }, + "782": { + "node_id": 837, + "content": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic." + }, + "783": { + "node_id": 838, + "content": "capture Python class inheritance from the AST so type hierarchy queries work without query-only special cases." + }, + "784": { + "node_id": 839, + "content": "surface docstrings through the same binder pipeline used for ordinary comments." + }, + "785": { + "node_id": 840, + "content": "keep Python inheritance extraction logic small and explicit by isolating class-name lookup." + }, + "786": { + "node_id": 841, + "content": "read the tree-sitter-python superclasses field into simple parent names for inherits edges." + }, + "788": { + "node_id": 843, + "content": "move Python docstring extraction out of Walker while preserving binder-facing behavior." + }, + "789": { + "node_id": 844, + "content": "implement Python docstring discovery separately from the generic Walker." + }, + "79": { + "node_id": 127, + "content": "centralize default server flag values for ccg-server." + }, + "790": { + "node_id": 845, + "content": "encapsulate docstring acceptance rules so tests can lock the behavior precisely." + }, + "791": { + "node_id": 846, + "content": "accept only Python string literal forms that can legally act as docstrings." + }, + "792": { + "node_id": 847, + "content": "preserve Python docstring semantics that only the leading string literal counts." + }, + "795": { + "node_id": 850, + "content": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks." + }, + "796": { + "node_id": 851, + "content": "preserve exact trait path and optional concrete type information without changing generic walker logic." + }, + "797": { + "node_id": 852, + "content": "keep impl_item class names stable when the captured type includes generic arguments." + }, + "799": { + "node_id": 854, + "content": "recover stable trait identifiers before implementation edges are emitted." + }, + "8": { + "node_id": 66, + "content": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다." + }, + "80": { + "node_id": 128, + "content": "reject invalid webhook and HTTP exposure settings before opening listeners." + }, + "800": { + "node_id": 855, + "content": "preserve trait and concrete type information in Rust call rewriting without broadening matching." + }, + "801": { + "node_id": 856, + "content": "preserve trait owner information in Rust call fingerprints without changing generic walker behavior." + }, + "802": { + "node_id": 857, + "content": "split Rust qualified trait calls into trait and method components for rewriting." + }, + "803": { + "node_id": 858, + "content": "recover concrete-type and trait information from Rust UFCS call syntax." + }, + "804": { + "node_id": 859, + "content": "keep Rust type and trait names stable across impl headers and rewritten calls." + }, + "805": { + "node_id": 860, + "content": "preserve full Rust paths when rewritten calls refer to imported trait names." + }, + "806": { + "node_id": 861, + "content": "support Rust trait call normalization when code references imported names." + }, + "807": { + "node_id": 862, + "content": "reuse nested Rust use-tree parsing while accumulating import aliases into one map." + }, + "808": { + "node_id": 863, + "content": "flatten nested use trees so alias extraction can treat every import uniformly." + }, + "809": { + "node_id": 864, + "content": "normalize Rust use declarations before nested path expansion logic runs." + }, + "81": { + "node_id": 129, + "content": "preserve legacy singular URL behavior while exposing one ordered clone URL list." + }, + "810": { + "node_id": 865, + "content": "support both explicit `as` aliases and default basename aliases for Rust imports." + }, + "811": { + "node_id": 866, + "content": "parse nested Rust use trees without confusing sibling branches for the current scope." + }, + "812": { + "node_id": 867, + "content": "parse nested generic syntax in Rust UFCS selectors without losing the outer boundary." + }, + "813": { + "node_id": 868, + "content": "split concrete and trait types only when nested generic syntax is balanced." + }, + "814": { + "node_id": 869, + "content": "flatten Rust use-tree members without breaking nested grouped imports." + }, + "815": { + "node_id": 871, + "content": "turn language-specific ASTs into the project's normalized code graph representation" + }, + "817": { + "node_id": 873, + "content": "allow caller-supplied dependencies such as logging without expanding constructor arguments" + }, + "818": { + "node_id": 874, + "content": "let callers route parser diagnostics through their preferred slog.Logger" + }, + "819": { + "node_id": 875, + "content": "amortize parser and query compilation cost across many file parses" + }, + "82": { + "node_id": 130, + "content": "provide env-based defaults for server flags without panicking on bad input." + }, + "820": { + "node_id": 876, + "content": "invalidate full-build parse cache entries when language queries or parser semantics change." + }, + "821": { + "node_id": 876, + "content": "bump walker-v1 whenever non-query Walker semantics change parsed nodes, edges, comments, or metadata." + }, + "822": { + "node_id": 877, + "content": "expose the configured language rules and query paths for this walker instance" + }, + "823": { + "node_id": 878, + "content": "free parser-side native resources once file parsing is complete" + }, + "824": { + "node_id": 879, + "content": "expose the language handled by this Walker for downstream coordination" + }, + "825": { + "node_id": 880, + "content": "provide the basic parsing entry point when callers do not need comments or custom context" + }, + "826": { + "node_id": 881, + "content": "let callers cancel Tree-sitter parsing through context propagation" + }, + "827": { + "node_id": 882, + "content": "produce the full parse result needed for graph building and annotation binding" + }, + "828": { + "node_id": 883, + "content": "give build/update paths access to interface method metadata needed for package-wide relationship inference." + }, + "829": { + "node_id": 884, + "content": "map Tree-sitter query captures into normalized graph entities for one file" + }, + "83": { + "node_id": 131, + "content": "distinguish between an unset variable and one explicitly set to empty string." + }, + "830": { + "node_id": 885, + "content": "key duplicate symbol matches by name and source span during one query execution." + }, + "831": { + "node_id": 886, + "content": "derive stable callee names for call edge fingerprints across grammars" + }, + "833": { + "node_id": 888, + "content": "preserve method qualified names when a language query does not capture an explicit receiver." + }, + "834": { + "node_id": 889, + "content": "keep language query captures aligned with graph node categorization" + }, + "835": { + "node_id": 889, + "content": "only function/method declarations whose name is a test name become test nodes;\ntypes, classes, and interfaces are never tests even when their name starts with the prefix" + }, + "836": { + "node_id": 890, + "content": "generate graph keys that distinguish methods from package-level declarations" + }, + "837": { + "node_id": 891, + "content": "connect production functions to enclosing tests without language-specific test frameworks" + }, + "838": { + "node_id": 891, + "content": "only calls inside test node line ranges create tested_by edges" + }, + "839": { + "node_id": 892, + "content": "expose comment extraction without forcing callers to build nodes and edges" + }, + "84": { + "node_id": 132, + "content": "provide env-based defaults for server timeout and retry flags without panicking on bad input." + }, + "840": { + "node_id": 893, + "content": "let long parses honor caller cancellation while reusing pooled parsers for throughput." + }, + "841": { + "node_id": 894, + "content": "keep documentation comments together so binders can attach them as a single unit" + }, + "842": { + "node_id": 895, + "content": "amortize parser construction cost across many parses on the same language." + }, + "843": { + "node_id": 896, + "content": "keep allocated parsers alive between parses instead of letting them be garbage collected." + }, + "844": { + "node_id": 897, + "content": "bind configured language names to the concrete parser implementation" + }, + "845": { + "node_id": 898, + "content": "expose package interface summaries without leaking walker-private helper types." + }, + "846": { + "node_id": 899, + "content": "normalize raw implements captures into a shared slice before language-specific enrichment." + }, + "847": { + "node_id": 900, + "content": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges." + }, + "848": { + "node_id": 901, + "content": "avoid repeating package interface metadata when multiple query patterns capture the same interface." + }, + "85": { + "node_id": 133, + "content": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction." + }, + "850": { + "node_id": 903, + "content": "avoid misclassifying production symbols like testimonialCard or TestConfig as tests." + }, + "851": { + "node_id": 903, + "content": "a separator-terminated prefix (e.g. \"test_\") is a boundary on its own; a bare-word\nprefix (e.g. \"Test\", \"test\", \"TEST\") must be followed by end-of-name or a non-lowercase character\nso it does not swallow a longer lowercase word." + }, + "854": { + "node_id": 906, + "content": "detect whether two symbol captures refer to overlapping source spans" + }, + "855": { + "node_id": 908, + "content": "abstract git operations so risk analysis can consume changed files and hunks" + }, + "856": { + "node_id": 909, + "content": "represent a diff segment that can be matched against graph nodes" + }, + "857": { + "node_id": 910, + "content": "return the changed node together with overlap count and computed risk" + }, + "858": { + "node_id": 911, + "content": "expose paged change-risk results while keeping legacy callers working with []RiskEntry." + }, + "859": { + "node_id": 912, + "content": "identify changed nodes and score how risky they are to modify" + }, + "86": { + "node_id": 134, + "content": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction." + }, + "860": { + "node_id": 913, + "content": "wire database and git dependencies into a reusable analyzer" + }, + "861": { + "node_id": 914, + "content": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose." + }, + "862": { + "node_id": 914, + "content": "pagination limits returned items, but compute cost still scales with scoring every changed node to preserve legacy ordering." + }, + "863": { + "node_id": 914, + "content": "entries are sorted by descending risk_score, then file_path, then qualified_name for stable ordering." + }, + "864": { + "node_id": 915, + "content": "let downstream analyzers reuse change detection without paying risk-score or AnalyzePage pagination-loop costs." + }, + "865": { + "node_id": 916, + "content": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup." + }, + "866": { + "node_id": 917, + "content": "gather the minimal diff context needed before matching git changes back to graph nodes." + }, + "867": { + "node_id": 918, + "content": "prevent flow lookups from depending on database or map iteration order." + }, + "868": { + "node_id": 919, + "content": "keep per-node diff overlap counts available until final risk scoring runs." + }, + "869": { + "node_id": 920, + "content": "translate file-level diff hunks into the graph nodes that were actually touched." + }, + "87": { + "node_id": 135, + "content": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다." + }, + "870": { + "node_id": 921, + "content": "separate risk ordering from response entry allocation for paged consumers." + }, + "871": { + "node_id": 922, + "content": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window." + }, + "872": { + "node_id": 923, + "content": "keep legacy Analyze behavior available while letting paged callers avoid full candidate allocation and full sorting." + }, + "873": { + "node_id": 924, + "content": "centralize legacy Analyze ordering so heap selection and final sorting stay consistent." + }, + "874": { + "node_id": 925, + "content": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work." + }, + "875": { + "node_id": 926, + "content": "select the top AnalyzePage window without allocating or sorting the full candidate set." + }, + "877": { + "node_id": 928, + "content": "invert risk ordering so the heap root stays the worst retained candidate." + }, + "879": { + "node_id": 930, + "content": "append a retained risk candidate supplied by container/heap." + }, + "88": { + "node_id": 136, + "content": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge." + }, + "882": { + "node_id": 934, + "content": "provides an extension point for stored flow rebuild configuration." + }, + "883": { + "node_id": 935, + "content": "returns the size of the rebuilt stored flow as a post-process result." + }, + "884": { + "node_id": 936, + "content": "persists traced flows per entrypoint back into the flows table." + }, + "885": { + "node_id": 937, + "content": "binds the database and graph reader to create a stored flow rebuild service." + }, + "886": { + "node_id": 938, + "content": "refreshes list_flows by replacing all stored flows within the namespace." + }, + "887": { + "node_id": 938, + "content": "rebuilds stored flows by running TraceFlow for each entrypoint within the namespace." + }, + "888": { + "node_id": 940, + "content": "abstract graph reads so flow tracing can follow call edges from any store" + }, + "889": { + "node_id": 941, + "content": "produce reusable flow records that describe reachable call paths" + }, + "89": { + "node_id": 137, + "content": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다." + }, + "890": { + "node_id": 942, + "content": "let cross-namespace readers label foreign members without widening the EdgeReader contract." + }, + "891": { + "node_id": 943, + "content": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace." + }, + "892": { + "node_id": 943, + "content": "stores without batch node reads keep the context-namespace stamp (persisted-flow rebuild path)." + }, + "893": { + "node_id": 944, + "content": "let callers cap traversal cost when tracing large call graphs" + }, + "894": { + "node_id": 945, + "content": "communicate truncation status alongside the produced flow" + }, + "895": { + "node_id": 946, + "content": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode." + }, + "896": { + "node_id": 947, + "content": "construct a tracer bound to a graph edge reader" + }, + "897": { + "node_id": 948, + "content": "capture the reachable call chain from one entry node as a flow" + }, + "898": { + "node_id": 948, + "content": "only calls edges expand the traced flow" + }, + "899": { + "node_id": 949, + "content": "expose a flow trace variant that can stop early when MaxNodes is reached" + }, + "9": { + "node_id": 67, + "content": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options." + }, + "90": { + "node_id": 137, + "content": "loopback이 아닌 주소는 bearer token 또는 insecure override가 필요하다." + }, + "900": { + "node_id": 949, + "content": "only calls edges enqueue new BFS nodes; outgoing edges are fetched once per BFS depth" + }, + "901": { + "node_id": 951, + "content": "abstract bidirectional edge and node lookups for blast-radius traversal" + }, + "902": { + "node_id": 952, + "content": "estimate which nodes may be affected by a change" + }, + "903": { + "node_id": 953, + "content": "let callers limit BFS depth and visited node count for safety" + }, + "905": { + "node_id": 955, + "content": "construct a blast-radius analyzer around a graph reader" + }, + "906": { + "node_id": 956, + "content": "identify blast radius of code changes for risk assessment" + }, + "907": { + "node_id": 956, + "content": "traverses both outgoing and incoming edges bidirectionally" + }, + "908": { + "node_id": 957, + "content": "expose a limit-aware blast radius traversal for cost-sensitive callers" + }, + "909": { + "node_id": 957, + "content": "traverses outgoing and incoming edges in lock step at each depth" + }, + "91": { + "node_id": 138, + "content": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다." + }, + "910": { + "node_id": 959, + "content": "let flow application policy trace and replace flows without importing a database adapter." + }, + "911": { + "node_id": 960, + "content": "ensure stale-flow deletion and every replacement flow commit or roll back together." + }, + "912": { + "node_id": 961, + "content": "express incoming and outgoing graph queries without leaking SQL join details." + }, + "913": { + "node_id": 962, + "content": "carry graph-query scope and pagination from application policy to persistence." + }, + "914": { + "node_id": 963, + "content": "keep pagination totals coupled to the same namespace-scoped relationship query." + }, + "915": { + "node_id": 964, + "content": "keep query defaults and response mapping in app code while isolating database joins and filters." + }, + "916": { + "node_id": 965, + "content": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms." + }, + "917": { + "node_id": 966, + "content": "keep graph totals and grouped distributions independent of database query types." + }, + "918": { + "node_id": 967, + "content": "preserve database aggregate row ordering for CLI-compatible rendering." + }, + "919": { + "node_id": 968, + "content": "let CLI and MCP status surfaces share typed graph facts without receiving a database handle." + }, + "92": { + "node_id": 138, + "content": "token이 비어 있으면 인증을 강제하지 않는다." + }, + "920": { + "node_id": 969, + "content": "keep MCP graph lookups on an application-owned port instead of a global storage contract." + }, + "921": { + "node_id": 970, + "content": "carry namespace discovery results independently of MCP response types." + }, + "922": { + "node_id": 971, + "content": "carry bounded stored-flow facts independently of persistence rows." + }, + "923": { + "node_id": 972, + "content": "carry change-to-flow overlap facts from analysis persistence to application consumers." + }, + "924": { + "node_id": 973, + "content": "represent ranked membership aggregates without exposing SQL scan structs." + }, + "925": { + "node_id": 974, + "content": "centralize namespace-safe aggregate and evidence queries without exposing GORM to handlers." + }, + "926": { + "node_id": 976, + "content": "provide reusable higher-level graph lookups for MCP queries" + }, + "927": { + "node_id": 977, + "content": "construct a service for common graph traversal queries" + }, + "928": { + "node_id": 978, + "content": "centralize directional edge-query logic shared by predefined graph queries" + }, + "929": { + "node_id": 979, + "content": "let strict graph queries exclude fallback call edges without changing legacy defaults." + }, + "93": { + "node_id": 139, + "content": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다." + }, + "930": { + "node_id": 980, + "content": "provide paginated graph query results without changing legacy return shape for non-paged callers." + }, + "931": { + "node_id": 981, + "content": "find upstream callers of a function or method node" + }, + "932": { + "node_id": 982, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "933": { + "node_id": 983, + "content": "support strict caller lookups that ignore fallback-derived edges when requested." + }, + "934": { + "node_id": 984, + "content": "find downstream call dependencies of a function or method node" + }, + "935": { + "node_id": 985, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "936": { + "node_id": 986, + "content": "support strict callee lookups that ignore fallback-derived edges when requested." + }, + "937": { + "node_id": 987, + "content": "reveal outgoing import dependencies for a file or package node" + }, + "938": { + "node_id": 988, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "939": { + "node_id": 989, + "content": "reveal reverse import dependencies pointing at the target node" + }, + "940": { + "node_id": 990, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "941": { + "node_id": 991, + "content": "enumerate structural children contained within a file or type node" + }, + "942": { + "node_id": 992, + "content": "find test nodes linked to the target via tested_by edges" + }, + "943": { + "node_id": 993, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "944": { + "node_id": 994, + "content": "find derived types that point to the target through inheritance edges" + }, + "945": { + "node_id": 995, + "content": "support paginated query_graph response pagination and cache metadata." + }, + "946": { + "node_id": 996, + "content": "support MCP fallback from short symbol names to fully qualified graph nodes." + }, + "947": { + "node_id": 997, + "content": "carry paginated graph query rows together with the total match count for MCP responses." + }, + "948": { + "node_id": 998, + "content": "provide compact, stable target suggestions when a short symbol name matches multiple nodes." + }, + "949": { + "node_id": 999, + "content": "let callers choose between compatibility mode and strict call-edge analysis." + }, + "95": { + "node_id": 140, + "content": "접두사나 길이가 다르면 constant-time 비교 전에 실패 처리한다." + }, + "950": { + "node_id": 1000, + "content": "keep legacy callers fallback-inclusive unless they explicitly opt into strict mode." + }, + "951": { + "node_id": 1001, + "content": "keep predefined query responses stable across joins that may return duplicate nodes." + }, + "952": { + "node_id": 1003, + "content": "carry the minimal source facts needed to materialize a cross-namespace reference." + }, + "953": { + "node_id": 1004, + "content": "keep the sync policy independent from GORM by owning a minimal consumer-side port." + }, + "954": { + "node_id": 1005, + "content": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes." + }, + "955": { + "node_id": 1006, + "content": "bind the sync policy to one persistence port instance." + }, + "956": { + "node_id": 1007, + "content": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity." + }, + "957": { + "node_id": 1007, + "content": "outbound rows are fully replaced from current @see tags; malformed refs are skipped (lint owns reporting)." + }, + "958": { + "node_id": 1007, + "content": "inbound rows are re-resolved because a replace-style build regenerates the target node ids." + }, + "959": { + "node_id": 1008, + "content": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row." + }, + "96": { + "node_id": 141, + "content": "HTTP listen 주소가 로컬 테스트 전용인지 판별해 보안 규칙에 재사용한다." + }, + "960": { + "node_id": 1010, + "content": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target." + }, + "961": { + "node_id": 1010, + "content": "the memo stays valid across the outbound and inbound phases because a sync pass\nonly rewrites cross_refs rows, never the node tables the matcher reads." + }, + "962": { + "node_id": 1011, + "content": "replace the namespace's outbound rows with rows derived from its current annotations." + }, + "963": { + "node_id": 1012, + "content": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt." + }, + "964": { + "node_id": 1013, + "content": "translate matcher output into row state: namespace-scope hits stay resolved without a node target." + }, + "965": { + "node_id": 1017, + "content": "let one call answer for a folder, a file, or a miss, and say which it was." + }, + "966": { + "node_id": 1018, + "content": "keep \"what is written here\" separate from \"where it is written\"." + }, + "968": { + "node_id": 1021, + "content": "give a reader a name, a place to open, and why it exists." + }, + "969": { + "node_id": 1022, + "content": "let a caller descend one deliberate step at a time." + }, + "97": { + "node_id": 142, + "content": "가장 가벼운 liveness probe로 프로세스 응답 가능 여부만 반환한다." + }, + "970": { + "node_id": 1023, + "content": "turn a wrong path into the right one instead of into an empty answer." + }, + "971": { + "node_id": 1024, + "content": "answer \"what is in here\" exactly, so the ranked tools do not have to." + }, + "972": { + "node_id": 1025, + "content": "provide one application entry point for \"what is in here\"." + }, + "973": { + "node_id": 1026, + "content": "make the graph dependency explicit at composition time." + }, + "974": { + "node_id": 1028, + "content": "hand back a file's contents in the order a reader would scroll through them." + }, + "975": { + "node_id": 1029, + "content": "answer a wrong path with the right one." + }, + "976": { + "node_id": 1030, + "content": "turn a recursive row set into the one level a caller can choose from." + }, + "977": { + "node_id": 1030, + "content": "a child folder's counts include everything nested below it." + }, + "978": { + "node_id": 1031, + "content": "decide a row's immediate bucket without walking the whole path." + }, + "979": { + "node_id": 1032, + "content": "make \"./internal/app/\", \"internal/app\" and \"internal//app\" the same target." + }, + "98": { + "node_id": 143, + "content": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다." + }, + "980": { + "node_id": 1033, + "content": "recover the stored short name from a dotted or slashed guess." + }, + "983": { + "node_id": 1036, + "content": "전체 문서 산출물을 한 번에 다시 생성한다." + }, + "984": { + "node_id": 1037, + "content": "prevent path-traversal writes before any file I/O is attempted" + }, + "986": { + "node_id": 1039, + "content": "심볼 문서에 호출 관계를 표시할 최소 엣지 집합만 조회한다." + }, + "987": { + "node_id": 1040, + "content": "isolate manifest files per namespace so concurrent namespaces do not collide" + }, + "988": { + "node_id": 1041, + "content": "restore the prior output file list so Run can compute stale files to prune" + }, + "989": { + "node_id": 1042, + "content": "record which files were written so future runs can detect and remove stale docs" + }, + "99": { + "node_id": 144, + "content": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다." + }, + "990": { + "node_id": 1043, + "content": "clean up stale generated docs without touching manually created files" + }, + "991": { + "node_id": 1045, + "content": "track expected output files so the manifest and prune step stay consistent" + }, + "995": { + "node_id": 1049, + "content": "해석되지 않는 @see 참조를 수집해 문서 링크 정합성을 점검한다." + }, + "997": { + "node_id": 1051, + "content": "문서 파일, 그래프 노드, 어노테이션을 교차 검증해 문서 건강 상태를 계산한다." + }, + "998": { + "node_id": 1053, + "content": "collect only the Markdown files that belong to the active docs namespace." + }, + "999": { + "node_id": 1053, + "content": "named namespaces trust their scoped manifest; without one, foreign docs in the shared output dir are ignored." + } }, - "anotation": {}, - "bounded traversal": { - "corpus": 1901, - "terms": [ - { - "text": "bounded", - "in_reasons": 26 - }, - { - "text": "traversal", - "in_reasons": 39 - } + "queries": { + "BuildContent": [], + "RunMigrations": [ + 1779 ], - "hits": [ - { - "id": 971, - "name": "FlowSummary", - "qualified_name": "analyze.FlowSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry bounded stored-flow facts independently of persistence rows.", - "reason": "carry bounded stored-flow facts independently of persistence rows.", - "terms": [ - "bounded" - ] - }, - { - "id": 1179, - "name": "Find", - "qualified_name": "resolve.ImportFileIndex.Find", - "kind": "function", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "preserve GraphStore import lookup precedence using bounded map reads.", - "reason": "preserve GraphStore import lookup precedence using bounded map reads.", - "terms": [ - "bounded" - ] - }, - { - "id": 436, - "name": "runGitLimited", - "qualified_name": "gitexec.runGitLimited", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "share a single bounded git invocation helper across diff operations", - "reason": "share a single bounded git invocation helper across diff operations", - "terms": [ - "bounded" - ] - }, - { - "id": 1303, - "name": "add", - "qualified_name": "workflow.buildPersistBatch.add", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "accumulate work between flushes so persistence happens in bounded chunks.", - "reason": "accumulate work between flushes so persistence happens in bounded chunks.", - "terms": [ - "bounded" - ] - }, - { - "id": 1594, - "name": "pathScore", - "qualified_name": "rank.pathScore", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "use matching path segments as a bounded secondary relevance signal.", - "reason": "use matching path segments as a bounded secondary relevance signal.", - "terms": [ - "bounded" - ] - }, - { - "id": 1943, - "name": "GraphResponse", - "qualified_name": "GraphResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry bounded namespace graph data for the visual graph tab.", - "reason": "carry bounded namespace graph data for the visual graph tab.", - "terms": [ - "bounded" - ] - }, - { - "id": 1958, - "name": "getGraph", - "qualified_name": "getGraph", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "load a bounded namespace graph for the visual graph tab.", - "reason": "load a bounded namespace graph for the visual graph tab.", - "terms": [ - "bounded" - ] - }, - { - "id": 475, - "name": "GetNodeByID", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodeByID", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "resolve traversal frontiers that crossed into another namespace.", - "reason": "resolve traversal frontiers that crossed into another namespace.", - "terms": [ - "traversal" - ] - }, - { - "id": 977, - "name": "New", - "qualified_name": "query.New", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "construct a service for common graph traversal queries", - "reason": "construct a service for common graph traversal queries", - "terms": [ - "traversal" - ] - }, - { - "id": 375, - "name": "graphResponse", - "qualified_name": "wikiserver.graphResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return bounded graph data and truncation metadata to the Wiki UI.", - "reason": "return bounded graph data and truncation metadata to the Wiki UI.", - "terms": [ - "bounded" - ] - }, - { - "id": 1088, - "name": "readRecord", - "qualified_name": "incremental.deferredEdgeSpool.readRecord", - "kind": "function", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "let edge resolution remain bounded by the original source batch size.", - "reason": "let edge resolution remain bounded by the original source batch size.", - "terms": [ - "bounded" - ] - }, - { - "id": 1346, - "name": "add", - "qualified_name": "workflow.unreadableFileSummary.add", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "collect every offending path while keeping summary output bounded for logs.", - "reason": "collect every offending path while keeping summary output bounded for logs.", - "terms": [ - "bounded" - ] - }, - { - "id": 1506, - "name": "upsertRepoStatLocked", - "qualified_name": "reposync.SyncQueue.upsertRepoStatLocked", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "maintain a bounded MRU view of repository stats without unbounded growth.", - "reason": "maintain a bounded MRU view of repository stats without unbounded growth.", - "terms": [ - "bounded" - ] - }, - { - "id": 1952, - "name": "TreeRequest", - "qualified_name": "TreeRequest", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a bounded Wiki tree request used for lazy folder expansion.", - "reason": "describe a bounded Wiki tree request used for lazy folder expansion.", - "terms": [ - "bounded" - ] - }, - { - "id": 248, - "name": "queryGraphResultItem", - "qualified_name": "mcp.queryGraphResultItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable DTO for paged graph traversal results.", - "reason": "preserve a stable DTO for paged graph traversal results.", - "terms": [ - "traversal" - ] - }, - { - "id": 471, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for cross-namespace traversal.", - "terms": [ - "traversal" - ] - }, - { - "id": 1807, - "name": "CallEdgeKinds", - "qualified_name": "graph.CallEdgeKinds", - "kind": "function", - "file_path": "internal/domain/graph/edge.go", - "intent": "centralize call-kind handling for traversal and filtering paths.", - "reason": "centralize call-kind handling for traversal and filtering paths.", - "terms": [ - "traversal" - ] - }, - { - "id": 1808, - "name": "IsCallKind", - "qualified_name": "graph.IsCallKind", - "kind": "function", - "file_path": "internal/domain/graph/edge.go", - "intent": "centralize call-kind handling for traversal and filtering paths.", - "reason": "centralize call-kind handling for traversal and filtering paths.", - "terms": [ - "traversal" - ] - }, - { - "id": 356, - "name": "handleGraph", - "qualified_name": "wikiserver.Server.handleGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return a bounded namespace graph for the browser force-directed graph viewer.", - "reason": "return a bounded namespace graph for the browser force-directed graph viewer.", - "terms": [ - "bounded" - ] - }, - { - "id": 401, - "name": "boundedIntParam", - "qualified_name": "wikiserver.boundedIntParam", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "parse bounded integer query parameters for lightweight API pagination and tree depth.", - "reason": "parse bounded integer query parameters for lightweight API pagination and tree depth.", - "terms": [ - "bounded" - ] - }, - { - "id": 539, - "name": "UpsertAnnotations", - "qualified_name": "graphgorm.Store.UpsertAnnotations", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "reason": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "terms": [ - "bounded" - ] - }, - { - "id": 1953, - "name": "getTree", - "qualified_name": "getTree", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "load the RAG tree or a bounded subtree for the active namespace.", - "reason": "load the RAG tree or a bounded subtree for the active namespace.", - "terms": [ - "bounded" - ] - }, - { - "id": 472, - "name": "GetEdgesFromNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFromNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "expand traversal frontiers across repository boundaries in one query pair.", - "reason": "expand traversal frontiers across repository boundaries in one query pair.", - "terms": [ - "traversal" - ] - }, - { - "id": 473, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "terms": [ - "traversal" - ] - }, - { - "id": 476, - "name": "GetNodesByIDs", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodesByIDs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "load result nodes for cross-namespace traversals in one query.", - "reason": "load result nodes for cross-namespace traversals in one query.", - "terms": [ - "traversal" - ] - }, - { - "id": 477, - "name": "crossRefEdges", - "qualified_name": "graphgorm.crossRefEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "reason": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "terms": [ - "traversal" - ] - }, - { - "id": 944, - "name": "TraceOptions", - "qualified_name": "flow.TraceOptions", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "let callers cap traversal cost when tracing large call graphs", - "reason": "let callers cap traversal cost when tracing large call graphs", - "terms": [ - "traversal" - ] - }, - { - "id": 951, - "name": "EdgeReader", - "qualified_name": "impact.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "abstract bidirectional edge and node lookups for blast-radius traversal", - "reason": "abstract bidirectional edge and node lookups for blast-radius traversal", - "terms": [ - "traversal" - ] - }, - { - "id": 1159, - "name": "PackageDiscoverer", - "qualified_name": "ingest.PackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "delegate language-specific package discovery while ingest owns traversal policy.", - "reason": "delegate language-specific package discovery while ingest owns traversal policy.", - "terms": [ - "traversal" - ] - }, - { - "id": 1342, - "name": "shouldSkipDir", - "qualified_name": "workflow.shouldSkipDir", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep default source traversal exclusions local to the ingest workflow.", - "reason": "keep default source traversal exclusions local to the ingest workflow.", - "terms": [ - "traversal" - ] - }, - { - "id": 361, - "name": "loadWikiTreeRange", - "qualified_name": "wikiserver.Server.loadWikiTreeRange", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "build one bounded Wiki tree range from DB rows for lazy browser navigation.", - "reason": "build one bounded Wiki tree range from DB rows for lazy browser navigation.", - "terms": [ - "bounded" - ] - }, - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "bounded" - ] - }, - { - "id": 1497, - "name": "Shutdown", - "qualified_name": "reposync.SyncQueue.Shutdown", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "reason": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "terms": [ - "bounded" - ] - }, - { - "id": 1499, - "name": "buildRecentReposLocked", - "qualified_name": "reposync.SyncQueue.buildRecentReposLocked", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue.", - "reason": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue.", - "terms": [ - "bounded" - ] - }, - { - "id": 258, - "name": "queryGraph", - "qualified_name": "mcp.handlers.queryGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose repeated graph traversals through one pattern-driven tool entry point.", - "reason": "expose repeated graph traversals through one pattern-driven tool entry point.", - "terms": [ - "traversal" - ] - }, - { - "id": 261, - "name": "queryGraphInNamespace", - "qualified_name": "mcp.handlers.queryGraphInNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "share one traversal implementation between single-namespace and federated query_graph calls.", - "reason": "share one traversal implementation between single-namespace and federated query_graph calls.", - "terms": [ - "traversal" - ] - }, - { - "id": 298, - "name": "ensureNoSymlinkInPath", - "qualified_name": "mcp.ensureNoSymlinkInPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "prevent symlink traversal from escaping the namespace root before a read.", - "reason": "prevent symlink traversal from escaping the namespace root before a read.", - "terms": [ - "traversal" - ] - }, - { - "id": 957, - "name": "ImpactRadiusBounded", - "qualified_name": "impact.Analyzer.ImpactRadiusBounded", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "terms": [ - "traversal" - ] - }, - { - "id": 1037, - "name": "validateDocGroups", - "qualified_name": "docs.Generator.validateDocGroups", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "prevent path-traversal writes before any file I/O is attempted", - "reason": "prevent path-traversal writes before any file I/O is attempted", - "terms": [ - "traversal" - ] - }, - { - "id": 1127, - "name": "sortedFilePaths", - "qualified_name": "incremental.sortedFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "reason": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "terms": [ - "traversal" - ] - }, - { - "id": 1888, - "name": "internal/safepath/namespace.go", - "qualified_name": "internal/safepath/namespace.go", - "kind": "file", - "file_path": "internal/safepath/namespace.go", - "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "terms": [ - "traversal" - ] - }, - { - "id": 1889, - "name": "ValidateNamespacePath", - "qualified_name": "safepath.ValidateNamespacePath", - "kind": "function", - "file_path": "internal/safepath/namespace.go", - "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "terms": [ - "traversal" - ] - }, - { - "id": 527, - "name": "DeleteNodesByFile", - "qualified_name": "graphgorm.Store.DeleteNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "reason": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "terms": [ - "bounded" - ] - }, - { - "id": 182, - "name": "impactRadiusMetadata", - "qualified_name": "mcp.impactRadiusMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "reason": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "terms": [ - "traversal" - ] - }, - { - "id": 222, - "name": "safePathUnderRoot", - "qualified_name": "mcp.safePathUnderRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "reject relative paths that would resolve outside the resolved docs root.", - "reason": "reject relative paths that would resolve outside the resolved docs root.", - "terms": [ - "traversal" - ] - }, - { - "id": 250, - "name": "queryGraphResponse", - "qualified_name": "mcp.queryGraphResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable response envelope for predefined graph traversals and their evidence.", - "reason": "preserve a stable response envelope for predefined graph traversals and their evidence.", - "terms": [ - "traversal" - ] - }, - { - "id": 259, - "name": "queryGraphFederatedResponse", - "qualified_name": "mcp.queryGraphFederatedResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "group per-namespace traversal outcomes under one envelope with per-namespace errors.", - "reason": "group per-namespace traversal outcomes under one envelope with per-namespace errors.", - "terms": [ - "traversal" - ] - }, - { - "id": 296, - "name": "resolveNamespacePath", - "qualified_name": "mcp.handlers.resolveNamespacePath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "reason": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "terms": [ - "traversal" - ] - }, - { - "id": 350, - "name": "safeStaticPath", - "qualified_name": "wikiserver.Server.safeStaticPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a request path under the static dist directory without allowing traversal.", - "reason": "resolve a request path under the static dist directory without allowing traversal.", - "terms": [ - "traversal" - ] - }, - { - "id": 784, - "name": "parseTypeScriptHeritageNode", - "qualified_name": "treesitter.parseTypeScriptHeritageNode", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "avoid comma-splitting inside generic arguments by preferring grammar-aware node traversal.", - "reason": "avoid comma-splitting inside generic arguments by preferring grammar-aware node traversal.", - "terms": [ - "traversal" - ] - } - ] - }, - "cfg": {}, - "cross ref": { - "corpus": 1901, - "terms": [ - { - "text": "cross", - "in_reasons": 40 - }, - { - "text": "ref", - "in_reasons": 16 - } + "SanitizeFTS5": [], + "UnresolvedEdgeCandidate": [], + "annot": [ + 41, + 162, + 195, + 196, + 208, + 304, + 323, + 333, + 340, + 341, + 413, + 427, + 432, + 471, + 486, + 487, + 488, + 489, + 513, + 593, + 719, + 723, + 738, + 827, + 954, + 962, + 1018, + 1019, + 1021, + 1023, + 1027, + 1062, + 1069, + 1243, + 1253, + 1262, + 1291, + 1471, + 1582, + 1589, + 1590, + 1592, + 1609, + 1616, + 1620, + 1621, + 1623, + 1625, + 1627, + 1727, + 1728, + 1729, + 1730, + 1731, + 1737, + 1738, + 1742, + 1744, + 1753, + 1754, + 1787, + 1789, + 1882, + 1883, + 1884, + 1887, + 1902, + 1904 ], - "hits": [ - { - "id": 490, - "name": "ccgRefNodeQuery", - "qualified_name": "graphgorm.Store.ccgRefNodeQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "reason": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "terms": [ - "cross", - "ref" - ] - }, - { - "id": 480, - "name": "ResolveCCGRef", - "qualified_name": "graphgorm.Store.ResolveCCGRef", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "reason": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "terms": [ - "cross", - "ref" - ] - }, - { - "id": 1360, - "name": "CrossRefSyncer", - "qualified_name": "workflow.CrossRefSyncer", - "kind": "type", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "let build/update trigger cross-ref materialization without depending on its implementation.", - "reason": "let build/update trigger cross-ref materialization without depending on its implementation.", - "terms": [ - "cross", - "ref" - ] - }, - { - "id": 481, - "name": "ReplaceCrossRefsFrom", - "qualified_name": "graphgorm.Store.ReplaceCrossRefsFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "make outbound cross-ref state a pure function of the namespace's current annotations.", - "reason": "make outbound cross-ref state a pure function of the namespace's current annotations.", - "terms": [ - "cross", - "ref" - ] - }, - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "cross" - ] - }, - { - "id": 371, - "name": "refResponse", - "qualified_name": "wikiserver.refResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return the resolved Wiki navigation target for one ccg:// ref.", - "reason": "return the resolved Wiki navigation target for one ccg:// ref.", - "terms": [ - "ref" - ] - }, - { - "id": 78, - "name": "internal/adapters/inbound/cli/lint.go", - "qualified_name": "internal/adapters/inbound/cli/lint.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "ensure rule matching uses consistent category keys regardless of input spelling", - "reason": "ensure rule matching uses consistent category keys regardless of input spelling", - "terms": [ - "ref" - ] - }, - { - "id": 79, - "name": "normalizeLintCategory", - "qualified_name": "cli.normalizeLintCategory", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "ensure rule matching uses consistent category keys regardless of input spelling", - "reason": "ensure rule matching uses consistent category keys regardless of input spelling", - "terms": [ - "ref" - ] - }, - { - "id": 1945, - "name": "RefTarget", - "qualified_name": "RefTarget", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe the Wiki and graph destination resolved from one ccg:// ref.", - "reason": "describe the Wiki and graph destination resolved from one ccg:// ref.", - "terms": [ - "ref" - ] - }, - { - "id": 372, - "name": "refTarget", - "qualified_name": "wikiserver.refTarget", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "describe the doc and graph destinations available for a resolved ccg:// ref.", - "reason": "describe the doc and graph destinations available for a resolved ccg:// ref.", - "terms": [ - "ref" - ] - }, - { - "id": 383, - "name": "findRefTreeNode", - "qualified_name": "wikiserver.findRefTreeNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "reason": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "terms": [ - "ref" - ] - }, - { - "id": 1946, - "name": "RefResponse", - "qualified_name": "RefResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return the parsed ref plus the browser navigation target for a ccg:// link.", - "reason": "return the parsed ref plus the browser navigation target for a ccg:// link.", - "terms": [ - "ref" - ] - }, - { - "id": 1924, - "name": "GraphViewProps", - "qualified_name": "GraphViewProps", - "kind": "type", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "configure the namespace graph viewer, focused ccg ref node navigation, and node-open callback.", - "reason": "configure the namespace graph viewer, focused ccg ref node navigation, and node-open callback.", - "terms": [ - "ref" - ] - }, - { - "id": 475, - "name": "GetNodeByID", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodeByID", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "resolve traversal frontiers that crossed into another namespace.", - "reason": "resolve traversal frontiers that crossed into another namespace.", - "terms": [ - "cross" - ] - }, - { - "id": 365, - "name": "findRefGraphNode", - "qualified_name": "wikiserver.Server.findRefGraphNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "reason": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "terms": [ - "ref" - ] - }, - { - "id": 471, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for cross-namespace traversal.", - "terms": [ - "cross" - ] - }, - { - "id": 1191, - "name": "loadExistingImplements", - "qualified_name": "resolve.resolveState.loadExistingImplements", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "enable cross-file interface resolution by loading historical data.", - "reason": "enable cross-file interface resolution by loading historical data.", - "terms": [ - "cross" - ] - }, - { - "id": 1913, - "name": "openRefDoc", - "qualified_name": "openRefDoc", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details.", - "reason": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details.", - "terms": [ - "ref" - ] - }, - { - "id": 1914, - "name": "openRefGraph", - "qualified_name": "openRefGraph", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "reason": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "terms": [ - "ref" - ] - }, - { - "id": 473, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "terms": [ - "cross" - ] - }, - { - "id": 476, - "name": "GetNodesByIDs", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodesByIDs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "load result nodes for cross-namespace traversals in one query.", - "reason": "load result nodes for cross-namespace traversals in one query.", - "terms": [ - "cross" - ] - }, - { - "id": 1190, - "name": "loadFileNodes", - "qualified_name": "resolve.resolveState.loadFileNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "ensure target file contents are available for cross-file resolution.", - "reason": "ensure target file contents are available for cross-file resolution.", - "terms": [ - "cross" - ] - }, - { - "id": 1379, - "name": "withImportPackageContext", - "qualified_name": "workflow.Service.withImportPackageContext", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "ensure cross-package imports can be resolved using their semantic names.", - "reason": "ensure cross-package imports can be resolved using their semantic names.", - "terms": [ - "cross" - ] - }, - { - "id": 1835, - "name": "Ref", - "qualified_name": "reference.Ref", - "kind": "class", - "file_path": "internal/domain/reference/ref.go", - "intent": "represent cross-namespace @see links without coupling annotations to graph storage.", - "reason": "represent cross-namespace @see links without coupling annotations to graph storage.", - "terms": [ - "cross" - ] - }, - { - "id": 1937, - "name": "CCGRef", - "qualified_name": "CCGRef", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "reason": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "terms": [ - "cross" - ] - }, - { - "id": 479, - "name": "ListAnnotationCCGRefs", - "qualified_name": "graphgorm.Store.ListAnnotationCCGRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "collect the source facts for rebuilding a namespace's outbound cross refs.", - "reason": "collect the source facts for rebuilding a namespace's outbound cross refs.", - "terms": [ - "cross" - ] - }, - { - "id": 489, - "name": "CCGRefExists", - "qualified_name": "graphgorm.Store.CCGRefExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "reason": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "terms": [ - "cross" - ] - }, - { - "id": 942, - "name": "nodeBatchReader", - "qualified_name": "flow.nodeBatchReader", - "kind": "type", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "let cross-namespace readers label foreign members without widening the EdgeReader contract.", - "reason": "let cross-namespace readers label foreign members without widening the EdgeReader contract.", - "terms": [ - "cross" - ] - }, - { - "id": 1003, - "name": "AnnotationRef", - "qualified_name": "crossref.AnnotationRef", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "carry the minimal source facts needed to materialize a cross-namespace reference.", - "reason": "carry the minimal source facts needed to materialize a cross-namespace reference.", - "terms": [ - "cross" - ] - }, - { - "id": 1005, - "name": "Service", - "qualified_name": "crossref.Service", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "reason": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "terms": [ - "cross" - ] - }, - { - "id": 1085, - "name": "deferredEdgeSpool", - "qualified_name": "incremental.deferredEdgeSpool", - "kind": "class", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "preserve parsed cross-batch edges until every changed node has been applied.", - "reason": "preserve parsed cross-batch edges until every changed node has been applied.", - "terms": [ - "cross" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "cross" - ] - }, - { - "id": 1087, - "name": "writeRecord", - "qualified_name": "incremental.deferredEdgeSpool.writeRecord", - "kind": "function", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "defer cross-file edge resolution until all batch-local node replacements are complete.", - "reason": "defer cross-file edge resolution until all batch-local node replacements are complete.", - "terms": [ - "cross" - ] - }, - { - "id": 1363, - "name": "syncCrossRefs", - "qualified_name": "workflow.Service.syncCrossRefs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "keep cross-namespace reference state current without making it a hard build dependency.", - "reason": "keep cross-namespace reference state current without making it a hard build dependency.", - "terms": [ - "cross" - ] - }, - { - "id": 1836, - "name": "Is", - "qualified_name": "reference.Is", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "let callers branch between local @see values and cross-namespace CCG refs cheaply.", - "reason": "let callers branch between local @see values and cross-namespace CCG refs cheaply.", - "terms": [ - "cross" - ] - }, - { - "id": 184, - "name": "traceFlowMember", - "qualified_name": "mcp.traceFlowMember", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "serialize flow member references without exposing the full node record.", - "reason": "serialize flow member references without exposing the full node record.", - "terms": [ - "cross" - ] - }, - { - "id": 470, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.Store.CrossNamespaceReader", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "derive the cross-repository read surface from an existing store without new wiring inputs.", - "reason": "derive the cross-repository read surface from an existing store without new wiring inputs.", - "terms": [ - "cross" - ] - }, - { - "id": 1055, - "name": "ccgRefExists", - "qualified_name": "docs.Generator.ccgRefExists", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "reason": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "terms": [ - "cross" - ] - }, - { - "id": 1169, - "name": "FileBatchVisitor", - "qualified_name": "ingest.FileBatchVisitor", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "reason": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "terms": [ - "cross" - ] - }, - { - "id": 289, - "name": "nodeSummary", - "qualified_name": "mcp.nodeSummary", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "reuse one typed node representation across multiple tool responses.", - "reason": "reuse one typed node representation across multiple tool responses.", - "terms": [ - "cross" - ] - }, - { - "id": 824, - "name": "importAliasesBySimpleName", - "qualified_name": "treesitter.importAliasesBySimpleName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "support cross-package hierarchy resolution by recovering fully qualified imported type names from source imports.", - "reason": "support cross-package hierarchy resolution by recovering fully qualified imported type names from source imports.", - "terms": [ - "cross" - ] - }, - { - "id": 1356, - "name": "forceReparseFiles", - "qualified_name": "workflow.forceReparseFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "reason": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "terms": [ - "cross" - ] - }, - { - "id": 435, - "name": "validateBaseRef", - "qualified_name": "gitexec.validateBaseRef", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag.", - "reason": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag.", - "terms": [ - "ref" - ] - }, - { - "id": 355, - "name": "readDBFallbackDoc", - "qualified_name": "wikiserver.Server.readDBFallbackDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "reason": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "terms": [ - "cross" - ] - }, - { - "id": 1385, - "name": "importPackageContext", - "qualified_name": "workflow.importPackageContext", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "normalize discovered package imports into the canonical names used when resolving cross-file imports during parsing.", - "reason": "normalize discovered package imports into the canonical names used when resolving cross-file imports during parsing.", - "terms": [ - "cross" - ] - }, - { - "id": 1435, - "name": "newUpdateSpoolBatchSource", - "qualified_name": "workflow.newUpdateSpoolBatchSource", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "reason": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "terms": [ - "cross" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "cross" - ] - }, - { - "id": 1115, - "name": "syncBatchesWithExisting", - "qualified_name": "incremental.Syncer.syncBatchesWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "reason": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "terms": [ - "cross" - ] - }, - { - "id": 1116, - "name": "stageBatch", - "qualified_name": "incremental.Syncer.stageBatch", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "terms": [ - "cross" - ] - }, - { - "id": 1431, - "name": "applyUpdateSpoolInTx", - "qualified_name": "workflow.Service.applyUpdateSpoolInTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "terms": [ - "cross" - ] - } - ] - }, - "crossref": { - "corpus": 1901, - "terms": [ - { - "text": "crossref", - "in_reasons": 1 - } + "anotation": [], + "bounded traversal": [ + 118, + 135, + 174, + 192, + 198, + 200, + 209, + 211, + 212, + 213, + 249, + 251, + 295, + 302, + 307, + 322, + 348, + 353, + 382, + 416, + 417, + 418, + 420, + 421, + 422, + 459, + 470, + 488, + 602, + 729, + 757, + 893, + 901, + 908, + 922, + 927, + 984, + 1033, + 1068, + 1073, + 1107, + 1128, + 1129, + 1154, + 1250, + 1257, + 1288, + 1293, + 1316, + 1450, + 1452, + 1459, + 1463, + 1531, + 1544, + 1759, + 1760, + 1838, + 1840, + 1842, + 1844, + 1890, + 1899, + 1900, + 1905 ], - "hits": [ - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "crossref" - ] - } - ] - }, - "discovery": { - "corpus": 1901, - "terms": [ - { - "text": "discovery", - "in_reasons": 20 - } + "cfg": [], + "cross ref": [ + 25, + 27, + 126, + 138, + 244, + 300, + 312, + 318, + 319, + 330, + 381, + 415, + 416, + 418, + 420, + 421, + 423, + 424, + 427, + 435, + 436, + 769, + 890, + 891, + 952, + 954, + 956, + 961, + 1001, + 1030, + 1032, + 1060, + 1062, + 1118, + 1120, + 1138, + 1139, + 1302, + 1305, + 1308, + 1323, + 1329, + 1373, + 1377, + 1787, + 1788, + 1861, + 1862, + 1871, + 1884, + 1892, + 1893 ], - "hits": [ - { - "id": 1384, - "name": "mergeLanguagePackages", - "qualified_name": "workflow.mergeLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "consolidate package discovery results while discarding conflicting definitions.", - "reason": "consolidate package discovery results while discarding conflicting definitions.", - "terms": [ - "discovery" - ] - }, - { - "id": 561, - "name": "Namespaces", - "qualified_name": "graphgorm.Store.Namespaces", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "reason": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "terms": [ - "discovery" - ] - }, - { - "id": 695, - "name": "workspacePatternMatchParts", - "qualified_name": "treesitter.workspacePatternMatchParts", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "implement **-aware workspace glob semantics for package root discovery.", - "reason": "implement **-aware workspace glob semantics for package root discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 844, - "name": "walkPythonDocstrings", - "qualified_name": "treesitter.walkPythonDocstrings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "implement Python docstring discovery separately from the generic Walker.", - "reason": "implement Python docstring discovery separately from the generic Walker.", - "terms": [ - "discovery" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "discovery" - ] - }, - { - "id": 1375, - "name": "languagePackageDiscoverer", - "qualified_name": "workflow.languagePackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "select deterministic package discovery capabilities through the parser port.", - "reason": "select deterministic package discovery capabilities through the parser port.", - "terms": [ - "discovery" - ] - }, - { - "id": 694, - "name": "workspacePatternMatch", - "qualified_name": "treesitter.workspacePatternMatch", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep workspace package discovery independent from shell-specific glob expansion.", - "reason": "keep workspace package discovery independent from shell-specific glob expansion.", - "terms": [ - "discovery" - ] - }, - { - "id": 1159, - "name": "PackageDiscoverer", - "qualified_name": "ingest.PackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "delegate language-specific package discovery while ingest owns traversal policy.", - "reason": "delegate language-specific package discovery while ingest owns traversal policy.", - "terms": [ - "discovery" - ] - }, - { - "id": 1353, - "name": "ExistingGraphFiles", - "qualified_name": "workflow.ExistingGraphFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "share deletion-scope discovery across CLI and MCP incremental updates", - "reason": "share deletion-scope discovery across CLI and MCP incremental updates", - "terms": [ - "discovery" - ] - }, - { - "id": 690, - "name": "readPNPMWorkspacePatterns", - "qualified_name": "treesitter.readPNPMWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "include pnpm-managed workspace package roots in Node-family package discovery.", - "reason": "include pnpm-managed workspace package roots in Node-family package discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 739, - "name": "internal/adapters/outbound/treesitter/semantics_go.go", - "qualified_name": "internal/adapters/outbound/treesitter/semantics_go.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 740, - "name": "GoSemantics", - "qualified_name": "treesitter.GoSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 653, - "name": "DiscoverPackages", - "qualified_name": "treesitter.Walker.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "implement the ingest package-discovery port without exposing LangSpec to the application.", - "reason": "implement the ingest package-discovery port without exposing LangSpec to the application.", - "terms": [ - "discovery" - ] - }, - { - "id": 676, - "name": "nodePackageDiscoveryConfig", - "qualified_name": "treesitter.nodePackageDiscoveryConfig", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "reason": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "terms": [ - "discovery" - ] - }, - { - "id": 693, - "name": "matchesWorkspacePatterns", - "qualified_name": "treesitter.matchesWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "reason": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 1150, - "name": "PackageDiscoveryOptions", - "qualified_name": "ingest.PackageDiscoveryOptions", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "reason": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 681, - "name": "discoverNodePackages", - "qualified_name": "treesitter.discoverNodePackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently.", - "reason": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently.", - "terms": [ - "discovery" - ] - }, - { - "id": 701, - "name": "stripJSONComments", - "qualified_name": "treesitter.stripJSONComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "reason": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "terms": [ - "discovery" - ] - }, - { - "id": 1149, - "name": "PackageInfo", - "qualified_name": "ingest.PackageInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "reason": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "terms": [ - "discovery" - ] - }, - { - "id": 652, - "name": "DiscoverPackages", - "qualified_name": "treesitter.NoopPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "let callers reuse one package-discovery flow even when a language has no package model.", - "reason": "let callers reuse one package-discovery flow even when a language has no package model.", - "terms": [ - "discovery" - ] - } - ] - }, - "flow membership": { - "corpus": 1901, - "terms": [ - { - "text": "flow", - "in_reasons": 52 - }, - { - "text": "membership", - "in_reasons": 8 - } + "crossref": [ + 126 ], - "hits": [ - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "flow", - "membership" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "flow", - "membership" - ] - }, - { - "id": 506, - "name": "TopCommunities", - "qualified_name": "graphgorm.Store.TopCommunities", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace communities by stored membership count.", - "reason": "rank namespace communities by stored membership count.", - "terms": [ - "membership" - ] - }, - { - "id": 973, - "name": "NamedCount", - "qualified_name": "analyze.NamedCount", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "represent ranked membership aggregates without exposing SQL scan structs.", - "reason": "represent ranked membership aggregates without exposing SQL scan structs.", - "terms": [ - "membership" - ] - }, - { - "id": 198, - "name": "sliceContainsString", - "qualified_name": "mcp.sliceContainsString", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "linear membership check for small string slices used by allowlist evaluation.", - "reason": "linear membership check for small string slices used by allowlist evaluation.", - "terms": [ - "membership" - ] - }, - { - "id": 1376, - "name": "collectLanguagePackages", - "qualified_name": "workflow.Service.collectLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "identify package boundaries and file memberships to populate the graph's package structure.", - "reason": "identify package boundaries and file memberships to populate the graph's package structure.", - "terms": [ - "membership" - ] - }, - { - "id": 936, - "name": "Builder", - "qualified_name": "flow.Builder", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "persists traced flows per entrypoint back into the flows table.", - "reason": "persists traced flows per entrypoint back into the flows table.", - "terms": [ - "flow" - ] - }, - { - "id": 1149, - "name": "PackageInfo", - "qualified_name": "ingest.PackageInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "reason": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "terms": [ - "membership" - ] - }, - { - "id": 959, - "name": "FlowRebuildStore", - "qualified_name": "analyze.FlowRebuildStore", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "let flow application policy trace and replace flows without importing a database adapter.", - "reason": "let flow application policy trace and replace flows without importing a database adapter.", - "terms": [ - "flow" - ] - }, - { - "id": 960, - "name": "FlowUnitOfWork", - "qualified_name": "analyze.FlowUnitOfWork", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "reason": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "terms": [ - "flow" - ] - }, - { - "id": 194, - "name": "getAffectedFlows", - "qualified_name": "mcp.handlers.getAffectedFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "reason": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "terms": [ - "flow" - ] - }, - { - "id": 945, - "name": "TraceResult", - "qualified_name": "flow.TraceResult", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "communicate truncation status alongside the produced flow", - "reason": "communicate truncation status alongside the produced flow", - "terms": [ - "flow" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "flow" - ] - }, - { - "id": 1557, - "name": "CanAnswer", - "qualified_name": "intent.Result.CanAnswer", - "kind": "function", - "file_path": "internal/app/search/intent/intent.go", - "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason.", - "terms": [ - "membership" - ] - }, - { - "id": 493, - "name": "DeleteFlows", - "qualified_name": "graphgorm.Store.DeleteFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "clear stale flow state before a transaction-scoped rebuild.", - "reason": "clear stale flow state before a transaction-scoped rebuild.", - "terms": [ - "flow" - ] - }, - { - "id": 934, - "name": "Config", - "qualified_name": "flow.Config", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "provides an extension point for stored flow rebuild configuration.", - "reason": "provides an extension point for stored flow rebuild configuration.", - "terms": [ - "flow" - ] - }, - { - "id": 941, - "name": "Tracer", - "qualified_name": "flow.Tracer", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "produce reusable flow records that describe reachable call paths", - "reason": "produce reusable flow records that describe reachable call paths", - "terms": [ - "flow" - ] - }, - { - "id": 971, - "name": "FlowSummary", - "qualified_name": "analyze.FlowSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry bounded stored-flow facts independently of persistence rows.", - "reason": "carry bounded stored-flow facts independently of persistence rows.", - "terms": [ - "flow" - ] - }, - { - "id": 184, - "name": "traceFlowMember", - "qualified_name": "mcp.traceFlowMember", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "serialize flow member references without exposing the full node record.", - "reason": "serialize flow member references without exposing the full node record.", - "terms": [ - "flow" - ] - }, - { - "id": 202, - "name": "minimalContextFlowInfo", - "qualified_name": "mcp.minimalContextFlowInfo", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_context.go", - "intent": "serialize minimal-context flow summaries without introducing extra response fields.", - "reason": "serialize minimal-context flow summaries without introducing extra response fields.", - "terms": [ - "flow" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "flow" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "flow" - ] - }, - { - "id": 938, - "name": "Rebuild", - "qualified_name": "flow.Builder.Rebuild", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "refreshes list_flows by replacing all stored flows within the namespace.", - "reason": "refreshes list_flows by replacing all stored flows within the namespace.", - "terms": [ - "flow" - ] - }, - { - "id": 190, - "name": "affectedFlowsResponse", - "qualified_name": "mcp.affectedFlowsResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "reason": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "terms": [ - "flow" - ] - }, - { - "id": 314, - "name": "registerPrompts", - "qualified_name": "mcp.registerPrompts", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts_register.go", - "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", - "reason": "package common review, onboarding, and debugging flows into reusable server prompts.", - "terms": [ - "flow" - ] - }, - { - "id": 502, - "name": "FlowsPage", - "qualified_name": "graphgorm.Store.FlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "load one stable namespace-scoped stored-flow page with member counts.", - "reason": "load one stable namespace-scoped stored-flow page with member counts.", - "terms": [ - "flow" - ] - }, - { - "id": 918, - "name": "sortNodesForChangeOrder", - "qualified_name": "changes.sortNodesForChangeOrder", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "prevent flow lookups from depending on database or map iteration order.", - "reason": "prevent flow lookups from depending on database or map iteration order.", - "terms": [ - "flow" - ] - }, - { - "id": 1270, - "name": "internal/app/ingest/resolve/resolve_go.go", - "qualified_name": "internal/app/ingest/resolve/resolve_go.go", - "kind": "file", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "reason": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 1271, - "name": "goLanguageDispatch", - "qualified_name": "resolve.goLanguageDispatch", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "reason": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 186, - "name": "traceFlowResponse", - "qualified_name": "mcp.traceFlowResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable response envelope for traced flow results and their evidence.", - "reason": "preserve a stable response envelope for traced flow results and their evidence.", - "terms": [ - "flow" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "flow" - ] - }, - { - "id": 495, - "name": "CreateFlow", - "qualified_name": "graphgorm.Store.CreateFlow", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "store traced flow aggregates while keeping generated IDs visible to application results.", - "reason": "store traced flow aggregates while keeping generated IDs visible to application results.", - "terms": [ - "flow" - ] - }, - { - "id": 504, - "name": "AffectedFlowsPage", - "qualified_name": "graphgorm.Store.AffectedFlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "terms": [ - "flow" - ] - }, - { - "id": 972, - "name": "AffectedFlow", - "qualified_name": "analyze.AffectedFlow", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "reason": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "terms": [ - "flow" - ] - }, - { - "id": 1281, - "name": "internal/app/ingest/resolve/resolve_rust.go", - "qualified_name": "internal/app/ingest/resolve/resolve_rust.go", - "kind": "file", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 1282, - "name": "rustLanguageDispatch", - "qualified_name": "resolve.rustLanguageDispatch", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 492, - "name": "WithinFlowRebuild", - "qualified_name": "graphgorm.Store.WithinFlowRebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "implement the analysis flow unit of work without exposing GORM to application policy.", - "reason": "implement the analysis flow unit of work without exposing GORM to application policy.", - "terms": [ - "flow" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "flow" - ] - }, - { - "id": 937, - "name": "NewBuilder", - "qualified_name": "flow.NewBuilder", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "binds the database and graph reader to create a stored flow rebuild service.", - "reason": "binds the database and graph reader to create a stored flow rebuild service.", - "terms": [ - "flow" - ] - }, - { - "id": 940, - "name": "EdgeReader", - "qualified_name": "flow.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "abstract graph reads so flow tracing can follow call edges from any store", - "reason": "abstract graph reads so flow tracing can follow call edges from any store", - "terms": [ - "flow" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "flow" - ] - }, - { - "id": 1333, - "name": "mergeFilterResolvedDiagnostics", - "qualified_name": "workflow.mergeFilterResolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "terms": [ - "flow" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "flow" - ] - }, - { - "id": 192, - "name": "traceFlow", - "qualified_name": "mcp.handlers.traceFlow", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "reconstruct the call flow containing the starting node so operators can understand execution context.", - "reason": "reconstruct the call flow containing the starting node so operators can understand execution context.", - "terms": [ - "flow" - ] - }, - { - "id": 226, - "name": "listFlows", - "qualified_name": "mcp.handlers.listFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "Exposes stored call flows in a summarized format to aid in exploration and prioritization.", - "reason": "Exposes stored call flows in a summarized format to aid in exploration and prioritization.", - "terms": [ - "flow" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "flow" - ] - }, - { - "id": 228, - "name": "derivedStateSummary", - "qualified_name": "mcp.derivedStateSummary", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "merge community and flow freshness hints into a single derived-state map for status responses.", - "reason": "merge community and flow freshness hints into a single derived-state map for status responses.", - "terms": [ - "flow" - ] - }, - { - "id": 652, - "name": "DiscoverPackages", - "qualified_name": "treesitter.NoopPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "let callers reuse one package-discovery flow even when a language has no package model.", - "reason": "let callers reuse one package-discovery flow even when a language has no package model.", - "terms": [ - "flow" - ] - }, - { - "id": 946, - "name": "defaultTraceOptions", - "qualified_name": "flow.defaultTraceOptions", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "reason": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "terms": [ - "flow" - ] - }, - { - "id": 287, - "name": "unwrapToolResultErr", - "qualified_name": "mcp.unwrapToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "terms": [ - "flow" - ] - } - ] - }, - "fts": { - "corpus": 1901, - "terms": [ - { - "text": "fts", - "in_reasons": 14 - } + "discovery": [ + 507, + 598, + 599, + 622, + 627, + 636, + 639, + 640, + 641, + 647, + 684, + 685, + 789, + 921, + 1095, + 1096, + 1107, + 1299, + 1319, + 1328 ], - "hits": [ - { - "id": 617, - "name": "RebuildNodes", - "qualified_name": "searchsql.SQLiteBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Avoids full namespace FTS reloading during incremental update paths.", - "reason": "Avoids full namespace FTS reloading during incremental update paths.", - "terms": [ - "fts" - ] - }, - { - "id": 623, - "name": "ftsRow", - "qualified_name": "searchsql.ftsRow", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "decode the single-column FTS result before joining back to nodes.", - "reason": "decode the single-column FTS result before joining back to nodes.", - "terms": [ - "fts" - ] - }, - { - "id": 644, - "name": "RefreshSearchDocuments", - "qualified_name": "searchsql.RefreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "keep derived search documents consistent with graph state before FTS rebuilds", - "reason": "keep derived search documents consistent with graph state before FTS rebuilds", - "terms": [ - "fts" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "fts" - ] - }, - { - "id": 602, - "name": "SanitizeFTS5", - "qualified_name": "searchsql.SanitizeFTS5", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "reason": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "terms": [ - "fts" - ] - }, - { - "id": 646, - "name": "refreshSearchDocuments", - "qualified_name": "searchsql.refreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "reason": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "terms": [ - "fts" - ] - }, - { - "id": 618, - "name": "PurgeNamespace", - "qualified_name": "searchsql.SQLiteBackend.PurgeNamespace", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "reason": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "terms": [ - "fts" - ] - }, - { - "id": 619, - "name": "rebuildTable", - "qualified_name": "searchsql.SQLiteBackend.rebuildTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "reason": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "terms": [ - "fts" - ] - }, - { - "id": 625, - "name": "Query", - "qualified_name": "searchsql.SQLiteBackend.Query", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "reason": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "terms": [ - "fts" - ] - }, - { - "id": 627, - "name": "upgradeLegacyFTSTable", - "qualified_name": "searchsql.SQLiteBackend.upgradeLegacyFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "reason": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "terms": [ - "fts" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "fts" - ] - }, - { - "id": 634, - "name": "createSQLiteFTSTable", - "qualified_name": "searchsql.createSQLiteFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "reason": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "terms": [ - "fts" - ] - }, - { - "id": 632, - "name": "buildSQLiteFTSInsert", - "qualified_name": "searchsql.buildSQLiteFTSInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "reason": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "terms": [ - "fts" - ] - }, - { - "id": 1704, - "name": "ConfigurePool", - "qualified_name": "db.ConfigurePool", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "apply connection-pool limits that match each database driver's concurrency model.", - "reason": "apply connection-pool limits that match each database driver's concurrency model.", - "terms": [ - "fts" - ] - } - ] - }, - "graphgorm crossref": { - "corpus": 1901, - "terms": [ - { - "text": "graphgorm", - "in_reasons": 0 - }, - { - "text": "crossref", - "in_reasons": 1 - } + "flow membership": [ + 118, + 119, + 137, + 140, + 144, + 146, + 148, + 153, + 156, + 177, + 178, + 179, + 191, + 234, + 241, + 267, + 271, + 413, + 438, + 439, + 440, + 442, + 447, + 449, + 451, + 452, + 582, + 598, + 865, + 867, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 891, + 892, + 894, + 895, + 897, + 898, + 899, + 910, + 911, + 922, + 923, + 924, + 1095, + 1218, + 1219, + 1229, + 1230, + 1280, + 1320, + 1510 ], - "hits": [ - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "crossref" - ] - } - ] - }, - "how do i follow a call chain": { - "corpus": 1901, - "terms": [ - { - "text": "follow", - "in_reasons": 10 - }, - { - "text": "call", - "in_reasons": 177 - }, - { - "text": "chain", - "in_reasons": 15 - } + "fts": [ + 543, + 563, + 565, + 566, + 567, + 568, + 571, + 573, + 575, + 580, + 582, + 591, + 593, + 1648 ], - "hits": [ - { - "id": 807, - "name": "CallRewriter", - "qualified_name": "treesitter.KotlinSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "rewrite member-call chains only when explicit property/value types prove the receiver chain.", - "reason": "rewrite member-call chains only when explicit property/value types prove the receiver chain.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 779, - "name": "collectTypeScriptMemberTypes", - "qualified_name": "treesitter.collectTypeScriptMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "prove intermediate member hops before rewriting TypeScript call chains.", - "reason": "prove intermediate member hops before rewriting TypeScript call chains.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 819, - "name": "collectKotlinMemberTypes", - "qualified_name": "treesitter.collectKotlinMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "prove receiver-member chains before rewriting Kotlin call selectors.", - "reason": "prove receiver-member chains before rewriting Kotlin call selectors.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 797, - "name": "selectorChainFromText", - "qualified_name": "treesitter.selectorChainFromText", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "share one normalized selector chain representation across call rewriting helpers.", - "reason": "share one normalized selector chain representation across call rewriting helpers.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 817, - "name": "collectJavaMemberTypes", - "qualified_name": "treesitter.collectJavaMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "prove intermediate receiver hops before rewriting Java member-call chains.", - "reason": "prove intermediate receiver hops before rewriting Java member-call chains.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 940, - "name": "EdgeReader", - "qualified_name": "flow.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "abstract graph reads so flow tracing can follow call edges from any store", - "reason": "abstract graph reads so flow tracing can follow call edges from any store", - "terms": [ - "follow", - "call" - ] - }, - { - "id": 774, - "name": "CallRewriter", - "qualified_name": "treesitter.TypeScriptSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "rewrite member-call chains only when explicit type annotations prove each hop.", - "reason": "rewrite member-call chains only when explicit type annotations prove each hop.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 803, - "name": "CallRewriter", - "qualified_name": "treesitter.JavaSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "rewrite member-call chains only when local/field declarations prove the receiver types.", - "reason": "rewrite member-call chains only when local/field declarations prove the receiver types.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 164, - "name": "FlowTracer", - "qualified_name": "mcp.FlowTracer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "reason": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 794, - "name": "RewriteCall", - "qualified_name": "treesitter.explicitReceiverTypeCallRewriter.RewriteCall", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "preserve conservative receiver dispatch by upgrading only typed call chains into owner-qualified selectors.", - "reason": "preserve conservative receiver dispatch by upgrading only typed call chains into owner-qualified selectors.", - "terms": [ - "call", - "chain" - ] - }, - { - "id": 1898, - "name": "followRedirects", - "qualified_name": "followRedirects", - "kind": "function", - "file_path": "npm/install.js", - "intent": "recursively follow HTTP redirects while downloading the release archive.", - "reason": "recursively follow HTTP redirects while downloading the release archive.", - "terms": [ - "follow" - ] - }, - { - "id": 1899, - "name": "download", - "qualified_name": "download", - "kind": "function", - "file_path": "npm/install.js", - "intent": "fetch a release archive over HTTPS while transparently following redirects.", - "reason": "fetch a release archive over HTTPS while transparently following redirects.", - "terms": [ - "follow" - ] - }, - { - "id": 795, - "name": "callChainFromCallee", - "qualified_name": "treesitter.callChainFromCallee", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "share one normalized chain representation across language-specific receiver rewriters.", - "reason": "share one normalized chain representation across language-specific receiver rewriters.", - "terms": [ - "chain" - ] - }, - { - "id": 781, - "name": "collectTypeScriptMembersFromText", - "qualified_name": "treesitter.collectTypeScriptMembersFromText", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "avoid depending on grammar-specific field captures when proving member-chain types.", - "reason": "avoid depending on grammar-specific field captures when proving member-chain types.", - "terms": [ - "chain" - ] - }, - { - "id": 799, - "name": "normalizeReceiverTypeName", - "qualified_name": "treesitter.normalizeReceiverTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "canonicalize explicit type names before they are used as receiver-chain proof.", - "reason": "canonicalize explicit type names before they are used as receiver-chain proof.", - "terms": [ - "chain" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "follow" - ] - }, - { - "id": 1340, - "name": "openRegularSourceFile", - "qualified_name": "workflow.openRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "prevent replacement races from turning a validated regular path into a followed symlink before reading.", - "reason": "prevent replacement races from turning a validated regular path into a followed symlink before reading.", - "terms": [ - "follow" - ] - }, - { - "id": 684, - "name": "readTSConfigAliasPrefixesSeen", - "qualified_name": "treesitter.readTSConfigAliasPrefixesSeen", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "merge inherited alias prefixes from nested tsconfig chains into one import-path map.", - "reason": "merge inherited alias prefixes from nested tsconfig chains into one import-path map.", - "terms": [ - "chain" - ] - }, - { - "id": 1341, - "name": "readRegularSourceFile", - "qualified_name": "workflow.readRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "terms": [ - "follow" - ] - }, - { - "id": 1628, - "name": "nextActions", - "qualified_name": "wire.nextActions", - "kind": "function", - "file_path": "internal/app/search/wire/wire.go", - "intent": "make the follow-up step obvious enough that an agent does not have to invent one.", - "reason": "make the follow-up step obvious enough that an agent does not have to invent one.", - "terms": [ - "follow" - ] - }, - { - "id": 1913, - "name": "openRefDoc", - "qualified_name": "openRefDoc", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details.", - "reason": "follow a ccg:// ref into the resolved namespace and show its Wiki doc or symbol details.", - "terms": [ - "follow" - ] - }, - { - "id": 1914, - "name": "openRefGraph", - "qualified_name": "openRefGraph", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "reason": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "terms": [ - "follow" - ] - }, - { - "id": 1608, - "name": "Service", - "qualified_name": "search.Service", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "reason": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "terms": [ - "chain" - ] - }, - { - "id": 1217, - "name": "resolveCall", - "qualified_name": "resolve.resolveCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "find the unique caller and callee nodes for a call relationship.", - "reason": "find the unique caller and callee nodes for a call relationship.", - "terms": [ - "call" - ] - }, - { - "id": 729, - "name": "RewriteCall", - "qualified_name": "treesitter.NoopCallRewriter.RewriteCall", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "satisfy CallRewriter for languages without additional call inference.", - "reason": "satisfy CallRewriter for languages without additional call inference.", - "terms": [ - "call" - ] - }, - { - "id": 247, - "name": "queryGraphEvidence", - "qualified_name": "mcp.queryGraphEvidence", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose edge location details that justify caller/callee confidence labels.", - "reason": "expose edge location details that justify caller/callee confidence labels.", - "terms": [ - "call" - ] - }, - { - "id": 886, - "name": "extractCallName", - "qualified_name": "treesitter.Walker.extractCallName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "derive stable callee names for call edge fingerprints across grammars", - "reason": "derive stable callee names for call edge fingerprints across grammars", - "terms": [ - "call" - ] - }, - { - "id": 944, - "name": "TraceOptions", - "qualified_name": "flow.TraceOptions", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "let callers cap traversal cost when tracing large call graphs", - "reason": "let callers cap traversal cost when tracing large call graphs", - "terms": [ - "call" - ] - }, - { - "id": 731, - "name": "callRewriterOrDefault", - "qualified_name": "treesitter.callRewriterOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep call rewriting optional so languages without call inference avoid boilerplate.", - "reason": "keep call rewriting optional so languages without call inference avoid boilerplate.", - "terms": [ - "call" - ] - }, - { - "id": 999, - "name": "QueryOptions", - "qualified_name": "query.QueryOptions", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "let callers choose between compatibility mode and strict call-edge analysis.", - "reason": "let callers choose between compatibility mode and strict call-edge analysis.", - "terms": [ - "call" - ] - }, - { - "id": 1133, - "name": "chunkWithImportWarmup", - "qualified_name": "incremental.chunkWithImportWarmup", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "ensure chunked call resolution sees import relationships before resolving dependent call edges.", - "reason": "ensure chunked call resolution sees import relationships before resolving dependent call edges.", - "terms": [ - "call" - ] - }, - { - "id": 1197, - "name": "ResolveOptions", - "qualified_name": "resolve.ResolveOptions", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "allow callers to trade strictness for coverage in low-confidence call cases.", - "reason": "allow callers to trade strictness for coverage in low-confidence call cases.", - "terms": [ - "call" - ] - }, - { - "id": 656, - "name": "PackageDiscoveryOrDefault", - "qualified_name": "treesitter.PackageDiscoveryOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal", - "reason": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal", - "terms": [ - "call" - ] - }, - { - "id": 780, - "name": "typescriptReceiverChain", - "qualified_name": "treesitter.typescriptReceiverChain", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "recover member-call hops directly from the AST when callee text is insufficient.", - "reason": "recover member-call hops directly from the AST when callee text is insufficient.", - "terms": [ - "call" - ] - }, - { - "id": 585, - "name": "Migrate", - "qualified_name": "searchsql.PostgresBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "give tests and callers a one-call schema setup that reuses the production migrations.", - "reason": "give tests and callers a one-call schema setup that reuses the production migrations.", - "terms": [ - "call" - ] - }, - { - "id": 716, - "name": "CallRewriteContext", - "qualified_name": "treesitter.CallRewriteContext", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "provide enough call-site metadata for languages with assignment or dispatch-sensitive call names.", - "reason": "provide enough call-site metadata for languages with assignment or dispatch-sensitive call names.", - "terms": [ - "call" - ] - }, - { - "id": 823, - "name": "jvmReceiverChain", - "qualified_name": "treesitter.jvmReceiverChain", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "recover member-call hops from the AST when raw callee text is not enough.", - "reason": "recover member-call hops from the AST when raw callee text is not enough.", - "terms": [ - "call" - ] - }, - { - "id": 946, - "name": "defaultTraceOptions", - "qualified_name": "flow.defaultTraceOptions", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "reason": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "terms": [ - "call" - ] - }, - { - "id": 117, - "name": "callFallbackRatio", - "qualified_name": "cli.callFallbackRatio", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/status.go", - "intent": "compute the share of fallback call edges within all call-like edges for operator-facing health reporting.", - "reason": "compute the share of fallback call edges within all call-like edges for operator-facing health reporting.", - "terms": [ - "call" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "call" - ] - }, - { - "id": 1192, - "name": "ensureDispatchTargets", - "qualified_name": "resolve.resolveState.ensureDispatchTargets", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "batch load nodes needed to resolve polymorphic calls.", - "reason": "batch load nodes needed to resolve polymorphic calls.", - "terms": [ - "call" - ] - }, - { - "id": 1274, - "name": "EnsureDispatchTargets", - "qualified_name": "resolve.goLanguageDispatch.EnsureDispatchTargets", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "preload potential interface implementer methods before call resolution.", - "reason": "preload potential interface implementer methods before call resolution.", - "terms": [ - "call" - ] - }, - { - "id": 1279, - "name": "interfaceMethodSelector", - "qualified_name": "resolve.interfaceMethodSelector", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "identify polymorphic call targets in Go selector expressions.", - "reason": "identify polymorphic call targets in Go selector expressions.", - "terms": [ - "call" - ] - }, - { - "id": 1544, - "name": "pagePerNamespace", - "qualified_name": "evidence.pagePerNamespace", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "reason": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "terms": [ - "call" - ] - }, - { - "id": 245, - "name": "annotationTagItem", - "qualified_name": "mcp.annotationTagItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose annotation tags with typed fields for getAnnotation callers.", - "reason": "expose annotation tags with typed fields for getAnnotation callers.", - "terms": [ - "call" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "call" - ] - }, - { - "id": 533, - "name": "GetEdgesFromNodes", - "qualified_name": "graphgorm.Store.GetEdgesFromNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for multiple declarations in one call.", - "reason": "load outbound relationships for multiple declarations in one call.", - "terms": [ - "call" - ] - }, - { - "id": 535, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.Store.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for multiple declarations in one call.", - "reason": "load inbound relationships for multiple declarations in one call.", - "terms": [ - "call" - ] - }, - { - "id": 548, - "name": "Graph", - "qualified_name": "graphgorm.transaction.Graph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "supply transaction-scoped graph operations to the ingest callback.", - "reason": "supply transaction-scoped graph operations to the ingest callback.", - "terms": [ - "call" - ] - } - ] - }, - "how does a sync that is already running end when the server is told to stop": { - "corpus": 1901, - "terms": [ - { - "text": "sync", - "in_reasons": 75 - }, - { - "text": "already", - "in_reasons": 8 - }, - { - "text": "running", - "in_reasons": 6 - }, - { - "text": "end", - "in_reasons": 3 - }, - { - "text": "server", - "in_reasons": 34 - }, - { - "text": "told", - "in_reasons": 0 - }, - { - "text": "stop", - "in_reasons": 9 - } + "graphgorm crossref": [ + 126 ], - "hits": [ - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "running", - "stop" - ] - }, - { - "id": 1482, - "name": "nonRetryableError", - "qualified_name": "reposync.nonRetryableError", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "mark sync failures that should stop retry backoff immediately.", - "reason": "mark sync failures that should stop retry backoff immediately.", - "terms": [ - "sync", - "stop" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "sync", - "server" - ] - }, - { - "id": 1497, - "name": "Shutdown", - "qualified_name": "reposync.SyncQueue.Shutdown", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "reason": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "terms": [ - "sync", - "server" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "sync", - "server" - ] - }, - { - "id": 420, - "name": "Remove", - "qualified_name": "contentfiles.Root.Remove", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prune only the relative generated path selected by application manifest policy.", - "reason": "prune only the relative generated path selected by application manifest policy.", - "terms": [ - "already" - ] - }, - { - "id": 127, - "name": "DefaultConfig", - "qualified_name": "server.DefaultConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "centralize default server flag values for ccg-server.", - "reason": "centralize default server flag values for ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 938, - "name": "Rebuild", - "qualified_name": "flow.Builder.Rebuild", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "refreshes list_flows by replacing all stored flows within the namespace.", - "reason": "refreshes list_flows by replacing all stored flows within the namespace.", - "terms": [ - "running" - ] - }, - { - "id": 1714, - "name": "drop", - "qualified_name": "dbtest.postgresSchema.drop", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "leave a concurrently running test's schema untouched while removing this one.", - "reason": "leave a concurrently running test's schema untouched while removing this one.", - "terms": [ - "running" - ] - }, - { - "id": 275, - "name": "resolveNamespace", - "qualified_name": "mcp.resolveNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "prefer an explicit request namespace while falling back to the namespace already carried on context.", - "reason": "prefer an explicit request namespace while falling back to the namespace already carried on context.", - "terms": [ - "already" - ] - }, - { - "id": 1715, - "name": "close", - "qualified_name": "dbtest.postgresSchema.close", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "terms": [ - "end" - ] - }, - { - "id": 157, - "name": "Close", - "qualified_name": "mcp.Cache.Close", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", - "reason": "Safely stops the cleanup goroutine when the cache is no longer used.", - "terms": [ - "stop" - ] - }, - { - "id": 1566, - "name": "saturate", - "qualified_name": "intentrank.saturate", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "stop a long or repetitive reason from outranking a short exact one.", - "reason": "stop a long or repetitive reason from outranking a short exact one.", - "terms": [ - "stop" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "stop" - ] - }, - { - "id": 393, - "name": "annotationMarkdownBlocks", - "qualified_name": "wikiserver.annotationMarkdownBlocks", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "reason": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "terms": [ - "already" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "already" - ] - }, - { - "id": 1710, - "name": "postgresSchema", - "qualified_name": "dbtest.postgresSchema", - "kind": "class", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "model \"a schema that exists for as long as one test does\" as a value with an explicit end.", - "reason": "model \"a schema that exists for as long as one test does\" as a value with an explicit end.", - "terms": [ - "end" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "stop" - ] - }, - { - "id": 1598, - "name": "meaningfulPart", - "qualified_name": "rank.queryTokens.meaningfulPart", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "stop a single shared character from standing as a candidate's only evidence.", - "reason": "stop a single shared character from standing as a candidate's only evidence.", - "terms": [ - "stop" - ] - }, - { - "id": 125, - "name": "internal/adapters/inbound/http/config.go", - "qualified_name": "internal/adapters/inbound/http/config.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "running" - ] - }, - { - "id": 126, - "name": "Config", - "qualified_name": "server.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "running" - ] - }, - { - "id": 1708, - "name": "IsolatedPostgresDSN", - "qualified_name": "dbtest.IsolatedPostgresDSN", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "let a test build its own tables without a concurrently running test seeing or dropping them.", - "reason": "let a test build its own tables without a concurrently running test seeing or dropping them.", - "terms": [ - "running" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "already" - ] - }, - { - "id": 1350, - "name": "CheckTotalParsedBytes", - "qualified_name": "workflow.CheckTotalParsedBytes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "reason": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "terms": [ - "stop" - ] - }, - { - "id": 62, - "name": "parseLogLevel", - "qualified_name": "main.parseLogLevel", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "normalize server log-level input consistently with ccg.", - "reason": "normalize server log-level input consistently with ccg.", - "terms": [ - "server" - ] - }, - { - "id": 1486, - "name": "IsNonRetryable", - "qualified_name": "reposync.IsNonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "reason": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "terms": [ - "stop" - ] - }, - { - "id": 1856, - "name": "ServerSpan", - "qualified_name": "obs.ServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "reason": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "terms": [ - "server" - ] - }, - { - "id": 1947, - "name": "ContextResponse", - "qualified_name": "ContextResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return a server-assembled Markdown bundle for selected docs.", - "reason": "return a server-assembled Markdown bundle for selected docs.", - "terms": [ - "server" - ] - }, - { - "id": 1583, - "name": "PoolWidth", - "qualified_name": "rank.PoolWidth", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one.", - "reason": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one.", - "terms": [ - "already" - ] - }, - { - "id": 1493, - "name": "NewSyncQueueWithContext", - "qualified_name": "reposync.NewSyncQueueWithContext", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "allow server shutdown to cancel retries and worker waits cleanly.", - "reason": "allow server shutdown to cancel retries and worker waits cleanly.", - "terms": [ - "server" - ] - }, - { - "id": 61, - "name": "newRootCmd", - "qualified_name": "main.newRootCmd", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "keep self-hosted server flags separate from the local ccg CLI.", - "reason": "keep self-hosted server flags separate from the local ccg CLI.", - "terms": [ - "server" - ] - }, - { - "id": 314, - "name": "registerPrompts", - "qualified_name": "mcp.registerPrompts", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts_register.go", - "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", - "reason": "package common review, onboarding, and debugging flows into reusable server prompts.", - "terms": [ - "server" - ] - }, - { - "id": 318, - "name": "analysisTools", - "qualified_name": "mcp.analysisTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_analysis.go", - "intent": "keep analysis capabilities grouped so server startup can expose them consistently.", - "reason": "keep analysis capabilities grouped so server startup can expose them consistently.", - "terms": [ - "server" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "already" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "server" - ] - }, - { - "id": 130, - "name": "EnvInt", - "qualified_name": "server.EnvInt", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "provide env-based defaults for server flags without panicking on bad input.", - "reason": "provide env-based defaults for server flags without panicking on bad input.", - "terms": [ - "server" - ] - }, - { - "id": 320, - "name": "contextTools", - "qualified_name": "mcp.contextTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_context.go", - "intent": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "reason": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "terms": [ - "server" - ] - }, - { - "id": 1932, - "name": "web/wiki/src/api.ts", - "qualified_name": "web/wiki/src/api.ts", - "kind": "file", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1933, - "name": "TreeNode", - "qualified_name": "TreeNode", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 161, - "name": "Parser", - "qualified_name": "mcp.Parser", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects an abstract parser to combine language-specific parsing implementations on the server.", - "reason": "Injects an abstract parser to combine language-specific parsing implementations on the server.", - "terms": [ - "server" - ] - }, - { - "id": 347, - "name": "New", - "qualified_name": "wikiserver.New", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "reason": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "terms": [ - "server" - ] - }, - { - "id": 1871, - "name": "Instance", - "qualified_name": "mcpruntime.Instance", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "reason": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "terms": [ - "server" - ] - }, - { - "id": 1880, - "name": "Runtime", - "qualified_name": "runtime.Runtime", - "kind": "class", - "file_path": "internal/runtime/runtime.go", - "intent": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "reason": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "terms": [ - "server" - ] - }, - { - "id": 1883, - "name": "Init", - "qualified_name": "runtime.Runtime.Init", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "reason": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1959, - "name": "buildContext", - "qualified_name": "buildContext", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "reason": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "terms": [ - "server" - ] - }, - { - "id": 316, - "name": "NewServer", - "qualified_name": "mcp.NewServer", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/server.go", - "intent": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "reason": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "terms": [ - "server" - ] - }, - { - "id": 348, - "name": "StaticHandler", - "qualified_name": "wikiserver.Server.StaticHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "reason": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "terms": [ - "server" - ] - }, - { - "id": 1870, - "name": "Options", - "qualified_name": "mcpruntime.Options", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "reason": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "terms": [ - "server" - ] - }, - { - "id": 1100, - "name": "Parser", - "qualified_name": "incremental.Parser", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "decouple incremental sync from language-specific parsing logic", - "reason": "decouple incremental sync from language-specific parsing logic", - "terms": [ - "sync" - ] - }, - { - "id": 112, - "name": "validateServeConfig", - "qualified_name": "cli.validateServeConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "reason": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "terms": [ - "server" - ] - } - ] - }, - "how does the graph get built": { - "corpus": 1901, - "terms": [ - { - "text": "graph", - "in_reasons": 166 - }, - { - "text": "get", - "in_reasons": 0 - }, - { - "text": "built", - "in_reasons": 5 - } + "how do i follow a call chain": [ + 65, + 70, + 118, + 145, + 146, + 159, + 164, + 177, + 178, + 181, + 195, + 197, + 204, + 213, + 216, + 218, + 220, + 236, + 240, + 255, + 278, + 282, + 351, + 381, + 386, + 433, + 441, + 448, + 480, + 482, + 497, + 498, + 499, + 528, + 598, + 602, + 630, + 654, + 661, + 667, + 673, + 674, + 676, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 719, + 724, + 725, + 726, + 738, + 739, + 740, + 741, + 742, + 744, + 748, + 752, + 761, + 762, + 763, + 764, + 768, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 817, + 818, + 825, + 826, + 831, + 838, + 839, + 840, + 851, + 858, + 872, + 888, + 889, + 891, + 893, + 895, + 897, + 898, + 900, + 903, + 908, + 929, + 930, + 931, + 933, + 934, + 936, + 949, + 950, + 965, + 969, + 976, + 1048, + 1056, + 1063, + 1064, + 1065, + 1067, + 1078, + 1079, + 1080, + 1086, + 1090, + 1111, + 1112, + 1113, + 1115, + 1132, + 1140, + 1145, + 1151, + 1160, + 1165, + 1168, + 1188, + 1189, + 1193, + 1195, + 1211, + 1214, + 1217, + 1222, + 1223, + 1227, + 1235, + 1237, + 1238, + 1239, + 1277, + 1283, + 1284, + 1286, + 1287, + 1292, + 1295, + 1309, + 1317, + 1340, + 1341, + 1366, + 1384, + 1393, + 1401, + 1446, + 1483, + 1484, + 1489, + 1497, + 1524, + 1527, + 1528, + 1529, + 1531, + 1533, + 1538, + 1546, + 1556, + 1564, + 1570, + 1572, + 1573, + 1574, + 1576, + 1579, + 1742, + 1759, + 1760, + 1784, + 1788, + 1819, + 1848, + 1849, + 1861, + 1862, + 1871, + 1897 ], - "hits": [ - { - "id": 425, - "name": "WikiIndexWriter", - "qualified_name": "contentfiles.WikiIndexWriter", - "kind": "class", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "prevent readers from observing partial built-in Wiki index snapshots.", - "reason": "prevent readers from observing partial built-in Wiki index snapshots.", - "terms": [ - "built" - ] - }, - { - "id": 1663, - "name": "symbolKinds", - "qualified_name": "wiki.symbolKinds", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "centralize the symbol kinds eligible for built-in Wiki navigation.", - "reason": "centralize the symbol kinds eligible for built-in Wiki navigation.", - "terms": [ - "built" - ] - }, - { - "id": 428, - "name": "WriteWikiIndex", - "qualified_name": "contentfiles.WikiIndexWriter.WriteWikiIndex", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "preserve the versioned built-in Wiki snapshot format at its namespace-specific path.", - "reason": "preserve the versioned built-in Wiki snapshot format at its namespace-specific path.", - "terms": [ - "built" - ] - }, - { - "id": 360, - "name": "loadWikiTree", - "qualified_name": "wikiserver.Server.loadWikiTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "load a Wiki tree from DB rows for browser navigation and return built_at metadata.", - "reason": "load a Wiki tree from DB rows for browser navigation and return built_at metadata.", - "terms": [ - "built" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "built" - ] - }, - { - "id": 373, - "name": "graphNode", - "qualified_name": "wikiserver.graphNode", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "describe one graph node in the Wiki force graph API.", - "reason": "describe one graph node in the Wiki force graph API.", - "terms": [ - "graph" - ] - }, - { - "id": 378, - "name": "graphNodeFromModel", - "qualified_name": "wikiserver.graphNodeFromModel", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert persisted graph node metadata into a browser graph payload.", - "reason": "convert persisted graph node metadata into a browser graph payload.", - "terms": [ - "graph" - ] - }, - { - "id": 1943, - "name": "GraphResponse", - "qualified_name": "GraphResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry bounded namespace graph data for the visual graph tab.", - "reason": "carry bounded namespace graph data for the visual graph tab.", - "terms": [ - "graph" - ] - }, - { - "id": 1958, - "name": "getGraph", - "qualified_name": "getGraph", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "load a bounded namespace graph for the visual graph tab.", - "reason": "load a bounded namespace graph for the visual graph tab.", - "terms": [ - "graph" - ] - }, - { - "id": 374, - "name": "graphEdge", - "qualified_name": "wikiserver.graphEdge", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "describe one directed graph edge in the Wiki force graph API.", - "reason": "describe one directed graph edge in the Wiki force graph API.", - "terms": [ - "graph" - ] - }, - { - "id": 1941, - "name": "GraphNode", - "qualified_name": "GraphNode", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one graph database node exposed to the Wiki graph viewer.", - "reason": "describe one graph database node exposed to the Wiki graph viewer.", - "terms": [ - "graph" - ] - }, - { - "id": 1942, - "name": "GraphEdge", - "qualified_name": "GraphEdge", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one graph database edge exposed to the Wiki graph viewer.", - "reason": "describe one graph database edge exposed to the Wiki graph viewer.", - "terms": [ - "graph" - ] - }, - { - "id": 356, - "name": "handleGraph", - "qualified_name": "wikiserver.Server.handleGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return a bounded namespace graph for the browser force-directed graph viewer.", - "reason": "return a bounded namespace graph for the browser force-directed graph viewer.", - "terms": [ - "graph" - ] - }, - { - "id": 365, - "name": "findRefGraphNode", - "qualified_name": "wikiserver.Server.findRefGraphNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "reason": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "terms": [ - "graph" - ] - }, - { - "id": 351, - "name": "handleNamespaces", - "qualified_name": "wikiserver.Server.handleNamespaces", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return namespaces discovered from graph data.", - "reason": "return namespaces discovered from graph data.", - "terms": [ - "graph" - ] - }, - { - "id": 1914, - "name": "openRefGraph", - "qualified_name": "openRefGraph", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "reason": "follow a ccg:// ref into the graph viewer and focus the resolved graph node when available.", - "terms": [ - "graph" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "graph" - ] - }, - { - "id": 977, - "name": "New", - "qualified_name": "query.New", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "construct a service for common graph traversal queries", - "reason": "construct a service for common graph traversal queries", - "terms": [ - "graph" - ] - }, - { - "id": 1026, - "name": "New", - "qualified_name": "describe.New", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "make the graph dependency explicit at composition time.", - "reason": "make the graph dependency explicit at composition time.", - "terms": [ - "graph" - ] - }, - { - "id": 1661, - "name": "nodeIDs", - "qualified_name": "wiki.nodeIDs", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "collect graph node IDs for batch annotation lookup.", - "reason": "collect graph node IDs for batch annotation lookup.", - "terms": [ - "graph" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "graph" - ] - }, - { - "id": 1928, - "name": "load", - "qualified_name": "load", - "kind": "function", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "refresh graph data when namespace or token changes.", - "reason": "refresh graph data when namespace or token changes.", - "terms": [ - "graph" - ] - }, - { - "id": 248, - "name": "queryGraphResultItem", - "qualified_name": "mcp.queryGraphResultItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable DTO for paged graph traversal results.", - "reason": "preserve a stable DTO for paged graph traversal results.", - "terms": [ - "graph" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "graph" - ] - }, - { - "id": 513, - "name": "New", - "qualified_name": "graphgorm.New", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "initialize the GraphStore implementation with the injected DB handle.", - "reason": "initialize the GraphStore implementation with the injected DB handle.", - "terms": [ - "graph" - ] - }, - { - "id": 514, - "name": "AutoMigrate", - "qualified_name": "graphgorm.Store.AutoMigrate", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prepare the GORM model tables required for graph persistence.", - "reason": "prepare the GORM model tables required for graph persistence.", - "terms": [ - "graph" - ] - }, - { - "id": 548, - "name": "Graph", - "qualified_name": "graphgorm.transaction.Graph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "supply transaction-scoped graph operations to the ingest callback.", - "reason": "supply transaction-scoped graph operations to the ingest callback.", - "terms": [ - "graph" - ] - }, - { - "id": 889, - "name": "mapDefTypeToNodeKind", - "qualified_name": "treesitter.Walker.mapDefTypeToNodeKind", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep language query captures aligned with graph node categorization", - "reason": "keep language query captures aligned with graph node categorization", - "terms": [ - "graph" - ] - }, - { - "id": 947, - "name": "New", - "qualified_name": "flow.New", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "construct a tracer bound to a graph edge reader", - "reason": "construct a tracer bound to a graph edge reader", - "terms": [ - "graph" - ] - }, - { - "id": 955, - "name": "New", - "qualified_name": "impact.New", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "construct a blast-radius analyzer around a graph reader", - "reason": "construct a blast-radius analyzer around a graph reader", - "terms": [ - "graph" - ] - }, - { - "id": 976, - "name": "Service", - "qualified_name": "query.Service", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide reusable higher-level graph lookups for MCP queries", - "reason": "provide reusable higher-level graph lookups for MCP queries", - "terms": [ - "graph" - ] - }, - { - "id": 1179, - "name": "Find", - "qualified_name": "resolve.ImportFileIndex.Find", - "kind": "function", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "preserve GraphStore import lookup precedence using bounded map reads.", - "reason": "preserve GraphStore import lookup precedence using bounded map reads.", - "terms": [ - "graph" - ] - }, - { - "id": 1196, - "name": "Resolve", - "qualified_name": "resolve.Resolve", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "convert syntax-level edge fingerprints into traversable graph edges.", - "reason": "convert syntax-level edge fingerprints into traversable graph edges.", - "terms": [ - "graph" - ] - }, - { - "id": 1307, - "name": "Build", - "qualified_name": "workflow.Service.Build", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "perform a full graph build from the specified directory.", - "reason": "perform a full graph build from the specified directory.", - "terms": [ - "graph" - ] - }, - { - "id": 1387, - "name": "packageNodes", - "qualified_name": "workflow.packageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "project package metadata into the graph schema for persistence.", - "reason": "project package metadata into the graph schema for persistence.", - "terms": [ - "graph" - ] - }, - { - "id": 265, - "name": "federatedGraphStatsEntry", - "qualified_name": "mcp.federatedGraphStatsEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "reason": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "terms": [ - "graph" - ] - }, - { - "id": 385, - "name": "refTargetFromMatches", - "qualified_name": "wikiserver.refTargetFromMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "merge tree and graph matches into one browser navigation payload.", - "reason": "merge tree and graph matches into one browser navigation payload.", - "terms": [ - "graph" - ] - }, - { - "id": 400, - "name": "graphEdgeKindsParam", - "qualified_name": "wikiserver.graphEdgeKindsParam", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "parse the optional edge_kinds filter for the Wiki graph API.", - "reason": "parse the optional edge_kinds filter for the Wiki graph API.", - "terms": [ - "graph" - ] - }, - { - "id": 512, - "name": "Store", - "qualified_name": "graphgorm.Store", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "implement the graph repository contract through a GORM DB handle.", - "reason": "implement the graph repository contract through a GORM DB handle.", - "terms": [ - "graph" - ] - }, - { - "id": 572, - "name": "internal/adapters/outbound/reposyncgraph/updater.go", - "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", - "kind": "file", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "graph" - ] - }, - { - "id": 573, - "name": "Updater", - "qualified_name": "reposyncgraph.Updater", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "graph" - ] - }, - { - "id": 643, - "name": "RebuildNodes", - "qualified_name": "searchsql.Writer.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the incremental derived-search refresh required by graph updates.", - "reason": "implement the incremental derived-search refresh required by graph updates.", - "terms": [ - "graph" - ] - }, - { - "id": 890, - "name": "buildQualifiedName", - "qualified_name": "treesitter.Walker.buildQualifiedName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "generate graph keys that distinguish methods from package-level declarations", - "reason": "generate graph keys that distinguish methods from package-level declarations", - "terms": [ - "graph" - ] - }, - { - "id": 944, - "name": "TraceOptions", - "qualified_name": "flow.TraceOptions", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "let callers cap traversal cost when tracing large call graphs", - "reason": "let callers cap traversal cost when tracing large call graphs", - "terms": [ - "graph" - ] - }, - { - "id": 978, - "name": "nodesByEdge", - "qualified_name": "query.Service.nodesByEdge", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "centralize directional edge-query logic shared by predefined graph queries", - "reason": "centralize directional edge-query logic shared by predefined graph queries", - "terms": [ - "graph" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "graph" - ] - }, - { - "id": 1126, - "name": "setNodeHashes", - "qualified_name": "incremental.setNodeHashes", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental hash comparisons aligned with the stored graph rows.", - "reason": "keep incremental hash comparisons aligned with the stored graph rows.", - "terms": [ - "graph" - ] - }, - { - "id": 1185, - "name": "NodeLookup", - "qualified_name": "resolve.NodeLookup", - "kind": "type", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "keep edge endpoint resolution independent of the concrete graph store.", - "reason": "keep edge endpoint resolution independent of the concrete graph store.", - "terms": [ - "graph" - ] - }, - { - "id": 1234, - "name": "IsLikelyExternalImportPath", - "qualified_name": "resolve.IsLikelyExternalImportPath", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "keep unresolved-edge noise focused on internal graph-coverage gaps.", - "reason": "keep unresolved-edge noise focused on internal graph-coverage gaps.", - "terms": [ - "graph" - ] - }, - { - "id": 1239, - "name": "resolveTypeEndpoint", - "qualified_name": "resolve.resolveTypeEndpoint", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "resolve symbol references to physical type nodes in the graph.", - "reason": "resolve symbol references to physical type nodes in the graph.", - "terms": [ - "graph" - ] - } - ] - }, - "impact": { - "corpus": 1901, - "terms": [ - { - "text": "impact", - "in_reasons": 6 - } + "how does a sync that is already running end when the server is told to stop": [ + 2, + 3, + 4, + 63, + 64, + 65, + 77, + 78, + 79, + 82, + 84, + 112, + 115, + 121, + 189, + 190, + 227, + 228, + 267, + 268, + 269, + 270, + 278, + 280, + 285, + 287, + 289, + 290, + 292, + 293, + 340, + 359, + 367, + 386, + 395, + 397, + 398, + 404, + 409, + 429, + 518, + 519, + 520, + 523, + 563, + 851, + 887, + 891, + 899, + 953, + 955, + 959, + 961, + 1044, + 1045, + 1047, + 1048, + 1049, + 1050, + 1052, + 1056, + 1063, + 1067, + 1070, + 1073, + 1074, + 1114, + 1116, + 1118, + 1280, + 1297, + 1298, + 1303, + 1317, + 1324, + 1355, + 1371, + 1372, + 1376, + 1377, + 1383, + 1385, + 1393, + 1396, + 1403, + 1409, + 1420, + 1422, + 1424, + 1425, + 1434, + 1437, + 1438, + 1439, + 1441, + 1443, + 1445, + 1447, + 1448, + 1450, + 1457, + 1458, + 1460, + 1465, + 1467, + 1469, + 1517, + 1525, + 1533, + 1547, + 1562, + 1651, + 1652, + 1654, + 1658, + 1659, + 1665, + 1809, + 1822, + 1823, + 1826, + 1829, + 1830, + 1833, + 1851, + 1874, + 1879, + 1880, + 1894, + 1906 ], - "hits": [ - { - "id": 471, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 183, - "name": "impactRadiusResponse", - "qualified_name": "mcp.impactRadiusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable typed response envelope for impact-radius queries.", - "reason": "preserve a stable typed response envelope for impact-radius queries.", - "terms": [ - "impact" - ] - }, - { - "id": 473, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "impact" - ] - }, - { - "id": 474, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", - "reason": "let impact analysis find foreign namespaces that depend on the target nodes.", - "terms": [ - "impact" - ] - }, - { - "id": 916, - "name": "changedNodeHits", - "qualified_name": "changes.Service.changedNodeHits", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "reason": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "terms": [ - "impact" - ] - } - ] - }, - "impact radius": { - "corpus": 1901, - "terms": [ - { - "text": "impact", - "in_reasons": 6 - }, - { - "text": "radius", - "in_reasons": 8 - } + "how does the graph get built": [ + 111, + 117, + 120, + 121, + 123, + 132, + 158, + 159, + 181, + 182, + 183, + 188, + 189, + 191, + 198, + 200, + 203, + 205, + 209, + 213, + 214, + 215, + 217, + 256, + 268, + 272, + 276, + 296, + 302, + 304, + 306, + 312, + 319, + 320, + 321, + 322, + 324, + 325, + 326, + 332, + 334, + 338, + 344, + 347, + 371, + 374, + 392, + 435, + 441, + 455, + 456, + 457, + 477, + 492, + 493, + 494, + 497, + 499, + 508, + 515, + 518, + 519, + 585, + 587, + 590, + 591, + 662, + 671, + 684, + 685, + 815, + 827, + 829, + 834, + 836, + 856, + 866, + 869, + 885, + 888, + 893, + 896, + 905, + 912, + 913, + 917, + 919, + 920, + 926, + 927, + 928, + 929, + 930, + 932, + 935, + 938, + 940, + 943, + 945, + 946, + 947, + 973, + 1020, + 1031, + 1037, + 1042, + 1043, + 1054, + 1072, + 1098, + 1103, + 1109, + 1113, + 1117, + 1122, + 1128, + 1130, + 1133, + 1144, + 1150, + 1172, + 1182, + 1187, + 1244, + 1254, + 1255, + 1256, + 1260, + 1271, + 1282, + 1320, + 1331, + 1334, + 1341, + 1342, + 1369, + 1371, + 1375, + 1383, + 1400, + 1406, + 1426, + 1468, + 1577, + 1591, + 1597, + 1609, + 1611, + 1614, + 1630, + 1634, + 1698, + 1737, + 1784, + 1785, + 1787, + 1794, + 1796, + 1797, + 1827, + 1833, + 1855, + 1862, + 1868, + 1871, + 1872, + 1873, + 1875, + 1876, + 1877, + 1878, + 1887, + 1888, + 1889, + 1890, + 1892, + 1902, + 1904, + 1905 ], - "hits": [ - { - "id": 183, - "name": "impactRadiusResponse", - "qualified_name": "mcp.impactRadiusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable typed response envelope for impact-radius queries.", - "reason": "preserve a stable typed response envelope for impact-radius queries.", - "terms": [ - "impact", - "radius" - ] - }, - { - "id": 471, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 473, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 955, - "name": "New", - "qualified_name": "impact.New", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "construct a blast-radius analyzer around a graph reader", - "reason": "construct a blast-radius analyzer around a graph reader", - "terms": [ - "radius" - ] - }, - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "radius" - ] - }, - { - "id": 951, - "name": "EdgeReader", - "qualified_name": "impact.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "abstract bidirectional edge and node lookups for blast-radius traversal", - "reason": "abstract bidirectional edge and node lookups for blast-radius traversal", - "terms": [ - "radius" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "impact" - ] - }, - { - "id": 474, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", - "reason": "let impact analysis find foreign namespaces that depend on the target nodes.", - "terms": [ - "impact" - ] - }, - { - "id": 957, - "name": "ImpactRadiusBounded", - "qualified_name": "impact.Analyzer.ImpactRadiusBounded", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "terms": [ - "radius" - ] - }, - { - "id": 182, - "name": "impactRadiusMetadata", - "qualified_name": "mcp.impactRadiusMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "reason": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "terms": [ - "radius" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "radius" - ] - }, - { - "id": 916, - "name": "changedNodeHits", - "qualified_name": "changes.Service.changedNodeHits", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "reason": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "terms": [ - "impact" - ] - }, - { - "id": 163, - "name": "ImpactAnalyzer", - "qualified_name": "mcp.ImpactAnalyzer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "reason": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "terms": [ - "radius" - ] - } - ] - }, - "incremental syncer": { - "corpus": 1901, - "terms": [ - { - "text": "incremental", - "in_reasons": 37 - }, - { - "text": "syncer", - "in_reasons": 8 - } + "impact": [ + 136, + 413, + 416, + 418, + 419, + 865 ], - "hits": [ - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "incremental", - "syncer" - ] - }, - { - "id": 1108, - "name": "SetResolveOptions", - "qualified_name": "incremental.Syncer.SetResolveOptions", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid rebuilding the syncer for every Build/Update invocation.", - "reason": "avoid rebuilding the syncer for every Build/Update invocation.", - "terms": [ - "syncer" - ] - }, - { - "id": 1169, - "name": "FileBatchVisitor", - "qualified_name": "ingest.FileBatchVisitor", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "reason": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "terms": [ - "syncer" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "syncer" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "syncer" - ] - }, - { - "id": 645, - "name": "RefreshSearchDocumentsFor", - "qualified_name": "searchsql.RefreshSearchDocumentsFor", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "reason": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "terms": [ - "incremental" - ] - }, - { - "id": 1435, - "name": "newUpdateSpoolBatchSource", - "qualified_name": "workflow.newUpdateSpoolBatchSource", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "reason": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "terms": [ - "syncer" - ] - }, - { - "id": 1100, - "name": "Parser", - "qualified_name": "incremental.Parser", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "decouple incremental sync from language-specific parsing logic", - "reason": "decouple incremental sync from language-specific parsing logic", - "terms": [ - "incremental" - ] - }, - { - "id": 1440, - "name": "syncIncrementalBatch", - "qualified_name": "workflow.syncIncrementalBatch", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes.", - "reason": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes.", - "terms": [ - "syncer" - ] - }, - { - "id": 587, - "name": "RebuildNodes", - "qualified_name": "searchsql.PostgresBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Avoids full namespace tsv updates during incremental update paths.", - "reason": "Avoids full namespace tsv updates during incremental update paths.", - "terms": [ - "incremental" - ] - }, - { - "id": 617, - "name": "RebuildNodes", - "qualified_name": "searchsql.SQLiteBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Avoids full namespace FTS reloading during incremental update paths.", - "reason": "Avoids full namespace FTS reloading during incremental update paths.", - "terms": [ - "incremental" - ] - }, - { - "id": 1103, - "name": "SyncerOption", - "qualified_name": "incremental.SyncerOption", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "customize incremental sync behavior without expanding the constructor signature", - "reason": "customize incremental sync behavior without expanding the constructor signature", - "terms": [ - "incremental" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "incremental" - ] - }, - { - "id": 1429, - "name": "withUpdateTx", - "qualified_name": "workflow.Service.withUpdateTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate.", - "reason": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate.", - "terms": [ - "syncer" - ] - }, - { - "id": 643, - "name": "RebuildNodes", - "qualified_name": "searchsql.Writer.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the incremental derived-search refresh required by graph updates.", - "reason": "implement the incremental derived-search refresh required by graph updates.", - "terms": [ - "incremental" - ] - }, - { - "id": 1101, - "name": "AnnotatingParser", - "qualified_name": "incremental.AnnotatingParser", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "allow incremental sync to reuse comment-aware parsing when available", - "reason": "allow incremental sync to reuse comment-aware parsing when available", - "terms": [ - "incremental" - ] - }, - { - "id": 1104, - "name": "WithLogger", - "qualified_name": "incremental.WithLogger", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "allow callers to observe incremental sync progress through structured logs", - "reason": "allow callers to observe incremental sync progress through structured logs", - "terms": [ - "incremental" - ] - }, - { - "id": 1120, - "name": "persistUnresolvedEdges", - "qualified_name": "incremental.persistUnresolvedEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental candidate maintenance optional for legacy/custom store implementations.", - "reason": "keep incremental candidate maintenance optional for legacy/custom store implementations.", - "terms": [ - "incremental" - ] - }, - { - "id": 1126, - "name": "setNodeHashes", - "qualified_name": "incremental.setNodeHashes", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental hash comparisons aligned with the stored graph rows.", - "reason": "keep incremental hash comparisons aligned with the stored graph rows.", - "terms": [ - "incremental" - ] - }, - { - "id": 1128, - "name": "mergeSyncUnresolvedDiagnostics", - "qualified_name": "incremental.mergeSyncUnresolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental sync logging aligned with chunked edge resolution output.", - "reason": "keep incremental sync logging aligned with chunked edge resolution output.", - "terms": [ - "incremental" - ] - }, - { - "id": 1353, - "name": "ExistingGraphFiles", - "qualified_name": "workflow.ExistingGraphFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "share deletion-scope discovery across CLI and MCP incremental updates", - "reason": "share deletion-scope discovery across CLI and MCP incremental updates", - "terms": [ - "incremental" - ] - }, - { - "id": 1412, - "name": "spooledUpdateRecord", - "qualified_name": "workflow.spooledUpdateRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream incremental sync inputs from disk to bound peak memory.", - "reason": "stream incremental sync inputs from disk to bound peak memory.", - "terms": [ - "incremental" - ] - }, - { - "id": 574, - "name": "Update", - "qualified_name": "reposyncgraph.Updater.Update", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "reason": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "terms": [ - "incremental" - ] - }, - { - "id": 1091, - "name": "importFileNodeLister", - "qualified_name": "incremental.importFileNodeLister", - "kind": "type", - "file_path": "internal/app/ingest/incremental/import_lookup.go", - "intent": "avoid expanding the legacy incremental Store contract for lightweight test doubles.", - "reason": "avoid expanding the legacy incremental Store contract for lightweight test doubles.", - "terms": [ - "incremental" - ] - }, - { - "id": 1111, - "name": "SyncWithExistingStore", - "qualified_name": "incremental.Syncer.SyncWithExistingStore", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let callers bind incremental sync to an existing transaction-scoped store", - "reason": "let callers bind incremental sync to an existing transaction-scoped store", - "terms": [ - "incremental" - ] - }, - { - "id": 1127, - "name": "sortedFilePaths", - "qualified_name": "incremental.sortedFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "reason": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "terms": [ - "incremental" - ] - }, - { - "id": 1166, - "name": "SyncStats", - "qualified_name": "ingest.SyncStats", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose update results without coupling callers to the incremental implementation package.", - "reason": "expose update results without coupling callers to the incremental implementation package.", - "terms": [ - "incremental" - ] - }, - { - "id": 1105, - "name": "WithParsers", - "qualified_name": "incremental.WithParsers", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let incremental sync dispatch parsing per file extension for multi-language projects", - "reason": "let incremental sync dispatch parsing per file extension for multi-language projects", - "terms": [ - "incremental" - ] - }, - { - "id": 1107, - "name": "NewWithRegistry", - "qualified_name": "incremental.NewWithRegistry", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "support multi-language incremental parsing without breaking the legacy single-parser constructor", - "reason": "support multi-language incremental parsing without breaking the legacy single-parser constructor", - "terms": [ - "incremental" - ] - }, - { - "id": 1117, - "name": "resolveAndUpsertEdges", - "qualified_name": "incremental.Syncer.resolveAndUpsertEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "preserve interface dispatch and import-backed call resolution during incremental sync updates.", - "reason": "preserve interface dispatch and import-backed call resolution during incremental sync updates.", - "terms": [ - "incremental" - ] - }, - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "incremental" - ] - }, - { - "id": 1134, - "name": "splitEdgeChunks", - "qualified_name": "incremental.splitEdgeChunks", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "cap incremental resolution work so large files do not create oversized resolve batches.", - "reason": "cap incremental resolution work so large files do not create oversized resolve batches.", - "terms": [ - "incremental" - ] - }, - { - "id": 1165, - "name": "FileInfo", - "qualified_name": "ingest.FileInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep incremental update inputs owned by ingest rather than a concrete sync implementation.", - "reason": "keep incremental update inputs owned by ingest rather than a concrete sync implementation.", - "terms": [ - "incremental" - ] - }, - { - "id": 1170, - "name": "FileBatchSource", - "qualified_name": "ingest.FileBatchSource", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "reason": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "terms": [ - "incremental" - ] - }, - { - "id": 1333, - "name": "mergeFilterResolvedDiagnostics", - "qualified_name": "workflow.mergeFilterResolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "terms": [ - "incremental" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "incremental" - ] - }, - { - "id": 1430, - "name": "prepareUpdateSpool", - "qualified_name": "workflow.Service.prepareUpdateSpool", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "capture the current update input set and file hashes before transactional incremental sync begins.", - "reason": "capture the current update input set and file hashes before transactional incremental sync begins.", - "terms": [ - "incremental" - ] - }, - { - "id": 1833, - "name": "UnresolvedIndexState", - "qualified_name": "graph.UnresolvedIndexState", - "kind": "class", - "file_path": "internal/domain/graph/unresolved.go", - "intent": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "reason": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "terms": [ - "incremental" - ] - }, - { - "id": 622, - "name": "rebuildIntentTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "incremental" - ] - }, - { - "id": 1168, - "name": "TransactionalIncrementalSyncer", - "qualified_name": "ingest.TransactionalIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep incremental graph mutations inside the same unit of work as package and search updates.", - "reason": "keep incremental graph mutations inside the same unit of work as package and search updates.", - "terms": [ - "incremental" - ] - }, - { - "id": 1434, - "name": "updateGraphWithoutTx", - "qualified_name": "workflow.Service.updateGraphWithoutTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "reason": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "terms": [ - "incremental" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "incremental" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "incremental" - ] - }, - { - "id": 1396, - "name": "addUnchangedPeersForAddedFiles", - "qualified_name": "workflow.addUnchangedPeersForAddedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "reason": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "terms": [ - "incremental" - ] - } - ] - }, - "mcp": { - "corpus": 1901, - "terms": [ - { - "text": "mcp", - "in_reasons": 44 - } + "impact radius": [ + 117, + 135, + 136, + 145, + 413, + 416, + 418, + 419, + 865, + 901, + 905, + 906, + 908 ], - "hits": [ - { - "id": 1869, - "name": "Components", - "qualified_name": "mcpruntime.Components", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "share one MCP assembly path without making the MCP runtime import its parent composition package.", - "reason": "share one MCP assembly path without making the MCP runtime import its parent composition package.", - "terms": [ - "mcp" - ] - }, - { - "id": 114, - "name": "envString", - "qualified_name": "cli.envString", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep optional stdio MCP environment defaults small and explicit.", - "reason": "keep optional stdio MCP environment defaults small and explicit.", - "terms": [ - "mcp" - ] - }, - { - "id": 138, - "name": "MCPAuthMiddleware", - "qualified_name": "server.MCPAuthMiddleware", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다.", - "reason": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다.", - "terms": [ - "mcp" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "mcp" - ] - }, - { - "id": 976, - "name": "Service", - "qualified_name": "query.Service", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide reusable higher-level graph lookups for MCP queries", - "reason": "provide reusable higher-level graph lookups for MCP queries", - "terms": [ - "mcp" - ] - }, - { - "id": 1679, - "name": "SearchResult", - "qualified_name": "wiki.SearchResult", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "검색 UI나 MCP 응답에서 표시할 최소 결과 정보를 담는다.", - "reason": "검색 UI나 MCP 응답에서 표시할 최소 결과 정보를 담는다.", - "terms": [ - "mcp" - ] - }, - { - "id": 135, - "name": "RunStreamableHTTP", - "qualified_name": "server.RunStreamableHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "reason": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "terms": [ - "mcp" - ] - }, - { - "id": 139, - "name": "WithHTTPTraceContext", - "qualified_name": "server.WithHTTPTraceContext", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다.", - "reason": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다.", - "terms": [ - "mcp" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "mcp" - ] - }, - { - "id": 328, - "name": "withNamespaceParam", - "qualified_name": "mcp.withNamespaceParam", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_query.go", - "intent": "give every namespace-aware MCP tool the same isolation parameter.", - "reason": "give every namespace-aware MCP tool the same isolation parameter.", - "terms": [ - "mcp" - ] - }, - { - "id": 1353, - "name": "ExistingGraphFiles", - "qualified_name": "workflow.ExistingGraphFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "share deletion-scope discovery across CLI and MCP incremental updates", - "reason": "share deletion-scope discovery across CLI and MCP incremental updates", - "terms": [ - "mcp" - ] - }, - { - "id": 137, - "name": "ValidateHTTPExposure", - "qualified_name": "server.ValidateHTTPExposure", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다.", - "reason": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다.", - "terms": [ - "mcp" - ] - }, - { - "id": 152, - "name": "Cache", - "qualified_name": "mcp.Cache", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Reuses MCP read-tool responses in memory for frequently repeated queries.", - "reason": "Reuses MCP read-tool responses in memory for frequently repeated queries.", - "terms": [ - "mcp" - ] - }, - { - "id": 346, - "name": "Server", - "qualified_name": "wikiserver.Server", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers.", - "reason": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers.", - "terms": [ - "mcp" - ] - }, - { - "id": 1886, - "name": "BuildWalkers", - "qualified_name": "runtime.BuildWalkers", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "register supported language walkers for build, update, and MCP execution paths.", - "reason": "register supported language walkers for build, update, and MCP execution paths.", - "terms": [ - "mcp" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "mcp" - ] - }, - { - "id": 107, - "name": "printJSONResponse", - "qualified_name": "cli.printJSONResponse", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "keep --json output byte-stable and diffable while staying the MCP contract.", - "reason": "keep --json output byte-stable and diffable while staying the MCP contract.", - "terms": [ - "mcp" - ] - }, - { - "id": 173, - "name": "Deps", - "qualified_name": "mcp.Deps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "make each MCP capability's required application contracts explicit at composition time.", - "reason": "make each MCP capability's required application contracts explicit at composition time.", - "terms": [ - "mcp" - ] - }, - { - "id": 320, - "name": "contextTools", - "qualified_name": "mcp.contextTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_context.go", - "intent": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "reason": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "terms": [ - "mcp" - ] - }, - { - "id": 996, - "name": "FindExactNameMatches", - "qualified_name": "query.Service.FindExactNameMatches", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "reason": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "terms": [ - "mcp" - ] - }, - { - "id": 1371, - "name": "UpdateOptions", - "qualified_name": "workflow.UpdateOptions", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "reuse Service traversal and parse limit policy for CLI and MCP updates", - "reason": "reuse Service traversal and parse limit policy for CLI and MCP updates", - "terms": [ - "mcp" - ] - }, - { - "id": 1875, - "name": "FlushQueryCache", - "qualified_name": "mcpruntime.FlushQueryCache", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "let graph updates invalidate shared MCP cache without coupling to transport packages.", - "reason": "let graph updates invalidate shared MCP cache without coupling to transport packages.", - "terms": [ - "mcp" - ] - }, - { - "id": 113, - "name": "newServeCmd", - "qualified_name": "cli.newServeCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "reason": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "terms": [ - "mcp" - ] - }, - { - "id": 292, - "name": "LimitHTTPBody", - "qualified_name": "mcp.LimitHTTPBody", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/http.go", - "intent": "cap request memory usage before MCP handlers allocate or parse large request bodies.", - "reason": "cap request memory usage before MCP handlers allocate or parse large request bodies.", - "terms": [ - "mcp" - ] - }, - { - "id": 1871, - "name": "Instance", - "qualified_name": "mcpruntime.Instance", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "reason": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "terms": [ - "mcp" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "mcp" - ] - }, - { - "id": 270, - "name": "pagination", - "qualified_name": "mcp.pagination", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract.", - "reason": "keep pagination fields at the MCP boundary without exposing a shared internal paging contract.", - "terms": [ - "mcp" - ] - }, - { - "id": 279, - "name": "marshalJSON", - "qualified_name": "mcp.marshalJSON", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "serialize handler payloads into a stable JSON string for MCP responses and cache keys.", - "reason": "serialize handler payloads into a stable JSON string for MCP responses and cache keys.", - "terms": [ - "mcp" - ] - }, - { - "id": 316, - "name": "NewServer", - "qualified_name": "mcp.NewServer", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/server.go", - "intent": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "reason": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "terms": [ - "mcp" - ] - }, - { - "id": 997, - "name": "PagedNodes", - "qualified_name": "query.PagedNodes", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "carry paginated graph query rows together with the total match count for MCP responses.", - "reason": "carry paginated graph query rows together with the total match count for MCP responses.", - "terms": [ - "mcp" - ] - }, - { - "id": 1607, - "name": "Params", - "qualified_name": "search.Params", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "give MCP and the CLI the same request shape so their answers stay comparable.", - "reason": "give MCP and the CLI the same request shape so their answers stay comparable.", - "terms": [ - "mcp" - ] - }, - { - "id": 271, - "name": "handlers", - "qualified_name": "mcp.handlers", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "reason": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "terms": [ - "mcp" - ] - }, - { - "id": 968, - "name": "StatisticsReader", - "qualified_name": "analyze.StatisticsReader", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "let CLI and MCP status surfaces share typed graph facts without receiving a database handle.", - "reason": "let CLI and MCP status surfaces share typed graph facts without receiving a database handle.", - "terms": [ - "mcp" - ] - }, - { - "id": 969, - "name": "GraphLookup", - "qualified_name": "analyze.GraphLookup", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "reason": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "terms": [ - "mcp" - ] - }, - { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "terms": [ - "mcp" - ] - }, - { - "id": 1882, - "name": "MCPComponents", - "qualified_name": "runtime.Runtime.MCPComponents", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters.", - "reason": "keep both transports on one grouped MCP assembly input without exposing composition to inbound adapters.", - "terms": [ - "mcp" - ] - }, - { - "id": 282, - "name": "newToolResultErr", - "qualified_name": "mcp.newToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "propagate tool failures upward together with the MCP error response that should be shown to callers.", - "reason": "propagate tool failures upward together with the MCP error response that should be shown to callers.", - "terms": [ - "mcp" - ] - }, - { - "id": 287, - "name": "unwrapToolResultErr", - "qualified_name": "mcp.unwrapToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "terms": [ - "mcp" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "mcp" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "mcp" - ] - }, - { - "id": 178, - "name": "namespaceEvidence", - "qualified_name": "mcp.handlers.namespaceEvidence", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "reason": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "terms": [ - "mcp" - ] - }, - { - "id": 238, - "name": "graphService", - "qualified_name": "mcp.handlers.graphService", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "reason": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "terms": [ - "mcp" - ] - }, - { - "id": 280, - "name": "toolResultErr", - "qualified_name": "mcp.toolResultErr", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "preserve the MCP error response that should be returned to the user inside normal Go error flow.", - "reason": "preserve the MCP error response that should be returned to the user inside normal Go error flow.", - "terms": [ - "mcp" - ] - }, - { - "id": 163, - "name": "ImpactAnalyzer", - "qualified_name": "mcp.ImpactAnalyzer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "reason": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "terms": [ - "mcp" - ] - } - ] - }, - "membership": { - "corpus": 1901, - "terms": [ - { - "text": "membership", - "in_reasons": 8 - } + "incremental syncer": [ + 121, + 190, + 520, + 530, + 565, + 568, + 570, + 590, + 592, + 1035, + 1044, + 1045, + 1047, + 1048, + 1049, + 1051, + 1052, + 1053, + 1056, + 1063, + 1066, + 1068, + 1072, + 1073, + 1074, + 1081, + 1114, + 1115, + 1117, + 1118, + 1119, + 1280, + 1299, + 1303, + 1324, + 1340, + 1355, + 1371, + 1372, + 1376, + 1377, + 1378, + 1383, + 1786 ], - "hits": [ - { - "id": 506, - "name": "TopCommunities", - "qualified_name": "graphgorm.Store.TopCommunities", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace communities by stored membership count.", - "reason": "rank namespace communities by stored membership count.", - "terms": [ - "membership" - ] - }, - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "membership" - ] - }, - { - "id": 973, - "name": "NamedCount", - "qualified_name": "analyze.NamedCount", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "represent ranked membership aggregates without exposing SQL scan structs.", - "reason": "represent ranked membership aggregates without exposing SQL scan structs.", - "terms": [ - "membership" - ] - }, - { - "id": 198, - "name": "sliceContainsString", - "qualified_name": "mcp.sliceContainsString", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "linear membership check for small string slices used by allowlist evaluation.", - "reason": "linear membership check for small string slices used by allowlist evaluation.", - "terms": [ - "membership" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "membership" - ] - }, - { - "id": 1376, - "name": "collectLanguagePackages", - "qualified_name": "workflow.Service.collectLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "identify package boundaries and file memberships to populate the graph's package structure.", - "reason": "identify package boundaries and file memberships to populate the graph's package structure.", - "terms": [ - "membership" - ] - }, - { - "id": 1149, - "name": "PackageInfo", - "qualified_name": "ingest.PackageInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "reason": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "terms": [ - "membership" - ] - }, - { - "id": 1557, - "name": "CanAnswer", - "qualified_name": "intent.Result.CanAnswer", - "kind": "function", - "file_path": "internal/app/search/intent/intent.go", - "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason.", - "terms": [ - "membership" - ] - } - ] - }, - "migration schema": { - "corpus": 1901, - "terms": [ - { - "text": "migration", - "in_reasons": 18 - }, - { - "text": "schema", - "in_reasons": 31 - } + "mcp": [ + 2, + 59, + 63, + 64, + 66, + 67, + 87, + 89, + 91, + 93, + 107, + 117, + 119, + 128, + 132, + 187, + 221, + 222, + 233, + 234, + 236, + 241, + 246, + 268, + 270, + 271, + 274, + 291, + 919, + 920, + 921, + 926, + 946, + 947, + 1299, + 1316, + 1555, + 1626, + 1821, + 1823, + 1824, + 1827, + 1832, + 1836 ], - "hits": [ - { - "id": 1748, - "name": "CheckSchemaVersion", - "qualified_name": "migration.CheckSchemaVersion", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다.", - "reason": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 89, - "name": "internal/adapters/inbound/cli/migrate.go", - "qualified_name": "internal/adapters/inbound/cli/migrate.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 90, - "name": "MigrateConfig", - "qualified_name": "cli.MigrateConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 1826, - "name": "TableName", - "qualified_name": "graph.SchemaVersion.TableName", - "kind": "function", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "reason": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 633, - "name": "sqliteColumnExists", - "qualified_name": "searchsql.sqliteColumnExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "gate schema migrations on actual table layout instead of guessing from version markers.", - "reason": "gate schema migrations on actual table layout instead of guessing from version markers.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 585, - "name": "Migrate", - "qualified_name": "searchsql.PostgresBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "give tests and callers a one-call schema setup that reuses the production migrations.", - "reason": "give tests and callers a one-call schema setup that reuses the production migrations.", - "terms": [ - "migration", - "schema" - ] - }, - { - "id": 1884, - "name": "Migrate", - "qualified_name": "runtime.Runtime.Migrate", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "expose migration execution without coupling binaries to migration internals.", - "reason": "expose migration execution without coupling binaries to migration internals.", - "terms": [ - "migration" - ] - }, - { - "id": 1744, - "name": "migrationSourceDir", - "qualified_name": "migration.migrationSourceDir", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 migration source가 존재하는 실제 디렉터리인지 확인한다.", - "reason": "외부 migration source가 존재하는 실제 디렉터리인지 확인한다.", - "terms": [ - "migration" - ] - }, - { - "id": 1692, - "name": "internal/config/config.go", - "qualified_name": "internal/config/config.go", - "kind": "file", - "file_path": "internal/config/config.go", - "intent": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", - "reason": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", - "terms": [ - "migration" - ] - }, - { - "id": 1693, - "name": "MigrationsDir", - "qualified_name": "config.MigrationsDir", - "kind": "function", - "file_path": "internal/config/config.go", - "intent": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", - "reason": "외부 migration 디렉터리를 지정했는지 확인하고 공백은 비설정으로 정규화한다.", - "terms": [ - "migration" - ] - }, - { - "id": 1745, - "name": "migrateDatabaseDriver", - "qualified_name": "migration.migrateDatabaseDriver", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다.", - "reason": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다.", - "terms": [ - "migration" - ] - }, - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "schema" - ] - }, - { - "id": 1770, - "name": "postgresColumnNotNull", - "qualified_name": "migration.postgresColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "reason": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "terms": [ - "schema" - ] - }, - { - "id": 1774, - "name": "postgresIndexExists", - "qualified_name": "migration.postgresIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "reason": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "terms": [ - "schema" - ] - }, - { - "id": 1739, - "name": "NewMigrator", - "qualified_name": "migration.NewMigrator", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "GORM DB와 migration source를 golang-migrate 실행 인스턴스로 결합한다.", - "reason": "GORM DB와 migration source를 golang-migrate 실행 인스턴스로 결합한다.", - "terms": [ - "migration" - ] - }, - { - "id": 92, - "name": "resolveMigrationsDir", - "qualified_name": "cli.resolveMigrationsDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "resolve migration directory precedence between flag, config, and environment defaults.", - "reason": "resolve migration directory precedence between flag, config, and environment defaults.", - "terms": [ - "migration" - ] - }, - { - "id": 91, - "name": "newMigrateCmd", - "qualified_name": "cli.newMigrateCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "separate schema changes from normal runtime startup.", - "reason": "separate schema changes from normal runtime startup.", - "terms": [ - "schema" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "migration" - ] - }, - { - "id": 1387, - "name": "packageNodes", - "qualified_name": "workflow.packageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "project package metadata into the graph schema for persistence.", - "reason": "project package metadata into the graph schema for persistence.", - "terms": [ - "schema" - ] - }, - { - "id": 580, - "name": "Backend", - "qualified_name": "searchsql.Backend", - "kind": "type", - "file_path": "internal/adapters/outbound/searchsql/backend.go", - "intent": "provide one interface for backend-specific search index migration, rebuild, and query operations.", - "reason": "provide one interface for backend-specific search index migration, rebuild, and query operations.", - "terms": [ - "migration" - ] - }, - { - "id": 1716, - "name": "abort", - "qualified_name": "dbtest.postgresSchema.abort", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "avoid leaking a connection when the schema never became usable.", - "reason": "avoid leaking a connection when the schema never became usable.", - "terms": [ - "schema" - ] - }, - { - "id": 635, - "name": "sqliteTableExists", - "qualified_name": "searchsql.sqliteTableExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "reason": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "terms": [ - "migration" - ] - }, - { - "id": 1727, - "name": "internal/db/migration/embed.go", - "qualified_name": "internal/db/migration/embed.go", - "kind": "file", - "file_path": "internal/db/migration/embed.go", - "intent": "keep embedded versioned SQL assets with the migration runtime that selects and executes them.", - "reason": "keep embedded versioned SQL assets with the migration runtime that selects and executes them.", - "terms": [ - "migration" - ] - }, - { - "id": 1714, - "name": "drop", - "qualified_name": "dbtest.postgresSchema.drop", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "leave a concurrently running test's schema untouched while removing this one.", - "reason": "leave a concurrently running test's schema untouched while removing this one.", - "terms": [ - "schema" - ] - }, - { - "id": 1724, - "name": "sweepStalePostgresSchemas", - "qualified_name": "dbtest.sweepStalePostgresSchemas", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "bound how long a schema abandoned by a crashed run can survive.", - "reason": "bound how long a schema abandoned by a crashed run can survive.", - "terms": [ - "schema" - ] - }, - { - "id": 234, - "name": "buildOrUpdateGraphResponse", - "qualified_name": "mcp.buildOrUpdateGraphResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format.", - "reason": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format.", - "terms": [ - "schema" - ] - }, - { - "id": 235, - "name": "runPostprocessResponse", - "qualified_name": "mcp.runPostprocessResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "serialize run_postprocess results with a fixed JSON schema without changing the wire format.", - "reason": "serialize run_postprocess results with a fixed JSON schema without changing the wire format.", - "terms": [ - "schema" - ] - }, - { - "id": 1711, - "name": "newPostgresSchema", - "qualified_name": "dbtest.newPostgresSchema", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "hand back a private, empty schema together with the means to remove it.", - "reason": "hand back a private, empty schema together with the means to remove it.", - "terms": [ - "schema" - ] - }, - { - "id": 1722, - "name": "postgresSchemaAge", - "qualified_name": "dbtest.postgresSchemaAge", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "read a schema's age without a catalog column PostgreSQL does not have.", - "reason": "read a schema's age without a catalog column PostgreSQL does not have.", - "terms": [ - "schema" - ] - }, - { - "id": 1883, - "name": "Init", - "qualified_name": "runtime.Runtime.Init", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "reason": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "terms": [ - "schema" - ] - }, - { - "id": 634, - "name": "createSQLiteFTSTable", - "qualified_name": "searchsql.createSQLiteFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "reason": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "terms": [ - "migration" - ] - }, - { - "id": 1718, - "name": "postgresExtensionSchema", - "qualified_name": "dbtest.postgresExtensionSchema", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "keep an extension's operator classes reachable from a private schema without exposing public.", - "reason": "keep an extension's operator classes reachable from a private schema without exposing public.", - "terms": [ - "schema" - ] - }, - { - "id": 1765, - "name": "sqliteIndexExists", - "qualified_name": "migration.sqliteIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "index presence can be verified during schema parity checks before query paths use them.", - "reason": "index presence can be verified during schema parity checks before query paths use them.", - "terms": [ - "schema" - ] - }, - { - "id": 1803, - "name": "CrossRefSource", - "qualified_name": "graph.CrossRefSource", - "kind": "type", - "file_path": "internal/domain/graph/crossref.go", - "intent": "keep room for future non-annotation signals (e.g. import mapping) without schema rework.", - "reason": "keep room for future non-annotation signals (e.g. import mapping) without schema rework.", - "terms": [ - "schema" - ] - }, - { - "id": 1712, - "name": "requireTestDatabase", - "qualified_name": "dbtest.postgresSchema.requireTestDatabase", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "keep a misconfigured DSN from letting the suite create and drop schemas in real data.", - "reason": "keep a misconfigured DSN from letting the suite create and drop schemas in real data.", - "terms": [ - "schema" - ] - }, - { - "id": 1713, - "name": "dsn", - "qualified_name": "dbtest.postgresSchema.dsn", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "make the private schema apply to every connection a pool opens, not just the first.", - "reason": "make the private schema apply to every connection a pool opens, not just the first.", - "terms": [ - "schema" - ] - }, - { - "id": 627, - "name": "upgradeLegacyFTSTable", - "qualified_name": "searchsql.SQLiteBackend.upgradeLegacyFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "reason": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "terms": [ - "schema" - ] - }, - { - "id": 1715, - "name": "close", - "qualified_name": "dbtest.postgresSchema.close", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "terms": [ - "schema" - ] - }, - { - "id": 1709, - "name": "OpenIsolatedPostgres", - "qualified_name": "dbtest.OpenIsolatedPostgres", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "replace the per-package \"open postgres and wipe the shared schema\" helper with one safe entry point.", - "reason": "replace the per-package \"open postgres and wipe the shared schema\" helper with one safe entry point.", - "terms": [ - "schema" - ] - }, - { - "id": 1721, - "name": "newPostgresSchemaName", - "qualified_name": "dbtest.newPostgresSchemaName", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "name a schema so that it cannot collide and so its age can be read back later.", - "reason": "name a schema so that it cannot collide and so its age can be read back later.", - "terms": [ - "schema" - ] - }, - { - "id": 1725, - "name": "withPostgresSearchPath", - "qualified_name": "dbtest.withPostgresSearchPath", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "carry the schema in the connection string whether the DSN is a URL or key=value pairs.", - "reason": "carry the schema in the connection string whether the DSN is a URL or key=value pairs.", - "terms": [ - "schema" - ] - }, - { - "id": 1710, - "name": "postgresSchema", - "qualified_name": "dbtest.postgresSchema", - "kind": "class", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "model \"a schema that exists for as long as one test does\" as a value with an explicit end.", - "reason": "model \"a schema that exists for as long as one test does\" as a value with an explicit end.", - "terms": [ - "schema" - ] - }, - { - "id": 1776, - "name": "postgresTriggerExists", - "qualified_name": "migration.postgresTriggerExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다.", - "reason": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다.", - "terms": [ - "schema" - ] - } - ] - }, - "package discovery": { - "corpus": 1901, - "terms": [ - { - "text": "package", - "in_reasons": 151 - }, - { - "text": "discovery", - "in_reasons": 20 - } + "membership": [ + 153, + 178, + 451, + 452, + 924, + 1095, + 1320, + 1510 ], - "hits": [ - { - "id": 690, - "name": "readPNPMWorkspacePatterns", - "qualified_name": "treesitter.readPNPMWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "include pnpm-managed workspace package roots in Node-family package discovery.", - "reason": "include pnpm-managed workspace package roots in Node-family package discovery.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 1384, - "name": "mergeLanguagePackages", - "qualified_name": "workflow.mergeLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "consolidate package discovery results while discarding conflicting definitions.", - "reason": "consolidate package discovery results while discarding conflicting definitions.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 695, - "name": "workspacePatternMatchParts", - "qualified_name": "treesitter.workspacePatternMatchParts", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "implement **-aware workspace glob semantics for package root discovery.", - "reason": "implement **-aware workspace glob semantics for package root discovery.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 1375, - "name": "languagePackageDiscoverer", - "qualified_name": "workflow.languagePackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "select deterministic package discovery capabilities through the parser port.", - "reason": "select deterministic package discovery capabilities through the parser port.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 694, - "name": "workspacePatternMatch", - "qualified_name": "treesitter.workspacePatternMatch", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep workspace package discovery independent from shell-specific glob expansion.", - "reason": "keep workspace package discovery independent from shell-specific glob expansion.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 1159, - "name": "PackageDiscoverer", - "qualified_name": "ingest.PackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "delegate language-specific package discovery while ingest owns traversal policy.", - "reason": "delegate language-specific package discovery while ingest owns traversal policy.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 681, - "name": "discoverNodePackages", - "qualified_name": "treesitter.discoverNodePackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently.", - "reason": "unify Node ecosystem package discovery so import edges can bind to package nodes consistently.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 652, - "name": "DiscoverPackages", - "qualified_name": "treesitter.NoopPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "let callers reuse one package-discovery flow even when a language has no package model.", - "reason": "let callers reuse one package-discovery flow even when a language has no package model.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 653, - "name": "DiscoverPackages", - "qualified_name": "treesitter.Walker.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "implement the ingest package-discovery port without exposing LangSpec to the application.", - "reason": "implement the ingest package-discovery port without exposing LangSpec to the application.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 676, - "name": "nodePackageDiscoveryConfig", - "qualified_name": "treesitter.nodePackageDiscoveryConfig", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "reason": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 1150, - "name": "PackageDiscoveryOptions", - "qualified_name": "ingest.PackageDiscoveryOptions", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "reason": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 1149, - "name": "PackageInfo", - "qualified_name": "ingest.PackageInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "reason": "let ingest create package nodes and membership edges without knowing language-specific discovery details.", - "terms": [ - "package", - "discovery" - ] - }, - { - "id": 561, - "name": "Namespaces", - "qualified_name": "graphgorm.Store.Namespaces", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "reason": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "terms": [ - "discovery" - ] - }, - { - "id": 844, - "name": "walkPythonDocstrings", - "qualified_name": "treesitter.walkPythonDocstrings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "implement Python docstring discovery separately from the generic Walker.", - "reason": "implement Python docstring discovery separately from the generic Walker.", - "terms": [ - "discovery" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "discovery" - ] - }, - { - "id": 1353, - "name": "ExistingGraphFiles", - "qualified_name": "workflow.ExistingGraphFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "share deletion-scope discovery across CLI and MCP incremental updates", - "reason": "share deletion-scope discovery across CLI and MCP incremental updates", - "terms": [ - "discovery" - ] - }, - { - "id": 739, - "name": "internal/adapters/outbound/treesitter/semantics_go.go", - "qualified_name": "internal/adapters/outbound/treesitter/semantics_go.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 740, - "name": "GoSemantics", - "qualified_name": "treesitter.GoSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "reason": "encapsulate Go-specific graph enrichment logic such as interface implementation discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 693, - "name": "matchesWorkspacePatterns", - "qualified_name": "treesitter.matchesWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "reason": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "terms": [ - "discovery" - ] - }, - { - "id": 701, - "name": "stripJSONComments", - "qualified_name": "treesitter.stripJSONComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "reason": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "terms": [ - "discovery" - ] - }, - { - "id": 662, - "name": "KotlinPackageDiscovery", - "qualified_name": "treesitter.KotlinPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "map Kotlin package headers to package nodes so imports and package containment use declared package names.", - "reason": "map Kotlin package headers to package nodes so imports and package containment use declared package names.", - "terms": [ - "package" - ] - }, - { - "id": 688, - "name": "bestNodePackageScope", - "qualified_name": "treesitter.bestNodePackageScope", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "prefer workspace package names over the root package when files live under nested package roots.", - "reason": "prefer workspace package names over the root package when files live under nested package roots.", - "terms": [ - "package" - ] - }, - { - "id": 1141, - "name": "WithFilePackages", - "qualified_name": "ingest.WithFilePackages", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "provide deterministic package prefixes for languages without package declarations.", - "reason": "provide deterministic package prefixes for languages without package declarations.", - "terms": [ - "package" - ] - }, - { - "id": 661, - "name": "JavaPackageDiscovery", - "qualified_name": "treesitter.JavaPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets.", - "reason": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets.", - "terms": [ - "package" - ] - }, - { - "id": 677, - "name": "nodePackageJSON", - "qualified_name": "treesitter.nodePackageJSON", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep package metadata parsing minimal while deriving package-node qualified names.", - "reason": "keep package metadata parsing minimal while deriving package-node qualified names.", - "terms": [ - "package" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "package" - ] - }, - { - "id": 665, - "name": "DiscoverPackages", - "qualified_name": "treesitter.JavaScriptPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "create package nodes for JavaScript directories using package.json-derived import paths.", - "reason": "create package nodes for JavaScript directories using package.json-derived import paths.", - "terms": [ - "package" - ] - }, - { - "id": 691, - "name": "workspacePackageRoots", - "qualified_name": "treesitter.workspacePackageRoots", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "map workspace manifests to concrete package directories without parsing unrelated nested packages.", - "reason": "map workspace manifests to concrete package directories without parsing unrelated nested packages.", - "terms": [ - "package" - ] - }, - { - "id": 674, - "name": "pythonDirToImportPath", - "qualified_name": "treesitter.pythonDirToImportPath", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize filesystem package directories into the import-path form used by package nodes.", - "reason": "normalize filesystem package directories into the import-path form used by package nodes.", - "terms": [ - "package" - ] - }, - { - "id": 724, - "name": "WithFilePackages", - "qualified_name": "treesitter.WithFilePackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let parsers stamp package-less languages with a deterministic file-level package prefix.", - "reason": "let parsers stamp package-less languages with a deterministic file-level package prefix.", - "terms": [ - "package" - ] - }, - { - "id": 1314, - "name": "packageSemanticEdgeBatches", - "qualified_name": "workflow.Service.packageSemanticEdgeBatches", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "reason": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "terms": [ - "package" - ] - }, - { - "id": 1376, - "name": "collectLanguagePackages", - "qualified_name": "workflow.Service.collectLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "identify package boundaries and file memberships to populate the graph's package structure.", - "reason": "identify package boundaries and file memberships to populate the graph's package structure.", - "terms": [ - "package" - ] - }, - { - "id": 667, - "name": "DiscoverPackages", - "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "reason": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "terms": [ - "package" - ] - }, - { - "id": 705, - "name": "readJavaPackageDeclaration", - "qualified_name": "treesitter.readJavaPackageDeclaration", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "use the language-declared package as the authoritative import path for Java package nodes.", - "reason": "use the language-declared package as the authoritative import path for Java package nodes.", - "terms": [ - "package" - ] - }, - { - "id": 706, - "name": "readKotlinPackageHeader", - "qualified_name": "treesitter.readKotlinPackageHeader", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "use the language-declared package as the authoritative import path for Kotlin package nodes.", - "reason": "use the language-declared package as the authoritative import path for Kotlin package nodes.", - "terms": [ - "package" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "package" - ] - }, - { - "id": 1382, - "name": "packageSemanticMetadataForFile", - "qualified_name": "workflow.Service.packageSemanticMetadataForFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "reload package and interface metadata only for files participating in a package semantic refresh.", - "reason": "reload package and interface metadata only for files participating in a package semantic refresh.", - "terms": [ - "package" - ] - }, - { - "id": 664, - "name": "DiscoverPackages", - "qualified_name": "treesitter.TypeScriptPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "create package nodes for package.json paths and tsconfig alias paths that imports can target.", - "reason": "create package nodes for package.json paths and tsconfig alias paths that imports can target.", - "terms": [ - "package" - ] - }, - { - "id": 1381, - "name": "collectAffectedPackageSemanticBatches", - "qualified_name": "workflow.Service.collectAffectedPackageSemanticBatches", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "limit package semantic edge refresh work to packages whose file sets overlap the current update.", - "reason": "limit package semantic edge refresh work to packages whose file sets overlap the current update.", - "terms": [ - "package" - ] - }, - { - "id": 1395, - "name": "affectedPackageImportPaths", - "qualified_name": "workflow.affectedPackageImportPaths", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "constrain package semantic refresh to import paths touched directly or by directory-level package splits.", - "reason": "constrain package semantic refresh to import paths touched directly or by directory-level package splits.", - "terms": [ - "package" - ] - }, - { - "id": 1396, - "name": "addUnchangedPeersForAddedFiles", - "qualified_name": "workflow.addUnchangedPeersForAddedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "reason": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "terms": [ - "package" - ] - }, - { - "id": 657, - "name": "internal/adapters/outbound/treesitter/package_discovery.go", - "qualified_name": "internal/adapters/outbound/treesitter/package_discovery.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "reason": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "terms": [ - "package" - ] - }, - { - "id": 658, - "name": "PythonPackageDiscovery", - "qualified_name": "treesitter.PythonPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "reason": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "terms": [ - "package" - ] - }, - { - "id": 663, - "name": "DiscoverPackages", - "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "reason": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "terms": [ - "package" - ] - }, - { - "id": 1707, - "name": "PostgresDSN", - "qualified_name": "dbtest.PostgresDSN", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "reason": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "terms": [ - "package" - ] - }, - { - "id": 666, - "name": "DiscoverPackages", - "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "reason": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "terms": [ - "package" - ] - }, - { - "id": 668, - "name": "GoPackageDiscovery", - "qualified_name": "treesitter.GoPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "model a Go import path as one package node that contains every non-test file in that package.", - "reason": "model a Go import path as one package node that contains every non-test file in that package.", - "terms": [ - "package" - ] - }, - { - "id": 686, - "name": "discoverNodePackageScopes", - "qualified_name": "treesitter.discoverNodePackageScopes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "reason": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "terms": [ - "package" - ] - }, - { - "id": 1640, - "name": "packageChildren", - "qualified_name": "wiki.Builder.packageChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list direct files inside one package node.", - "reason": "list direct files inside one package node.", - "terms": [ - "package" - ] - }, - { - "id": 1660, - "name": "isRootPackagePath", - "qualified_name": "wiki.isRootPackagePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "identify package nodes that represent the repository root rather than a sidebar child.", - "reason": "identify package nodes that represent the repository root rather than a sidebar child.", - "terms": [ - "package" - ] - } - ] - }, - "parsecache": {}, - "promoteExactNameMatch": {}, - "radius": { - "corpus": 1901, - "terms": [ - { - "text": "radius", - "in_reasons": 8 - } + "migration schema": [ + 42, + 43, + 44, + 45, + 183, + 184, + 524, + 528, + 575, + 581, + 582, + 583, + 1331, + 1637, + 1638, + 1653, + 1654, + 1655, + 1656, + 1657, + 1658, + 1659, + 1660, + 1661, + 1663, + 1664, + 1665, + 1666, + 1667, + 1669, + 1683, + 1688, + 1689, + 1692, + 1693, + 1711, + 1717, + 1722, + 1725, + 1753, + 1779, + 1780, + 1833, + 1834 ], - "hits": [ - { - "id": 955, - "name": "New", - "qualified_name": "impact.New", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "construct a blast-radius analyzer around a graph reader", - "reason": "construct a blast-radius analyzer around a graph reader", - "terms": [ - "radius" - ] - }, - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "radius" - ] - }, - { - "id": 183, - "name": "impactRadiusResponse", - "qualified_name": "mcp.impactRadiusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable typed response envelope for impact-radius queries.", - "reason": "preserve a stable typed response envelope for impact-radius queries.", - "terms": [ - "radius" - ] - }, - { - "id": 951, - "name": "EdgeReader", - "qualified_name": "impact.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "abstract bidirectional edge and node lookups for blast-radius traversal", - "reason": "abstract bidirectional edge and node lookups for blast-radius traversal", - "terms": [ - "radius" - ] - }, - { - "id": 957, - "name": "ImpactRadiusBounded", - "qualified_name": "impact.Analyzer.ImpactRadiusBounded", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "terms": [ - "radius" - ] - }, - { - "id": 182, - "name": "impactRadiusMetadata", - "qualified_name": "mcp.impactRadiusMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "reason": "explain how getImpactRadius constrained the blast-radius traversal for the returned payload.", - "terms": [ - "radius" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "radius" - ] - }, - { - "id": 163, - "name": "ImpactAnalyzer", - "qualified_name": "mcp.ImpactAnalyzer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "reason": "inject a node/depth-capped blast-radius analyzer so a single MCP request cannot\nexpand into an unbounded graph walk.", - "terms": [ - "radius" - ] - } - ] - }, - "rerank": { - "corpus": 1901, - "terms": [ - { - "text": "rerank", - "in_reasons": 2 - } + "package discovery": [ + 267, + 484, + 507, + 509, + 510, + 540, + 597, + 598, + 599, + 600, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 613, + 614, + 615, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 629, + 631, + 632, + 633, + 634, + 636, + 637, + 638, + 639, + 640, + 641, + 643, + 647, + 649, + 650, + 651, + 652, + 658, + 666, + 668, + 669, + 670, + 681, + 682, + 684, + 685, + 687, + 703, + 705, + 706, + 708, + 711, + 721, + 722, + 749, + 751, + 759, + 760, + 769, + 789, + 828, + 836, + 845, + 848, + 921, + 937, + 1058, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1093, + 1094, + 1095, + 1096, + 1097, + 1106, + 1107, + 1108, + 1115, + 1117, + 1153, + 1171, + 1175, + 1191, + 1217, + 1225, + 1261, + 1278, + 1285, + 1299, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1331, + 1332, + 1333, + 1334, + 1335, + 1336, + 1338, + 1339, + 1340, + 1341, + 1351, + 1368, + 1375, + 1479, + 1540, + 1554, + 1577, + 1582, + 1586, + 1587, + 1589, + 1593, + 1594, + 1599, + 1600, + 1601, + 1602, + 1607, + 1608, + 1618, + 1641, + 1651, + 1653, + 1791, + 1821, + 1823, + 1827, + 1850, + 1851 ], - "hits": [ - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "rerank" - ] - }, - { - "id": 1608, - "name": "Service", - "qualified_name": "search.Service", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "reason": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "terms": [ - "rerank" - ] - } - ] - }, - "retreival": {}, - "sanit": {}, - "sanitze": {}, - "search document": { - "corpus": 1901, - "terms": [ - { - "text": "search", - "in_reasons": 84 - }, - { - "text": "document", - "in_reasons": 26 - } + "parsecache": [], + "promoteExactNameMatch": [], + "radius": [ + 117, + 135, + 136, + 145, + 901, + 905, + 906, + 908 ], - "hits": [ - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 644, - "name": "RefreshSearchDocuments", - "qualified_name": "searchsql.RefreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "keep derived search documents consistent with graph state before FTS rebuilds", - "reason": "keep derived search documents consistent with graph state before FTS rebuilds", - "terms": [ - "search", - "document" - ] - }, - { - "id": 236, - "name": "refreshSearchDocuments", - "qualified_name": "mcp.handlers.refreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "refresh search documents through the injected override, defaulting to the service impl.", - "reason": "refresh search documents through the injected override, defaulting to the service impl.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 530, - "name": "DeleteGraph", - "qualified_name": "graphgorm.Store.DeleteGraph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "reason": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 1162, - "name": "SearchWriter", - "qualified_name": "ingest.SearchWriter", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose full and scoped search rebuilds as indivisible application operations.", - "reason": "expose full and scoped search rebuilds as indivisible application operations.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 619, - "name": "rebuildTable", - "qualified_name": "searchsql.SQLiteBackend.rebuildTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "reason": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 1904, - "name": "SelectedDoc", - "qualified_name": "SelectedDoc", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "keep the minimal tree/search item data needed by the document viewer and context tray.", - "reason": "keep the minimal tree/search item data needed by the document viewer and context tray.", - "terms": [ - "search", - "document" - ] - }, - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "document" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "document" - ] - }, - { - "id": 1787, - "name": "stripLinePrefix", - "qualified_name": "annotation.stripLinePrefix", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize individual documentation lines across language comment syntaxes", - "reason": "normalize individual documentation lines across language comment syntaxes", - "terms": [ - "document" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "document" - ] - }, - { - "id": 1944, - "name": "DocResponse", - "qualified_name": "DocResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return generated Markdown content for one documentation path.", - "reason": "return generated Markdown content for one documentation path.", - "terms": [ - "document" - ] - }, - { - "id": 586, - "name": "Rebuild", - "qualified_name": "searchsql.PostgresBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows.", - "reason": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows.", - "terms": [ - "search" - ] - }, - { - "id": 486, - "name": "Snapshot", - "qualified_name": "graphgorm.Store.Snapshot", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load documentable nodes and their annotations from one namespace.", - "reason": "load documentable nodes and their annotations from one namespace.", - "terms": [ - "document" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "document" - ] - }, - { - "id": 1548, - "name": "FieldsLower", - "qualified_name": "identtoken.FieldsLower", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "read a document the same way the query is read.", - "reason": "read a document the same way the query is read.", - "terms": [ - "document" - ] - }, - { - "id": 1783, - "name": "stripBlockDelimiters", - "qualified_name": "annotation.stripBlockDelimiters", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "keep only the inner documentation payload from block-style comments", - "reason": "keep only the inner documentation payload from block-style comments", - "terms": [ - "document" - ] - }, - { - "id": 357, - "name": "handleDoc", - "qualified_name": "wikiserver.Server.handleDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read one generated Markdown document for display in the Wiki viewer.", - "reason": "read one generated Markdown document for display in the Wiki viewer.", - "terms": [ - "document" - ] - }, - { - "id": 368, - "name": "contextRequest", - "qualified_name": "wikiserver.contextRequest", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "decode selected Wiki document paths from the context-copy request body.", - "reason": "decode selected Wiki document paths from the context-copy request body.", - "terms": [ - "document" - ] - }, - { - "id": 219, - "name": "ragIndexRoot", - "qualified_name": "mcp.handlers.ragIndexRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "terms": [ - "document" - ] - }, - { - "id": 1906, - "name": "SearchMode", - "qualified_name": "SearchMode", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "reason": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "terms": [ - "search" - ] - }, - { - "id": 894, - "name": "collectComments", - "qualified_name": "treesitter.Walker.collectComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep documentation comments together so binders can attach them as a single unit", - "reason": "keep documentation comments together so binders can attach them as a single unit", - "terms": [ - "document" - ] - }, - { - "id": 1920, - "name": "openGraphNode", - "qualified_name": "openGraphNode", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "open a force-graph node through the same document/symbol viewer used by the tree.", - "reason": "open a force-graph node through the same document/symbol viewer used by the tree.", - "terms": [ - "document" - ] - }, - { - "id": 355, - "name": "readDBFallbackDoc", - "qualified_name": "wikiserver.Server.readDBFallbackDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "reason": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "terms": [ - "document" - ] - }, - { - "id": 1758, - "name": "searchDocCollision", - "qualified_name": "migration.searchDocCollision", - "kind": "class", - "file_path": "internal/db/migration/migration.go", - "intent": "search_documents namespace 병합 시 중복되는 node_id를 보고한다.", - "reason": "search_documents namespace 병합 시 중복되는 node_id를 보고한다.", - "terms": [ - "search" - ] - }, - { - "id": 1915, - "name": "runSearch", - "qualified_name": "runSearch", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "update search results for the active namespace.", - "reason": "update search results for the active namespace.", - "terms": [ - "search" - ] - }, - { - "id": 1523, - "name": "pathTokens", - "qualified_name": "document.pathTokens", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "make basename, extension, and human language names searchable.", - "reason": "make basename, extension, and human language names searchable.", - "terms": [ - "search" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "document" - ] - }, - { - "id": 632, - "name": "buildSQLiteFTSInsert", - "qualified_name": "searchsql.buildSQLiteFTSInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "reason": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "terms": [ - "document" - ] - }, - { - "id": 549, - "name": "Search", - "qualified_name": "graphgorm.transaction.Search", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "supply transaction-scoped search operations to the ingest callback.", - "reason": "supply transaction-scoped search operations to the ingest callback.", - "terms": [ - "search" - ] - }, - { - "id": 614, - "name": "Migrate", - "qualified_name": "searchsql.SQLiteBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Creates a full-text search index table for SQLite.", - "reason": "Creates a full-text search index table for SQLite.", - "terms": [ - "search" - ] - }, - { - "id": 1599, - "name": "tokenize", - "qualified_name": "rank.tokenize", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "normalize free-text search input into comparable Unicode tokens.", - "reason": "normalize free-text search input into comparable Unicode tokens.", - "terms": [ - "search" - ] - }, - { - "id": 1622, - "name": "ResultItem", - "qualified_name": "wire.ResultItem", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "preserve a stable per-item DTO for search responses.", - "reason": "preserve a stable per-item DTO for search responses.", - "terms": [ - "search" - ] - }, - { - "id": 1521, - "name": "BuildReasons", - "qualified_name": "document.BuildReasons", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "reason": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "terms": [ - "document" - ] - }, - { - "id": 353, - "name": "handleSearch", - "qualified_name": "wikiserver.Server.handleSearch", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "search Wiki tree labels and summaries for the active namespace.", - "reason": "search Wiki tree labels and summaries for the active namespace.", - "terms": [ - "search" - ] - }, - { - "id": 606, - "name": "alwaysPrefix", - "qualified_name": "searchsql.alwaysPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep prefix expansion the default for the shared search index.", - "reason": "keep prefix expansion the default for the shared search index.", - "terms": [ - "search" - ] - }, - { - "id": 643, - "name": "RebuildNodes", - "qualified_name": "searchsql.Writer.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the incremental derived-search refresh required by graph updates.", - "reason": "implement the incremental derived-search refresh required by graph updates.", - "terms": [ - "search" - ] - }, - { - "id": 647, - "name": "scopedNodeIDsForChunk", - "qualified_name": "searchsql.scopedNodeIDsForChunk", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "reason": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "terms": [ - "search" - ] - }, - { - "id": 1911, - "name": "openDoc", - "qualified_name": "openDoc", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "open a selected tree/search item in the Markdown viewer.", - "reason": "open a selected tree/search item in the Markdown viewer.", - "terms": [ - "search" - ] - }, - { - "id": 169, - "name": "GraphToolsDeps", - "qualified_name": "mcp.GraphToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only the dependencies required by graph and search read tools.", - "reason": "group only the dependencies required by graph and search read tools.", - "terms": [ - "search" - ] - }, - { - "id": 232, - "name": "listNamespaces", - "qualified_name": "mcp.handlers.listNamespaces", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_namespace.go", - "intent": "let agents discover available namespaces before scoping search or graph queries.", - "reason": "let agents discover available namespaces before scoping search or graph queries.", - "terms": [ - "search" - ] - }, - { - "id": 255, - "name": "search", - "qualified_name": "mcp.handlers.search", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "search graph nodes efficiently by keyword and optional path prefix filtering.", - "reason": "search graph nodes efficiently by keyword and optional path prefix filtering.", - "terms": [ - "search" - ] - }, - { - "id": 256, - "name": "searchFederated", - "qualified_name": "mcp.handlers.searchFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "search" - ] - }, - { - "id": 545, - "name": "UnitOfWork", - "qualified_name": "graphgorm.UnitOfWork", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "coordinate graph and search writes without exposing GORM to application policy.", - "reason": "coordinate graph and search writes without exposing GORM to application policy.", - "terms": [ - "search" - ] - }, - { - "id": 546, - "name": "NewUnitOfWork", - "qualified_name": "graphgorm.NewUnitOfWork", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "inject the database transaction owner and transaction-scoped search writer factory.", - "reason": "inject the database transaction owner and transaction-scoped search writer factory.", - "terms": [ - "search" - ] - }, - { - "id": 583, - "name": "PostgresBackend", - "qualified_name": "searchsql.PostgresBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "reason": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "terms": [ - "search" - ] - }, - { - "id": 596, - "name": "Query", - "qualified_name": "searchsql.Reader.Query", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "implement the bound candidate-search port without exposing a DB argument.", - "reason": "implement the bound candidate-search port without exposing a DB argument.", - "terms": [ - "search" - ] - }, - { - "id": 612, - "name": "SQLiteBackend", - "qualified_name": "searchsql.SQLiteBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Handles full-text search indexing and querying in a SQLite environment.", - "reason": "Handles full-text search indexing and querying in a SQLite environment.", - "terms": [ - "search" - ] - }, - { - "id": 640, - "name": "RebuildAll", - "qualified_name": "searchsql.Writer.RebuildAll", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the full derived-search refresh required by a graph build.", - "reason": "implement the full derived-search refresh required by a graph build.", - "terms": [ - "search" - ] - }, - { - "id": 1164, - "name": "UnitOfWork", - "qualified_name": "ingest.UnitOfWork", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "commit graph and search changes together only when the callback succeeds.", - "reason": "commit graph and search changes together only when the callback succeeds.", - "terms": [ - "search" - ] - } - ] - }, - "sqlite": { - "corpus": 1901, - "terms": [ - { - "text": "sqlite", - "in_reasons": 26 - } + "rerank": [ + 1538, + 1556 ], - "hits": [ - { - "id": 613, - "name": "NewSQLiteBackend", - "qualified_name": "searchsql.NewSQLiteBackend", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Provides a Backend implementation specifically for SQLite.", - "reason": "Provides a Backend implementation specifically for SQLite.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1763, - "name": "sqliteColumnNotNull", - "qualified_name": "migration.sqliteColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다.", - "reason": "SQLite 컬럼 nullability를 런타임 스키마 검증에 재사용한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1745, - "name": "migrateDatabaseDriver", - "qualified_name": "migration.migrateDatabaseDriver", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다.", - "reason": "sqlite/postgres별 migration driver를 생성해 golang-migrate에 연결한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1760, - "name": "validateSQLiteSchemaParity", - "qualified_name": "migration.validateSQLiteSchemaParity", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "SQLite 배포에서 FTS5 스키마와 모델 nullability 불변식을 확인한다.", - "reason": "SQLite 배포에서 FTS5 스키마와 모델 nullability 불변식을 확인한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1762, - "name": "sqliteColumnExists", - "qualified_name": "migration.sqliteColumnExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다.", - "reason": "SQLite PRAGMA 메타데이터를 공통 컬럼 존재 검증에 재사용한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 614, - "name": "Migrate", - "qualified_name": "searchsql.SQLiteBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Creates a full-text search index table for SQLite.", - "reason": "Creates a full-text search index table for SQLite.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1736, - "name": "EnsureSchemaVersion", - "qualified_name": "migration.EnsureSchemaVersion", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "런타임 명령이 시작되기 전에 스키마 버전과 자동 마이그레이션 조건을 검증한다.", - "reason": "런타임 명령이 시작되기 전에 스키마 버전과 자동 마이그레이션 조건을 검증한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 647, - "name": "scopedNodeIDsForChunk", - "qualified_name": "searchsql.scopedNodeIDsForChunk", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "reason": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1766, - "name": "sqliteColumnInfo", - "qualified_name": "migration.sqliteColumnInfo", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "SQLite 컬럼 존재 여부와 NOT NULL 속성을 한 번에 조회한다.", - "reason": "SQLite 컬럼 존재 여부와 NOT NULL 속성을 한 번에 조회한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1768, - "name": "SQLiteColumnNotNull", - "qualified_name": "migration.SQLiteColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다.", - "reason": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 612, - "name": "SQLiteBackend", - "qualified_name": "searchsql.SQLiteBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Handles full-text search indexing and querying in a SQLite environment.", - "reason": "Handles full-text search indexing and querying in a SQLite environment.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1738, - "name": "ShouldAutoMigrateLocalSQLite", - "qualified_name": "migration.ShouldAutoMigrateLocalSQLite", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다.", - "reason": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1767, - "name": "SQLiteColumnExists", - "qualified_name": "migration.SQLiteColumnExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다.", - "reason": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1769, - "name": "SQLiteColumnInfo", - "qualified_name": "migration.SQLiteColumnInfo", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "SQLite 컬럼 메타데이터를 공개형 struct로 노출해 테스트와 검증 코드에서 재사용하게 한다.", - "reason": "SQLite 컬럼 메타데이터를 공개형 struct로 노출해 테스트와 검증 코드에서 재사용하게 한다.", - "terms": [ - "sqlite" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "sqlite" - ] - }, - { - "id": 602, - "name": "SanitizeFTS5", - "qualified_name": "searchsql.SanitizeFTS5", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "reason": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "terms": [ - "sqlite" - ] - }, - { - "id": 608, - "name": "buildPrefixQuery", - "qualified_name": "searchsql.buildPrefixQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "reason": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "terms": [ - "sqlite" - ] - }, - { - "id": 619, - "name": "rebuildTable", - "qualified_name": "searchsql.SQLiteBackend.rebuildTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "reason": "resynchronize one namespace-scoped SQLite FTS table from persisted search documents without disturbing other namespaces.", - "terms": [ - "sqlite" - ] - }, - { - "id": 625, - "name": "Query", - "qualified_name": "searchsql.SQLiteBackend.Query", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "reason": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1705, - "name": "NewSearchBackend", - "qualified_name": "db.NewSearchBackend", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "select the full-text search backend implementation that matches the active database driver.", - "reason": "select the full-text search backend implementation that matches the active database driver.", - "terms": [ - "sqlite" - ] - }, - { - "id": 604, - "name": "SanitizePostgresTSQuery", - "qualified_name": "searchsql.SanitizePostgresTSQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior.", - "reason": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior.", - "terms": [ - "sqlite" - ] - }, - { - "id": 627, - "name": "upgradeLegacyFTSTable", - "qualified_name": "searchsql.SQLiteBackend.upgradeLegacyFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "reason": "upgrade legacy SQLite FTS storage to the namespace-aware schema without losing the indexed search snapshot.", - "terms": [ - "sqlite" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "sqlite" - ] - }, - { - "id": 634, - "name": "createSQLiteFTSTable", - "qualified_name": "searchsql.createSQLiteFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "reason": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "terms": [ - "sqlite" - ] - }, - { - "id": 632, - "name": "buildSQLiteFTSInsert", - "qualified_name": "searchsql.buildSQLiteFTSInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "reason": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "terms": [ - "sqlite" - ] - }, - { - "id": 1704, - "name": "ConfigurePool", - "qualified_name": "db.ConfigurePool", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "apply connection-pool limits that match each database driver's concurrency model.", - "reason": "apply connection-pool limits that match each database driver's concurrency model.", - "terms": [ - "sqlite" - ] - } - ] - }, - "sqlitebackend": {}, - "syncer": { - "corpus": 1901, - "terms": [ - { - "text": "syncer", - "in_reasons": 8 - } + "retreival": [], + "sanit": [], + "sanitze": [], + "search document": [ + 123, + 168, + 169, + 170, + 182, + 185, + 189, + 191, + 205, + 206, + 208, + 271, + 294, + 298, + 299, + 300, + 303, + 311, + 315, + 432, + 433, + 476, + 490, + 494, + 495, + 498, + 499, + 524, + 526, + 529, + 534, + 536, + 538, + 539, + 547, + 551, + 558, + 559, + 561, + 563, + 564, + 567, + 568, + 573, + 575, + 580, + 584, + 585, + 587, + 590, + 591, + 594, + 841, + 1058, + 1110, + 1111, + 1113, + 1117, + 1122, + 1217, + 1255, + 1366, + 1371, + 1378, + 1381, + 1382, + 1470, + 1472, + 1474, + 1477, + 1481, + 1497, + 1501, + 1502, + 1504, + 1527, + 1528, + 1548, + 1558, + 1559, + 1561, + 1566, + 1568, + 1571, + 1574, + 1575, + 1615, + 1642, + 1649, + 1662, + 1704, + 1732, + 1736, + 1737, + 1768, + 1776, + 1852, + 1854, + 1859, + 1863, + 1868, + 1886, + 1891, + 1903 ], - "hits": [ - { - "id": 1108, - "name": "SetResolveOptions", - "qualified_name": "incremental.Syncer.SetResolveOptions", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid rebuilding the syncer for every Build/Update invocation.", - "reason": "avoid rebuilding the syncer for every Build/Update invocation.", - "terms": [ - "syncer" - ] - }, - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "syncer" - ] - }, - { - "id": 1169, - "name": "FileBatchVisitor", - "qualified_name": "ingest.FileBatchVisitor", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "reason": "keep bulk update input streaming while allowing a syncer to own cross-batch ordering.", - "terms": [ - "syncer" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "syncer" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "syncer" - ] - }, - { - "id": 1435, - "name": "newUpdateSpoolBatchSource", - "qualified_name": "workflow.newUpdateSpoolBatchSource", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "reason": "let a staged syncer own cross-batch ordering without loading the entire source snapshot into memory.", - "terms": [ - "syncer" - ] - }, - { - "id": 1440, - "name": "syncIncrementalBatch", - "qualified_name": "workflow.syncIncrementalBatch", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes.", - "reason": "route changes through the transactional syncer so all updates land in the same DB transaction as graph writes.", - "terms": [ - "syncer" - ] - }, - { - "id": 1429, - "name": "withUpdateTx", - "qualified_name": "workflow.Service.withUpdateTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate.", - "reason": "prefer a single coupled tx for graph and search rebuild while gracefully degrading when the syncer or store cannot participate.", - "terms": [ - "syncer" - ] - } - ] - }, - "syncqueue": { - "corpus": 1901, - "terms": [ - { - "text": "syncqueue", - "in_reasons": 1 - } + "sqlite": [ + 543, + 547, + 554, + 559, + 560, + 561, + 563, + 567, + 568, + 573, + 575, + 580, + 582, + 594, + 1648, + 1650, + 1679, + 1681, + 1689, + 1706, + 1708, + 1709, + 1712, + 1713, + 1714, + 1715 ], - "hits": [ - { - "id": 1512, - "name": "QueueConfig", - "qualified_name": "reposync.QueueConfig", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "configure queue retry policy and memory bounds when constructing a SyncQueue.", - "reason": "configure queue retry policy and memory bounds when constructing a SyncQueue.", - "terms": [ - "syncqueue" - ] - } - ] - }, - "trace flow": { - "corpus": 1901, - "terms": [ - { - "text": "trace", - "in_reasons": 25 - }, - { - "text": "flow", - "in_reasons": 52 - } + "sqlitebackend": [], + "syncer": [ + 121, + 190, + 1052, + 1118, + 1303, + 1371, + 1377, + 1383 ], - "hits": [ - { - "id": 936, - "name": "Builder", - "qualified_name": "flow.Builder", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "persists traced flows per entrypoint back into the flows table.", - "reason": "persists traced flows per entrypoint back into the flows table.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 959, - "name": "FlowRebuildStore", - "qualified_name": "analyze.FlowRebuildStore", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "let flow application policy trace and replace flows without importing a database adapter.", - "reason": "let flow application policy trace and replace flows without importing a database adapter.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 194, - "name": "getAffectedFlows", - "qualified_name": "mcp.handlers.getAffectedFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "reason": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 938, - "name": "Rebuild", - "qualified_name": "flow.Builder.Rebuild", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "refreshes list_flows by replacing all stored flows within the namespace.", - "reason": "refreshes list_flows by replacing all stored flows within the namespace.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 186, - "name": "traceFlowResponse", - "qualified_name": "mcp.traceFlowResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable response envelope for traced flow results and their evidence.", - "reason": "preserve a stable response envelope for traced flow results and their evidence.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 495, - "name": "CreateFlow", - "qualified_name": "graphgorm.Store.CreateFlow", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "store traced flow aggregates while keeping generated IDs visible to application results.", - "reason": "store traced flow aggregates while keeping generated IDs visible to application results.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 164, - "name": "FlowTracer", - "qualified_name": "mcp.FlowTracer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "reason": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "terms": [ - "trace", - "flow" - ] - }, - { - "id": 1849, - "name": "StartServerSpan", - "qualified_name": "obs.Telemetry.StartServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다.", - "reason": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다.", - "terms": [ - "trace" - ] - }, - { - "id": 1855, - "name": "ContextWithHTTPTrace", - "qualified_name": "obs.ContextWithHTTPTrace", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "HTTP 요청의 traceparent와 baggage를 downstream span 시작에 연결한다.", - "reason": "HTTP 요청의 traceparent와 baggage를 downstream span 시작에 연결한다.", - "terms": [ - "trace" - ] - }, - { - "id": 960, - "name": "FlowUnitOfWork", - "qualified_name": "analyze.FlowUnitOfWork", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "reason": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "terms": [ - "flow" - ] - }, - { - "id": 578, - "name": "LogArgs", - "qualified_name": "reposyncobs.Hooks.LogArgs", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "preserve trace correlation fields on repository sync queue logs.", - "reason": "preserve trace correlation fields on repository sync queue logs.", - "terms": [ - "trace" - ] - }, - { - "id": 947, - "name": "New", - "qualified_name": "flow.New", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "construct a tracer bound to a graph edge reader", - "reason": "construct a tracer bound to a graph edge reader", - "terms": [ - "trace" - ] - }, - { - "id": 1481, - "name": "LogArgs", - "qualified_name": "reposync.noopObservability.LogArgs", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "contribute no structured trace fields when observability is disabled.", - "reason": "contribute no structured trace fields when observability is disabled.", - "terms": [ - "trace" - ] - }, - { - "id": 1846, - "name": "Telemetry", - "qualified_name": "obs.Telemetry", - "kind": "class", - "file_path": "internal/obs/trace.go", - "intent": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다.", - "reason": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다.", - "terms": [ - "trace" - ] - }, - { - "id": 1857, - "name": "StartSpan", - "qualified_name": "obs.StartSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "런타임 내부 작업을 현재 trace 아래 새 span으로 감싼다.", - "reason": "런타임 내부 작업을 현재 trace 아래 새 span으로 감싼다.", - "terms": [ - "trace" - ] - }, - { - "id": 139, - "name": "WithHTTPTraceContext", - "qualified_name": "server.WithHTTPTraceContext", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다.", - "reason": "inbound traceparent를 MCP 요청 컨텍스트에 주입해 downstream 로그 상관관계를 유지한다.", - "terms": [ - "trace" - ] - }, - { - "id": 1853, - "name": "SetGlobal", - "qualified_name": "obs.SetGlobal", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "reason": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "terms": [ - "trace" - ] - }, - { - "id": 1854, - "name": "Global", - "qualified_name": "obs.Global", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다.", - "reason": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다.", - "terms": [ - "trace" - ] - }, - { - "id": 1859, - "name": "TraceLogArgs", - "qualified_name": "obs.TraceLogArgs", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "span이 있는 컨텍스트를 slog 필드(trace_id, span_id, sampled)로 바꾼다.", - "reason": "span이 있는 컨텍스트를 slog 필드(trace_id, span_id, sampled)로 바꾼다.", - "terms": [ - "trace" - ] - }, - { - "id": 576, - "name": "Hooks", - "qualified_name": "reposyncobs.Hooks", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "adapt OpenTelemetry spans and trace log fields to reposync observability hooks.", - "reason": "adapt OpenTelemetry spans and trace log fields to reposync observability hooks.", - "terms": [ - "trace" - ] - }, - { - "id": 1852, - "name": "start", - "qualified_name": "obs.Telemetry.start", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다.", - "reason": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다.", - "terms": [ - "trace" - ] - }, - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "flow" - ] - }, - { - "id": 945, - "name": "TraceResult", - "qualified_name": "flow.TraceResult", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "communicate truncation status alongside the produced flow", - "reason": "communicate truncation status alongside the produced flow", - "terms": [ - "flow" - ] - }, - { - "id": 177, - "name": "namespaceEvidenceFromContext", - "qualified_name": "mcp.handlers.namespaceEvidenceFromContext", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "include namespace path and git state when available so LLM has traceable provenance.", - "reason": "include namespace path and git state when available so LLM has traceable provenance.", - "terms": [ - "trace" - ] - }, - { - "id": 185, - "name": "traceFlowMetadata", - "qualified_name": "mcp.traceFlowMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "reason": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "terms": [ - "trace" - ] - }, - { - "id": 493, - "name": "DeleteFlows", - "qualified_name": "graphgorm.Store.DeleteFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "clear stale flow state before a transaction-scoped rebuild.", - "reason": "clear stale flow state before a transaction-scoped rebuild.", - "terms": [ - "flow" - ] - }, - { - "id": 934, - "name": "Config", - "qualified_name": "flow.Config", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "provides an extension point for stored flow rebuild configuration.", - "reason": "provides an extension point for stored flow rebuild configuration.", - "terms": [ - "flow" - ] - }, - { - "id": 941, - "name": "Tracer", - "qualified_name": "flow.Tracer", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "produce reusable flow records that describe reachable call paths", - "reason": "produce reusable flow records that describe reachable call paths", - "terms": [ - "flow" - ] - }, - { - "id": 971, - "name": "FlowSummary", - "qualified_name": "analyze.FlowSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry bounded stored-flow facts independently of persistence rows.", - "reason": "carry bounded stored-flow facts independently of persistence rows.", - "terms": [ - "flow" - ] - }, - { - "id": 184, - "name": "traceFlowMember", - "qualified_name": "mcp.traceFlowMember", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "serialize flow member references without exposing the full node record.", - "reason": "serialize flow member references without exposing the full node record.", - "terms": [ - "flow" - ] - }, - { - "id": 202, - "name": "minimalContextFlowInfo", - "qualified_name": "mcp.minimalContextFlowInfo", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_context.go", - "intent": "serialize minimal-context flow summaries without introducing extra response fields.", - "reason": "serialize minimal-context flow summaries without introducing extra response fields.", - "terms": [ - "flow" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "flow" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "flow" - ] - }, - { - "id": 190, - "name": "affectedFlowsResponse", - "qualified_name": "mcp.affectedFlowsResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "reason": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "terms": [ - "flow" - ] - }, - { - "id": 314, - "name": "registerPrompts", - "qualified_name": "mcp.registerPrompts", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts_register.go", - "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", - "reason": "package common review, onboarding, and debugging flows into reusable server prompts.", - "terms": [ - "flow" - ] - }, - { - "id": 502, - "name": "FlowsPage", - "qualified_name": "graphgorm.Store.FlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "load one stable namespace-scoped stored-flow page with member counts.", - "reason": "load one stable namespace-scoped stored-flow page with member counts.", - "terms": [ - "flow" - ] - }, - { - "id": 918, - "name": "sortNodesForChangeOrder", - "qualified_name": "changes.sortNodesForChangeOrder", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "prevent flow lookups from depending on database or map iteration order.", - "reason": "prevent flow lookups from depending on database or map iteration order.", - "terms": [ - "flow" - ] - }, - { - "id": 1270, - "name": "internal/app/ingest/resolve/resolve_go.go", - "qualified_name": "internal/app/ingest/resolve/resolve_go.go", - "kind": "file", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "reason": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 1271, - "name": "goLanguageDispatch", - "qualified_name": "resolve.goLanguageDispatch", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "reason": "isolate Go interface and receiver dispatch from the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "flow" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "flow" - ] - }, - { - "id": 504, - "name": "AffectedFlowsPage", - "qualified_name": "graphgorm.Store.AffectedFlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "terms": [ - "flow" - ] - }, - { - "id": 972, - "name": "AffectedFlow", - "qualified_name": "analyze.AffectedFlow", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "reason": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "terms": [ - "flow" - ] - }, - { - "id": 1281, - "name": "internal/app/ingest/resolve/resolve_rust.go", - "qualified_name": "internal/app/ingest/resolve/resolve_rust.go", - "kind": "file", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 1282, - "name": "rustLanguageDispatch", - "qualified_name": "resolve.rustLanguageDispatch", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "reason": "extend interface-like dispatch beyond Go without broadening the generic resolver flow.", - "terms": [ - "flow" - ] - }, - { - "id": 492, - "name": "WithinFlowRebuild", - "qualified_name": "graphgorm.Store.WithinFlowRebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "implement the analysis flow unit of work without exposing GORM to application policy.", - "reason": "implement the analysis flow unit of work without exposing GORM to application policy.", - "terms": [ - "flow" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "flow" - ] - } - ] - }, - "tracer": { - "corpus": 1901, - "terms": [ - { - "text": "tracer", - "in_reasons": 7 - } + "syncqueue": [ + 1465 ], - "hits": [ - { - "id": 1849, - "name": "StartServerSpan", - "qualified_name": "obs.Telemetry.StartServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다.", - "reason": "telemetry 인스턴스에 묶인 tracer로 HTTP 진입 span을 시작한다.", - "terms": [ - "tracer" - ] - }, - { - "id": 947, - "name": "New", - "qualified_name": "flow.New", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "construct a tracer bound to a graph edge reader", - "reason": "construct a tracer bound to a graph edge reader", - "terms": [ - "tracer" - ] - }, - { - "id": 1846, - "name": "Telemetry", - "qualified_name": "obs.Telemetry", - "kind": "class", - "file_path": "internal/obs/trace.go", - "intent": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다.", - "reason": "서버 전역에서 재사용할 tracer provider 수명주기를 한 구조체로 묶는다.", - "terms": [ - "tracer" - ] - }, - { - "id": 1853, - "name": "SetGlobal", - "qualified_name": "obs.SetGlobal", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "reason": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "terms": [ - "tracer" - ] - }, - { - "id": 1854, - "name": "Global", - "qualified_name": "obs.Global", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다.", - "reason": "helper 함수들이 명시적 의존성 주입 없이 현재 tracer를 가져오게 한다.", - "terms": [ - "tracer" - ] - }, - { - "id": 1852, - "name": "start", - "qualified_name": "obs.Telemetry.start", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다.", - "reason": "nil-safe tracer fallback과 span 시작 옵션 적용을 한 곳으로 모은다.", - "terms": [ - "tracer" - ] - }, - { - "id": 164, - "name": "FlowTracer", - "qualified_name": "mcp.FlowTracer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "reason": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "terms": [ - "tracer" - ] - } - ] - }, - "treesitter semantics": { - "corpus": 1901, - "terms": [ - { - "text": "treesitter", - "in_reasons": 0 - }, - { - "text": "semantics", - "in_reasons": 25 - } + "trace flow": [ + 93, + 118, + 119, + 131, + 137, + 139, + 140, + 144, + 146, + 148, + 156, + 177, + 178, + 179, + 191, + 234, + 241, + 267, + 271, + 413, + 438, + 439, + 440, + 442, + 447, + 449, + 452, + 521, + 523, + 582, + 598, + 865, + 867, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 891, + 892, + 894, + 895, + 896, + 897, + 898, + 899, + 910, + 911, + 922, + 923, + 1218, + 1219, + 1229, + 1230, + 1280, + 1433, + 1799, + 1802, + 1805, + 1806, + 1807, + 1808, + 1810, + 1812 ], - "hits": [ - { - "id": 695, - "name": "workspacePatternMatchParts", - "qualified_name": "treesitter.workspacePatternMatchParts", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "implement **-aware workspace glob semantics for package root discovery.", - "reason": "implement **-aware workspace glob semantics for package root discovery.", - "terms": [ - "semantics" - ] - }, - { - "id": 736, - "name": "packageEdgesOrDefault", - "qualified_name": "treesitter.packageEdgesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize package-level enrichment behind an optional semantics hook.", - "reason": "centralize package-level enrichment behind an optional semantics hook.", - "terms": [ - "semantics" - ] - }, - { - "id": 790, - "name": "ImplementedTypes", - "qualified_name": "treesitter.JavaScriptSemantics.ImplementedTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "satisfy shared relationship normalization without inventing JS interface semantics.", - "reason": "satisfy shared relationship normalization without inventing JS interface semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 1148, - "name": "ParseMetadata", - "qualified_name": "ingest.ParseMetadata", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let ingest coordinate package semantics through parser-owned metadata.", - "reason": "let ingest coordinate package semantics through parser-owned metadata.", - "terms": [ - "semantics" - ] - }, - { - "id": 649, - "name": "NodeTypeMapping", - "qualified_name": "treesitter.NodeTypeMapping", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "describe how grammar-specific node names translate into model semantics", - "reason": "describe how grammar-specific node names translate into model semantics", - "terms": [ - "semantics" - ] - }, - { - "id": 745, - "name": "goAssertionCallRewriter", - "qualified_name": "treesitter.goAssertionCallRewriter", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "keep Go assertion call inference behind the language semantics hook.", - "reason": "keep Go assertion call inference behind the language semantics hook.", - "terms": [ - "semantics" - ] - }, - { - "id": 772, - "name": "AdditionalEdges", - "qualified_name": "treesitter.TypeScriptSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "capture TypeScript class hierarchy semantics directly from the parsed AST.", - "reason": "capture TypeScript class hierarchy semantics directly from the parsed AST.", - "terms": [ - "semantics" - ] - }, - { - "id": 791, - "name": "AdditionalEdges", - "qualified_name": "treesitter.JavaScriptSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics.", - "reason": "capture JavaScript class inheritance while ignoring TypeScript-only interface semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 1174, - "name": "languageDispatch", - "qualified_name": "resolve.languageDispatch", - "kind": "type", - "file_path": "internal/app/ingest/resolve/dispatch.go", - "intent": "keep Resolve generic while allowing languages to customize dispatch semantics.", - "reason": "keep Resolve generic while allowing languages to customize dispatch semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 847, - "name": "isFirstStringExprStmt", - "qualified_name": "treesitter.isFirstStringExprStmt", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "preserve Python docstring semantics that only the leading string literal counts.", - "reason": "preserve Python docstring semantics that only the leading string literal counts.", - "terms": [ - "semantics" - ] - }, - { - "id": 1422, - "name": "unresolvedIndexVersion", - "qualified_name": "workflow.Service.unresolvedIndexVersion", - "kind": "function", - "file_path": "internal/app/ingest/workflow/unresolved_version.go", - "intent": "prevent semi-naive replay from consuming unresolved candidates produced by incompatible parser/query or resolution behavior.", - "reason": "prevent semi-naive replay from consuming unresolved candidates produced by incompatible parser/query or resolution behavior.", - "terms": [ - "semantics" - ] - }, - { - "id": 489, - "name": "CCGRefExists", - "qualified_name": "graphgorm.Store.CCGRefExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "reason": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 510, - "name": "GraphStatistics", - "qualified_name": "graphgorm.Store.GraphStatistics", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/statistics.go", - "intent": "implement the application statistics port while preserving namespace filtering and aggregate semantics.", - "reason": "implement the application statistics port while preserving namespace filtering and aggregate semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 693, - "name": "matchesWorkspacePatterns", - "qualified_name": "treesitter.matchesWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "reason": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "terms": [ - "semantics" - ] - }, - { - "id": 804, - "name": "AdditionalEdges", - "qualified_name": "treesitter.JavaSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "capture Java class hierarchy semantics with package-qualified child names when available.", - "reason": "capture Java class hierarchy semantics with package-qualified child names when available.", - "terms": [ - "semantics" - ] - }, - { - "id": 1200, - "name": "FilterResolvedWithDiagnostics", - "qualified_name": "resolve.FilterResolvedWithDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging.", - "reason": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging.", - "terms": [ - "semantics" - ] - }, - { - "id": 1383, - "name": "packageEdgeBuilderForParser", - "qualified_name": "workflow.packageEdgeBuilderForParser", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "let explicit parsers and fallback walkers be evaluated independently for package semantics.", - "reason": "let explicit parsers and fallback walkers be evaluated independently for package semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 743, - "name": "EnrichDefinition", - "qualified_name": "treesitter.GoSemantics.EnrichDefinition", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "reason": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "terms": [ - "semantics" - ] - }, - { - "id": 876, - "name": "ParseCacheVersion", - "qualified_name": "treesitter.Walker.ParseCacheVersion", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "invalidate full-build parse cache entries when language queries or parser semantics change.", - "reason": "invalidate full-build parse cache entries when language queries or parser semantics change.", - "terms": [ - "semantics" - ] - }, - { - "id": 738, - "name": "SemanticsForLanguage", - "qualified_name": "treesitter.SemanticsForLanguage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "reason": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "terms": [ - "semantics" - ] - }, - { - "id": 1055, - "name": "ccgRefExists", - "qualified_name": "docs.Generator.ccgRefExists", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "reason": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "terms": [ - "semantics" - ] - }, - { - "id": 1202, - "name": "PartitionResolvedWithDiagnosticsFiltered", - "qualified_name": "resolve.PartitionResolvedWithDiagnosticsFiltered", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "let build and update persist unresolved syntax edges without changing query-visible graph semantics.", - "reason": "let build and update persist unresolved syntax edges without changing query-visible graph semantics.", - "terms": [ - "semantics" - ] - }, - { - "id": 654, - "name": "PackageEdges", - "qualified_name": "treesitter.Walker.PackageEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "implement the ingest package-edge port while keeping language semantics inside the Tree-sitter adapter.", - "reason": "implement the ingest package-edge port while keeping language semantics inside the Tree-sitter adapter.", - "terms": [ - "semantics" - ] - }, - { - "id": 726, - "name": "NoopSemantics", - "qualified_name": "treesitter.NoopSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "provide a safe fallback semantics hook when a language does not define extra graph enrichment.", - "reason": "provide a safe fallback semantics hook when a language does not define extra graph enrichment.", - "terms": [ - "semantics" - ] - } - ] - }, - "webhookhandler": {}, - "what decides whether an HTTP server may listen outside the local machine without authentication": { - "corpus": 1901, - "terms": [ - { - "text": "decides", - "in_reasons": 0 - }, - { - "text": "whether", - "in_reasons": 14 - }, - { - "text": "http", - "in_reasons": 32 - }, - { - "text": "server", - "in_reasons": 34 - }, - { - "text": "may", - "in_reasons": 9 - }, - { - "text": "listen", - "in_reasons": 3 - }, - { - "text": "outside", - "in_reasons": 12 - }, - { - "text": "local", - "in_reasons": 40 - }, - { - "text": "machine", - "in_reasons": 1 - }, - { - "text": "without", - "in_reasons": 214 - }, - { - "text": "authentication", - "in_reasons": 2 - } + "tracer": [ + 118, + 896, + 1799, + 1802, + 1805, + 1806, + 1807 ], - "hits": [ - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "http", - "server", - "outside" - ] - }, - { - "id": 1874, - "name": "RunStdio", - "qualified_name": "mcpruntime.RunStdio", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "reason": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "terms": [ - "http", - "server", - "local", - "without" - ] - }, - { - "id": 136, - "name": "onceCleanup", - "qualified_name": "server.onceCleanup", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "reason": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "terms": [ - "may", - "listen" - ] - }, - { - "id": 128, - "name": "ValidateConfig", - "qualified_name": "server.ValidateConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "reason": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "terms": [ - "http", - "listen" - ] - }, - { - "id": 141, - "name": "IsLoopbackHTTPAddr", - "qualified_name": "server.IsLoopbackHTTPAddr", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "HTTP listen 주소가 로컬 테스트 전용인지 판별해 보안 규칙에 재사용한다.", - "reason": "HTTP listen 주소가 로컬 테스트 전용인지 판별해 보안 규칙에 재사용한다.", - "terms": [ - "http", - "listen" - ] - }, - { - "id": 112, - "name": "validateServeConfig", - "qualified_name": "cli.validateServeConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "reason": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "terms": [ - "http", - "server", - "local" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "http", - "server", - "local" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "http", - "server", - "local" - ] - }, - { - "id": 113, - "name": "newServeCmd", - "qualified_name": "cli.newServeCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "reason": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "terms": [ - "http", - "local", - "without" - ] - }, - { - "id": 1870, - "name": "Options", - "qualified_name": "mcpruntime.Options", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "reason": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "terms": [ - "http", - "server", - "without" - ] - }, - { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "terms": [ - "http", - "local", - "without" - ] - }, - { - "id": 1856, - "name": "ServerSpan", - "qualified_name": "obs.ServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "reason": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "terms": [ - "http", - "server" - ] - }, - { - "id": 1877, - "name": "RunHTTP", - "qualified_name": "remote.RunHTTP", - "kind": "function", - "file_path": "internal/runtime/remote/http.go", - "intent": "keep all remote runtime construction outside inbound adapters and the local ccg binary.", - "reason": "keep all remote runtime construction outside inbound adapters and the local ccg binary.", - "terms": [ - "outside", - "local" - ] - }, - { - "id": 1131, - "name": "partitionParsedSyncEdges", - "qualified_name": "incremental.partitionParsedSyncEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "reason": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "terms": [ - "may", - "local" - ] - }, - { - "id": 1791, - "name": "Parse", - "qualified_name": "annotation.Parser.Parse", - "kind": "function", - "file_path": "internal/domain/annotation/parser.go", - "intent": "extract machine-readable metadata from developer comments", - "reason": "extract machine-readable metadata from developer comments", - "terms": [ - "machine" - ] - }, - { - "id": 61, - "name": "newRootCmd", - "qualified_name": "main.newRootCmd", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "keep self-hosted server flags separate from the local ccg CLI.", - "reason": "keep self-hosted server flags separate from the local ccg CLI.", - "terms": [ - "server", - "local" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "http", - "server" - ] - }, - { - "id": 345, - "name": "Config", - "qualified_name": "wikiserver.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data.", - "reason": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data.", - "terms": [ - "server", - "outside" - ] - }, - { - "id": 1871, - "name": "Instance", - "qualified_name": "mcpruntime.Instance", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "reason": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "terms": [ - "http", - "server" - ] - }, - { - "id": 1880, - "name": "Runtime", - "qualified_name": "runtime.Runtime", - "kind": "class", - "file_path": "internal/runtime/runtime.go", - "intent": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "reason": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "terms": [ - "server", - "local" - ] - }, - { - "id": 1269, - "name": "explicitOwnerShortNameCandidates", - "qualified_name": "resolve.explicitOwnerShortNameCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "terms": [ - "outside", - "without" - ] - }, - { - "id": 1054, - "name": "loadLintManifest", - "qualified_name": "docs.Generator.loadLintManifest", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "load the active namespace manifest for lint without hiding whether it exists.", - "reason": "load the active namespace manifest for lint without hiding whether it exists.", - "terms": [ - "whether", - "without" - ] - }, - { - "id": 125, - "name": "internal/adapters/inbound/http/config.go", - "qualified_name": "internal/adapters/inbound/http/config.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "http", - "local" - ] - }, - { - "id": 126, - "name": "Config", - "qualified_name": "server.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "http", - "local" - ] - }, - { - "id": 561, - "name": "Namespaces", - "qualified_name": "graphgorm.Store.Namespaces", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "reason": "implement Wiki namespace discovery without exposing persistence to HTTP.", - "terms": [ - "http", - "without" - ] - }, - { - "id": 445, - "name": "NewCheckout", - "qualified_name": "gitrepo.NewCheckout", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "bind repository root, lock coordination, and transport authentication once at composition.", - "reason": "bind repository root, lock coordination, and transport authentication once at composition.", - "terms": [ - "authentication" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "may", - "without" - ] - }, - { - "id": 185, - "name": "traceFlowMetadata", - "qualified_name": "mcp.traceFlowMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "reason": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "terms": [ - "whether" - ] - }, - { - "id": 1684, - "name": "GraphView", - "qualified_name": "wiki.GraphView", - "kind": "class", - "file_path": "internal/app/wiki/ports.go", - "intent": "carry viewer graph facts without exposing database queries to HTTP handlers.", - "reason": "carry viewer graph facts without exposing database queries to HTTP handlers.", - "terms": [ - "http", - "without" - ] - }, - { - "id": 1216, - "name": "addEndpointCandidates", - "qualified_name": "resolve.addEndpointCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "support resolving local symbols that might be referenced without full qualification.", - "reason": "support resolving local symbols that might be referenced without full qualification.", - "terms": [ - "local", - "without" - ] - }, - { - "id": 130, - "name": "EnvInt", - "qualified_name": "server.EnvInt", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "provide env-based defaults for server flags without panicking on bad input.", - "reason": "provide env-based defaults for server flags without panicking on bad input.", - "terms": [ - "server", - "without" - ] - }, - { - "id": 1687, - "name": "Error", - "qualified_name": "wiki.GraphViewError.Error", - "kind": "function", - "file_path": "internal/app/wiki/ports.go", - "intent": "satisfy error without leaking the application stage into the existing HTTP detail field.", - "reason": "satisfy error without leaking the application stage into the existing HTTP detail field.", - "terms": [ - "http", - "without" - ] - }, - { - "id": 127, - "name": "DefaultConfig", - "qualified_name": "server.DefaultConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "centralize default server flag values for ccg-server.", - "reason": "centralize default server flag values for ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 952, - "name": "Analyzer", - "qualified_name": "impact.Analyzer", - "kind": "class", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "estimate which nodes may be affected by a change", - "reason": "estimate which nodes may be affected by a change", - "terms": [ - "may" - ] - }, - { - "id": 754, - "name": "goAssignedNameAt", - "qualified_name": "treesitter.goAssignedNameAt", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "map assertion result positions back to local names without duplicating assignment-shape parsing.", - "reason": "map assertion result positions back to local names without duplicating assignment-shape parsing.", - "terms": [ - "local", - "without" - ] - }, - { - "id": 1401, - "name": "cachedParseRecord", - "qualified_name": "workflow.cachedParseRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "cache reusable syntax results without duplicating source text or invocation-local byte accounting.", - "reason": "cache reusable syntax results without duplicating source text or invocation-local byte accounting.", - "terms": [ - "local", - "without" - ] - }, - { - "id": 348, - "name": "StaticHandler", - "qualified_name": "wikiserver.Server.StaticHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "reason": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "terms": [ - "server", - "without" - ] - }, - { - "id": 738, - "name": "SemanticsForLanguage", - "qualified_name": "treesitter.SemanticsForLanguage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "reason": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "terms": [ - "local", - "without" - ] - }, - { - "id": 132, - "name": "EnvDuration", - "qualified_name": "server.EnvDuration", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "provide env-based defaults for server timeout and retry flags without panicking on bad input.", - "reason": "provide env-based defaults for server timeout and retry flags without panicking on bad input.", - "terms": [ - "server", - "without" - ] - }, - { - "id": 1648, - "name": "hasSymbol", - "qualified_name": "wiki.Builder.hasSymbol", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a file node has symbol children.", - "reason": "test whether a file node has symbol children.", - "terms": [ - "whether" - ] - }, - { - "id": 440, - "name": "GitAuth", - "qualified_name": "gitrepo.GitAuth", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "reason": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "terms": [ - "authentication" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "may" - ] - }, - { - "id": 1647, - "name": "hasDirectFile", - "qualified_name": "wiki.Builder.hasDirectFile", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a package node has direct file children.", - "reason": "test whether a package node has direct file children.", - "terms": [ - "whether" - ] - }, - { - "id": 84, - "name": "flattenLintRules", - "qualified_name": "cli.flattenLintRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "handle the multiple concrete types viper may return for a YAML sequence", - "reason": "handle the multiple concrete types viper may return for a YAML sequence", - "terms": [ - "may" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "may" - ] - }, - { - "id": 1001, - "name": "normalizeResults", - "qualified_name": "query.normalizeResults", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "keep predefined query responses stable across joins that may return duplicate nodes.", - "reason": "keep predefined query responses stable across joins that may return duplicate nodes.", - "terms": [ - "may" - ] - }, - { - "id": 568, - "name": "HasSymbol", - "qualified_name": "graphgorm.Store.HasSymbol", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "answer whether a lazy file node has expandable symbol children.", - "reason": "answer whether a lazy file node has expandable symbol children.", - "terms": [ - "whether" - ] - }, - { - "id": 906, - "name": "rangesOverlap", - "qualified_name": "treesitter.rangesOverlap", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "detect whether two symbol captures refer to overlapping source spans", - "reason": "detect whether two symbol captures refer to overlapping source spans", - "terms": [ - "whether" - ] - }, - { - "id": 1417, - "name": "cleanup", - "qualified_name": "workflow.buildSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the build succeeded or failed.", - "reason": "reclaim spool disk space whether the build succeeded or failed.", - "terms": [ - "whether" - ] - }, - { - "id": 1420, - "name": "cleanup", - "qualified_name": "workflow.updateSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the update succeeded or failed.", - "reason": "reclaim spool disk space whether the update succeeded or failed.", - "terms": [ - "whether" - ] - } - ] - }, - "what decides whether generated documentation may delete an existing page": { - "corpus": 1901, - "terms": [ - { - "text": "decides", - "in_reasons": 0 - }, - { - "text": "whether", - "in_reasons": 14 - }, - { - "text": "generated", - "in_reasons": 33 - }, - { - "text": "documentation", - "in_reasons": 10 - }, - { - "text": "may", - "in_reasons": 9 - }, - { - "text": "delete", - "in_reasons": 6 - }, - { - "text": "existing", - "in_reasons": 18 - }, - { - "text": "page", - "in_reasons": 24 - } + "treesitter semantics": [ + 435, + 454, + 595, + 600, + 639, + 641, + 671, + 681, + 683, + 688, + 690, + 717, + 735, + 736, + 749, + 792, + 820, + 821, + 1001, + 1094, + 1123, + 1148, + 1150, + 1327, + 1365 ], - "hits": [ - { - "id": 1944, - "name": "DocResponse", - "qualified_name": "DocResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return generated Markdown content for one documentation path.", - "reason": "return generated Markdown content for one documentation path.", - "terms": [ - "generated", - "documentation" - ] - }, - { - "id": 528, - "name": "DeleteNodesByFiles", - "qualified_name": "graphgorm.Store.DeleteNodesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "reason": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "terms": [ - "may", - "delete" - ] - }, - { - "id": 219, - "name": "ragIndexRoot", - "qualified_name": "mcp.handlers.ragIndexRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "terms": [ - "generated", - "documentation" - ] - }, - { - "id": 416, - "name": "path", - "qualified_name": "contentfiles.Root.path", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "resolve a relative generated path only when every existing component remains inside the configured root and is not a symlink.", - "reason": "resolve a relative generated path only when every existing component remains inside the configured root and is not a symlink.", - "terms": [ - "generated", - "existing" - ] - }, - { - "id": 185, - "name": "traceFlowMetadata", - "qualified_name": "mcp.traceFlowMetadata", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "reason": "explain whether traceFlow truncated members and whether fallback edges contributed to the result.", - "terms": [ - "whether" - ] - }, - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "documentation" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "documentation" - ] - }, - { - "id": 1787, - "name": "stripLinePrefix", - "qualified_name": "annotation.stripLinePrefix", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize individual documentation lines across language comment syntaxes", - "reason": "normalize individual documentation lines across language comment syntaxes", - "terms": [ - "documentation" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "documentation" - ] - }, - { - "id": 952, - "name": "Analyzer", - "qualified_name": "impact.Analyzer", - "kind": "class", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "estimate which nodes may be affected by a change", - "reason": "estimate which nodes may be affected by a change", - "terms": [ - "may" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "delete" - ] - }, - { - "id": 1537, - "name": "Options", - "qualified_name": "evidence.Options", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "reason": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "terms": [ - "page" - ] - }, - { - "id": 530, - "name": "DeleteGraph", - "qualified_name": "graphgorm.Store.DeleteGraph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "reason": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "terms": [ - "delete" - ] - }, - { - "id": 1648, - "name": "hasSymbol", - "qualified_name": "wiki.Builder.hasSymbol", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a file node has symbol children.", - "reason": "test whether a file node has symbol children.", - "terms": [ - "whether" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "documentation" - ] - }, - { - "id": 1783, - "name": "stripBlockDelimiters", - "qualified_name": "annotation.stripBlockDelimiters", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "keep only the inner documentation payload from block-style comments", - "reason": "keep only the inner documentation payload from block-style comments", - "terms": [ - "documentation" - ] - }, - { - "id": 1437, - "name": "existingFilesMissingFromSet", - "qualified_name": "workflow.existingFilesMissingFromSet", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "terms": [ - "delete" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "may" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "page" - ] - }, - { - "id": 1647, - "name": "hasDirectFile", - "qualified_name": "wiki.Builder.hasDirectFile", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a package node has direct file children.", - "reason": "test whether a package node has direct file children.", - "terms": [ - "whether" - ] - }, - { - "id": 409, - "name": "resolveExistingDir", - "qualified_name": "wikiserver.resolveExistingDir", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve and validate an existing static asset directory.", - "reason": "resolve and validate an existing static asset directory.", - "terms": [ - "existing" - ] - }, - { - "id": 536, - "name": "DeleteEdgesByFile", - "qualified_name": "graphgorm.Store.DeleteEdgesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "selectively clean existing relationships during file-scoped updates.", - "reason": "selectively clean existing relationships during file-scoped updates.", - "terms": [ - "existing" - ] - }, - { - "id": 84, - "name": "flattenLintRules", - "qualified_name": "cli.flattenLintRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "handle the multiple concrete types viper may return for a YAML sequence", - "reason": "handle the multiple concrete types viper may return for a YAML sequence", - "terms": [ - "may" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "may" - ] - }, - { - "id": 1001, - "name": "normalizeResults", - "qualified_name": "query.normalizeResults", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "keep predefined query responses stable across joins that may return duplicate nodes.", - "reason": "keep predefined query responses stable across joins that may return duplicate nodes.", - "terms": [ - "may" - ] - }, - { - "id": 568, - "name": "HasSymbol", - "qualified_name": "graphgorm.Store.HasSymbol", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "answer whether a lazy file node has expandable symbol children.", - "reason": "answer whether a lazy file node has expandable symbol children.", - "terms": [ - "whether" - ] - }, - { - "id": 906, - "name": "rangesOverlap", - "qualified_name": "treesitter.rangesOverlap", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "detect whether two symbol captures refer to overlapping source spans", - "reason": "detect whether two symbol captures refer to overlapping source spans", - "terms": [ - "whether" - ] - }, - { - "id": 1417, - "name": "cleanup", - "qualified_name": "workflow.buildSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the build succeeded or failed.", - "reason": "reclaim spool disk space whether the build succeeded or failed.", - "terms": [ - "whether" - ] - }, - { - "id": 1420, - "name": "cleanup", - "qualified_name": "workflow.updateSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the update succeeded or failed.", - "reason": "reclaim spool disk space whether the update succeeded or failed.", - "terms": [ - "whether" - ] - }, - { - "id": 1428, - "name": "classifyUpdateSnapshot", - "qualified_name": "workflow.classifyUpdateSnapshot", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "reason": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "terms": [ - "delete" - ] - }, - { - "id": 136, - "name": "onceCleanup", - "qualified_name": "server.onceCleanup", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "reason": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "terms": [ - "may" - ] - }, - { - "id": 389, - "name": "nodeMarkdown", - "qualified_name": "wikiserver.nodeMarkdown", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "reason": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "terms": [ - "generated" - ] - }, - { - "id": 894, - "name": "collectComments", - "qualified_name": "treesitter.Walker.collectComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep documentation comments together so binders can attach them as a single unit", - "reason": "keep documentation comments together so binders can attach them as a single unit", - "terms": [ - "documentation" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "delete" - ] - }, - { - "id": 1131, - "name": "partitionParsedSyncEdges", - "qualified_name": "incremental.partitionParsedSyncEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "reason": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "terms": [ - "may" - ] - }, - { - "id": 477, - "name": "crossRefEdges", - "qualified_name": "graphgorm.crossRefEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "reason": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "terms": [ - "existing" - ] - }, - { - "id": 1265, - "name": "PackagePrefix", - "qualified_name": "resolve.explicitOwnerLanguageDispatch.PackagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "reason": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "terms": [ - "existing" - ] - }, - { - "id": 1054, - "name": "loadLintManifest", - "qualified_name": "docs.Generator.loadLintManifest", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "load the active namespace manifest for lint without hiding whether it exists.", - "reason": "load the active namespace manifest for lint without hiding whether it exists.", - "terms": [ - "whether" - ] - }, - { - "id": 248, - "name": "queryGraphResultItem", - "qualified_name": "mcp.queryGraphResultItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable DTO for paged graph traversal results.", - "reason": "preserve a stable DTO for paged graph traversal results.", - "terms": [ - "page" - ] - }, - { - "id": 501, - "name": "NamespacesPage", - "qualified_name": "graphgorm.Store.NamespacesPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "load one stable global namespace page with node counts.", - "reason": "load one stable global namespace page with node counts.", - "terms": [ - "page" - ] - }, - { - "id": 574, - "name": "Update", - "qualified_name": "reposyncgraph.Updater.Update", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "reason": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "terms": [ - "existing" - ] - }, - { - "id": 1111, - "name": "SyncWithExistingStore", - "qualified_name": "incremental.Syncer.SyncWithExistingStore", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let callers bind incremental sync to an existing transaction-scoped store", - "reason": "let callers bind incremental sync to an existing transaction-scoped store", - "terms": [ - "existing" - ] - }, - { - "id": 1726, - "name": "isPostgresUnreachable", - "qualified_name": "dbtest.isPostgresUnreachable", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "keep the existing skip-when-absent behaviour without swallowing genuine errors.", - "reason": "keep the existing skip-when-absent behaviour without swallowing genuine errors.", - "terms": [ - "existing" - ] - }, - { - "id": 369, - "name": "contextItem", - "qualified_name": "wikiserver.contextItem", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "report whether one requested context item was found in docs or tree summaries.", - "reason": "report whether one requested context item was found in docs or tree summaries.", - "terms": [ - "whether" - ] - }, - { - "id": 1530, - "name": "Coverage", - "qualified_name": "evidence.Coverage", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let an empty answer say whether anyone ever recorded a reason to search.", - "reason": "let an empty answer say whether anyone ever recorded a reason to search.", - "terms": [ - "whether" - ] - }, - { - "id": 1929, - "name": "edgeKindVisible", - "qualified_name": "edgeKindVisible", - "kind": "function", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "decide whether an edge kind should be visible under the active graph filters.", - "reason": "decide whether an edge kind should be visible under the active graph filters.", - "terms": [ - "whether" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "may" - ] - }, - { - "id": 921, - "name": "riskCandidate", - "qualified_name": "changes.riskCandidate", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "separate risk ordering from response entry allocation for paged consumers.", - "reason": "separate risk ordering from response entry allocation for paged consumers.", - "terms": [ - "page" - ] - }, - { - "id": 1954, - "name": "getDoc", - "qualified_name": "getDoc", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "load generated Markdown for the selected tree item.", - "reason": "load generated Markdown for the selected tree item.", - "terms": [ - "generated" - ] - }, - { - "id": 1646, - "name": "hasPathDescendant", - "qualified_name": "wiki.Builder.hasPathDescendant", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a folder or root path has any descendant package or file node.", - "reason": "test whether a folder or root path has any descendant package or file node.", - "terms": [ - "whether" - ] - } - ] - }, - "what decides which repositories and branches are allowed to sync": { - "corpus": 1901, - "terms": [ - { - "text": "decides", - "in_reasons": 0 - }, - { - "text": "repositories", - "in_reasons": 6 - }, - { - "text": "branches", - "in_reasons": 9 - }, - { - "text": "allowed", - "in_reasons": 4 - }, - { - "text": "sync", - "in_reasons": 75 - } + "webhookhandler": [], + "what decides whether an HTTP server may listen outside the local machine without authentication": [ + 1, + 2, + 3, + 4, + 35, + 61, + 63, + 64, + 65, + 66, + 77, + 78, + 79, + 80, + 82, + 84, + 87, + 88, + 89, + 96, + 98, + 100, + 115, + 116, + 121, + 124, + 137, + 139, + 151, + 155, + 156, + 157, + 159, + 160, + 173, + 183, + 184, + 186, + 193, + 203, + 218, + 221, + 223, + 257, + 267, + 268, + 269, + 270, + 279, + 283, + 290, + 292, + 293, + 295, + 300, + 316, + 324, + 341, + 349, + 352, + 364, + 376, + 377, + 378, + 385, + 386, + 391, + 406, + 410, + 414, + 415, + 428, + 434, + 438, + 444, + 450, + 460, + 467, + 468, + 469, + 473, + 477, + 484, + 494, + 504, + 507, + 514, + 538, + 539, + 543, + 566, + 567, + 569, + 575, + 583, + 588, + 589, + 596, + 599, + 619, + 621, + 633, + 637, + 642, + 645, + 647, + 648, + 650, + 654, + 655, + 658, + 659, + 660, + 663, + 666, + 668, + 673, + 674, + 676, + 680, + 683, + 692, + 696, + 699, + 705, + 710, + 715, + 716, + 728, + 735, + 748, + 756, + 761, + 763, + 783, + 796, + 800, + 801, + 811, + 812, + 814, + 817, + 837, + 839, + 845, + 854, + 864, + 875, + 890, + 892, + 902, + 910, + 912, + 919, + 924, + 925, + 929, + 930, + 951, + 964, + 978, + 990, + 999, + 1000, + 1001, + 1002, + 1032, + 1038, + 1047, + 1051, + 1060, + 1065, + 1067, + 1069, + 1077, + 1086, + 1087, + 1088, + 1093, + 1095, + 1097, + 1098, + 1099, + 1102, + 1104, + 1106, + 1109, + 1112, + 1115, + 1126, + 1129, + 1150, + 1164, + 1183, + 1212, + 1217, + 1223, + 1229, + 1230, + 1236, + 1241, + 1242, + 1252, + 1258, + 1266, + 1272, + 1273, + 1276, + 1277, + 1282, + 1288, + 1301, + 1305, + 1308, + 1313, + 1314, + 1317, + 1321, + 1324, + 1330, + 1338, + 1345, + 1357, + 1359, + 1360, + 1361, + 1363, + 1367, + 1368, + 1369, + 1376, + 1377, + 1384, + 1388, + 1389, + 1401, + 1403, + 1410, + 1416, + 1425, + 1429, + 1439, + 1445, + 1446, + 1450, + 1456, + 1459, + 1469, + 1470, + 1471, + 1473, + 1479, + 1481, + 1486, + 1498, + 1502, + 1504, + 1508, + 1509, + 1524, + 1540, + 1552, + 1564, + 1567, + 1580, + 1581, + 1589, + 1593, + 1594, + 1595, + 1620, + 1623, + 1625, + 1630, + 1631, + 1633, + 1636, + 1651, + 1652, + 1661, + 1664, + 1665, + 1667, + 1668, + 1734, + 1739, + 1752, + 1753, + 1767, + 1784, + 1787, + 1788, + 1800, + 1802, + 1808, + 1809, + 1818, + 1821, + 1822, + 1823, + 1824, + 1826, + 1827, + 1828, + 1830, + 1832, + 1833, + 1834, + 1848, + 1849, + 1851, + 1860, + 1866, + 1876, + 1879, + 1880, + 1894, + 1895, + 1896, + 1906 ], - "hits": [ - { - "id": 341, - "name": "ServeHTTP", - "qualified_name": "webhook.WebhookHandler.ServeHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "reason": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "terms": [ - "allowed", - "sync" - ] - }, - { - "id": 1461, - "name": "ResolveCloneURL", - "qualified_name": "reposync.ResolveCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "terms": [ - "allowed", - "sync" - ] - }, - { - "id": 256, - "name": "searchFederated", - "qualified_name": "mcp.handlers.searchFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "repositories" - ] - }, - { - "id": 266, - "name": "listGraphStatsFederated", - "qualified_name": "mcp.handlers.listGraphStatsFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "give one call visibility over several repositories without merging their counts.", - "reason": "give one call visibility over several repositories without merging their counts.", - "terms": [ - "repositories" - ] - }, - { - "id": 1498, - "name": "Stats", - "qualified_name": "reposync.SyncQueue.Stats", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "expose enough queue state to diagnose backlog, failures, and hot repositories.", - "reason": "expose enough queue state to diagnose backlog, failures, and hot repositories.", - "terms": [ - "repositories" - ] - }, - { - "id": 1611, - "name": "SearchFederated", - "qualified_name": "search.Service.SearchFederated", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "repositories" - ] - }, - { - "id": 408, - "name": "realPathRoot", - "qualified_name": "wikiserver.realPathRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve an allowed root to an absolute symlink-aware path for containment checks.", - "reason": "resolve an allowed root to an absolute symlink-aware path for containment checks.", - "terms": [ - "allowed" - ] - }, - { - "id": 1499, - "name": "buildRecentReposLocked", - "qualified_name": "reposync.SyncQueue.buildRecentReposLocked", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue.", - "reason": "assemble a bounded, activity-sorted snapshot of repositories recently seen by the queue.", - "terms": [ - "repositories" - ] - }, - { - "id": 710, - "name": "DefinitionSemantics", - "qualified_name": "treesitter.DefinitionSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages enrich parsed definitions without adding language branches to Walker.", - "reason": "let languages enrich parsed definitions without adding language branches to Walker.", - "terms": [ - "branches" - ] - }, - { - "id": 714, - "name": "CommentSemantics", - "qualified_name": "treesitter.CommentSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages contribute docstrings or similar constructs without Walker language branches.", - "reason": "let languages contribute docstrings or similar constructs without Walker language branches.", - "terms": [ - "branches" - ] - }, - { - "id": 1509, - "name": "done", - "qualified_name": "reposync.SyncQueue.done", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "requeue repositories that changed during processing or release payload state when work is complete.", - "reason": "requeue repositories that changed during processing or release payload state when work is complete.", - "terms": [ - "repositories" - ] - }, - { - "id": 717, - "name": "SemanticContext", - "qualified_name": "treesitter.SemanticContext", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "avoid expanding Walker with one-off language branches as graph inference grows.", - "reason": "avoid expanding Walker with one-off language branches as graph inference grows.", - "terms": [ - "branches" - ] - }, - { - "id": 1447, - "name": "repoFilterRule", - "qualified_name": "reposync.repoFilterRule", - "kind": "class", - "file_path": "internal/app/reposync/admission.go", - "intent": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local.", - "reason": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local.", - "terms": [ - "allowed" - ] - }, - { - "id": 715, - "name": "CallRewriter", - "qualified_name": "treesitter.CallRewriter", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "reason": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "terms": [ - "branches" - ] - }, - { - "id": 866, - "name": "rustMatchingBrace", - "qualified_name": "treesitter.rustMatchingBrace", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "parse nested Rust use trees without confusing sibling branches for the current scope.", - "reason": "parse nested Rust use trees without confusing sibling branches for the current scope.", - "terms": [ - "branches" - ] - }, - { - "id": 770, - "name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "qualified_name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "terms": [ - "branches" - ] - }, - { - "id": 771, - "name": "TypeScriptSemantics", - "qualified_name": "treesitter.TypeScriptSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "terms": [ - "branches" - ] - }, - { - "id": 675, - "name": "pathBaseName", - "qualified_name": "treesitter.pathBaseName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "reason": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "terms": [ - "branches" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "branches" - ] - }, - { - "id": 1100, - "name": "Parser", - "qualified_name": "incremental.Parser", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "decouple incremental sync from language-specific parsing logic", - "reason": "decouple incremental sync from language-specific parsing logic", - "terms": [ - "sync" - ] - }, - { - "id": 578, - "name": "LogArgs", - "qualified_name": "reposyncobs.Hooks.LogArgs", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "preserve trace correlation fields on repository sync queue logs.", - "reason": "preserve trace correlation fields on repository sync queue logs.", - "terms": [ - "sync" - ] - }, - { - "id": 1006, - "name": "New", - "qualified_name": "crossref.New", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "bind the sync policy to one persistence port instance.", - "reason": "bind the sync policy to one persistence port instance.", - "terms": [ - "sync" - ] - }, - { - "id": 1103, - "name": "SyncerOption", - "qualified_name": "incremental.SyncerOption", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "customize incremental sync behavior without expanding the constructor signature", - "reason": "customize incremental sync behavior without expanding the constructor signature", - "terms": [ - "sync" - ] - }, - { - "id": 1108, - "name": "SetResolveOptions", - "qualified_name": "incremental.Syncer.SetResolveOptions", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid rebuilding the syncer for every Build/Update invocation.", - "reason": "avoid rebuilding the syncer for every Build/Update invocation.", - "terms": [ - "sync" - ] - }, - { - "id": 1469, - "name": "BuildScopeLoader", - "qualified_name": "reposync.BuildScopeLoader", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "separate repository config file parsing from repository sync orchestration.", - "reason": "separate repository config file parsing from repository sync orchestration.", - "terms": [ - "sync" - ] - }, - { - "id": 1471, - "name": "UpdateStats", - "qualified_name": "reposync.UpdateStats", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "report only update counts needed by repository sync observability.", - "reason": "report only update counts needed by repository sync observability.", - "terms": [ - "sync" - ] - }, - { - "id": 1482, - "name": "nonRetryableError", - "qualified_name": "reposync.nonRetryableError", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "mark sync failures that should stop retry backoff immediately.", - "reason": "mark sync failures that should stop retry backoff immediately.", - "terms": [ - "sync" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "sync" - ] - }, - { - "id": 412, - "name": "Load", - "qualified_name": "configfiles.BuildScope.Load", - "kind": "function", - "file_path": "internal/adapters/outbound/configfiles/includes.go", - "intent": "own repository build scope configuration I/O for webhook synchronization.", - "reason": "own repository build scope configuration I/O for webhook synchronization.", - "terms": [ - "sync" - ] - }, - { - "id": 572, - "name": "internal/adapters/outbound/reposyncgraph/updater.go", - "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", - "kind": "file", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "sync" - ] - }, - { - "id": 573, - "name": "Updater", - "qualified_name": "reposyncgraph.Updater", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "sync" - ] - }, - { - "id": 1101, - "name": "AnnotatingParser", - "qualified_name": "incremental.AnnotatingParser", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "allow incremental sync to reuse comment-aware parsing when available", - "reason": "allow incremental sync to reuse comment-aware parsing when available", - "terms": [ - "sync" - ] - }, - { - "id": 1104, - "name": "WithLogger", - "qualified_name": "incremental.WithLogger", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "allow callers to observe incremental sync progress through structured logs", - "reason": "allow callers to observe incremental sync progress through structured logs", - "terms": [ - "sync" - ] - }, - { - "id": 1106, - "name": "New", - "qualified_name": "incremental.New", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "wire storage, parser, and optional configuration into a sync coordinator", - "reason": "wire storage, parser, and optional configuration into a sync coordinator", - "terms": [ - "sync" - ] - }, - { - "id": 1128, - "name": "mergeSyncUnresolvedDiagnostics", - "qualified_name": "incremental.mergeSyncUnresolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental sync logging aligned with chunked edge resolution output.", - "reason": "keep incremental sync logging aligned with chunked edge resolution output.", - "terms": [ - "sync" - ] - }, - { - "id": 1412, - "name": "spooledUpdateRecord", - "qualified_name": "workflow.spooledUpdateRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream incremental sync inputs from disk to bound peak memory.", - "reason": "stream incremental sync inputs from disk to bound peak memory.", - "terms": [ - "sync" - ] - }, - { - "id": 1443, - "name": "NormalizeBranchRef", - "qualified_name": "reposync.NormalizeBranchRef", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "reject tags and other Git refs before repository sync admission.", - "reason": "reject tags and other Git refs before repository sync admission.", - "terms": [ - "sync" - ] - }, - { - "id": 1467, - "name": "Checkout", - "qualified_name": "reposync.Checkout", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "isolate checkout locking and Git implementation from sync ordering policy.", - "reason": "isolate checkout locking and Git implementation from sync ordering policy.", - "terms": [ - "sync" - ] - }, - { - "id": 1491, - "name": "SyncQueue", - "qualified_name": "reposync.SyncQueue", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "coordinate deduplicated per-repository sync execution across a worker pool.", - "reason": "coordinate deduplicated per-repository sync execution across a worker pool.", - "terms": [ - "sync" - ] - }, - { - "id": 334, - "name": "SyncFunc", - "qualified_name": "webhook.SyncFunc", - "kind": "type", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "define the callback signature webhook intake invokes to trigger repository sync.", - "reason": "define the callback signature webhook intake invokes to trigger repository sync.", - "terms": [ - "sync" - ] - }, - { - "id": 342, - "name": "verifySignature", - "qualified_name": "webhook.WebhookHandler.verifySignature", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "reason": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "terms": [ - "sync" - ] - }, - { - "id": 574, - "name": "Update", - "qualified_name": "reposyncgraph.Updater.Update", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "reason": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "terms": [ - "sync" - ] - }, - { - "id": 1111, - "name": "SyncWithExistingStore", - "qualified_name": "incremental.Syncer.SyncWithExistingStore", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let callers bind incremental sync to an existing transaction-scoped store", - "reason": "let callers bind incremental sync to an existing transaction-scoped store", - "terms": [ - "sync" - ] - }, - { - "id": 1127, - "name": "sortedFilePaths", - "qualified_name": "incremental.sortedFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "reason": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "terms": [ - "sync" - ] - }, - { - "id": 1351, - "name": "toBinderComments", - "qualified_name": "workflow.toBinderComments", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep IsDocstring and OwnerStartLine in sync between walker and binder types", - "reason": "keep IsDocstring and OwnerStartLine in sync between walker and binder types", - "terms": [ - "sync" - ] - }, - { - "id": 1472, - "name": "GraphUpdater", - "qualified_name": "reposync.GraphUpdater", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "adapt repository sync to the ingest application without importing workflow types.", - "reason": "adapt repository sync to the ingest application without importing workflow types.", - "terms": [ - "sync" - ] - }, - { - "id": 1505, - "name": "recordSuccess", - "qualified_name": "reposync.SyncQueue.recordSuccess", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "update the latest successful sync timestamps after a repository finishes cleanly.", - "reason": "update the latest successful sync timestamps after a repository finishes cleanly.", - "terms": [ - "sync" - ] - }, - { - "id": 1507, - "name": "tryHandle", - "qualified_name": "reposync.SyncQueue.tryHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "isolate handler panics and merged cancellation logic around one sync attempt.", - "reason": "isolate handler panics and merged cancellation logic around one sync attempt.", - "terms": [ - "sync" - ] - }, - { - "id": 1512, - "name": "QueueConfig", - "qualified_name": "reposync.QueueConfig", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "configure queue retry policy and memory bounds when constructing a SyncQueue.", - "reason": "configure queue retry policy and memory bounds when constructing a SyncQueue.", - "terms": [ - "sync" - ] - }, - { - "id": 1927, - "name": "resize", - "qualified_name": "resize", - "kind": "function", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "keep the canvas dimensions synchronized with the available center panel space.", - "reason": "keep the canvas dimensions synchronized with the available center panel space.", - "terms": [ - "sync" - ] - } - ] - }, - "what happens when a webhook arrives": { - "corpus": 1901, - "terms": [ - { - "text": "happens", - "in_reasons": 2 - }, - { - "text": "webhook", - "in_reasons": 44 - }, - { - "text": "arrives", - "in_reasons": 0 - } + "what decides whether generated documentation may delete an existing page": [ + 11, + 12, + 35, + 88, + 139, + 149, + 168, + 169, + 170, + 191, + 193, + 198, + 214, + 244, + 271, + 301, + 303, + 308, + 309, + 310, + 316, + 327, + 328, + 329, + 336, + 338, + 339, + 340, + 342, + 344, + 356, + 360, + 362, + 365, + 366, + 368, + 370, + 408, + 415, + 422, + 428, + 433, + 442, + 446, + 447, + 449, + 473, + 476, + 483, + 514, + 520, + 529, + 841, + 854, + 858, + 865, + 870, + 871, + 872, + 874, + 902, + 930, + 951, + 990, + 1000, + 1004, + 1056, + 1059, + 1077, + 1099, + 1121, + 1213, + 1265, + 1273, + 1340, + 1341, + 1360, + 1363, + 1370, + 1379, + 1481, + 1487, + 1489, + 1498, + 1508, + 1523, + 1533, + 1560, + 1561, + 1562, + 1567, + 1572, + 1578, + 1579, + 1593, + 1594, + 1595, + 1598, + 1620, + 1633, + 1667, + 1668, + 1732, + 1736, + 1737, + 1855, + 1876, + 1891, + 1901, + 1904 ], - "hits": [ - { - "id": 1547, - "name": "Fields", - "qualified_name": "identtoken.Fields", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "expose original-case terms; lowercasing happens per consumer.", - "reason": "expose original-case terms; lowercasing happens per consumer.", - "terms": [ - "happens" - ] - }, - { - "id": 1303, - "name": "add", - "qualified_name": "workflow.buildPersistBatch.add", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "accumulate work between flushes so persistence happens in bounded chunks.", - "reason": "accumulate work between flushes so persistence happens in bounded chunks.", - "terms": [ - "happens" - ] - }, - { - "id": 144, - "name": "statusResponse", - "qualified_name": "server.statusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "reason": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "terms": [ - "webhook" - ] - }, - { - "id": 1488, - "name": "defaultRetryConfig", - "qualified_name": "reposync.defaultRetryConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide conservative retry defaults for production webhook processing.", - "reason": "provide conservative retry defaults for production webhook processing.", - "terms": [ - "webhook" - ] - }, - { - "id": 1492, - "name": "NewSyncQueue", - "qualified_name": "reposync.NewSyncQueue", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide the smallest constructor for production webhook dispatch.", - "reason": "provide the smallest constructor for production webhook dispatch.", - "terms": [ - "webhook" - ] - }, - { - "id": 128, - "name": "ValidateConfig", - "qualified_name": "server.ValidateConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "reason": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "terms": [ - "webhook" - ] - }, - { - "id": 135, - "name": "RunStreamableHTTP", - "qualified_name": "server.RunStreamableHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "reason": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "terms": [ - "webhook" - ] - }, - { - "id": 412, - "name": "Load", - "qualified_name": "configfiles.BuildScope.Load", - "kind": "function", - "file_path": "internal/adapters/outbound/configfiles/includes.go", - "intent": "own repository build scope configuration I/O for webhook synchronization.", - "reason": "own repository build scope configuration I/O for webhook synchronization.", - "terms": [ - "webhook" - ] - }, - { - "id": 447, - "name": "RepoLocker", - "qualified_name": "gitrepo.RepoLocker", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "keep repository-scoped git operations serialized across concurrent webhook deliveries.", - "reason": "keep repository-scoped git operations serialized across concurrent webhook deliveries.", - "terms": [ - "webhook" - ] - }, - { - "id": 133, - "name": "internal/adapters/inbound/http/serve.go", - "qualified_name": "internal/adapters/inbound/http/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "terms": [ - "webhook" - ] - }, - { - "id": 134, - "name": "HostDeps", - "qualified_name": "server.HostDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "terms": [ - "webhook" - ] - }, - { - "id": 334, - "name": "SyncFunc", - "qualified_name": "webhook.SyncFunc", - "kind": "type", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "define the callback signature webhook intake invokes to trigger repository sync.", - "reason": "define the callback signature webhook intake invokes to trigger repository sync.", - "terms": [ - "webhook" - ] - }, - { - "id": 342, - "name": "verifySignature", - "qualified_name": "webhook.WebhookHandler.verifySignature", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "reason": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "terms": [ - "webhook" - ] - }, - { - "id": 346, - "name": "Server", - "qualified_name": "wikiserver.Server", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers.", - "reason": "isolate browser-facing Wiki behavior from MCP transport and webhook handlers.", - "terms": [ - "webhook" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "webhook" - ] - }, - { - "id": 335, - "name": "WebhookHandler", - "qualified_name": "webhook.WebhookHandler", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler.", - "reason": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler.", - "terms": [ - "webhook" - ] - }, - { - "id": 339, - "name": "NewWebhookHandlerWithConfig", - "qualified_name": "webhook.NewWebhookHandlerWithConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "make webhook intake configurable without duplicating constructor logic across CLI and tests.", - "reason": "make webhook intake configurable without duplicating constructor logic across CLI and tests.", - "terms": [ - "webhook" - ] - }, - { - "id": 450, - "name": "WithLock", - "qualified_name": "gitrepo.RepoLocker.WithLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "terms": [ - "webhook" - ] - }, - { - "id": 457, - "name": "CloneOrPull", - "qualified_name": "gitrepo.CloneOrPull", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "give webhook handlers a branch-agnostic entry point for standard repo refresh.", - "reason": "give webhook handlers a branch-agnostic entry point for standard repo refresh.", - "terms": [ - "webhook" - ] - }, - { - "id": 459, - "name": "CloneOrPullBranchLocked", - "qualified_name": "gitrepo.CloneOrPullBranchLocked", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "reason": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "terms": [ - "webhook" - ] - }, - { - "id": 1452, - "name": "IsAllowedRef", - "qualified_name": "reposync.RepoFilter.IsAllowedRef", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "reject non-branch webhook refs before they can enter the sync pipeline.", - "reason": "reject non-branch webhook refs before they can enter the sync pipeline.", - "terms": [ - "webhook" - ] - }, - { - "id": 113, - "name": "newServeCmd", - "qualified_name": "cli.newServeCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "reason": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "terms": [ - "webhook" - ] - }, - { - "id": 336, - "name": "WebhookHandlerConfig", - "qualified_name": "webhook.WebhookHandlerConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "reason": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "terms": [ - "webhook" - ] - }, - { - "id": 1497, - "name": "Shutdown", - "qualified_name": "reposync.SyncQueue.Shutdown", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "reason": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "terms": [ - "webhook" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "webhook" - ] - }, - { - "id": 1450, - "name": "NewRepoFilterFromRules", - "qualified_name": "reposync.NewRepoFilterFromRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "centralize Atlantis-style repo filtering so webhook dispatch can make one consistent allow decision.", - "reason": "centralize Atlantis-style repo filtering so webhook dispatch can make one consistent allow decision.", - "terms": [ - "webhook" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "webhook" - ] - }, - { - "id": 1487, - "name": "RetryConfig", - "qualified_name": "reposync.RetryConfig", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "reason": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "terms": [ - "webhook" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "webhook" - ] - }, - { - "id": 1503, - "name": "safeHandle", - "qualified_name": "reposync.SyncQueue.safeHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "terms": [ - "webhook" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "webhook" - ] - }, - { - "id": 1445, - "name": "allowRule", - "qualified_name": "reposync.allowRule", - "kind": "class", - "file_path": "internal/app/reposync/admission.go", - "intent": "represent a single Atlantis-style repo pattern in a form cheap to evaluate per webhook.", - "reason": "represent a single Atlantis-style repo pattern in a form cheap to evaluate per webhook.", - "terms": [ - "webhook" - ] - }, - { - "id": 1468, - "name": "BuildScope", - "qualified_name": "reposync.BuildScope", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry include and exclude configuration together so every webhook update uses one coherent build scope.", - "reason": "carry include and exclude configuration together so every webhook update uses one coherent build scope.", - "terms": [ - "webhook" - ] - }, - { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "terms": [ - "webhook" - ] - }, - { - "id": 125, - "name": "internal/adapters/inbound/http/config.go", - "qualified_name": "internal/adapters/inbound/http/config.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "webhook" - ] - }, - { - "id": 126, - "name": "Config", - "qualified_name": "server.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "webhook" - ] - }, - { - "id": 1456, - "name": "AllowRuleOwners", - "qualified_name": "reposync.AllowRuleOwners", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "terms": [ - "webhook" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "webhook" - ] - }, - { - "id": 1874, - "name": "RunStdio", - "qualified_name": "mcpruntime.RunStdio", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "reason": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "terms": [ - "webhook" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "webhook" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "webhook" - ] - }, - { - "id": 441, - "name": "Resolve", - "qualified_name": "gitrepo.GitAuth.Resolve", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "reason": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "terms": [ - "webhook" - ] - }, - { - "id": 449, - "name": "NewRepoLocker", - "qualified_name": "gitrepo.NewRepoLocker", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree.", - "reason": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree.", - "terms": [ - "webhook" - ] - }, - { - "id": 1461, - "name": "ResolveCloneURL", - "qualified_name": "reposync.ResolveCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "terms": [ - "webhook" - ] - }, - { - "id": 440, - "name": "GitAuth", - "qualified_name": "gitrepo.GitAuth", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "reason": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "terms": [ - "webhook" - ] - }, - { - "id": 1463, - "name": "buildCloneURL", - "qualified_name": "reposync.buildCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "reason": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "terms": [ - "webhook" - ] - } - ] - }, - "what keeps a parser result from being reused after the file it came from changed": { - "corpus": 1901, - "terms": [ - { - "text": "keeps", - "in_reasons": 1 - }, - { - "text": "parser", - "in_reasons": 61 - }, - { - "text": "result", - "in_reasons": 62 - }, - { - "text": "being", - "in_reasons": 3 - }, - { - "text": "reused", - "in_reasons": 2 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "file", - "in_reasons": 209 - }, - { - "text": "came", - "in_reasons": 4 - }, - { - "text": "changed", - "in_reasons": 20 - } + "what decides which repositories and branches are allowed to sync": [ + 121, + 189, + 190, + 206, + 218, + 278, + 280, + 285, + 286, + 287, + 289, + 355, + 359, + 386, + 395, + 397, + 398, + 404, + 409, + 518, + 519, + 520, + 523, + 563, + 621, + 655, + 659, + 660, + 662, + 715, + 716, + 811, + 953, + 955, + 959, + 961, + 1044, + 1045, + 1047, + 1048, + 1049, + 1050, + 1052, + 1056, + 1063, + 1067, + 1070, + 1073, + 1074, + 1114, + 1116, + 1118, + 1280, + 1298, + 1303, + 1317, + 1324, + 1355, + 1371, + 1372, + 1376, + 1377, + 1383, + 1385, + 1389, + 1393, + 1396, + 1400, + 1409, + 1420, + 1422, + 1424, + 1425, + 1434, + 1437, + 1439, + 1441, + 1443, + 1447, + 1448, + 1450, + 1451, + 1452, + 1457, + 1458, + 1460, + 1462, + 1465, + 1467, + 1469, + 1559, + 1829, + 1874 ], - "hits": [ - { - "id": 515, - "name": "LoadParseResult", - "qualified_name": "graphgorm.Store.LoadParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "terms": [ - "parser", - "being", - "reused" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "keeps", - "result" - ] - }, - { - "id": 1402, - "name": "cachedParseRecordFrom", - "qualified_name": "workflow.cachedParseRecordFrom", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "keep durable cache payloads limited to parser output reused by later builds.", - "reason": "keep durable cache payloads limited to parser output reused by later builds.", - "terms": [ - "parser", - "reused" - ] - }, - { - "id": 1143, - "name": "withStringMap", - "qualified_name": "ingest.withStringMap", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "prevent callers from mutating parser context maps after injection.", - "reason": "prevent callers from mutating parser context maps after injection.", - "terms": [ - "parser", - "after" - ] - }, - { - "id": 1012, - "name": "reresolveInbound", - "qualified_name": "crossref.Service.reresolveInbound", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "reason": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "terms": [ - "after", - "changed" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "result", - "after" - ] - }, - { - "id": 156, - "name": "Flush", - "qualified_name": "mcp.Cache.Flush", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Invalidates all cached read results after a graph or index update.", - "reason": "Invalidates all cached read results after a graph or index update.", - "terms": [ - "result", - "after" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1098, - "name": "internal/app/ingest/incremental/incremental.go", - "qualified_name": "internal/app/ingest/incremental/incremental.go", - "kind": "file", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1099, - "name": "Store", - "qualified_name": "incremental.Store", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1102, - "name": "Syncer", - "qualified_name": "incremental.Syncer", - "kind": "class", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid full rebuilds by reparsing only files whose content hash changed", - "reason": "avoid full rebuilds by reparsing only files whose content hash changed", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 908, - "name": "GitClient", - "qualified_name": "changes.GitClient", - "kind": "type", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "abstract git operations so risk analysis can consume changed files and hunks", - "reason": "abstract git operations so risk analysis can consume changed files and hunks", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1125, - "name": "releaseContent", - "qualified_name": "incremental.releaseContent", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 1531, - "name": "Known", - "qualified_name": "evidence.Coverage.Known", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep an unmeasured coverage from being reported as a measured zero.", - "reason": "keep an unmeasured coverage from being reported as a measured zero.", - "terms": [ - "being" - ] - }, - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1431, - "name": "applyUpdateSpoolInTx", - "qualified_name": "workflow.Service.applyUpdateSpoolInTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1228, - "name": "uniqueFileNodes", - "qualified_name": "resolve.uniqueFileNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "identify distinct files in a set of result nodes.", - "reason": "identify distinct files in a set of result nodes.", - "terms": [ - "result", - "file" - ] - }, - { - "id": 419, - "name": "Write", - "qualified_name": "contentfiles.Root.Write", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "persist generated output only after safe-root validation and durable temporary-file completion.", - "reason": "persist generated output only after safe-root validation and durable temporary-file completion.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 875, - "name": "NewWalker", - "qualified_name": "treesitter.NewWalker", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "amortize parser and query compilation cost across many file parses", - "reason": "amortize parser and query compilation cost across many file parses", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 878, - "name": "Close", - "qualified_name": "treesitter.Walker.Close", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "free parser-side native resources once file parsing is complete", - "reason": "free parser-side native resources once file parsing is complete", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 554, - "name": "FindUnresolvedEdgesByFiles", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "reason": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1138, - "name": "filePackagesContextKey", - "qualified_name": "ingest.filePackagesContextKey", - "kind": "class", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "provide a collision-free key for parser-neutral file package context.", - "reason": "provide a collision-free key for parser-neutral file package context.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1142, - "name": "FilePackagesFromContext", - "qualified_name": "ingest.FilePackagesFromContext", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "let parser adapters seed qualified names from application-owned file context.", - "reason": "let parser adapters seed qualified names from application-owned file context.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1299, - "name": "buildParseInput", - "qualified_name": "workflow.buildParseInput", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "reason": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1407, - "name": "parseSemanticContextHash", - "qualified_name": "workflow.parseSemanticContextHash", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "invalidate cached syntax results when import or file-package normalization changes.", - "reason": "invalidate cached syntax results when import or file-package normalization changes.", - "terms": [ - "result", - "file" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "being" - ] - }, - { - "id": 1116, - "name": "stageBatch", - "qualified_name": "incremental.Syncer.stageBatch", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "after", - "file" - ] - }, - { - "id": 608, - "name": "buildPrefixQuery", - "qualified_name": "searchsql.buildPrefixQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "reason": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "terms": [ - "came" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "came" - ] - }, - { - "id": 724, - "name": "WithFilePackages", - "qualified_name": "treesitter.WithFilePackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let parsers stamp package-less languages with a deterministic file-level package prefix.", - "reason": "let parsers stamp package-less languages with a deterministic file-level package prefix.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1151, - "name": "PackageContext", - "qualified_name": "ingest.PackageContext", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let parser adapters enrich multi-file packages without leaking AST types into ingest.", - "reason": "let parser adapters enrich multi-file packages without leaking AST types into ingest.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1317, - "name": "newBuildResolveLookup", - "qualified_name": "workflow.newBuildResolveLookup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "share immutable import file-node results across all resolver chunks in one build.", - "reason": "share immutable import file-node results across all resolver chunks in one build.", - "terms": [ - "result", - "file" - ] - }, - { - "id": 701, - "name": "stripJSONComments", - "qualified_name": "treesitter.stripJSONComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "reason": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "parser", - "file" - ] - }, - { - "id": 178, - "name": "namespaceEvidence", - "qualified_name": "mcp.handlers.namespaceEvidence", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "reason": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "terms": [ - "came" - ] - }, - { - "id": 108, - "name": "printEvidenceList", - "qualified_name": "cli.printEvidenceList", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "let a reader see why each result is in the list without opening the file.", - "reason": "let a reader see why each result is in the list without opening the file.", - "terms": [ - "result", - "file" - ] - }, - { - "id": 433, - "name": "ChangedFiles", - "qualified_name": "gitexec.ExecGitClient.ChangedFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "identify which repository paths changed since a base revision", - "reason": "identify which repository paths changed since a base revision", - "terms": [ - "changed" - ] - }, - { - "id": 910, - "name": "RiskEntry", - "qualified_name": "changes.RiskEntry", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "return the changed node together with overlap count and computed risk", - "reason": "return the changed node together with overlap count and computed risk", - "terms": [ - "changed" - ] - }, - { - "id": 912, - "name": "Service", - "qualified_name": "changes.Service", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "identify changed nodes and score how risky they are to modify", - "reason": "identify changed nodes and score how risky they are to modify", - "terms": [ - "changed" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "after" - ] - }, - { - "id": 189, - "name": "affectedFlowEntry", - "qualified_name": "mcp.affectedFlowEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "reason": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "terms": [ - "changed" - ] - }, - { - "id": 504, - "name": "AffectedFlowsPage", - "qualified_name": "graphgorm.Store.AffectedFlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "terms": [ - "changed" - ] - }, - { - "id": 1085, - "name": "deferredEdgeSpool", - "qualified_name": "incremental.deferredEdgeSpool", - "kind": "class", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "preserve parsed cross-batch edges until every changed node has been applied.", - "reason": "preserve parsed cross-batch edges until every changed node has been applied.", - "terms": [ - "changed" - ] - }, - { - "id": 484, - "name": "UpdateCrossRefResolution", - "qualified_name": "graphgorm.Store.UpdateCrossRefResolution", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "remap or invalidate a reference after its target namespace rebuilt.", - "reason": "remap or invalidate a reference after its target namespace rebuilt.", - "terms": [ - "after" - ] - } - ] - }, - "what keeps the same relationship from being stored twice": { - "corpus": 1901, - "terms": [ - { - "text": "keeps", - "in_reasons": 1 - }, - { - "text": "same", - "in_reasons": 55 - }, - { - "text": "relationship", - "in_reasons": 35 - }, - { - "text": "being", - "in_reasons": 3 - }, - { - "text": "stored", - "in_reasons": 29 - }, - { - "text": "twice", - "in_reasons": 2 - } + "what happens when a webhook arrives": [ + 2, + 63, + 64, + 66, + 77, + 78, + 80, + 85, + 86, + 87, + 99, + 278, + 279, + 280, + 283, + 287, + 289, + 291, + 359, + 385, + 386, + 393, + 395, + 396, + 403, + 405, + 1250, + 1317, + 1387, + 1392, + 1396, + 1397, + 1403, + 1406, + 1409, + 1413, + 1421, + 1439, + 1440, + 1444, + 1447, + 1450, + 1456, + 1499, + 1824, + 1826 ], - "hits": [ - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "same", - "relationship", - "stored" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "same", - "twice" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "same", - "twice" - ] - }, - { - "id": 1325, - "name": "flushBuildEdges", - "qualified_name": "workflow.Service.flushBuildEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "attach parsed relationships to stored node IDs without depending on build batch order.", - "reason": "attach parsed relationships to stored node IDs without depending on build batch order.", - "terms": [ - "relationship", - "stored" - ] - }, - { - "id": 712, - "name": "RelationshipSemantics", - "qualified_name": "treesitter.RelationshipSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages normalize query-captured relationships through the same definition path.", - "reason": "let languages normalize query-captured relationships through the same definition path.", - "terms": [ - "same", - "relationship" - ] - }, - { - "id": 963, - "name": "RelatedNodesPage", - "qualified_name": "analyze.RelatedNodesPage", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep pagination totals coupled to the same namespace-scoped relationship query.", - "reason": "keep pagination totals coupled to the same namespace-scoped relationship query.", - "terms": [ - "same", - "relationship" - ] - }, - { - "id": 386, - "name": "annotationDetailFromModel", - "qualified_name": "wikiserver.annotationDetailFromModel", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert a stored annotation into the same details shape used by wiki-index.json.", - "reason": "convert a stored annotation into the same details shape used by wiki-index.json.", - "terms": [ - "same", - "stored" - ] - }, - { - "id": 789, - "name": "JavaScriptSemantics", - "qualified_name": "treesitter.JavaScriptSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript.", - "reason": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript.", - "terms": [ - "same", - "relationship" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "keeps" - ] - }, - { - "id": 1531, - "name": "Known", - "qualified_name": "evidence.Coverage.Known", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep an unmeasured coverage from being reported as a measured zero.", - "reason": "keep an unmeasured coverage from being reported as a measured zero.", - "terms": [ - "being" - ] - }, - { - "id": 515, - "name": "LoadParseResult", - "qualified_name": "graphgorm.Store.LoadParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "terms": [ - "being" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "being" - ] - }, - { - "id": 506, - "name": "TopCommunities", - "qualified_name": "graphgorm.Store.TopCommunities", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace communities by stored membership count.", - "reason": "rank namespace communities by stored membership count.", - "terms": [ - "stored" - ] - }, - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "stored" - ] - }, - { - "id": 532, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.Store.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for a specific declaration.", - "reason": "load outbound relationships for a specific declaration.", - "terms": [ - "relationship" - ] - }, - { - "id": 534, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.Store.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for a specific declaration.", - "reason": "load inbound relationships for a specific declaration.", - "terms": [ - "relationship" - ] - }, - { - "id": 1222, - "name": "resolveImplements", - "qualified_name": "resolve.resolveImplements", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "capture implementation relationships and populate implementer cache.", - "reason": "capture implementation relationships and populate implementer cache.", - "terms": [ - "relationship" - ] - }, - { - "id": 934, - "name": "Config", - "qualified_name": "flow.Config", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "provides an extension point for stored flow rebuild configuration.", - "reason": "provides an extension point for stored flow rebuild configuration.", - "terms": [ - "stored" - ] - }, - { - "id": 971, - "name": "FlowSummary", - "qualified_name": "analyze.FlowSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry bounded stored-flow facts independently of persistence rows.", - "reason": "carry bounded stored-flow facts independently of persistence rows.", - "terms": [ - "stored" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "relationship" - ] - }, - { - "id": 536, - "name": "DeleteEdgesByFile", - "qualified_name": "graphgorm.Store.DeleteEdgesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "selectively clean existing relationships during file-scoped updates.", - "reason": "selectively clean existing relationships during file-scoped updates.", - "terms": [ - "relationship" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "stored" - ] - }, - { - "id": 938, - "name": "Rebuild", - "qualified_name": "flow.Builder.Rebuild", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "refreshes list_flows by replacing all stored flows within the namespace.", - "reason": "refreshes list_flows by replacing all stored flows within the namespace.", - "terms": [ - "stored" - ] - }, - { - "id": 1126, - "name": "setNodeHashes", - "qualified_name": "incremental.setNodeHashes", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental hash comparisons aligned with the stored graph rows.", - "reason": "keep incremental hash comparisons aligned with the stored graph rows.", - "terms": [ - "stored" - ] - }, - { - "id": 533, - "name": "GetEdgesFromNodes", - "qualified_name": "graphgorm.Store.GetEdgesFromNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for multiple declarations in one call.", - "reason": "load outbound relationships for multiple declarations in one call.", - "terms": [ - "relationship" - ] - }, - { - "id": 535, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.Store.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for multiple declarations in one call.", - "reason": "load inbound relationships for multiple declarations in one call.", - "terms": [ - "relationship" - ] - }, - { - "id": 790, - "name": "ImplementedTypes", - "qualified_name": "treesitter.JavaScriptSemantics.ImplementedTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "satisfy shared relationship normalization without inventing JS interface semantics.", - "reason": "satisfy shared relationship normalization without inventing JS interface semantics.", - "terms": [ - "relationship" - ] - }, - { - "id": 190, - "name": "affectedFlowsResponse", - "qualified_name": "mcp.affectedFlowsResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "reason": "expose affected stored flows with backward-compatible aliases and pagination metadata.", - "terms": [ - "stored" - ] - }, - { - "id": 502, - "name": "FlowsPage", - "qualified_name": "graphgorm.Store.FlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "load one stable namespace-scoped stored-flow page with member counts.", - "reason": "load one stable namespace-scoped stored-flow page with member counts.", - "terms": [ - "stored" - ] - }, - { - "id": 1033, - "name": "lastSegment", - "qualified_name": "describe.lastSegment", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "recover the stored short name from a dotted or slashed guess.", - "reason": "recover the stored short name from a dotted or slashed guess.", - "terms": [ - "stored" - ] - }, - { - "id": 497, - "name": "RelatedNodes", - "qualified_name": "graphgorm.Store.RelatedNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "implement namespace-scoped relationship joins behind the analysis query repository.", - "reason": "implement namespace-scoped relationship joins behind the analysis query repository.", - "terms": [ - "relationship" - ] - }, - { - "id": 734, - "name": "implementedTypesOrDefault", - "qualified_name": "treesitter.implementedTypesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize query-captured implements relationships behind an optional language hook.", - "reason": "centralize query-captured implements relationships behind an optional language hook.", - "terms": [ - "relationship" - ] - }, - { - "id": 808, - "name": "AdditionalEdges", - "qualified_name": "treesitter.KotlinSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "reason": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "terms": [ - "relationship" - ] - }, - { - "id": 850, - "name": "AdditionalEdges", - "qualified_name": "treesitter.RustSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks.", - "reason": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks.", - "terms": [ - "relationship" - ] - }, - { - "id": 900, - "name": "appendUniqueEdges", - "qualified_name": "treesitter.appendUniqueEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges.", - "reason": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges.", - "terms": [ - "relationship" - ] - }, - { - "id": 504, - "name": "AffectedFlowsPage", - "qualified_name": "graphgorm.Store.AffectedFlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "terms": [ - "stored" - ] - }, - { - "id": 564, - "name": "StoredNode", - "qualified_name": "graphgorm.Store.StoredNode", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "resolve one stored package or file used as a lazy Wiki root.", - "reason": "resolve one stored package or file used as a lazy Wiki root.", - "terms": [ - "stored" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "stored" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "stored" - ] - }, - { - "id": 1676, - "name": "DocTagDetailFromModel", - "qualified_name": "wiki.DocTagDetailFromModel", - "kind": "function", - "file_path": "internal/app/wiki/model.go", - "intent": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows.", - "reason": "attach parsed ccg:// metadata to @see tags without changing stored annotation rows.", - "terms": [ - "stored" - ] - }, - { - "id": 555, - "name": "DeleteUnresolvedEdgesByFingerprints", - "qualified_name": "graphgorm.Store.DeleteUnresolvedEdgesByFingerprints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep the reverse index limited to relationships that still lack endpoints.", - "reason": "keep the reverse index limited to relationships that still lack endpoints.", - "terms": [ - "relationship" - ] - }, - { - "id": 741, - "name": "AdditionalEdges", - "qualified_name": "treesitter.GoSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "identify \"implements\" relationships using both structural and explicit compile-time assertions.", - "reason": "identify \"implements\" relationships using both structural and explicit compile-time assertions.", - "terms": [ - "relationship" - ] - }, - { - "id": 1217, - "name": "resolveCall", - "qualified_name": "resolve.resolveCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "find the unique caller and callee nodes for a call relationship.", - "reason": "find the unique caller and callee nodes for a call relationship.", - "terms": [ - "relationship" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "stored" - ] - }, - { - "id": 937, - "name": "NewBuilder", - "qualified_name": "flow.NewBuilder", - "kind": "function", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "binds the database and graph reader to create a stored flow rebuild service.", - "reason": "binds the database and graph reader to create a stored flow rebuild service.", - "terms": [ - "stored" - ] - }, - { - "id": 1636, - "name": "lazySymbolNode", - "qualified_name": "wiki.Builder.lazySymbolNode", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "load a stored symbol tree node by qualified name for direct lazy navigation.", - "reason": "load a stored symbol tree node by qualified name for direct lazy navigation.", - "terms": [ - "stored" - ] - }, - { - "id": 1133, - "name": "chunkWithImportWarmup", - "qualified_name": "incremental.chunkWithImportWarmup", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "ensure chunked call resolution sees import relationships before resolving dependent call edges.", - "reason": "ensure chunked call resolution sees import relationships before resolving dependent call edges.", - "terms": [ - "relationship" - ] - }, - { - "id": 1245, - "name": "enclosingCallable", - "qualified_name": "resolve.enclosingCallable", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "identify the source symbol (caller) for a relationship originating on a line.", - "reason": "identify the source symbol (caller) for a relationship originating on a line.", - "terms": [ - "relationship" - ] - }, - { - "id": 1613, - "name": "fetch", - "qualified_name": "search.Service.fetch", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "reason": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "terms": [ - "same" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "stored" - ] - } - ] - }, - "what limits how much source code a single indexing pass may read": { - "corpus": 1901, - "terms": [ - { - "text": "limits", - "in_reasons": 11 - }, - { - "text": "much", - "in_reasons": 0 - }, - { - "text": "source", - "in_reasons": 74 - }, - { - "text": "code", - "in_reasons": 20 - }, - { - "text": "single", - "in_reasons": 44 - }, - { - "text": "indexing", - "in_reasons": 5 - }, - { - "text": "pass", - "in_reasons": 10 - }, - { - "text": "may", - "in_reasons": 9 - }, - { - "text": "read", - "in_reasons": 81 - } + "what keeps a parser result from being reused after the file it came from changed": [ + 60, + 61, + 62, + 110, + 111, + 115, + 119, + 121, + 132, + 139, + 140, + 141, + 142, + 143, + 147, + 148, + 149, + 150, + 169, + 170, + 172, + 174, + 175, + 183, + 184, + 192, + 198, + 199, + 208, + 219, + 232, + 241, + 248, + 249, + 250, + 311, + 314, + 328, + 334, + 336, + 343, + 346, + 352, + 364, + 365, + 367, + 370, + 375, + 379, + 380, + 394, + 397, + 398, + 399, + 400, + 401, + 411, + 421, + 426, + 428, + 431, + 437, + 442, + 444, + 449, + 458, + 460, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 483, + 501, + 502, + 505, + 510, + 512, + 514, + 532, + 543, + 555, + 558, + 571, + 596, + 609, + 612, + 613, + 614, + 615, + 616, + 618, + 619, + 620, + 625, + 631, + 632, + 634, + 639, + 642, + 646, + 647, + 653, + 658, + 665, + 666, + 669, + 670, + 683, + 687, + 696, + 699, + 721, + 753, + 756, + 778, + 818, + 819, + 820, + 823, + 827, + 829, + 840, + 842, + 843, + 844, + 855, + 857, + 858, + 859, + 862, + 863, + 869, + 883, + 921, + 930, + 937, + 941, + 956, + 963, + 965, + 974, + 984, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1020, + 1022, + 1028, + 1030, + 1032, + 1036, + 1038, + 1042, + 1043, + 1046, + 1049, + 1050, + 1051, + 1053, + 1054, + 1055, + 1059, + 1060, + 1062, + 1065, + 1067, + 1068, + 1069, + 1071, + 1077, + 1078, + 1081, + 1083, + 1084, + 1085, + 1086, + 1087, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1106, + 1108, + 1115, + 1120, + 1126, + 1131, + 1136, + 1137, + 1138, + 1139, + 1142, + 1153, + 1156, + 1160, + 1161, + 1169, + 1171, + 1172, + 1173, + 1174, + 1176, + 1180, + 1184, + 1191, + 1204, + 1205, + 1234, + 1244, + 1246, + 1248, + 1249, + 1253, + 1256, + 1257, + 1258, + 1259, + 1261, + 1263, + 1264, + 1266, + 1268, + 1275, + 1278, + 1285, + 1290, + 1292, + 1294, + 1296, + 1300, + 1301, + 1302, + 1303, + 1310, + 1319, + 1320, + 1321, + 1322, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1333, + 1334, + 1336, + 1345, + 1346, + 1350, + 1351, + 1353, + 1356, + 1358, + 1364, + 1366, + 1367, + 1368, + 1372, + 1373, + 1374, + 1376, + 1378, + 1379, + 1380, + 1384, + 1390, + 1398, + 1414, + 1416, + 1422, + 1426, + 1457, + 1458, + 1462, + 1475, + 1476, + 1482, + 1483, + 1484, + 1488, + 1490, + 1494, + 1495, + 1496, + 1508, + 1525, + 1526, + 1527, + 1528, + 1530, + 1531, + 1532, + 1534, + 1536, + 1538, + 1558, + 1560, + 1562, + 1570, + 1577, + 1582, + 1587, + 1588, + 1589, + 1593, + 1594, + 1595, + 1599, + 1602, + 1603, + 1604, + 1608, + 1613, + 1614, + 1618, + 1620, + 1636, + 1648, + 1730, + 1738, + 1769, + 1770, + 1772, + 1776, + 1791, + 1794, + 1819, + 1831, + 1839, + 1841, + 1842, + 1853, + 1863, + 1866, + 1873, + 1887 ], - "hits": [ - { - "id": 1079, - "name": "isPassthroughLine", - "qualified_name": "binding.isPassthroughLine", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "classify a single source line as non-code (passthrough) for binding logic", - "reason": "classify a single source line as non-code (passthrough) for binding logic", - "terms": [ - "source", - "code", - "single", - "pass" - ] - }, - { - "id": 1470, - "name": "GraphRequest", - "qualified_name": "reposync.GraphRequest", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "preserve namespace, source scope, replace limits, and readability policy across the app boundary.", - "reason": "preserve namespace, source scope, replace limits, and readability policy across the app boundary.", - "terms": [ - "limits", - "source", - "read" - ] - }, - { - "id": 1870, - "name": "Options", - "qualified_name": "mcpruntime.Options", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "reason": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "terms": [ - "code", - "pass" - ] - }, - { - "id": 381, - "name": "readDocFile", - "qualified_name": "wikiserver.readDocFile", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce generated doc size limits and read the resolved Markdown file.", - "reason": "enforce generated doc size limits and read the resolved Markdown file.", - "terms": [ - "limits", - "read" - ] - }, - { - "id": 569, - "name": "GraphView", - "qualified_name": "graphgorm.Store.GraphView", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "implement the Wiki force-graph read port with deterministic ordering and limits.", - "reason": "implement the Wiki force-graph read port with deterministic ordering and limits.", - "terms": [ - "limits", - "read" - ] - }, - { - "id": 1188, - "name": "resolveState", - "qualified_name": "resolve.resolveState", - "kind": "class", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "cache and index nodes by various keys (file, name, QN) during a single Resolve pass.", - "reason": "cache and index nodes by various keys (file, name, QN) during a single Resolve pass.", - "terms": [ - "single", - "pass" - ] - }, - { - "id": 1678, - "name": "SearchTextForAnnotation", - "qualified_name": "wiki.SearchTextForAnnotation", - "kind": "function", - "file_path": "internal/app/wiki/model.go", - "intent": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata.", - "reason": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata.", - "terms": [ - "source", - "indexing" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "source", - "may" - ] - }, - { - "id": 1209, - "name": "flattenNodes", - "qualified_name": "resolve.flattenNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "prepare nodes for indexing and state population.", - "reason": "prepare nodes for indexing and state population.", - "terms": [ - "indexing" - ] - }, - { - "id": 277, - "name": "requestNamespaces", - "qualified_name": "mcp.requestNamespaces", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "reason": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "terms": [ - "single", - "read" - ] - }, - { - "id": 329, - "name": "withFederatedNamespaceParams", - "qualified_name": "mcp.withFederatedNamespaceParams", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_query.go", - "intent": "let federated read tools accept an explicit namespace set alongside the canonical single namespace.", - "reason": "let federated read tools accept an explicit namespace set alongside the canonical single namespace.", - "terms": [ - "single", - "read" - ] - }, - { - "id": 396, - "name": "cleanMarkdownText", - "qualified_name": "wikiserver.cleanMarkdownText", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep fallback Markdown attributes single-line so the visual parser can read them predictably.", - "reason": "keep fallback Markdown attributes single-line so the visual parser can read them predictably.", - "terms": [ - "single", - "read" - ] - }, - { - "id": 1194, - "name": "indexNode", - "qualified_name": "resolve.resolveState.indexNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "maintain consistent node indexing by ID, QN, file, and name.", - "reason": "maintain consistent node indexing by ID, QN, file, and name.", - "terms": [ - "indexing" - ] - }, - { - "id": 583, - "name": "PostgresBackend", - "qualified_name": "searchsql.PostgresBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "reason": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "terms": [ - "indexing" - ] - }, - { - "id": 612, - "name": "SQLiteBackend", - "qualified_name": "searchsql.SQLiteBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Handles full-text search indexing and querying in a SQLite environment.", - "reason": "Handles full-text search indexing and querying in a SQLite environment.", - "terms": [ - "indexing" - ] - }, - { - "id": 1010, - "name": "resolveOnce", - "qualified_name": "crossref.Service.resolveOnce", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "reason": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "terms": [ - "pass", - "read" - ] - }, - { - "id": 952, - "name": "Analyzer", - "qualified_name": "impact.Analyzer", - "kind": "class", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "estimate which nodes may be affected by a change", - "reason": "estimate which nodes may be affected by a change", - "terms": [ - "may" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "single", - "read" - ] - }, - { - "id": 1341, - "name": "readRegularSourceFile", - "qualified_name": "workflow.readRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "terms": [ - "source", - "read" - ] - }, - { - "id": 362, - "name": "readDoc", - "qualified_name": "wikiserver.Server.readDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce doc size limits before returning generated Markdown content.", - "reason": "enforce doc size limits before returning generated Markdown content.", - "terms": [ - "limits" - ] - }, - { - "id": 1339, - "name": "inspectRegularSourceFile", - "qualified_name": "workflow.inspectRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes.", - "reason": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes.", - "terms": [ - "source", - "read" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "may" - ] - }, - { - "id": 84, - "name": "flattenLintRules", - "qualified_name": "cli.flattenLintRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "handle the multiple concrete types viper may return for a YAML sequence", - "reason": "handle the multiple concrete types viper may return for a YAML sequence", - "terms": [ - "may" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "may" - ] - }, - { - "id": 1001, - "name": "normalizeResults", - "qualified_name": "query.normalizeResults", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "keep predefined query responses stable across joins that may return duplicate nodes.", - "reason": "keep predefined query responses stable across joins that may return duplicate nodes.", - "terms": [ - "may" - ] - }, - { - "id": 285, - "name": "validatePositiveLimit", - "qualified_name": "mcp.validatePositiveLimit", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "reject zero and negative list limits before handlers hit database queries.", - "reason": "reject zero and negative list limits before handlers hit database queries.", - "terms": [ - "limits" - ] - }, - { - "id": 1208, - "name": "edgeFiles", - "qualified_name": "resolve.edgeFiles", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "identify all files involved in a resolution pass to batch node lookups.", - "reason": "identify all files involved in a resolution pass to batch node lookups.", - "terms": [ - "pass" - ] - }, - { - "id": 136, - "name": "onceCleanup", - "qualified_name": "server.onceCleanup", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "reason": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "terms": [ - "may" - ] - }, - { - "id": 237, - "name": "withParseLimitsFromRequest", - "qualified_name": "mcp.handlers.withParseLimitsFromRequest", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "apply per-request parse limits without mutating the shared handler dependency configuration.", - "reason": "apply per-request parse limits without mutating the shared handler dependency configuration.", - "terms": [ - "limits" - ] - }, - { - "id": 1704, - "name": "ConfigurePool", - "qualified_name": "db.ConfigurePool", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "apply connection-pool limits that match each database driver's concurrency model.", - "reason": "apply connection-pool limits that match each database driver's concurrency model.", - "terms": [ - "limits" - ] - }, - { - "id": 1118, - "name": "resolveAndUpsertImplements", - "qualified_name": "incremental.Syncer.resolveAndUpsertImplements", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let staged reconciliation finish a global implements pass before resolving interface-dispatch calls.", - "reason": "let staged reconciliation finish a global implements pass before resolving interface-dispatch calls.", - "terms": [ - "pass" - ] - }, - { - "id": 402, - "name": "requireMethod", - "qualified_name": "wikiserver.requireMethod", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "reject unsupported HTTP methods with a consistent status code.", - "reason": "reject unsupported HTTP methods with a consistent status code.", - "terms": [ - "code" - ] - }, - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "code" - ] - }, - { - "id": 1131, - "name": "partitionParsedSyncEdges", - "qualified_name": "incremental.partitionParsedSyncEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "reason": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "terms": [ - "may" - ] - }, - { - "id": 267, - "name": "validateQueryGraphLimit", - "qualified_name": "mcp.validateQueryGraphLimit", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination.", - "reason": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination.", - "terms": [ - "limits" - ] - }, - { - "id": 1439, - "name": "currentNodeIDsForFiles", - "qualified_name": "workflow.currentNodeIDsForFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "avoid SQL parameter limits while collecting node IDs that need search index refresh.", - "reason": "avoid SQL parameter limits while collecting node IDs that need search index refresh.", - "terms": [ - "limits" - ] - }, - { - "id": 861, - "name": "rustImportAliases", - "qualified_name": "treesitter.rustImportAliases", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "support Rust trait call normalization when code references imported names.", - "reason": "support Rust trait call normalization when code references imported names.", - "terms": [ - "code" - ] - }, - { - "id": 405, - "name": "statusForReadErr", - "qualified_name": "wikiserver.statusForReadErr", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "terms": [ - "code" - ] - }, - { - "id": 1207, - "name": "unresolvedReason", - "qualified_name": "resolve.unresolvedReason", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "reason": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "terms": [ - "code" - ] - }, - { - "id": 1364, - "name": "logger", - "qualified_name": "workflow.Service.logger", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "keep service code logging-safe even when callers leave Logger nil.", - "reason": "keep service code logging-safe even when callers leave Logger nil.", - "terms": [ - "code" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "pass" - ] - }, - { - "id": 1298, - "name": "buildEdgeBatchSource", - "qualified_name": "workflow.buildEdgeBatchSource", - "kind": "type", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records.", - "reason": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records.", - "terms": [ - "pass" - ] - }, - { - "id": 1350, - "name": "CheckTotalParsedBytes", - "qualified_name": "workflow.CheckTotalParsedBytes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "reason": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "terms": [ - "pass" - ] - }, - { - "id": 1416, - "name": "edgeBatchSource", - "qualified_name": "workflow.buildSpool.edgeBatchSource", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory.", - "reason": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory.", - "terms": [ - "pass" - ] - }, - { - "id": 364, - "name": "resolveDocPath", - "qualified_name": "wikiserver.Server.resolveDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "terms": [ - "source", - "read" - ] - }, - { - "id": 528, - "name": "DeleteNodesByFiles", - "qualified_name": "graphgorm.Store.DeleteNodesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "reason": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "terms": [ - "may" - ] - }, - { - "id": 871, - "name": "Walker", - "qualified_name": "treesitter.Walker", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "turn language-specific ASTs into the project's normalized code graph representation", - "reason": "turn language-specific ASTs into the project's normalized code graph representation", - "terms": [ - "code" - ] - }, - { - "id": 1548, - "name": "FieldsLower", - "qualified_name": "identtoken.FieldsLower", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "read a document the same way the query is read.", - "reason": "read a document the same way the query is read.", - "terms": [ - "read" - ] - }, - { - "id": 307, - "name": "promptLimitArg", - "qualified_name": "mcp.promptLimitArg", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "clamp the optional prompt limit argument to the handler's hard cap.", - "reason": "clamp the optional prompt limit argument to the handler's hard cap.", - "terms": [ - "limits" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "limits" - ] - } - ] - }, - "what made readiness fail while webhook work kept piling up": { - "corpus": 1901, - "terms": [ - { - "text": "made", - "in_reasons": 3 - }, - { - "text": "readiness", - "in_reasons": 4 - }, - { - "text": "fail", - "in_reasons": 33 - }, - { - "text": "while", - "in_reasons": 105 - }, - { - "text": "webhook", - "in_reasons": 44 - }, - { - "text": "work", - "in_reasons": 47 - }, - { - "text": "kept", - "in_reasons": 1 - }, - { - "text": "piling", - "in_reasons": 1 - }, - { - "text": "up", - "in_reasons": 7 - } + "what keeps the same relationship from being stored twice": [ + 119, + 144, + 177, + 208, + 222, + 255, + 274, + 299, + 333, + 339, + 395, + 397, + 404, + 405, + 433, + 440, + 443, + 447, + 449, + 451, + 452, + 458, + 469, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 493, + 503, + 510, + 533, + 539, + 563, + 572, + 616, + 657, + 658, + 679, + 686, + 704, + 715, + 716, + 721, + 734, + 735, + 750, + 753, + 766, + 784, + 795, + 828, + 842, + 847, + 848, + 861, + 882, + 883, + 885, + 886, + 887, + 914, + 922, + 979, + 980, + 1055, + 1072, + 1077, + 1079, + 1082, + 1117, + 1154, + 1160, + 1165, + 1166, + 1170, + 1188, + 1193, + 1234, + 1243, + 1261, + 1272, + 1280, + 1287, + 1324, + 1347, + 1380, + 1381, + 1383, + 1449, + 1482, + 1492, + 1493, + 1494, + 1501, + 1507, + 1518, + 1519, + 1526, + 1541, + 1555, + 1561, + 1562, + 1563, + 1579, + 1582, + 1583, + 1586, + 1623, + 1645, + 1648, + 1794, + 1820, + 1868 ], - "hits": [ - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "piling", - "up" - ] - }, - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "while", - "kept" - ] - }, - { - "id": 135, - "name": "RunStreamableHTTP", - "qualified_name": "server.RunStreamableHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "reason": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "terms": [ - "readiness", - "webhook" - ] - }, - { - "id": 1155, - "name": "ParseCache", - "qualified_name": "ingest.ParseCache", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "reason": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "terms": [ - "fail", - "work" - ] - }, - { - "id": 450, - "name": "WithLock", - "qualified_name": "gitrepo.RepoLocker.WithLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "terms": [ - "webhook", - "work" - ] - }, - { - "id": 1487, - "name": "RetryConfig", - "qualified_name": "reposync.RetryConfig", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "reason": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "terms": [ - "fail", - "webhook" - ] - }, - { - "id": 1503, - "name": "safeHandle", - "qualified_name": "reposync.SyncQueue.safeHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "terms": [ - "fail", - "webhook" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "fail", - "webhook" - ] - }, - { - "id": 143, - "name": "ReadyHandler", - "qualified_name": "server.ReadyHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다.", - "reason": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다.", - "terms": [ - "readiness" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "fail", - "webhook" - ] - }, - { - "id": 925, - "name": "sortRiskCandidates", - "qualified_name": "changes.sortRiskCandidates", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work.", - "reason": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 744, - "name": "CallRewriter", - "qualified_name": "treesitter.GoSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "preserve interface dispatch context for calls made through asserted variables.", - "reason": "preserve interface dispatch context for calls made through asserted variables.", - "terms": [ - "made" - ] - }, - { - "id": 746, - "name": "RewriteCall", - "qualified_name": "treesitter.goAssertionCallRewriter.RewriteCall", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "preserve interface dispatch context for calls made through asserted variables.", - "reason": "preserve interface dispatch context for calls made through asserted variables.", - "terms": [ - "made" - ] - }, - { - "id": 146, - "name": "WebhookBlockingReadyCheck", - "qualified_name": "server.WebhookBlockingReadyCheck", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "readiness 판단에서 웹훅 큐가 트래픽 차단 상태인지 빠르게 판정한다.", - "reason": "readiness 판단에서 웹훅 큐가 트래픽 차단 상태인지 빠르게 판정한다.", - "terms": [ - "readiness" - ] - }, - { - "id": 911, - "name": "Result", - "qualified_name": "changes.Result", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "expose paged change-risk results while keeping legacy callers working with []RiskEntry.", - "reason": "expose paged change-risk results while keeping legacy callers working with []RiskEntry.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 1300, - "name": "buildParseResult", - "qualified_name": "workflow.buildParseResult", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let workers finish out of order while the coordinator preserves record order.", - "reason": "let workers finish out of order while the coordinator preserves record order.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 147, - "name": "WebhookStatsBlockingReady", - "qualified_name": "server.WebhookStatsBlockingReady", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "큐 포화나 장시간 지연이 readiness 실패 조건인지 공통 규칙으로 판단한다.", - "reason": "큐 포화나 장시간 지연이 readiness 실패 조건인지 공통 규칙으로 판단한다.", - "terms": [ - "readiness" - ] - }, - { - "id": 449, - "name": "NewRepoLocker", - "qualified_name": "gitrepo.NewRepoLocker", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree.", - "reason": "serialize concurrent webhook sync for the same repo so git operations do not corrupt the working tree.", - "terms": [ - "webhook", - "work" - ] - }, - { - "id": 1170, - "name": "FileBatchSource", - "qualified_name": "ingest.FileBatchSource", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "reason": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "while", - "webhook" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 922, - "name": "selectTopRiskCandidates", - "qualified_name": "changes.selectTopRiskCandidates", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window.", - "reason": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window.", - "terms": [ - "while", - "work" - ] - }, - { - "id": 1043, - "name": "pruneManaged", - "qualified_name": "docs.Generator.pruneManaged", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "clean up stale generated docs without touching manually created files", - "reason": "clean up stale generated docs without touching manually created files", - "terms": [ - "up" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "made" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "while", - "webhook" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "while", - "webhook" - ] - }, - { - "id": 1348, - "name": "asError", - "qualified_name": "workflow.unreadableFileSummary.asError", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "reason": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "terms": [ - "fail" - ] - }, - { - "id": 448, - "name": "repoLockMetadata", - "qualified_name": "gitrepo.repoLockMetadata", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "persist enough lock provenance to detect and clean up stale repository lock files safely.", - "reason": "persist enough lock provenance to detect and clean up stale repository lock files safely.", - "terms": [ - "up" - ] - }, - { - "id": 1502, - "name": "worker", - "qualified_name": "reposync.SyncQueue.worker", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "run the main worker loop that drains deduplicated repository work items.", - "reason": "run the main worker loop that drains deduplicated repository work items.", - "terms": [ - "work" - ] - }, - { - "id": 1715, - "name": "close", - "qualified_name": "dbtest.postgresSchema.close", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "terms": [ - "fail" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "up" - ] - }, - { - "id": 618, - "name": "PurgeNamespace", - "qualified_name": "searchsql.SQLiteBackend.PurgeNamespace", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "reason": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "terms": [ - "up" - ] - }, - { - "id": 1628, - "name": "nextActions", - "qualified_name": "wire.nextActions", - "kind": "function", - "file_path": "internal/app/search/wire/wire.go", - "intent": "make the follow-up step obvious enough that an agent does not have to invent one.", - "reason": "make the follow-up step obvious enough that an agent does not have to invent one.", - "terms": [ - "up" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "work" - ] - }, - { - "id": 254, - "name": "getNode", - "qualified_name": "mcp.handlers.getNode", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "look up a node by qualified name so callers can retrieve its core identity and location metadata.", - "reason": "look up a node by qualified name so callers can retrieve its core identity and location metadata.", - "terms": [ - "up" - ] - }, - { - "id": 1482, - "name": "nonRetryableError", - "qualified_name": "reposync.nonRetryableError", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "mark sync failures that should stop retry backoff immediately.", - "reason": "mark sync failures that should stop retry backoff immediately.", - "terms": [ - "fail" - ] - }, - { - "id": 58, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg/main.go", - "intent": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "reason": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "terms": [ - "fail" - ] - }, - { - "id": 1417, - "name": "cleanup", - "qualified_name": "workflow.buildSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the build succeeded or failed.", - "reason": "reclaim spool disk space whether the build succeeded or failed.", - "terms": [ - "fail" - ] - }, - { - "id": 1420, - "name": "cleanup", - "qualified_name": "workflow.updateSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the update succeeded or failed.", - "reason": "reclaim spool disk space whether the update succeeded or failed.", - "terms": [ - "fail" - ] - }, - { - "id": 144, - "name": "statusResponse", - "qualified_name": "server.statusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "reason": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "terms": [ - "webhook" - ] - }, - { - "id": 1488, - "name": "defaultRetryConfig", - "qualified_name": "reposync.defaultRetryConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide conservative retry defaults for production webhook processing.", - "reason": "provide conservative retry defaults for production webhook processing.", - "terms": [ - "webhook" - ] - }, - { - "id": 1492, - "name": "NewSyncQueue", - "qualified_name": "reposync.NewSyncQueue", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide the smallest constructor for production webhook dispatch.", - "reason": "provide the smallest constructor for production webhook dispatch.", - "terms": [ - "webhook" - ] - }, - { - "id": 82, - "name": "countNonIgnoredWithRules", - "qualified_name": "cli.countNonIgnoredWithRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "compute the strict-mode failure count against an explicit rule set", - "reason": "compute the strict-mode failure count against an explicit rule set", - "terms": [ - "fail" - ] - }, - { - "id": 405, - "name": "statusForReadErr", - "qualified_name": "wikiserver.statusForReadErr", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "terms": [ - "fail" - ] - }, - { - "id": 1498, - "name": "Stats", - "qualified_name": "reposync.SyncQueue.Stats", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "expose enough queue state to diagnose backlog, failures, and hot repositories.", - "reason": "expose enough queue state to diagnose backlog, failures, and hot repositories.", - "terms": [ - "fail" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "fail" - ] - }, - { - "id": 695, - "name": "workspacePatternMatchParts", - "qualified_name": "treesitter.workspacePatternMatchParts", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "implement **-aware workspace glob semantics for package root discovery.", - "reason": "implement **-aware workspace glob semantics for package root discovery.", - "terms": [ - "work" - ] - }, - { - "id": 1404, - "name": "encodeCachedParseRecord", - "qualified_name": "workflow.encodeCachedParseRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "keep cache persistence independent of workflow-internal record types.", - "reason": "keep cache persistence independent of workflow-internal record types.", - "terms": [ - "work" - ] - }, - { - "id": 251, - "name": "federatedNamespaceEntry", - "qualified_name": "mcp.federatedNamespaceEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "label per-namespace payloads and isolate per-namespace failures in federated reads.", - "reason": "label per-namespace payloads and isolate per-namespace failures in federated reads.", - "terms": [ - "fail" - ] - }, - { - "id": 1485, - "name": "NonRetryable", - "qualified_name": "reposync.NonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "reason": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "terms": [ - "fail" - ] - } - ] - }, - "what makes the order files are parsed the same on every build": { - "corpus": 1901, - "terms": [ - { - "text": "makes", - "in_reasons": 2 - }, - { - "text": "order", - "in_reasons": 50 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "parsed", - "in_reasons": 30 - }, - { - "text": "same", - "in_reasons": 55 - }, - { - "text": "every", - "in_reasons": 43 - }, - { - "text": "build", - "in_reasons": 81 - } + "what limits how much source code a single indexing pass may read": [ + 28, + 35, + 37, + 42, + 43, + 61, + 87, + 88, + 98, + 101, + 102, + 103, + 107, + 110, + 111, + 117, + 120, + 123, + 125, + 134, + 138, + 150, + 151, + 152, + 158, + 163, + 164, + 169, + 179, + 186, + 189, + 193, + 201, + 213, + 216, + 219, + 225, + 229, + 230, + 231, + 239, + 240, + 249, + 251, + 254, + 255, + 258, + 260, + 268, + 275, + 300, + 301, + 303, + 308, + 309, + 311, + 327, + 328, + 343, + 344, + 349, + 352, + 368, + 371, + 373, + 375, + 378, + 382, + 414, + 415, + 423, + 428, + 459, + 465, + 470, + 473, + 486, + 492, + 501, + 502, + 504, + 515, + 526, + 532, + 536, + 556, + 559, + 571, + 576, + 577, + 583, + 605, + 606, + 609, + 612, + 613, + 615, + 617, + 618, + 644, + 645, + 646, + 706, + 769, + 786, + 806, + 815, + 830, + 841, + 854, + 862, + 885, + 888, + 890, + 891, + 892, + 896, + 902, + 905, + 906, + 915, + 951, + 952, + 961, + 968, + 974, + 1018, + 1019, + 1021, + 1025, + 1026, + 1028, + 1033, + 1034, + 1051, + 1059, + 1060, + 1061, + 1062, + 1064, + 1067, + 1071, + 1077, + 1098, + 1099, + 1101, + 1104, + 1109, + 1119, + 1121, + 1128, + 1136, + 1142, + 1155, + 1156, + 1157, + 1191, + 1193, + 1243, + 1245, + 1248, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1273, + 1282, + 1285, + 1286, + 1287, + 1288, + 1290, + 1292, + 1295, + 1297, + 1300, + 1302, + 1309, + 1318, + 1334, + 1341, + 1344, + 1345, + 1359, + 1370, + 1371, + 1374, + 1377, + 1382, + 1387, + 1390, + 1423, + 1461, + 1476, + 1484, + 1485, + 1490, + 1494, + 1495, + 1496, + 1501, + 1502, + 1506, + 1514, + 1530, + 1535, + 1545, + 1547, + 1549, + 1551, + 1563, + 1569, + 1570, + 1596, + 1598, + 1625, + 1647, + 1663, + 1664, + 1683, + 1684, + 1685, + 1688, + 1698, + 1730, + 1739, + 1756, + 1765, + 1766, + 1767, + 1777, + 1778, + 1790, + 1822, + 1824, + 1826, + 1864, + 1877, + 1906 ], - "hits": [ - { - "id": 1416, - "name": "edgeBatchSource", - "qualified_name": "workflow.buildSpool.edgeBatchSource", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory.", - "reason": "let full builds resolve deferred edges in ordered passes without retaining every parsed edge in memory.", - "terms": [ - "order", - "parsed", - "every", - "build" - ] - }, - { - "id": 1325, - "name": "flushBuildEdges", - "qualified_name": "workflow.Service.flushBuildEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "attach parsed relationships to stored node IDs without depending on build batch order.", - "reason": "attach parsed relationships to stored node IDs without depending on build batch order.", - "terms": [ - "order", - "parsed", - "build" - ] - }, - { - "id": 1311, - "name": "parseBuildInputs", - "qualified_name": "workflow.Service.parseBuildInputs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory.", - "reason": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory.", - "terms": [ - "order", - "parsed", - "every" - ] - }, - { - "id": 1115, - "name": "syncBatchesWithExisting", - "qualified_name": "incremental.Syncer.syncBatchesWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "reason": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "terms": [ - "order", - "parsed", - "every" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "files", - "parsed", - "build" - ] - }, - { - "id": 1327, - "name": "flushBuildEdgeSourceWithTiming", - "qualified_name": "workflow.Service.flushBuildEdgeSourceWithTiming", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts.", - "reason": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts.", - "terms": [ - "order", - "every", - "build" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "order", - "same", - "every" - ] - }, - { - "id": 1410, - "name": "spooledBuildRecord", - "qualified_name": "workflow.spooledBuildRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "let the build transaction stream parsed input from disk instead of holding all files in memory.", - "reason": "let the build transaction stream parsed input from disk instead of holding all files in memory.", - "terms": [ - "files", - "parsed", - "build" - ] - }, - { - "id": 1085, - "name": "deferredEdgeSpool", - "qualified_name": "incremental.deferredEdgeSpool", - "kind": "class", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "preserve parsed cross-batch edges until every changed node has been applied.", - "reason": "preserve parsed cross-batch edges until every changed node has been applied.", - "terms": [ - "parsed", - "every" - ] - }, - { - "id": 328, - "name": "withNamespaceParam", - "qualified_name": "mcp.withNamespaceParam", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_query.go", - "intent": "give every namespace-aware MCP tool the same isolation parameter.", - "reason": "give every namespace-aware MCP tool the same isolation parameter.", - "terms": [ - "same", - "every" - ] - }, - { - "id": 1108, - "name": "SetResolveOptions", - "qualified_name": "incremental.Syncer.SetResolveOptions", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid rebuilding the syncer for every Build/Update invocation.", - "reason": "avoid rebuilding the syncer for every Build/Update invocation.", - "terms": [ - "every", - "build" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "files", - "parsed" - ] - }, - { - "id": 1078, - "name": "Bind", - "qualified_name": "binding.Binder.Bind", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "build node-to-annotation bindings from parsed comments and node positions", - "reason": "build node-to-annotation bindings from parsed comments and node positions", - "terms": [ - "parsed", - "build" - ] - }, - { - "id": 592, - "name": "MatchIntent", - "qualified_name": "searchsql.PostgresBackend.MatchIntent", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced.", - "reason": "hand every candidate reason to shared scoring, in whatever order the index produced.", - "terms": [ - "order", - "every" - ] - }, - { - "id": 626, - "name": "MatchIntent", - "qualified_name": "searchsql.SQLiteBackend.MatchIntent", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "hand every candidate reason to shared scoring, in whatever order the index produced.", - "reason": "hand every candidate reason to shared scoring, in whatever order the index produced.", - "terms": [ - "order", - "every" - ] - }, - { - "id": 1415, - "name": "readRecord", - "qualified_name": "workflow.buildSpool.readRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream parsed input back into the build transaction one file at a time.", - "reason": "stream parsed input back into the build transaction one file at a time.", - "terms": [ - "parsed", - "build" - ] - }, - { - "id": 600, - "name": "intentCorpusSize", - "qualified_name": "searchsql.Reader.intentCorpusSize", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "give the scorer the denominator that makes a common word common.", - "reason": "give the scorer the denominator that makes a common word common.", - "terms": [ - "makes" - ] - }, - { - "id": 876, - "name": "ParseCacheVersion", - "qualified_name": "treesitter.Walker.ParseCacheVersion", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "invalidate full-build parse cache entries when language queries or parser semantics change.", - "reason": "invalidate full-build parse cache entries when language queries or parser semantics change.", - "terms": [ - "parsed", - "build" - ] - }, - { - "id": 1310, - "name": "collectBuildParseInputs", - "qualified_name": "workflow.Service.collectBuildParseInputs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "reason": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "terms": [ - "order", - "build" - ] - }, - { - "id": 1540, - "name": "matchedSignals", - "qualified_name": "evidence.matchedSignals", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "state a candidate's evidence in the same terms the ranker ordered it by.", - "reason": "state a candidate's evidence in the same terms the ranker ordered it by.", - "terms": [ - "order", - "same" - ] - }, - { - "id": 1494, - "name": "NewSyncQueueWithOptions", - "qualified_name": "reposync.NewSyncQueueWithOptions", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "expose backoff customization without forcing every caller to build a full queue config.", - "reason": "expose backoff customization without forcing every caller to build a full queue config.", - "terms": [ - "every", - "build" - ] - }, - { - "id": 1333, - "name": "mergeFilterResolvedDiagnostics", - "qualified_name": "workflow.mergeFilterResolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "terms": [ - "same", - "build" - ] - }, - { - "id": 1350, - "name": "CheckTotalParsedBytes", - "qualified_name": "workflow.CheckTotalParsedBytes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "reason": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "terms": [ - "parsed", - "build" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "files", - "same" - ] - }, - { - "id": 1468, - "name": "BuildScope", - "qualified_name": "reposync.BuildScope", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry include and exclude configuration together so every webhook update uses one coherent build scope.", - "reason": "carry include and exclude configuration together so every webhook update uses one coherent build scope.", - "terms": [ - "every", - "build" - ] - }, - { - "id": 354, - "name": "handleRetrieve", - "qualified_name": "wikiserver.Server.handleRetrieve", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract.", - "reason": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract.", - "terms": [ - "same", - "every" - ] - }, - { - "id": 1690, - "name": "IndexWriter", - "qualified_name": "wiki.IndexWriter", - "kind": "type", - "file_path": "internal/app/wiki/ports.go", - "intent": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "reason": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "terms": [ - "files", - "build" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "files", - "parsed" - ] - }, - { - "id": 670, - "name": "rememberPackage", - "qualified_name": "treesitter.rememberPackage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "handle multiple declarations of the same import path by merging files or detecting inconsistencies.", - "reason": "handle multiple declarations of the same import path by merging files or detecting inconsistencies.", - "terms": [ - "files", - "same" - ] - }, - { - "id": 1667, - "name": "summaryForNode", - "qualified_name": "wiki.summaryForNode", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "choose the summary text that makes a Wiki node useful for scanning and search.", - "reason": "choose the summary text that makes a Wiki node useful for scanning and search.", - "terms": [ - "makes" - ] - }, - { - "id": 1437, - "name": "existingFilesMissingFromSet", - "qualified_name": "workflow.existingFilesMissingFromSet", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "terms": [ - "files", - "same" - ] - }, - { - "id": 1403, - "name": "toSpooledRecord", - "qualified_name": "workflow.cachedParseRecord.toSpooledRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "reconstruct the same build spool contract on a cache hit as on a fresh parse.", - "reason": "reconstruct the same build spool contract on a cache hit as on a fresh parse.", - "terms": [ - "same", - "build" - ] - }, - { - "id": 1298, - "name": "buildEdgeBatchSource", - "qualified_name": "workflow.buildEdgeBatchSource", - "kind": "type", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records.", - "reason": "let edge resolution make ordered passes over either in-memory batches or disk-backed build records.", - "terms": [ - "order", - "build" - ] - }, - { - "id": 597, - "name": "QueryIntent", - "qualified_name": "searchsql.Reader.QueryIntent", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "reason": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "terms": [ - "same", - "every" - ] - }, - { - "id": 1341, - "name": "readRegularSourceFile", - "qualified_name": "workflow.readRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "terms": [ - "same", - "build" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "files", - "build" - ] - }, - { - "id": 1610, - "name": "Search", - "qualified_name": "search.Service.Search", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer a search with the files that can justify their place, not the backend's raw order.", - "reason": "answer a search with the files that can justify their place, not the backend's raw order.", - "terms": [ - "order", - "files" - ] - }, - { - "id": 686, - "name": "discoverNodePackageScopes", - "qualified_name": "treesitter.discoverNodePackageScopes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "reason": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "terms": [ - "files", - "every" - ] - }, - { - "id": 1309, - "name": "prepareBuildSpool", - "qualified_name": "workflow.Service.prepareBuildSpool", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "pre-parse eligible files into spool records so the later build transaction can persist graph state from a stable snapshot.", - "reason": "pre-parse eligible files into spool records so the later build transaction can persist graph state from a stable snapshot.", - "terms": [ - "files", - "build" - ] - }, - { - "id": 1300, - "name": "buildParseResult", - "qualified_name": "workflow.buildParseResult", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let workers finish out of order while the coordinator preserves record order.", - "reason": "let workers finish out of order while the coordinator preserves record order.", - "terms": [ - "order" - ] - }, - { - "id": 522, - "name": "GetNodesByFile", - "qualified_name": "graphgorm.Store.GetNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load declarations parsed from a specific source file.", - "reason": "load declarations parsed from a specific source file.", - "terms": [ - "parsed" - ] - }, - { - "id": 517, - "name": "UpsertNodes", - "qualified_name": "graphgorm.Store.UpsertNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply parsed result nodes in bulk without creating duplicates.", - "reason": "apply parsed result nodes in bulk without creating duplicates.", - "terms": [ - "parsed" - ] - }, - { - "id": 1223, - "name": "resolveImportsFrom", - "qualified_name": "resolve.resolveImportsFrom", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link importing files to their target packages or files.", - "reason": "link importing files to their target packages or files.", - "terms": [ - "files" - ] - }, - { - "id": 772, - "name": "AdditionalEdges", - "qualified_name": "treesitter.TypeScriptSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "capture TypeScript class hierarchy semantics directly from the parsed AST.", - "reason": "capture TypeScript class hierarchy semantics directly from the parsed AST.", - "terms": [ - "parsed" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "files" - ] - }, - { - "id": 710, - "name": "DefinitionSemantics", - "qualified_name": "treesitter.DefinitionSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages enrich parsed definitions without adding language branches to Walker.", - "reason": "let languages enrich parsed definitions without adding language branches to Walker.", - "terms": [ - "parsed" - ] - }, - { - "id": 1076, - "name": "Binder", - "qualified_name": "binding.Binder", - "kind": "class", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "attach normalized and parsed annotations to nodes based on source proximity", - "reason": "attach normalized and parsed annotations to nodes based on source proximity", - "terms": [ - "parsed" - ] - }, - { - "id": 1937, - "name": "CCGRef", - "qualified_name": "CCGRef", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "reason": "describe a parsed ccg:// cross-namespace reference attached to @see annotations.", - "terms": [ - "parsed" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "every" - ] - }, - { - "id": 567, - "name": "Annotations", - "qualified_name": "graphgorm.Store.Annotations", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "batch-load Wiki annotations with deterministic tag ordering.", - "reason": "batch-load Wiki annotations with deterministic tag ordering.", - "terms": [ - "order" - ] - } - ] - }, - "what prevents a user supplied revision from being treated as a command option": { - "corpus": 1901, - "terms": [ - { - "text": "prevents", - "in_reasons": 0 - }, - { - "text": "user", - "in_reasons": 15 - }, - { - "text": "supplied", - "in_reasons": 7 - }, - { - "text": "revision", - "in_reasons": 3 - }, - { - "text": "being", - "in_reasons": 3 - }, - { - "text": "treated", - "in_reasons": 1 - }, - { - "text": "command", - "in_reasons": 3 - }, - { - "text": "option", - "in_reasons": 24 - } + "what made readiness fail while webhook work kept piling up": [ + 1, + 2, + 32, + 59, + 63, + 64, + 66, + 77, + 78, + 80, + 81, + 85, + 86, + 87, + 98, + 99, + 101, + 102, + 129, + 130, + 143, + 145, + 187, + 194, + 201, + 204, + 212, + 225, + 227, + 230, + 236, + 240, + 260, + 278, + 279, + 280, + 281, + 282, + 283, + 287, + 289, + 290, + 291, + 292, + 311, + 313, + 323, + 352, + 353, + 359, + 363, + 372, + 383, + 385, + 386, + 390, + 393, + 394, + 395, + 396, + 403, + 405, + 438, + 442, + 454, + 470, + 474, + 486, + 487, + 496, + 516, + 518, + 519, + 566, + 584, + 596, + 600, + 623, + 628, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 653, + 664, + 677, + 689, + 691, + 697, + 733, + 736, + 751, + 778, + 781, + 782, + 783, + 788, + 795, + 807, + 840, + 858, + 861, + 871, + 872, + 874, + 915, + 990, + 1001, + 1034, + 1040, + 1041, + 1062, + 1065, + 1081, + 1100, + 1102, + 1103, + 1107, + 1109, + 1117, + 1118, + 1119, + 1122, + 1123, + 1146, + 1148, + 1149, + 1152, + 1246, + 1247, + 1248, + 1249, + 1250, + 1253, + 1259, + 1260, + 1265, + 1267, + 1268, + 1269, + 1270, + 1271, + 1274, + 1276, + 1288, + 1290, + 1292, + 1293, + 1295, + 1310, + 1317, + 1325, + 1328, + 1340, + 1343, + 1344, + 1348, + 1360, + 1363, + 1371, + 1376, + 1379, + 1382, + 1386, + 1387, + 1392, + 1396, + 1397, + 1402, + 1403, + 1406, + 1409, + 1413, + 1421, + 1425, + 1430, + 1434, + 1435, + 1437, + 1438, + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1447, + 1448, + 1449, + 1450, + 1451, + 1453, + 1454, + 1455, + 1456, + 1457, + 1461, + 1462, + 1463, + 1497, + 1512, + 1526, + 1576, + 1586, + 1592, + 1599, + 1604, + 1605, + 1648, + 1658, + 1659, + 1665, + 1698, + 1767, + 1772, + 1778, + 1779, + 1785, + 1792, + 1818, + 1823, + 1824, + 1826, + 1848, + 1849, + 1855 ], - "hits": [ - { - "id": 199, - "name": "validatePathWithinAllowedRoots", - "qualified_name": "mcp.validatePathWithinAllowedRoots", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "reason": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "terms": [ - "user", - "supplied" - ] - }, - { - "id": 1892, - "name": "Canonical", - "qualified_name": "safepath.Canonical", - "kind": "function", - "file_path": "internal/safepath/safepath.go", - "intent": "normalize user-supplied paths before containment comparison to prevent symlink-based escapes.", - "reason": "normalize user-supplied paths before containment comparison to prevent symlink-based escapes.", - "terms": [ - "user", - "supplied" - ] - }, - { - "id": 420, - "name": "Remove", - "qualified_name": "contentfiles.Root.Remove", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prune only the relative generated path selected by application manifest policy.", - "reason": "prune only the relative generated path selected by application manifest policy.", - "terms": [ - "treated" - ] - }, - { - "id": 433, - "name": "ChangedFiles", - "qualified_name": "gitexec.ExecGitClient.ChangedFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "identify which repository paths changed since a base revision", - "reason": "identify which repository paths changed since a base revision", - "terms": [ - "revision" - ] - }, - { - "id": 58, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg/main.go", - "intent": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "reason": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "terms": [ - "command" - ] - }, - { - "id": 1881, - "name": "NewRuntime", - "qualified_name": "runtime.NewRuntime", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "initialize parser walkers once before command-specific database setup runs.", - "reason": "initialize parser walkers once before command-specific database setup runs.", - "terms": [ - "command" - ] - }, - { - "id": 1531, - "name": "Known", - "qualified_name": "evidence.Coverage.Known", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep an unmeasured coverage from being reported as a measured zero.", - "reason": "keep an unmeasured coverage from being reported as a measured zero.", - "terms": [ - "being" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "command" - ] - }, - { - "id": 930, - "name": "Push", - "qualified_name": "changes.riskCandidateHeap.Push", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "append a retained risk candidate supplied by container/heap.", - "reason": "append a retained risk candidate supplied by container/heap.", - "terms": [ - "supplied" - ] - }, - { - "id": 75, - "name": "internal/adapters/inbound/cli/init.go", - "qualified_name": "internal/adapters/inbound/cli/init.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "user" - ] - }, - { - "id": 76, - "name": "newInitCmd", - "qualified_name": "cli.newInitCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "user" - ] - }, - { - "id": 873, - "name": "WalkerOption", - "qualified_name": "treesitter.WalkerOption", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "allow caller-supplied dependencies such as logging without expanding constructor arguments", - "reason": "allow caller-supplied dependencies such as logging without expanding constructor arguments", - "terms": [ - "supplied" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "supplied" - ] - }, - { - "id": 515, - "name": "LoadParseResult", - "qualified_name": "graphgorm.Store.LoadParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "terms": [ - "being" - ] - }, - { - "id": 811, - "name": "parseJavaClassHierarchy", - "qualified_name": "treesitter.parseJavaClassHierarchy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions.", - "reason": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions.", - "terms": [ - "revision" - ] - }, - { - "id": 785, - "name": "parseTypeScriptHeritageText", - "qualified_name": "treesitter.parseTypeScriptHeritageText", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "keep TypeScript inheritance extraction robust even when tree-sitter child field names differ across grammar revisions.", - "reason": "keep TypeScript inheritance extraction robust even when tree-sitter child field names differ across grammar revisions.", - "terms": [ - "revision" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "being" - ] - }, - { - "id": 1115, - "name": "syncBatchesWithExisting", - "qualified_name": "incremental.Syncer.syncBatchesWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "reason": "make cross-file edge resolution independent of source batch ordering without retaining all parsed edges in memory.", - "terms": [ - "supplied" - ] - }, - { - "id": 1948, - "name": "APIError", - "qualified_name": "APIError", - "kind": "class", - "file_path": "web/wiki/src/api.ts", - "intent": "preserve HTTP status alongside user-facing Wiki API errors.", - "reason": "preserve HTTP status alongside user-facing Wiki API errors.", - "terms": [ - "user" - ] - }, - { - "id": 1157, - "name": "AnnotatingParser", - "qualified_name": "ingest.AnnotatingParser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "make comment-aware parsing an optional ingest capability.", - "reason": "make comment-aware parsing an optional ingest capability.", - "terms": [ - "option" - ] - }, - { - "id": 283, - "name": "missingParamResult", - "qualified_name": "mcp.missingParamResult", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "convert missing required parameters into one consistent user-input error response.", - "reason": "convert missing required parameters into one consistent user-input error response.", - "terms": [ - "user" - ] - }, - { - "id": 114, - "name": "envString", - "qualified_name": "cli.envString", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep optional stdio MCP environment defaults small and explicit.", - "reason": "keep optional stdio MCP environment defaults small and explicit.", - "terms": [ - "option" - ] - }, - { - "id": 736, - "name": "packageEdgesOrDefault", - "qualified_name": "treesitter.packageEdgesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize package-level enrichment behind an optional semantics hook.", - "reason": "centralize package-level enrichment behind an optional semantics hook.", - "terms": [ - "option" - ] - }, - { - "id": 310, - "name": "promptResult", - "qualified_name": "mcp.promptResult", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Enables prompt handlers to generate consistent user message responses from plain strings.", - "reason": "Enables prompt handlers to generate consistent user message responses from plain strings.", - "terms": [ - "user" - ] - }, - { - "id": 400, - "name": "graphEdgeKindsParam", - "qualified_name": "wikiserver.graphEdgeKindsParam", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "parse the optional edge_kinds filter for the Wiki graph API.", - "reason": "parse the optional edge_kinds filter for the Wiki graph API.", - "terms": [ - "option" - ] - }, - { - "id": 733, - "name": "definitionNameOrDefault", - "qualified_name": "treesitter.definitionNameOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize per-language symbol-name normalization behind an optional hook.", - "reason": "centralize per-language symbol-name normalization behind an optional hook.", - "terms": [ - "option" - ] - }, - { - "id": 734, - "name": "implementedTypesOrDefault", - "qualified_name": "treesitter.implementedTypesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize query-captured implements relationships behind an optional language hook.", - "reason": "centralize query-captured implements relationships behind an optional language hook.", - "terms": [ - "option" - ] - }, - { - "id": 737, - "name": "PackageEdgesFor", - "qualified_name": "treesitter.PackageEdgesFor", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let build/update orchestration reuse optional package-level enrichment hooks.", - "reason": "let build/update orchestration reuse optional package-level enrichment hooks.", - "terms": [ - "option" - ] - }, - { - "id": 1106, - "name": "New", - "qualified_name": "incremental.New", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "wire storage, parser, and optional configuration into a sync coordinator", - "reason": "wire storage, parser, and optional configuration into a sync coordinator", - "terms": [ - "option" - ] - }, - { - "id": 1120, - "name": "persistUnresolvedEdges", - "qualified_name": "incremental.persistUnresolvedEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental candidate maintenance optional for legacy/custom store implementations.", - "reason": "keep incremental candidate maintenance optional for legacy/custom store implementations.", - "terms": [ - "option" - ] - }, - { - "id": 288, - "name": "finalizeToolResult", - "qualified_name": "mcp.finalizeToolResult", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "normalize success strings and user-facing tool errors at one common handler exit path.", - "reason": "normalize success strings and user-facing tool errors at one common handler exit path.", - "terms": [ - "user" - ] - }, - { - "id": 591, - "name": "Query", - "qualified_name": "searchsql.PostgresBackend.Query", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Converts the user's search term into a prefix tsquery to find related nodes.", - "reason": "Converts the user's search term into a prefix tsquery to find related nodes.", - "terms": [ - "user" - ] - }, - { - "id": 1922, - "name": "toggleOpen", - "qualified_name": "toggleOpen", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "expand one tree row by fetching children only when the user opens that node.", - "reason": "expand one tree row by fetching children only when the user opens that node.", - "terms": [ - "user" - ] - }, - { - "id": 255, - "name": "search", - "qualified_name": "mcp.handlers.search", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "search graph nodes efficiently by keyword and optional path prefix filtering.", - "reason": "search graph nodes efficiently by keyword and optional path prefix filtering.", - "terms": [ - "option" - ] - }, - { - "id": 731, - "name": "callRewriterOrDefault", - "qualified_name": "treesitter.callRewriterOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep call rewriting optional so languages without call inference avoid boilerplate.", - "reason": "keep call rewriting optional so languages without call inference avoid boilerplate.", - "terms": [ - "option" - ] - }, - { - "id": 625, - "name": "Query", - "qualified_name": "searchsql.SQLiteBackend.Query", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "reason": "Converts the user's search term into a SQLite FTS prefix query to find nodes.", - "terms": [ - "user" - ] - }, - { - "id": 307, - "name": "promptLimitArg", - "qualified_name": "mcp.promptLimitArg", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "clamp the optional prompt limit argument to the handler's hard cap.", - "reason": "clamp the optional prompt limit argument to the handler's hard cap.", - "terms": [ - "option" - ] - }, - { - "id": 352, - "name": "handleTree", - "qualified_name": "wikiserver.Server.handleTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "reason": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "terms": [ - "option" - ] - }, - { - "id": 1785, - "name": "stripPythonQuotedString", - "qualified_name": "annotation.stripPythonQuotedString", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "accept docstrings with optional `r` or `u` prefixes without altering body content.", - "reason": "accept docstrings with optional `r` or `u` prefixes without altering body content.", - "terms": [ - "option" - ] - }, - { - "id": 287, - "name": "unwrapToolResultErr", - "qualified_name": "mcp.unwrapToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "terms": [ - "user" - ] - }, - { - "id": 604, - "name": "SanitizePostgresTSQuery", - "qualified_name": "searchsql.SanitizePostgresTSQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior.", - "reason": "translate free-form user input into a PostgreSQL tsquery that mirrors the SQLite prefix search behavior.", - "terms": [ - "user" - ] - }, - { - "id": 1865, - "name": "MatchIncludePaths", - "qualified_name": "pathspec.MatchIncludePaths", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "reason": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "terms": [ - "user" - ] - }, - { - "id": 67, - "name": "docsWikiOptions", - "qualified_name": "cli.docsWikiOptions", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options.", - "reason": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options.", - "terms": [ - "option" - ] - }, - { - "id": 136, - "name": "onceCleanup", - "qualified_name": "server.onceCleanup", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "reason": "guard optional runtime cleanup so signal, listener, and deferred paths may safely converge.", - "terms": [ - "option" - ] - }, - { - "id": 336, - "name": "WebhookHandlerConfig", - "qualified_name": "webhook.WebhookHandlerConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "reason": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "terms": [ - "option" - ] - }, - { - "id": 358, - "name": "handleRef", - "qualified_name": "wikiserver.Server.handleRef", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a ccg:// annotation reference to a Wiki target and optional graph node.", - "reason": "resolve a ccg:// annotation reference to a Wiki target and optional graph node.", - "terms": [ - "option" - ] - }, - { - "id": 463, - "name": "fetchOptions", - "qualified_name": "gitrepo.fetchOptions", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "reason": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "terms": [ - "option" - ] - }, - { - "id": 743, - "name": "EnrichDefinition", - "qualified_name": "treesitter.GoSemantics.EnrichDefinition", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "reason": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "terms": [ - "option" - ] - }, - { - "id": 280, - "name": "toolResultErr", - "qualified_name": "mcp.toolResultErr", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "preserve the MCP error response that should be returned to the user inside normal Go error flow.", - "reason": "preserve the MCP error response that should be returned to the user inside normal Go error flow.", - "terms": [ - "user" - ] - }, - { - "id": 851, - "name": "CallRewriter", - "qualified_name": "treesitter.RustSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "preserve exact trait path and optional concrete type information without changing generic walker logic.", - "reason": "preserve exact trait path and optional concrete type information without changing generic walker logic.", - "terms": [ - "option" - ] - } - ] - }, - "what refuses to read a file that sits outside the documentation directory": { - "corpus": 1901, - "terms": [ - { - "text": "refuses", - "in_reasons": 0 - }, - { - "text": "read", - "in_reasons": 81 - }, - { - "text": "file", - "in_reasons": 209 - }, - { - "text": "sits", - "in_reasons": 1 - }, - { - "text": "outside", - "in_reasons": 12 - }, - { - "text": "documentation", - "in_reasons": 10 - }, - { - "text": "directory", - "in_reasons": 22 - } + "what makes the order files are parsed the same on every build": [ + 10, + 81, + 119, + 121, + 122, + 147, + 150, + 152, + 170, + 183, + 192, + 193, + 207, + 222, + 248, + 249, + 250, + 274, + 277, + 281, + 285, + 299, + 307, + 311, + 323, + 330, + 333, + 339, + 346, + 352, + 359, + 362, + 367, + 394, + 395, + 397, + 399, + 400, + 402, + 404, + 405, + 409, + 435, + 436, + 441, + 459, + 460, + 464, + 465, + 468, + 478, + 489, + 493, + 501, + 502, + 513, + 515, + 525, + 533, + 535, + 539, + 542, + 543, + 572, + 574, + 587, + 609, + 612, + 613, + 614, + 615, + 616, + 618, + 620, + 625, + 628, + 632, + 634, + 642, + 647, + 655, + 657, + 666, + 682, + 687, + 717, + 721, + 734, + 766, + 784, + 808, + 820, + 821, + 827, + 828, + 839, + 842, + 848, + 855, + 861, + 862, + 863, + 867, + 870, + 871, + 873, + 874, + 877, + 891, + 911, + 914, + 918, + 956, + 958, + 959, + 974, + 977, + 979, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1021, + 1023, + 1029, + 1030, + 1042, + 1043, + 1046, + 1052, + 1053, + 1054, + 1055, + 1057, + 1059, + 1060, + 1061, + 1065, + 1068, + 1070, + 1078, + 1081, + 1082, + 1086, + 1099, + 1100, + 1101, + 1102, + 1103, + 1117, + 1118, + 1120, + 1127, + 1130, + 1148, + 1150, + 1156, + 1160, + 1168, + 1171, + 1174, + 1176, + 1180, + 1188, + 1234, + 1243, + 1245, + 1246, + 1247, + 1249, + 1251, + 1252, + 1254, + 1256, + 1257, + 1258, + 1259, + 1263, + 1264, + 1266, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 1287, + 1290, + 1293, + 1296, + 1297, + 1301, + 1302, + 1303, + 1304, + 1305, + 1307, + 1308, + 1313, + 1314, + 1315, + 1318, + 1324, + 1326, + 1330, + 1333, + 1334, + 1335, + 1336, + 1342, + 1343, + 1346, + 1347, + 1353, + 1354, + 1357, + 1358, + 1359, + 1360, + 1368, + 1373, + 1374, + 1377, + 1378, + 1379, + 1380, + 1383, + 1384, + 1389, + 1390, + 1394, + 1399, + 1417, + 1420, + 1421, + 1446, + 1449, + 1469, + 1488, + 1490, + 1492, + 1493, + 1494, + 1495, + 1496, + 1497, + 1501, + 1507, + 1518, + 1519, + 1523, + 1526, + 1530, + 1534, + 1535, + 1537, + 1541, + 1553, + 1555, + 1558, + 1561, + 1563, + 1564, + 1566, + 1570, + 1579, + 1580, + 1581, + 1586, + 1587, + 1591, + 1592, + 1599, + 1603, + 1608, + 1615, + 1617, + 1618, + 1622, + 1623, + 1636, + 1645, + 1648, + 1650, + 1651, + 1652, + 1657, + 1662, + 1756, + 1768, + 1794, + 1820, + 1836, + 1842, + 1847, + 1868, + 1884, + 1893 ], - "hits": [ - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "read", - "file", - "documentation" - ] - }, - { - "id": 219, - "name": "ragIndexRoot", - "qualified_name": "mcp.handlers.ragIndexRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "terms": [ - "documentation", - "directory" - ] - }, - { - "id": 196, - "name": "validateRepoRootWithin", - "qualified_name": "mcp.validateRepoRootWithin", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "reason": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "terms": [ - "read", - "outside" - ] - }, - { - "id": 1057, - "name": "RootedFiles", - "qualified_name": "docs.RootedFiles", - "kind": "type", - "file_path": "internal/app/docs/ports.go", - "intent": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "reason": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "terms": [ - "file", - "outside" - ] - }, - { - "id": 364, - "name": "resolveDocPath", - "qualified_name": "wikiserver.Server.resolveDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "terms": [ - "read", - "file", - "directory" - ] - }, - { - "id": 1355, - "name": "filterExistingStateByInclude", - "qualified_name": "workflow.filterExistingStateByInclude", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "terms": [ - "file", - "outside" - ] - }, - { - "id": 685, - "name": "nodeImportPathsForPath", - "qualified_name": "treesitter.nodeImportPathsForPath", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "register both directory package nodes and file-level alias nodes for Node ecosystem imports.", - "reason": "register both directory package nodes and file-level alias nodes for Node ecosystem imports.", - "terms": [ - "file", - "directory" - ] - }, - { - "id": 1655, - "name": "ensureFile", - "qualified_name": "wiki.treeState.ensureFile", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "create a file node under its package when available, otherwise under its directory folder.", - "reason": "create a file node under its package when available, otherwise under its directory folder.", - "terms": [ - "file", - "directory" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "documentation" - ] - }, - { - "id": 1787, - "name": "stripLinePrefix", - "qualified_name": "annotation.stripLinePrefix", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize individual documentation lines across language comment syntaxes", - "reason": "normalize individual documentation lines across language comment syntaxes", - "terms": [ - "documentation" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "documentation" - ] - }, - { - "id": 1944, - "name": "DocResponse", - "qualified_name": "DocResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return generated Markdown content for one documentation path.", - "reason": "return generated Markdown content for one documentation path.", - "terms": [ - "documentation" - ] - }, - { - "id": 663, - "name": "DiscoverPackages", - "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "reason": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "terms": [ - "file", - "directory" - ] - }, - { - "id": 1543, - "name": "page", - "qualified_name": "evidence.page", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "bound an answer by files, so paging through it never lands a reader mid-file.", - "reason": "bound an answer by files, so paging through it never lands a reader mid-file.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "outside" - ] - }, - { - "id": 666, - "name": "DiscoverPackages", - "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "reason": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "terms": [ - "file", - "directory" - ] - }, - { - "id": 322, - "name": "docsTools", - "qualified_name": "mcp.docsTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_docs.go", - "intent": "keep documentation retrieval flows discoverable as one MCP tool family.", - "reason": "keep documentation retrieval flows discoverable as one MCP tool family.", - "terms": [ - "documentation" - ] - }, - { - "id": 1783, - "name": "stripBlockDelimiters", - "qualified_name": "annotation.stripBlockDelimiters", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "keep only the inner documentation payload from block-style comments", - "reason": "keep only the inner documentation payload from block-style comments", - "terms": [ - "documentation" - ] - }, - { - "id": 381, - "name": "readDocFile", - "qualified_name": "wikiserver.readDocFile", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce generated doc size limits and read the resolved Markdown file.", - "reason": "enforce generated doc size limits and read the resolved Markdown file.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1321, - "name": "GetNodesByFiles", - "qualified_name": "workflow.buildResolveLookup.GetNodesByFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "measure file-node store reads while preserving the resolver lookup contract.", - "reason": "measure file-node store reads while preserving the resolver lookup contract.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 296, - "name": "resolveNamespacePath", - "qualified_name": "mcp.handlers.resolveNamespacePath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "reason": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 429, - "name": "LoadWikiIndex", - "qualified_name": "contentfiles.LoadWikiIndex", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "round-trip compatibility fixtures and fallback readers through the outbound file adapter.", - "reason": "round-trip compatibility fixtures and fallback readers through the outbound file adapter.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1533, - "name": "HitCount", - "qualified_name": "evidence.File.HitCount", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let a caller weigh a file before reading any of its hits.", - "reason": "let a caller weigh a file before reading any of its hits.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 222, - "name": "safePathUnderRoot", - "qualified_name": "mcp.safePathUnderRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "reject relative paths that would resolve outside the resolved docs root.", - "reason": "reject relative paths that would resolve outside the resolved docs root.", - "terms": [ - "outside" - ] - }, - { - "id": 1623, - "name": "FileGroup", - "qualified_name": "wire.FileGroup", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller choose between files, then read inside the one it chose.", - "reason": "let a caller choose between files, then read inside the one it chose.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 435, - "name": "validateBaseRef", - "qualified_name": "gitexec.validateBaseRef", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag.", - "reason": "block git argument injection through the caller-supplied base ref, which sits\nbefore the \"--\" separator and would otherwise be interpreted as a diff flag.", - "terms": [ - "sits" - ] - }, - { - "id": 409, - "name": "resolveExistingDir", - "qualified_name": "wikiserver.resolveExistingDir", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve and validate an existing static asset directory.", - "reason": "resolve and validate an existing static asset directory.", - "terms": [ - "directory" - ] - }, - { - "id": 894, - "name": "collectComments", - "qualified_name": "treesitter.Walker.collectComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep documentation comments together so binders can attach them as a single unit", - "reason": "keep documentation comments together so binders can attach them as a single unit", - "terms": [ - "documentation" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1542, - "name": "groupByFile", - "qualified_name": "evidence.groupByFile", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "turn a ranked list of declarations into a ranked list of files to read.", - "reason": "turn a ranked list of declarations into a ranked list of files to read.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1269, - "name": "explicitOwnerShortNameCandidates", - "qualified_name": "resolve.explicitOwnerShortNameCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "terms": [ - "outside" - ] - }, - { - "id": 1307, - "name": "Build", - "qualified_name": "workflow.Service.Build", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "perform a full graph build from the specified directory.", - "reason": "perform a full graph build from the specified directory.", - "terms": [ - "directory" - ] - }, - { - "id": 108, - "name": "printEvidenceList", - "qualified_name": "cli.printEvidenceList", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "let a reader see why each result is in the list without opening the file.", - "reason": "let a reader see why each result is in the list without opening the file.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1028, - "name": "declarationsOf", - "qualified_name": "describe.Service.declarationsOf", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "hand back a file's contents in the order a reader would scroll through them.", - "reason": "hand back a file's contents in the order a reader would scroll through them.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 1427, - "name": "canBuildForUpdate", - "qualified_name": "workflow.Service.canBuildForUpdate", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prevent partial non-replacing updates from deleting graph data outside their include paths.", - "reason": "prevent partial non-replacing updates from deleting graph data outside their include paths.", - "terms": [ - "outside" - ] - }, - { - "id": 1877, - "name": "RunHTTP", - "qualified_name": "remote.RunHTTP", - "kind": "function", - "file_path": "internal/runtime/remote/http.go", - "intent": "keep all remote runtime construction outside inbound adapters and the local ccg binary.", - "reason": "keep all remote runtime construction outside inbound adapters and the local ccg binary.", - "terms": [ - "outside" - ] - }, - { - "id": 92, - "name": "resolveMigrationsDir", - "qualified_name": "cli.resolveMigrationsDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "resolve migration directory precedence between flag, config, and environment defaults.", - "reason": "resolve migration directory precedence between flag, config, and environment defaults.", - "terms": [ - "directory" - ] - }, - { - "id": 1396, - "name": "addUnchangedPeersForAddedFiles", - "qualified_name": "workflow.addUnchangedPeersForAddedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "reason": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "terms": [ - "directory" - ] - }, - { - "id": 1538, - "name": "Build", - "qualified_name": "evidence.Build", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "give a reader or an agent a file list where every line states why it is there.", - "reason": "give a reader or an agent a file list where every line states why it is there.", - "terms": [ - "read", - "file" - ] - }, - { - "id": 69, - "name": "resolveRagIndexDir", - "qualified_name": "cli.resolveRagIndexDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep docs-generated Wiki output aligned with the configured index directory.", - "reason": "keep docs-generated Wiki output aligned with the configured index directory.", - "terms": [ - "directory" - ] - }, - { - "id": 1548, - "name": "FieldsLower", - "qualified_name": "identtoken.FieldsLower", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "read a document the same way the query is read.", - "reason": "read a document the same way the query is read.", - "terms": [ - "read" - ] - }, - { - "id": 345, - "name": "Config", - "qualified_name": "wikiserver.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data.", - "reason": "keep Wiki UI serving outside the ccg binary while letting ccg-server expose docs/RAG data.", - "terms": [ - "outside" - ] - }, - { - "id": 1294, - "name": "rustTopLevelAsIndex", - "qualified_name": "resolve.rustTopLevelAsIndex", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "split concrete and trait types only when the separator is outside nested generic or tuple syntax.", - "reason": "split concrete and trait types only when the separator is outside nested generic or tuple syntax.", - "terms": [ - "outside" - ] - }, - { - "id": 1462, - "name": "normalizeRepoPath", - "qualified_name": "reposync.normalizeRepoPath", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL.", - "reason": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL.", - "terms": [ - "outside" - ] - }, - { - "id": 1865, - "name": "MatchIncludePaths", - "qualified_name": "pathspec.MatchIncludePaths", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "reason": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "terms": [ - "outside" - ] - }, - { - "id": 350, - "name": "safeStaticPath", - "qualified_name": "wikiserver.Server.safeStaticPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a request path under the static dist directory without allowing traversal.", - "reason": "resolve a request path under the static dist directory without allowing traversal.", - "terms": [ - "directory" - ] - }, - { - "id": 676, - "name": "nodePackageDiscoveryConfig", - "qualified_name": "treesitter.nodePackageDiscoveryConfig", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "reason": "share package.json and tsconfig-based directory discovery across TypeScript and JavaScript.", - "terms": [ - "directory" - ] - }, - { - "id": 347, - "name": "New", - "qualified_name": "wikiserver.New", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "reason": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "terms": [ - "directory" - ] - }, - { - "id": 423, - "name": "syncDir", - "qualified_name": "contentfiles.syncDir", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "reason": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "terms": [ - "directory" - ] - }, - { - "id": 1178, - "name": "NewImportFileIndex", - "qualified_name": "resolve.NewImportFileIndex", - "kind": "function", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "share the exact-directory and longest-suffix import policy across build and staged update resolution.", - "reason": "share the exact-directory and longest-suffix import policy across build and staged update resolution.", - "terms": [ - "directory" - ] - } - ] - }, - "what stops one repository from filling a result that covers several": { - "corpus": 1901, - "terms": [ - { - "text": "stops", - "in_reasons": 1 - }, - { - "text": "one", - "in_reasons": 192 - }, - { - "text": "repository", - "in_reasons": 77 - }, - { - "text": "filling", - "in_reasons": 0 - }, - { - "text": "result", - "in_reasons": 62 - }, - { - "text": "covers", - "in_reasons": 1 - }, - { - "text": "several", - "in_reasons": 5 - } + "what prevents a user supplied revision from being treated as a command option": [ + 1, + 9, + 20, + 22, + 67, + 88, + 126, + 154, + 205, + 234, + 237, + 241, + 242, + 259, + 264, + 280, + 297, + 304, + 347, + 367, + 379, + 381, + 409, + 458, + 534, + 547, + 573, + 676, + 678, + 679, + 681, + 682, + 688, + 730, + 756, + 796, + 817, + 879, + 1050, + 1061, + 1066, + 1105, + 1121, + 1276, + 1482, + 1562, + 1734, + 1779, + 1791, + 1818, + 1831, + 1843, + 1870, + 1895 ], - "hits": [ - { - "id": 1591, - "name": "scoreTargets", - "qualified_name": "rank.scoreTargets", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score one query against several spellings of the same node.", - "reason": "score one query against several spellings of the same node.", - "terms": [ - "one", - "several" - ] - }, - { - "id": 256, - "name": "searchFederated", - "qualified_name": "mcp.handlers.searchFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "one", - "several" - ] - }, - { - "id": 266, - "name": "listGraphStatsFederated", - "qualified_name": "mcp.handlers.listGraphStatsFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "give one call visibility over several repositories without merging their counts.", - "reason": "give one call visibility over several repositories without merging their counts.", - "terms": [ - "one", - "several" - ] - }, - { - "id": 1611, - "name": "SearchFederated", - "qualified_name": "search.Service.SearchFederated", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "one", - "several" - ] - }, - { - "id": 466, - "name": "outgoingEdgeCount", - "qualified_name": "graphgorm.outgoingEdgeCount", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/changes.go", - "intent": "carry one grouped edge-count projection from GORM into the change-risk repository result.", - "reason": "carry one grouped edge-count projection from GORM into the change-risk repository result.", - "terms": [ - "one", - "repository", - "result" - ] - }, - { - "id": 80, - "name": "lintRuleMatches", - "qualified_name": "cli.lintRuleMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "determine if a single ignore rule covers a specific lint finding", - "reason": "determine if a single ignore rule covers a specific lint finding", - "terms": [ - "covers" - ] - }, - { - "id": 157, - "name": "Close", - "qualified_name": "mcp.Cache.Close", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", - "reason": "Safely stops the cleanup goroutine when the cache is no longer used.", - "terms": [ - "stops" - ] - }, - { - "id": 1075, - "name": "Binding", - "qualified_name": "binding.Binding", - "kind": "class", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "represent the result of associating one comment block with one graph node", - "reason": "represent the result of associating one comment block with one graph node", - "terms": [ - "one", - "result" - ] - }, - { - "id": 476, - "name": "GetNodesByIDs", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodesByIDs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "load result nodes for cross-namespace traversals in one query.", - "reason": "load result nodes for cross-namespace traversals in one query.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 472, - "name": "GetEdgesFromNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFromNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "expand traversal frontiers across repository boundaries in one query pair.", - "reason": "expand traversal frontiers across repository boundaries in one query pair.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 541, - "name": "WithTx", - "qualified_name": "graphgorm.Store.WithTx", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "allow multiple repository operations to run atomically as one unit.", - "reason": "allow multiple repository operations to run atomically as one unit.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 1940, - "name": "RetrieveResult", - "qualified_name": "RetrieveResult", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "represent one DB-backed retrieval result with structured graph and annotation evidence.", - "reason": "represent one DB-backed retrieval result with structured graph and annotation evidence.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 574, - "name": "Update", - "qualified_name": "reposyncgraph.Updater.Update", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "reason": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 109, - "name": "matchedLabels", - "qualified_name": "cli.matchedLabels", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "name the parts of a result the query touched, in one glanceable token.", - "reason": "name the parts of a result the query touched, in one glanceable token.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 1317, - "name": "newBuildResolveLookup", - "qualified_name": "workflow.newBuildResolveLookup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "share immutable import file-node results across all resolver chunks in one build.", - "reason": "share immutable import file-node results across all resolver chunks in one build.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 1820, - "name": "Intent", - "qualified_name": "graph.Node.Intent", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "give search one line of author-written purpose to show beside a result.", - "reason": "give search one line of author-written purpose to show beside a result.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 1878, - "name": "buildRepoSyncHTTP", - "qualified_name": "remote.buildRepoSyncHTTP", - "kind": "function", - "file_path": "internal/runtime/remote/http.go", - "intent": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook.", - "reason": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 277, - "name": "requestNamespaces", - "qualified_name": "mcp.requestNamespaces", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "reason": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "terms": [ - "several" - ] - }, - { - "id": 1500, - "name": "recentRepoStatsLocked", - "qualified_name": "reposync.SyncQueue.recentRepoStatsLocked", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "merge queued payload state with historical success and failure data for one repository summary.", - "reason": "merge queued payload state with historical success and failure data for one repository summary.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 287, - "name": "unwrapToolResultErr", - "qualified_name": "mcp.unwrapToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "terms": [ - "one", - "result" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1459, - "name": "match", - "qualified_name": "reposync.allowRule.match", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "apply one compiled allow or deny pattern to a repository full name during filter evaluation.", - "reason": "apply one compiled allow or deny pattern to a repository full name during filter evaluation.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1510, - "name": "repoStatEntry", - "qualified_name": "reposync.repoStatEntry", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map.", - "reason": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1469, - "name": "BuildScopeLoader", - "qualified_name": "reposync.BuildScopeLoader", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "separate repository config file parsing from repository sync orchestration.", - "reason": "separate repository config file parsing from repository sync orchestration.", - "terms": [ - "repository" - ] - }, - { - "id": 1544, - "name": "pagePerNamespace", - "qualified_name": "evidence.pagePerNamespace", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "reason": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "terms": [ - "one", - "repository" - ] - }, - { - "id": 1256, - "name": "appendUniqueNode", - "qualified_name": "resolve.appendUniqueNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "prevent duplicate nodes in resolution result sets.", - "reason": "prevent duplicate nodes in resolution result sets.", - "terms": [ - "result" - ] - }, - { - "id": 1915, - "name": "runSearch", - "qualified_name": "runSearch", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "update search results for the active namespace.", - "reason": "update search results for the active namespace.", - "terms": [ - "result" - ] - }, - { - "id": 224, - "name": "graphFlowInfo", - "qualified_name": "mcp.graphFlowInfo", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "serialize listFlows results with the legacy response shape.", - "reason": "serialize listFlows results with the legacy response shape.", - "terms": [ - "result" - ] - }, - { - "id": 1257, - "name": "uniqueNodes", - "qualified_name": "resolve.uniqueNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "deduplicate result sets before further processing or resolution.", - "reason": "deduplicate result sets before further processing or resolution.", - "terms": [ - "result" - ] - }, - { - "id": 1384, - "name": "mergeLanguagePackages", - "qualified_name": "workflow.mergeLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "consolidate package discovery results while discarding conflicting definitions.", - "reason": "consolidate package discovery results while discarding conflicting definitions.", - "terms": [ - "result" - ] - }, - { - "id": 248, - "name": "queryGraphResultItem", - "qualified_name": "mcp.queryGraphResultItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable DTO for paged graph traversal results.", - "reason": "preserve a stable DTO for paged graph traversal results.", - "terms": [ - "result" - ] - }, - { - "id": 517, - "name": "UpsertNodes", - "qualified_name": "graphgorm.Store.UpsertNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply parsed result nodes in bulk without creating duplicates.", - "reason": "apply parsed result nodes in bulk without creating duplicates.", - "terms": [ - "result" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "result" - ] - }, - { - "id": 1228, - "name": "uniqueFileNodes", - "qualified_name": "resolve.uniqueFileNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "identify distinct files in a set of result nodes.", - "reason": "identify distinct files in a set of result nodes.", - "terms": [ - "result" - ] - }, - { - "id": 1463, - "name": "buildCloneURL", - "qualified_name": "reposync.buildCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "reason": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "terms": [ - "result" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "result" - ] - }, - { - "id": 455, - "name": "lockFileName", - "qualified_name": "gitrepo.lockFileName", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "convert repository names into stable lock-safe filenames.", - "reason": "convert repository names into stable lock-safe filenames.", - "terms": [ - "repository" - ] - }, - { - "id": 187, - "name": "detectChangesEntry", - "qualified_name": "mcp.detectChangesEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable per-item DTO for detectChanges pagination results.", - "reason": "preserve a stable per-item DTO for detectChanges pagination results.", - "terms": [ - "result" - ] - }, - { - "id": 433, - "name": "ChangedFiles", - "qualified_name": "gitexec.ExecGitClient.ChangedFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "identify which repository paths changed since a base revision", - "reason": "identify which repository paths changed since a base revision", - "terms": [ - "repository" - ] - }, - { - "id": 499, - "name": "NodesByExactName", - "qualified_name": "graphgorm.Store.NodesByExactName", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "support exact-name fallback suggestions through the analysis repository.", - "reason": "support exact-name fallback suggestions through the analysis repository.", - "terms": [ - "repository" - ] - }, - { - "id": 578, - "name": "LogArgs", - "qualified_name": "reposyncobs.Hooks.LogArgs", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "preserve trace correlation fields on repository sync queue logs.", - "reason": "preserve trace correlation fields on repository sync queue logs.", - "terms": [ - "repository" - ] - }, - { - "id": 1444, - "name": "ExtractNamespace", - "qualified_name": "reposync.ExtractNamespace", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "preserve repository-backed namespace compatibility while removing owner segments.", - "reason": "preserve repository-backed namespace compatibility while removing owner segments.", - "terms": [ - "repository" - ] - }, - { - "id": 1471, - "name": "UpdateStats", - "qualified_name": "reposync.UpdateStats", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "report only update counts needed by repository sync observability.", - "reason": "report only update counts needed by repository sync observability.", - "terms": [ - "repository" - ] - }, - { - "id": 1513, - "name": "recentRepoActivityTime", - "qualified_name": "reposync.recentRepoActivityTime", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "derive a comparable activity timestamp for sorting repository summaries.", - "reason": "derive a comparable activity timestamp for sorting repository summaries.", - "terms": [ - "repository" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "repository" - ] - }, - { - "id": 155, - "name": "Set", - "qualified_name": "mcp.Cache.Set", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Stores read-tool results in the cache with the configured TTL.", - "reason": "Stores read-tool results in the cache with the configured TTL.", - "terms": [ - "result" - ] - }, - { - "id": 156, - "name": "Flush", - "qualified_name": "mcp.Cache.Flush", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Invalidates all cached read results after a graph or index update.", - "reason": "Invalidates all cached read results after a graph or index update.", - "terms": [ - "result" - ] - }, - { - "id": 589, - "name": "resultRow", - "qualified_name": "searchsql.resultRow", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "decode the single-column tsquery result before joining back to nodes.", - "reason": "decode the single-column tsquery result before joining back to nodes.", - "terms": [ - "result" - ] - } - ] - }, - "what stops the server accepting new work": { - "corpus": 1901, - "terms": [ - { - "text": "stops", - "in_reasons": 1 - }, - { - "text": "server", - "in_reasons": 34 - }, - { - "text": "accepting", - "in_reasons": 0 - }, - { - "text": "new", - "in_reasons": 12 - }, - { - "text": "work", - "in_reasons": 47 - } + "what refuses to read a file that sits outside the documentation directory": [ + 11, + 45, + 61, + 87, + 98, + 101, + 102, + 103, + 107, + 110, + 111, + 121, + 123, + 125, + 134, + 147, + 150, + 151, + 158, + 163, + 164, + 168, + 169, + 170, + 173, + 192, + 201, + 225, + 229, + 230, + 240, + 248, + 249, + 250, + 251, + 271, + 275, + 290, + 292, + 295, + 300, + 301, + 303, + 309, + 311, + 314, + 328, + 334, + 336, + 343, + 346, + 352, + 356, + 364, + 365, + 367, + 370, + 371, + 375, + 378, + 380, + 381, + 394, + 397, + 398, + 399, + 400, + 401, + 407, + 414, + 415, + 426, + 433, + 437, + 444, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 483, + 501, + 502, + 510, + 512, + 514, + 515, + 536, + 596, + 603, + 604, + 609, + 612, + 613, + 614, + 615, + 616, + 618, + 619, + 620, + 622, + 625, + 631, + 632, + 634, + 642, + 646, + 647, + 658, + 665, + 669, + 670, + 687, + 721, + 786, + 819, + 823, + 829, + 841, + 855, + 863, + 869, + 885, + 888, + 890, + 892, + 896, + 905, + 937, + 941, + 961, + 965, + 968, + 974, + 984, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1032, + 1036, + 1038, + 1042, + 1043, + 1046, + 1049, + 1053, + 1054, + 1055, + 1059, + 1060, + 1062, + 1065, + 1068, + 1069, + 1071, + 1077, + 1078, + 1081, + 1085, + 1089, + 1097, + 1109, + 1120, + 1126, + 1127, + 1128, + 1131, + 1136, + 1137, + 1138, + 1139, + 1142, + 1153, + 1156, + 1160, + 1161, + 1169, + 1171, + 1172, + 1173, + 1174, + 1176, + 1180, + 1191, + 1217, + 1234, + 1242, + 1246, + 1248, + 1249, + 1253, + 1254, + 1256, + 1257, + 1258, + 1259, + 1263, + 1264, + 1265, + 1267, + 1268, + 1269, + 1270, + 1273, + 1278, + 1285, + 1286, + 1287, + 1290, + 1292, + 1294, + 1295, + 1296, + 1300, + 1301, + 1302, + 1303, + 1320, + 1324, + 1325, + 1326, + 1329, + 1333, + 1334, + 1336, + 1339, + 1340, + 1341, + 1351, + 1353, + 1356, + 1358, + 1366, + 1369, + 1372, + 1373, + 1374, + 1376, + 1378, + 1379, + 1380, + 1410, + 1422, + 1423, + 1461, + 1469, + 1475, + 1476, + 1483, + 1484, + 1485, + 1488, + 1490, + 1495, + 1496, + 1501, + 1506, + 1514, + 1534, + 1545, + 1558, + 1560, + 1570, + 1577, + 1582, + 1587, + 1588, + 1589, + 1593, + 1594, + 1595, + 1596, + 1599, + 1602, + 1603, + 1604, + 1608, + 1613, + 1614, + 1618, + 1620, + 1636, + 1648, + 1663, + 1664, + 1732, + 1736, + 1737, + 1739, + 1767, + 1769, + 1770, + 1791, + 1794, + 1818, + 1828, + 1839, + 1841, + 1842, + 1851, + 1864, + 1866, + 1877, + 1891, + 1906 ], - "hits": [ - { - "id": 1493, - "name": "NewSyncQueueWithContext", - "qualified_name": "reposync.NewSyncQueueWithContext", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "allow server shutdown to cancel retries and worker waits cleanly.", - "reason": "allow server shutdown to cancel retries and worker waits cleanly.", - "terms": [ - "server", - "work" - ] - }, - { - "id": 157, - "name": "Close", - "qualified_name": "mcp.Cache.Close", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", - "reason": "Safely stops the cleanup goroutine when the cache is no longer used.", - "terms": [ - "stops" - ] - }, - { - "id": 127, - "name": "DefaultConfig", - "qualified_name": "server.DefaultConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "centralize default server flag values for ccg-server.", - "reason": "centralize default server flag values for ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1502, - "name": "worker", - "qualified_name": "reposync.SyncQueue.worker", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "run the main worker loop that drains deduplicated repository work items.", - "reason": "run the main worker loop that drains deduplicated repository work items.", - "terms": [ - "work" - ] - }, - { - "id": 304, - "name": "onboardDeveloper", - "qualified_name": "mcp.promptHandlers.onboardDeveloper", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "reason": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "terms": [ - "new" - ] - }, - { - "id": 332, - "name": "registerTools", - "qualified_name": "mcp.registerTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_register.go", - "intent": "centralize tool registration order so new tool families plug into one startup path.", - "reason": "centralize tool registration order so new tool families plug into one startup path.", - "terms": [ - "new" - ] - }, - { - "id": 1433, - "name": "replayUnresolvedEdgesForAddedFiles", - "qualified_name": "workflow.replayUnresolvedEdgesForAddedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "replace graph-wide reparsing with reverse-index-driven edge reconciliation for new packages.", - "reason": "replace graph-wide reparsing with reverse-index-driven edge reconciliation for new packages.", - "terms": [ - "new" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "work" - ] - }, - { - "id": 470, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.Store.CrossNamespaceReader", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "derive the cross-repository read surface from an existing store without new wiring inputs.", - "reason": "derive the cross-repository read surface from an existing store without new wiring inputs.", - "terms": [ - "new" - ] - }, - { - "id": 62, - "name": "parseLogLevel", - "qualified_name": "main.parseLogLevel", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "normalize server log-level input consistently with ccg.", - "reason": "normalize server log-level input consistently with ccg.", - "terms": [ - "server" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "new" - ] - }, - { - "id": 1121, - "name": "resolveParser", - "qualified_name": "incremental.Syncer.resolveParser", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "reason": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "terms": [ - "new" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "new" - ] - }, - { - "id": 1426, - "name": "buildForUpdate", - "qualified_name": "workflow.Service.buildForUpdate", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "use the faster full-build write path for new packages without changing the Update result contract.", - "reason": "use the faster full-build write path for new packages without changing the Update result contract.", - "terms": [ - "new" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "server" - ] - }, - { - "id": 1856, - "name": "ServerSpan", - "qualified_name": "obs.ServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "reason": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "terms": [ - "server" - ] - }, - { - "id": 1947, - "name": "ContextResponse", - "qualified_name": "ContextResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return a server-assembled Markdown bundle for selected docs.", - "reason": "return a server-assembled Markdown bundle for selected docs.", - "terms": [ - "server" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "new" - ] - }, - { - "id": 765, - "name": "extractGoAssertionConcrete", - "qualified_name": "treesitter.extractGoAssertionConcrete", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "keep concrete-type extraction in one place so new assertion shapes\nare easy to add without bloating goAssertionSpec.", - "reason": "keep concrete-type extraction in one place so new assertion shapes\nare easy to add without bloating goAssertionSpec.", - "terms": [ - "new" - ] - }, - { - "id": 1396, - "name": "addUnchangedPeersForAddedFiles", - "qualified_name": "workflow.addUnchangedPeersForAddedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "reason": "let existing-package additions stay incremental while signaling new package/directory additions that can affect unresolved external callers.", - "terms": [ - "new" - ] - }, - { - "id": 61, - "name": "newRootCmd", - "qualified_name": "main.newRootCmd", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "keep self-hosted server flags separate from the local ccg CLI.", - "reason": "keep self-hosted server flags separate from the local ccg CLI.", - "terms": [ - "server" - ] - }, - { - "id": 314, - "name": "registerPrompts", - "qualified_name": "mcp.registerPrompts", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts_register.go", - "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", - "reason": "package common review, onboarding, and debugging flows into reusable server prompts.", - "terms": [ - "server" - ] - }, - { - "id": 318, - "name": "analysisTools", - "qualified_name": "mcp.analysisTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_analysis.go", - "intent": "keep analysis capabilities grouped so server startup can expose them consistently.", - "reason": "keep analysis capabilities grouped so server startup can expose them consistently.", - "terms": [ - "server" - ] - }, - { - "id": 695, - "name": "workspacePatternMatchParts", - "qualified_name": "treesitter.workspacePatternMatchParts", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "implement **-aware workspace glob semantics for package root discovery.", - "reason": "implement **-aware workspace glob semantics for package root discovery.", - "terms": [ - "work" - ] - }, - { - "id": 1404, - "name": "encodeCachedParseRecord", - "qualified_name": "workflow.encodeCachedParseRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "keep cache persistence independent of workflow-internal record types.", - "reason": "keep cache persistence independent of workflow-internal record types.", - "terms": [ - "work" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "server" - ] - }, - { - "id": 130, - "name": "EnvInt", - "qualified_name": "server.EnvInt", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "provide env-based defaults for server flags without panicking on bad input.", - "reason": "provide env-based defaults for server flags without panicking on bad input.", - "terms": [ - "server" - ] - }, - { - "id": 320, - "name": "contextTools", - "qualified_name": "mcp.contextTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_context.go", - "intent": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "reason": "keep the context-oriented MCP surface grouped and reusable during server startup.", - "terms": [ - "server" - ] - }, - { - "id": 1932, - "name": "web/wiki/src/api.ts", - "qualified_name": "web/wiki/src/api.ts", - "kind": "file", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1933, - "name": "TreeNode", - "qualified_name": "TreeNode", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 572, - "name": "internal/adapters/outbound/reposyncgraph/updater.go", - "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", - "kind": "file", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "work" - ] - }, - { - "id": 573, - "name": "Updater", - "qualified_name": "reposyncgraph.Updater", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "work" - ] - }, - { - "id": 694, - "name": "workspacePatternMatch", - "qualified_name": "treesitter.workspacePatternMatch", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep workspace package discovery independent from shell-specific glob expansion.", - "reason": "keep workspace package discovery independent from shell-specific glob expansion.", - "terms": [ - "work" - ] - }, - { - "id": 1303, - "name": "add", - "qualified_name": "workflow.buildPersistBatch.add", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "accumulate work between flushes so persistence happens in bounded chunks.", - "reason": "accumulate work between flushes so persistence happens in bounded chunks.", - "terms": [ - "work" - ] - }, - { - "id": 1342, - "name": "shouldSkipDir", - "qualified_name": "workflow.shouldSkipDir", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep default source traversal exclusions local to the ingest workflow.", - "reason": "keep default source traversal exclusions local to the ingest workflow.", - "terms": [ - "work" - ] - }, - { - "id": 1491, - "name": "SyncQueue", - "qualified_name": "reposync.SyncQueue", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "coordinate deduplicated per-repository sync execution across a worker pool.", - "reason": "coordinate deduplicated per-repository sync execution across a worker pool.", - "terms": [ - "work" - ] - }, - { - "id": 161, - "name": "Parser", - "qualified_name": "mcp.Parser", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects an abstract parser to combine language-specific parsing implementations on the server.", - "reason": "Injects an abstract parser to combine language-specific parsing implementations on the server.", - "terms": [ - "server" - ] - }, - { - "id": 347, - "name": "New", - "qualified_name": "wikiserver.New", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "reason": "fail server startup early when --wiki-dir points at an unusable dist directory.", - "terms": [ - "server" - ] - }, - { - "id": 1497, - "name": "Shutdown", - "qualified_name": "reposync.SyncQueue.Shutdown", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "reason": "give the server a bounded, graceful shutdown path for in-flight webhook sync.", - "terms": [ - "server" - ] - }, - { - "id": 1871, - "name": "Instance", - "qualified_name": "mcpruntime.Instance", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "reason": "share MCP server construction while keeping stdio and HTTP transports in separate packages.", - "terms": [ - "server" - ] - }, - { - "id": 1880, - "name": "Runtime", - "qualified_name": "runtime.Runtime", - "kind": "class", - "file_path": "internal/runtime/runtime.go", - "intent": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "reason": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "terms": [ - "server" - ] - }, - { - "id": 1883, - "name": "Init", - "qualified_name": "runtime.Runtime.Init", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "reason": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1959, - "name": "buildContext", - "qualified_name": "buildContext", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "reason": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "terms": [ - "server" - ] - }, - { - "id": 690, - "name": "readPNPMWorkspacePatterns", - "qualified_name": "treesitter.readPNPMWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "include pnpm-managed workspace package roots in Node-family package discovery.", - "reason": "include pnpm-managed workspace package roots in Node-family package discovery.", - "terms": [ - "work" - ] - }, - { - "id": 692, - "name": "splitWorkspacePatterns", - "qualified_name": "treesitter.splitWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize npm/pnpm workspace pattern lists before matching concrete package roots.", - "reason": "normalize npm/pnpm workspace pattern lists before matching concrete package roots.", - "terms": [ - "work" - ] - }, - { - "id": 925, - "name": "sortRiskCandidates", - "qualified_name": "changes.sortRiskCandidates", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work.", - "reason": "preserve Analyze ordering for AnalyzePage while reducing page response allocation work.", - "terms": [ - "work" - ] - }, - { - "id": 1299, - "name": "buildParseInput", - "qualified_name": "workflow.buildParseInput", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "reason": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "terms": [ - "work" - ] - }, - { - "id": 1472, - "name": "GraphUpdater", - "qualified_name": "reposync.GraphUpdater", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "adapt repository sync to the ingest application without importing workflow types.", - "reason": "adapt repository sync to the ingest application without importing workflow types.", - "terms": [ - "work" - ] - }, - { - "id": 316, - "name": "NewServer", - "qualified_name": "mcp.NewServer", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/server.go", - "intent": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "reason": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "terms": [ - "server" - ] - }, - { - "id": 348, - "name": "StaticHandler", - "qualified_name": "wikiserver.Server.StaticHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "reason": "let ccg-server expose the Wiki UI without embedding frontend assets into the binary.", - "terms": [ - "server" - ] - } - ] - }, - "what stops two pushes for the same repository from building at the same time": { - "corpus": 1901, - "terms": [ - { - "text": "stops", - "in_reasons": 1 - }, - { - "text": "two", - "in_reasons": 3 - }, - { - "text": "pushes", - "in_reasons": 3 - }, - { - "text": "same", - "in_reasons": 55 - }, - { - "text": "repository", - "in_reasons": 77 - }, - { - "text": "building", - "in_reasons": 2 - }, - { - "text": "same", - "in_reasons": 55 - }, - { - "text": "time", - "in_reasons": 18 - } + "what stops one repository from filling a result that covers several": [ + 28, + 42, + 43, + 60, + 61, + 62, + 81, + 83, + 110, + 111, + 112, + 113, + 119, + 124, + 139, + 140, + 141, + 142, + 162, + 164, + 165, + 167, + 175, + 183, + 184, + 187, + 198, + 199, + 206, + 208, + 209, + 211, + 212, + 213, + 216, + 218, + 219, + 220, + 230, + 232, + 237, + 238, + 241, + 242, + 243, + 245, + 247, + 250, + 271, + 273, + 277, + 278, + 279, + 286, + 287, + 303, + 305, + 307, + 309, + 311, + 316, + 318, + 320, + 321, + 327, + 331, + 332, + 339, + 353, + 354, + 357, + 358, + 359, + 378, + 379, + 388, + 390, + 391, + 393, + 394, + 396, + 397, + 398, + 400, + 401, + 411, + 412, + 413, + 415, + 417, + 421, + 432, + 436, + 442, + 443, + 445, + 446, + 447, + 449, + 455, + 459, + 460, + 461, + 462, + 472, + 480, + 482, + 487, + 491, + 509, + 510, + 512, + 518, + 519, + 520, + 522, + 523, + 524, + 528, + 532, + 554, + 558, + 567, + 571, + 580, + 598, + 602, + 614, + 615, + 617, + 625, + 628, + 630, + 632, + 649, + 662, + 687, + 696, + 699, + 710, + 718, + 740, + 742, + 765, + 807, + 827, + 829, + 830, + 858, + 883, + 897, + 921, + 930, + 955, + 960, + 965, + 969, + 970, + 972, + 975, + 976, + 999, + 1020, + 1038, + 1039, + 1057, + 1058, + 1059, + 1099, + 1102, + 1111, + 1115, + 1122, + 1125, + 1126, + 1152, + 1176, + 1204, + 1205, + 1216, + 1253, + 1255, + 1264, + 1266, + 1292, + 1294, + 1297, + 1328, + 1345, + 1351, + 1358, + 1367, + 1368, + 1384, + 1385, + 1386, + 1390, + 1392, + 1393, + 1395, + 1398, + 1402, + 1407, + 1408, + 1409, + 1414, + 1421, + 1422, + 1424, + 1425, + 1426, + 1428, + 1441, + 1442, + 1443, + 1447, + 1448, + 1449, + 1453, + 1455, + 1457, + 1458, + 1459, + 1460, + 1461, + 1463, + 1464, + 1466, + 1468, + 1469, + 1470, + 1472, + 1476, + 1478, + 1486, + 1487, + 1489, + 1497, + 1498, + 1509, + 1512, + 1513, + 1515, + 1516, + 1517, + 1519, + 1524, + 1525, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1535, + 1536, + 1538, + 1541, + 1543, + 1546, + 1553, + 1556, + 1559, + 1563, + 1566, + 1570, + 1572, + 1573, + 1575, + 1576, + 1585, + 1587, + 1588, + 1591, + 1598, + 1605, + 1607, + 1612, + 1646, + 1648, + 1651, + 1653, + 1654, + 1658, + 1743, + 1754, + 1756, + 1768, + 1769, + 1770, + 1776, + 1796, + 1797, + 1821, + 1825, + 1829, + 1830, + 1832, + 1835, + 1839, + 1841, + 1850, + 1853, + 1858, + 1863, + 1864, + 1867, + 1870, + 1879, + 1880, + 1883, + 1887, + 1888, + 1889, + 1891, + 1892, + 1906 ], - "hits": [ - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "same", - "repository", - "same" - ] - }, - { - "id": 1616, - "name": "orderGroupedPool", - "qualified_name": "search.orderGroupedPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "give federated paging the same fixed prefix a single repository's paging has.", - "reason": "give federated paging the same fixed prefix a single repository's paging has.", - "terms": [ - "same", - "repository", - "same" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "same", - "repository", - "same" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "pushes", - "repository" - ] - }, - { - "id": 1513, - "name": "recentRepoActivityTime", - "qualified_name": "reposync.recentRepoActivityTime", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "derive a comparable activity timestamp for sorting repository summaries.", - "reason": "derive a comparable activity timestamp for sorting repository summaries.", - "terms": [ - "repository", - "time" - ] - }, - { - "id": 1704, - "name": "ConfigurePool", - "qualified_name": "db.ConfigurePool", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "apply connection-pool limits that match each database driver's concurrency model.", - "reason": "apply connection-pool limits that match each database driver's concurrency model.", - "terms": [ - "same", - "same", - "time" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "repository", - "time" - ] - }, - { - "id": 1505, - "name": "recordSuccess", - "qualified_name": "reposync.SyncQueue.recordSuccess", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "update the latest successful sync timestamps after a repository finishes cleanly.", - "reason": "update the latest successful sync timestamps after a repository finishes cleanly.", - "terms": [ - "repository", - "time" - ] - }, - { - "id": 1613, - "name": "fetch", - "qualified_name": "search.Service.fetch", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "reason": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 328, - "name": "withNamespaceParam", - "qualified_name": "mcp.withNamespaceParam", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_query.go", - "intent": "give every namespace-aware MCP tool the same isolation parameter.", - "reason": "give every namespace-aware MCP tool the same isolation parameter.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1135, - "name": "annotationBindingKey", - "qualified_name": "incremental.annotationBindingKey", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "disambiguate overloaded or repeated declarations sharing the same qualified name.", - "reason": "disambiguate overloaded or repeated declarations sharing the same qualified name.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1548, - "name": "FieldsLower", - "qualified_name": "identtoken.FieldsLower", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "read a document the same way the query is read.", - "reason": "read a document the same way the query is read.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1568, - "name": "parseGroups", - "qualified_name": "intentrank.parseGroups", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "score the same terms the index was asked to match.", - "reason": "score the same terms the index was asked to match.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1591, - "name": "scoreTargets", - "qualified_name": "rank.scoreTargets", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score one query against several spellings of the same node.", - "reason": "score one query against several spellings of the same node.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 712, - "name": "RelationshipSemantics", - "qualified_name": "treesitter.RelationshipSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages normalize query-captured relationships through the same definition path.", - "reason": "let languages normalize query-captured relationships through the same definition path.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 839, - "name": "AdditionalComments", - "qualified_name": "treesitter.PythonSemantics.AdditionalComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "surface docstrings through the same binder pipeline used for ordinary comments.", - "reason": "surface docstrings through the same binder pipeline used for ordinary comments.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 895, - "name": "acquireParser", - "qualified_name": "treesitter.Walker.acquireParser", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "amortize parser construction cost across many parses on the same language.", - "reason": "amortize parser construction cost across many parses on the same language.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 963, - "name": "RelatedNodesPage", - "qualified_name": "analyze.RelatedNodesPage", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep pagination totals coupled to the same namespace-scoped relationship query.", - "reason": "keep pagination totals coupled to the same namespace-scoped relationship query.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1032, - "name": "cleanTarget", - "qualified_name": "describe.cleanTarget", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "make \"./internal/app/\", \"internal/app\" and \"internal//app\" the same target.", - "reason": "make \"./internal/app/\", \"internal/app\" and \"internal//app\" the same target.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1240, - "name": "resolveSameReceiverCall", - "qualified_name": "resolve.resolveSameReceiverCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "optimize resolution of 'this' or same-receiver method calls in Go.", - "reason": "optimize resolution of 'this' or same-receiver method calls in Go.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 157, - "name": "Close", - "qualified_name": "mcp.Cache.Close", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", - "reason": "Safely stops the cleanup goroutine when the cache is no longer used.", - "terms": [ - "stops" - ] - }, - { - "id": 458, - "name": "CloneOrPullBranch", - "qualified_name": "gitrepo.CloneOrPullBranch", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "reuse the same repo sync path for first clone and subsequent updates.", - "reason": "reuse the same repo sync path for first clone and subsequent updates.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 459, - "name": "CloneOrPullBranchLocked", - "qualified_name": "gitrepo.CloneOrPullBranchLocked", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "reason": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 544, - "name": "SearchWriterFactory", - "qualified_name": "graphgorm.SearchWriterFactory", - "kind": "type", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "construct derived-state persistence with the same transaction handle as graph persistence.", - "reason": "construct derived-state persistence with the same transaction handle as graph persistence.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 776, - "name": "qualifySameFileTypeName", - "qualified_name": "treesitter.qualifySameFileTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "keep same-file TypeScript references aligned with the file's package context.", - "reason": "keep same-file TypeScript references aligned with the file's package context.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 821, - "name": "qualifyJVMReceiverTypeName", - "qualified_name": "treesitter.qualifyJVMReceiverTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "keep receiver rewriting and hierarchy edges on the same qualified type names.", - "reason": "keep receiver rewriting and hierarchy edges on the same qualified type names.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1296, - "name": "parsedBuildNodeBatch", - "qualified_name": "workflow.parsedBuildNodeBatch", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep node persistence and annotation binding aligned to the same source snapshot.", - "reason": "keep node persistence and annotation binding aligned to the same source snapshot.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1569, - "name": "count", - "qualified_name": "intentrank.group.count", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "measure one term's presence the same way the index matched it.", - "reason": "measure one term's presence the same way the index matched it.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1867, - "name": "normalizeIncludePath", - "qualified_name": "pathspec.normalizeIncludePath", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "guarantee comparisons treat \"./foo\", \"foo\", and \"foo/\" as the same logical path.", - "reason": "guarantee comparisons treat \"./foo\", \"foo\", and \"foo/\" as the same logical path.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 901, - "name": "appendUniqueInterfaces", - "qualified_name": "treesitter.appendUniqueInterfaces", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "avoid repeating package interface metadata when multiple query patterns capture the same interface.", - "reason": "avoid repeating package interface metadata when multiple query patterns capture the same interface.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1333, - "name": "mergeFilterResolvedDiagnostics", - "qualified_name": "workflow.mergeFilterResolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 906, - "name": "rangesOverlap", - "qualified_name": "treesitter.rangesOverlap", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "detect whether two symbol captures refer to overlapping source spans", - "reason": "detect whether two symbol captures refer to overlapping source spans", - "terms": [ - "two" - ] - }, - { - "id": 882, - "name": "ParseWithComments", - "qualified_name": "treesitter.Walker.ParseWithComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "produce the full parse result needed for graph building and annotation binding", - "reason": "produce the full parse result needed for graph building and annotation binding", - "terms": [ - "building" - ] - }, - { - "id": 1652, - "name": "treeState", - "qualified_name": "wiki.treeState", - "kind": "class", - "file_path": "internal/app/wiki/builder.go", - "intent": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "reason": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "terms": [ - "building" - ] - }, - { - "id": 386, - "name": "annotationDetailFromModel", - "qualified_name": "wikiserver.annotationDetailFromModel", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert a stored annotation into the same details shape used by wiki-index.json.", - "reason": "convert a stored annotation into the same details shape used by wiki-index.json.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 670, - "name": "rememberPackage", - "qualified_name": "treesitter.rememberPackage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "handle multiple declarations of the same import path by merging files or detecting inconsistencies.", - "reason": "handle multiple declarations of the same import path by merging files or detecting inconsistencies.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 789, - "name": "JavaScriptSemantics", - "qualified_name": "treesitter.JavaScriptSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript.", - "reason": "emit extends relationships for JavaScript classes using the same heritage parsing model as TypeScript.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1212, - "name": "indexByNameByFile", - "qualified_name": "resolve.indexByNameByFile", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "resolve bare name references when they occur in the same file as the caller.", - "reason": "resolve bare name references when they occur in the same file as the caller.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1286, - "name": "ResolveSameReceiverCall", - "qualified_name": "resolve.rustLanguageDispatch.ResolveSameReceiverCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "rely on the generic same-file fallback until Rust receiver-aware rewrites are needed.", - "reason": "rely on the generic same-file fallback until Rust receiver-aware rewrites are needed.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1540, - "name": "matchedSignals", - "qualified_name": "evidence.matchedSignals", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "state a candidate's evidence in the same terms the ranker ordered it by.", - "reason": "state a candidate's evidence in the same terms the ranker ordered it by.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1607, - "name": "Params", - "qualified_name": "search.Params", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "give MCP and the CLI the same request shape so their answers stay comparable.", - "reason": "give MCP and the CLI the same request shape so their answers stay comparable.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1639, - "name": "folderChildren", - "qualified_name": "wiki.Builder.folderChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list immediate folder children while allowing package nodes to replace same-path synthetic folders.", - "reason": "list immediate folder children while allowing package nodes to replace same-path synthetic folders.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 1627, - "name": "NewResponse", - "qualified_name": "wire.NewResponse", - "kind": "function", - "file_path": "internal/app/search/wire/wire.go", - "intent": "keep one conversion so no two search surfaces can drift apart.", - "reason": "keep one conversion so no two search surfaces can drift apart.", - "terms": [ - "two" - ] - }, - { - "id": 809, - "name": "ImplementedTypes", - "qualified_name": "treesitter.KotlinSemantics.ImplementedTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "keep declaration-time and query-time interface extraction aligned for Kotlin.", - "reason": "keep declaration-time and query-time interface extraction aligned for Kotlin.", - "terms": [ - "time" - ] - }, - { - "id": 271, - "name": "handlers", - "qualified_name": "mcp.handlers", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "reason": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "terms": [ - "same", - "same" - ] - }, - { - "id": 392, - "name": "nodeMarkdownChild", - "qualified_name": "wikiserver.nodeMarkdownChild", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render one fallback tree child in the same symbol-card Markdown shape as generated docs.", - "reason": "render one fallback tree child in the same symbol-card Markdown shape as generated docs.", - "terms": [ - "same", - "same" - ] - } - ] - }, - "where do search results get ranked": { - "corpus": 1901, - "terms": [ - { - "text": "search", - "in_reasons": 84 - }, - { - "text": "results", - "in_reasons": 27 - }, - { - "text": "get", - "in_reasons": 0 - }, - { - "text": "ranked", - "in_reasons": 8 - } + "what stops the server accepting new work": [ + 2, + 3, + 4, + 63, + 64, + 65, + 79, + 82, + 84, + 112, + 115, + 187, + 225, + 256, + 267, + 268, + 269, + 270, + 277, + 290, + 292, + 293, + 311, + 395, + 396, + 415, + 438, + 518, + 519, + 584, + 596, + 628, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 697, + 710, + 783, + 858, + 871, + 874, + 900, + 956, + 1059, + 1067, + 1081, + 1102, + 1109, + 1117, + 1119, + 1246, + 1247, + 1250, + 1259, + 1288, + 1317, + 1325, + 1340, + 1341, + 1348, + 1368, + 1375, + 1403, + 1425, + 1443, + 1445, + 1449, + 1450, + 1454, + 1455, + 1461, + 1462, + 1469, + 1497, + 1648, + 1651, + 1809, + 1822, + 1823, + 1826, + 1830, + 1833, + 1851, + 1855, + 1879, + 1880, + 1894, + 1906 ], - "hits": [ - { - "id": 1915, - "name": "runSearch", - "qualified_name": "runSearch", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "update search results for the active namespace.", - "reason": "update search results for the active namespace.", - "terms": [ - "search", - "results" - ] - }, - { - "id": 1553, - "name": "Hit", - "qualified_name": "intent.Hit", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "carry the reason a declaration ranked, not only that it ranked.", - "reason": "carry the reason a declaration ranked, not only that it ranked.", - "terms": [ - "ranked" - ] - }, - { - "id": 1542, - "name": "groupByFile", - "qualified_name": "evidence.groupByFile", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "turn a ranked list of declarations into a ranked list of files to read.", - "reason": "turn a ranked list of declarations into a ranked list of files to read.", - "terms": [ - "ranked" - ] - }, - { - "id": 257, - "name": "getAnnotation", - "qualified_name": "mcp.handlers.getAnnotation", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "fetch stored annotation tags and summary data so semantic search results can show business context.", - "reason": "fetch stored annotation tags and summary data so semantic search results can show business context.", - "terms": [ - "search", - "results" - ] - }, - { - "id": 610, - "name": "promoteExactNameMatch", - "qualified_name": "searchsql.promoteExactNameMatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "move an exact symbol-name hit to the front of search results to improve precision.", - "reason": "move an exact symbol-name hit to the front of search results to improve precision.", - "terms": [ - "search", - "results" - ] - }, - { - "id": 973, - "name": "NamedCount", - "qualified_name": "analyze.NamedCount", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "represent ranked membership aggregates without exposing SQL scan structs.", - "reason": "represent ranked membership aggregates without exposing SQL scan structs.", - "terms": [ - "ranked" - ] - }, - { - "id": 1957, - "name": "retrieveDocs", - "qualified_name": "retrieveDocs", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "reason": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "terms": [ - "ranked" - ] - }, - { - "id": 581, - "name": "loadNodesInOrder", - "qualified_name": "searchsql.loadNodesInOrder", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/backend.go", - "intent": "keep the ranked order across the round trip that loads the nodes themselves.", - "reason": "keep the ranked order across the round trip that loads the nodes themselves.", - "terms": [ - "ranked" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "ranked" - ] - }, - { - "id": 1024, - "name": "Outline", - "qualified_name": "describe.Outline", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "terms": [ - "ranked" - ] - }, - { - "id": 224, - "name": "graphFlowInfo", - "qualified_name": "mcp.graphFlowInfo", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "serialize listFlows results with the legacy response shape.", - "reason": "serialize listFlows results with the legacy response shape.", - "terms": [ - "results" - ] - }, - { - "id": 1384, - "name": "mergeLanguagePackages", - "qualified_name": "workflow.mergeLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "consolidate package discovery results while discarding conflicting definitions.", - "reason": "consolidate package discovery results while discarding conflicting definitions.", - "terms": [ - "results" - ] - }, - { - "id": 1562, - "name": "Result", - "qualified_name": "intentrank.Result", - "kind": "class", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "reason": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "terms": [ - "ranked" - ] - }, - { - "id": 586, - "name": "Rebuild", - "qualified_name": "searchsql.PostgresBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows.", - "reason": "Batch regenerates the full-text search index for existing search_documents and search_reasons rows.", - "terms": [ - "search" - ] - }, - { - "id": 248, - "name": "queryGraphResultItem", - "qualified_name": "mcp.queryGraphResultItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "preserve a stable DTO for paged graph traversal results.", - "reason": "preserve a stable DTO for paged graph traversal results.", - "terms": [ - "results" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "results" - ] - }, - { - "id": 187, - "name": "detectChangesEntry", - "qualified_name": "mcp.detectChangesEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable per-item DTO for detectChanges pagination results.", - "reason": "preserve a stable per-item DTO for detectChanges pagination results.", - "terms": [ - "results" - ] - }, - { - "id": 155, - "name": "Set", - "qualified_name": "mcp.Cache.Set", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Stores read-tool results in the cache with the configured TTL.", - "reason": "Stores read-tool results in the cache with the configured TTL.", - "terms": [ - "results" - ] - }, - { - "id": 156, - "name": "Flush", - "qualified_name": "mcp.Cache.Flush", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Invalidates all cached read results after a graph or index update.", - "reason": "Invalidates all cached read results after a graph or index update.", - "terms": [ - "results" - ] - }, - { - "id": 1166, - "name": "SyncStats", - "qualified_name": "ingest.SyncStats", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose update results without coupling callers to the incremental implementation package.", - "reason": "expose update results without coupling callers to the incremental implementation package.", - "terms": [ - "results" - ] - }, - { - "id": 1407, - "name": "parseSemanticContextHash", - "qualified_name": "workflow.parseSemanticContextHash", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "invalidate cached syntax results when import or file-package normalization changes.", - "reason": "invalidate cached syntax results when import or file-package normalization changes.", - "terms": [ - "results" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "search" - ] - }, - { - "id": 186, - "name": "traceFlowResponse", - "qualified_name": "mcp.traceFlowResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable response envelope for traced flow results and their evidence.", - "reason": "preserve a stable response envelope for traced flow results and their evidence.", - "terms": [ - "results" - ] - }, - { - "id": 188, - "name": "detectChangesResponse", - "qualified_name": "mcp.detectChangesResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "expose diff-risk results with both legacy entries and shared pagination fields.", - "reason": "expose diff-risk results with both legacy entries and shared pagination fields.", - "terms": [ - "results" - ] - }, - { - "id": 495, - "name": "CreateFlow", - "qualified_name": "graphgorm.Store.CreateFlow", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "store traced flow aggregates while keeping generated IDs visible to application results.", - "reason": "store traced flow aggregates while keeping generated IDs visible to application results.", - "terms": [ - "results" - ] - }, - { - "id": 911, - "name": "Result", - "qualified_name": "changes.Result", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "expose paged change-risk results while keeping legacy callers working with []RiskEntry.", - "reason": "expose paged change-risk results while keeping legacy callers working with []RiskEntry.", - "terms": [ - "results" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "results" - ] - }, - { - "id": 1906, - "name": "SearchMode", - "qualified_name": "SearchMode", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "reason": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "terms": [ - "search" - ] - }, - { - "id": 234, - "name": "buildOrUpdateGraphResponse", - "qualified_name": "mcp.buildOrUpdateGraphResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format.", - "reason": "serialize build_or_update_graph results with a fixed JSON schema without changing the wire format.", - "terms": [ - "results" - ] - }, - { - "id": 235, - "name": "runPostprocessResponse", - "qualified_name": "mcp.runPostprocessResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "serialize run_postprocess results with a fixed JSON schema without changing the wire format.", - "reason": "serialize run_postprocess results with a fixed JSON schema without changing the wire format.", - "terms": [ - "results" - ] - }, - { - "id": 267, - "name": "validateQueryGraphLimit", - "qualified_name": "mcp.validateQueryGraphLimit", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination.", - "reason": "enforce reasonable limits on queryGraph results to prevent excessive load and encourage pagination.", - "terms": [ - "results" - ] - }, - { - "id": 1317, - "name": "newBuildResolveLookup", - "qualified_name": "workflow.newBuildResolveLookup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "share immutable import file-node results across all resolver chunks in one build.", - "reason": "share immutable import file-node results across all resolver chunks in one build.", - "terms": [ - "results" - ] - }, - { - "id": 1401, - "name": "cachedParseRecord", - "qualified_name": "workflow.cachedParseRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "cache reusable syntax results without duplicating source text or invocation-local byte accounting.", - "reason": "cache reusable syntax results without duplicating source text or invocation-local byte accounting.", - "terms": [ - "results" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "results" - ] - }, - { - "id": 980, - "name": "nodesByEdgePageWithOptions", - "qualified_name": "query.Service.nodesByEdgePageWithOptions", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide paginated graph query results without changing legacy return shape for non-paged callers.", - "reason": "provide paginated graph query results without changing legacy return shape for non-paged callers.", - "terms": [ - "results" - ] - }, - { - "id": 1586, - "name": "RerankGroups", - "qualified_name": "rank.RerankGroups", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "reason": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "terms": [ - "results" - ] - }, - { - "id": 1441, - "name": "addSyncStats", - "qualified_name": "workflow.addSyncStats", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "let the update loop aggregate per-batch results without each call site touching every field.", - "reason": "let the update loop aggregate per-batch results without each call site touching every field.", - "terms": [ - "results" - ] - }, - { - "id": 287, - "name": "unwrapToolResultErr", - "qualified_name": "mcp.unwrapToolResultErr", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "reason": "recover user-facing MCP tool results from the internal error flow at one shared exit point.", - "terms": [ - "results" - ] - }, - { - "id": 1758, - "name": "searchDocCollision", - "qualified_name": "migration.searchDocCollision", - "kind": "class", - "file_path": "internal/db/migration/migration.go", - "intent": "search_documents namespace 병합 시 중복되는 node_id를 보고한다.", - "reason": "search_documents namespace 병합 시 중복되는 node_id를 보고한다.", - "terms": [ - "search" - ] - }, - { - "id": 1523, - "name": "pathTokens", - "qualified_name": "document.pathTokens", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "make basename, extension, and human language names searchable.", - "reason": "make basename, extension, and human language names searchable.", - "terms": [ - "search" - ] - }, - { - "id": 549, - "name": "Search", - "qualified_name": "graphgorm.transaction.Search", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/transaction.go", - "intent": "supply transaction-scoped search operations to the ingest callback.", - "reason": "supply transaction-scoped search operations to the ingest callback.", - "terms": [ - "search" - ] - }, - { - "id": 614, - "name": "Migrate", - "qualified_name": "searchsql.SQLiteBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Creates a full-text search index table for SQLite.", - "reason": "Creates a full-text search index table for SQLite.", - "terms": [ - "search" - ] - }, - { - "id": 1599, - "name": "tokenize", - "qualified_name": "rank.tokenize", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "normalize free-text search input into comparable Unicode tokens.", - "reason": "normalize free-text search input into comparable Unicode tokens.", - "terms": [ - "search" - ] - }, - { - "id": 1622, - "name": "ResultItem", - "qualified_name": "wire.ResultItem", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "preserve a stable per-item DTO for search responses.", - "reason": "preserve a stable per-item DTO for search responses.", - "terms": [ - "search" - ] - }, - { - "id": 353, - "name": "handleSearch", - "qualified_name": "wikiserver.Server.handleSearch", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "search Wiki tree labels and summaries for the active namespace.", - "reason": "search Wiki tree labels and summaries for the active namespace.", - "terms": [ - "search" - ] - }, - { - "id": 606, - "name": "alwaysPrefix", - "qualified_name": "searchsql.alwaysPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep prefix expansion the default for the shared search index.", - "reason": "keep prefix expansion the default for the shared search index.", - "terms": [ - "search" - ] - }, - { - "id": 643, - "name": "RebuildNodes", - "qualified_name": "searchsql.Writer.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the incremental derived-search refresh required by graph updates.", - "reason": "implement the incremental derived-search refresh required by graph updates.", - "terms": [ - "search" - ] - }, - { - "id": 647, - "name": "scopedNodeIDsForChunk", - "qualified_name": "searchsql.scopedNodeIDsForChunk", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "reason": "keep search rebuild SQL within the SQLite/Postgres parameter limit.", - "terms": [ - "search" - ] - }, - { - "id": 1162, - "name": "SearchWriter", - "qualified_name": "ingest.SearchWriter", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose full and scoped search rebuilds as indivisible application operations.", - "reason": "expose full and scoped search rebuilds as indivisible application operations.", - "terms": [ - "search" - ] - }, - { - "id": 1911, - "name": "openDoc", - "qualified_name": "openDoc", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "open a selected tree/search item in the Markdown viewer.", - "reason": "open a selected tree/search item in the Markdown viewer.", - "terms": [ - "search" - ] - } - ] - }, - "which dependencies have known vulnerabilities or forbidden licenses": { - "corpus": 1901, - "terms": [ - { - "text": "dependencies", - "in_reasons": 18 - }, - { - "text": "have", - "in_reasons": 6 - }, - { - "text": "known", - "in_reasons": 5 - }, - { - "text": "vulnerabilities", - "in_reasons": 0 - }, - { - "text": "forbidden", - "in_reasons": 0 - }, - { - "text": "licenses", - "in_reasons": 0 - } + "what stops two pushes for the same repository from building at the same time": [ + 84, + 95, + 112, + 124, + 128, + 162, + 164, + 222, + 258, + 274, + 278, + 286, + 287, + 289, + 299, + 311, + 327, + 333, + 339, + 357, + 358, + 359, + 368, + 378, + 379, + 388, + 391, + 393, + 394, + 395, + 396, + 397, + 398, + 400, + 401, + 404, + 405, + 411, + 413, + 415, + 417, + 443, + 445, + 455, + 478, + 491, + 493, + 518, + 519, + 520, + 522, + 523, + 533, + 539, + 541, + 572, + 602, + 615, + 616, + 625, + 628, + 632, + 649, + 657, + 686, + 721, + 734, + 754, + 766, + 784, + 827, + 842, + 848, + 854, + 861, + 914, + 969, + 973, + 979, + 1082, + 1117, + 1160, + 1188, + 1234, + 1243, + 1248, + 1279, + 1280, + 1287, + 1304, + 1347, + 1358, + 1380, + 1383, + 1385, + 1386, + 1393, + 1395, + 1397, + 1402, + 1408, + 1409, + 1422, + 1424, + 1425, + 1426, + 1441, + 1442, + 1443, + 1447, + 1449, + 1453, + 1455, + 1457, + 1458, + 1459, + 1461, + 1463, + 1464, + 1466, + 1468, + 1469, + 1478, + 1492, + 1493, + 1494, + 1497, + 1498, + 1501, + 1507, + 1518, + 1519, + 1541, + 1555, + 1561, + 1563, + 1566, + 1575, + 1579, + 1586, + 1598, + 1599, + 1607, + 1612, + 1645, + 1648, + 1754, + 1768, + 1794, + 1820, + 1829, + 1868 ], - "hits": [ - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "known" - ] - }, - { - "id": 1201, - "name": "FilterResolvedWithDiagnosticsFiltered", - "qualified_name": "resolve.FilterResolvedWithDiagnosticsFiltered", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "keep edge filtering behavior stable while controlling noise from known-unresolvable patterns.", - "reason": "keep edge filtering behavior stable while controlling noise from known-unresolvable patterns.", - "terms": [ - "known" - ] - }, - { - "id": 1235, - "name": "IsLikelyExternalImportEdge", - "qualified_name": "resolve.IsLikelyExternalImportEdge", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "classify import edges that are not expected to have local resolution targets.", - "reason": "classify import edges that are not expected to have local resolution targets.", - "terms": [ - "have" - ] - }, - { - "id": 656, - "name": "PackageDiscoveryOrDefault", - "qualified_name": "treesitter.PackageDiscoveryOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal", - "reason": "ensure callers always have a valid PackageDiscovery implementation to call during repository traversal", - "terms": [ - "have" - ] - }, - { - "id": 1722, - "name": "postgresSchemaAge", - "qualified_name": "dbtest.postgresSchemaAge", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "read a schema's age without a catalog column PostgreSQL does not have.", - "reason": "read a schema's age without a catalog column PostgreSQL does not have.", - "terms": [ - "have" - ] - }, - { - "id": 1154, - "name": "ParseCacheKey", - "qualified_name": "ingest.ParseCacheKey", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "include every input known to affect parser output instead of trusting source content alone.", - "reason": "include every input known to affect parser output instead of trusting source content alone.", - "terms": [ - "known" - ] - }, - { - "id": 172, - "name": "RuntimeToolsDeps", - "qualified_name": "mcp.RuntimeToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group transport runtime configuration separately from capability dependencies.", - "reason": "group transport runtime configuration separately from capability dependencies.", - "terms": [ - "dependencies" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "have" - ] - }, - { - "id": 1024, - "name": "Outline", - "qualified_name": "describe.Outline", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "terms": [ - "have" - ] - }, - { - "id": 913, - "name": "New", - "qualified_name": "changes.New", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "wire database and git dependencies into a reusable analyzer", - "reason": "wire database and git dependencies into a reusable analyzer", - "terms": [ - "dependencies" - ] - }, - { - "id": 989, - "name": "ImportersOf", - "qualified_name": "query.Service.ImportersOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "reveal reverse import dependencies pointing at the target node", - "reason": "reveal reverse import dependencies pointing at the target node", - "terms": [ - "dependencies" - ] - }, - { - "id": 1885, - "name": "Close", - "qualified_name": "runtime.Runtime.Close", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "give both binaries one cleanup path for shared dependencies.", - "reason": "give both binaries one cleanup path for shared dependencies.", - "terms": [ - "dependencies" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "known" - ] - }, - { - "id": 1628, - "name": "nextActions", - "qualified_name": "wire.nextActions", - "kind": "function", - "file_path": "internal/app/search/wire/wire.go", - "intent": "make the follow-up step obvious enough that an agent does not have to invent one.", - "reason": "make the follow-up step obvious enough that an agent does not have to invent one.", - "terms": [ - "have" - ] - }, - { - "id": 1486, - "name": "IsNonRetryable", - "qualified_name": "reposync.IsNonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "reason": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "terms": [ - "known" - ] - }, - { - "id": 58, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg/main.go", - "intent": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "reason": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "terms": [ - "dependencies" - ] - }, - { - "id": 984, - "name": "CalleesOf", - "qualified_name": "query.Service.CalleesOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "find downstream call dependencies of a function or method node", - "reason": "find downstream call dependencies of a function or method node", - "terms": [ - "dependencies" - ] - }, - { - "id": 987, - "name": "ImportsOf", - "qualified_name": "query.Service.ImportsOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "reveal outgoing import dependencies for a file or package node", - "reason": "reveal outgoing import dependencies for a file or package node", - "terms": [ - "dependencies" - ] - }, - { - "id": 169, - "name": "GraphToolsDeps", - "qualified_name": "mcp.GraphToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only the dependencies required by graph and search read tools.", - "reason": "group only the dependencies required by graph and search read tools.", - "terms": [ - "dependencies" - ] - }, - { - "id": 170, - "name": "CrossRefLister", - "qualified_name": "mcp.CrossRefLister", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "let handlers enumerate repository-level dependencies without a store implementation dependency.", - "reason": "let handlers enumerate repository-level dependencies without a store implementation dependency.", - "terms": [ - "dependencies" - ] - }, - { - "id": 483, - "name": "ListOutboundCrossRefs", - "qualified_name": "graphgorm.Store.ListOutboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "expose a namespace's declared external dependencies for listing and analysis.", - "reason": "expose a namespace's declared external dependencies for listing and analysis.", - "terms": [ - "dependencies" - ] - }, - { - "id": 873, - "name": "WalkerOption", - "qualified_name": "treesitter.WalkerOption", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "allow caller-supplied dependencies such as logging without expanding constructor arguments", - "reason": "allow caller-supplied dependencies such as logging without expanding constructor arguments", - "terms": [ - "dependencies" - ] - }, - { - "id": 1140, - "name": "ImportPackagesFromContext", - "qualified_name": "ingest.ImportPackagesFromContext", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "let parser adapters consume application-owned package context without reversing dependencies.", - "reason": "let parser adapters consume application-owned package context without reversing dependencies.", - "terms": [ - "dependencies" - ] - }, - { - "id": 168, - "name": "BuildToolsDeps", - "qualified_name": "mcp.BuildToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only the dependencies required by parse, build, update, and postprocess tools.", - "reason": "group only the dependencies required by parse, build, update, and postprocess tools.", - "terms": [ - "dependencies" - ] - }, - { - "id": 300, - "name": "promptHandlers", - "qualified_name": "mcp.promptHandlers", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Groups dependencies so prompt handlers can reuse the shared database and analyzers.", - "reason": "Groups dependencies so prompt handlers can reuse the shared database and analyzers.", - "terms": [ - "dependencies" - ] - }, - { - "id": 335, - "name": "WebhookHandler", - "qualified_name": "webhook.WebhookHandler", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler.", - "reason": "bundle webhook validation policy and dispatch dependencies into one reusable HTTP handler.", - "terms": [ - "dependencies" - ] - }, - { - "id": 1549, - "name": "Split", - "qualified_name": "identtoken.Split", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "normalize source identifiers into stable search-index tokens without language-specific dependencies.", - "reason": "normalize source identifiers into stable search-index tokens without language-specific dependencies.", - "terms": [ - "dependencies" - ] - }, - { - "id": 271, - "name": "handlers", - "qualified_name": "mcp.handlers", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "reason": "group shared dependencies so individual MCP tool handlers can reuse the same services and cache.", - "terms": [ - "dependencies" - ] - }, - { - "id": 238, - "name": "graphService", - "qualified_name": "mcp.handlers.graphService", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "reason": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "terms": [ - "dependencies" - ] - } - ] - }, - "which functions consume the most CPU in a live process": { - "corpus": 1901, - "terms": [ - { - "text": "functions", - "in_reasons": 5 - }, - { - "text": "consume", - "in_reasons": 8 - }, - { - "text": "most", - "in_reasons": 1 - }, - { - "text": "cpu", - "in_reasons": 2 - }, - { - "text": "live", - "in_reasons": 5 - }, - { - "text": "process", - "in_reasons": 13 - } + "where do search results get ranked": [ + 110, + 111, + 119, + 123, + 140, + 141, + 142, + 166, + 175, + 182, + 183, + 184, + 185, + 189, + 191, + 198, + 205, + 206, + 208, + 219, + 241, + 294, + 298, + 299, + 311, + 442, + 476, + 490, + 494, + 495, + 498, + 499, + 524, + 525, + 526, + 529, + 534, + 536, + 538, + 539, + 547, + 551, + 558, + 559, + 561, + 563, + 564, + 567, + 573, + 575, + 584, + 585, + 587, + 590, + 591, + 594, + 858, + 921, + 924, + 930, + 971, + 1058, + 1110, + 1111, + 1113, + 1115, + 1117, + 1122, + 1217, + 1255, + 1264, + 1328, + 1345, + 1351, + 1366, + 1371, + 1378, + 1381, + 1382, + 1384, + 1470, + 1474, + 1477, + 1481, + 1495, + 1497, + 1502, + 1504, + 1505, + 1515, + 1525, + 1527, + 1528, + 1536, + 1548, + 1558, + 1559, + 1561, + 1566, + 1568, + 1571, + 1574, + 1575, + 1615, + 1642, + 1649, + 1662, + 1704, + 1768, + 1776, + 1852, + 1854, + 1859, + 1863, + 1886, + 1903, + 1904 ], - "hits": [ - { - "id": 1489, - "name": "syncPayload", - "qualified_name": "reposync.syncPayload", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "capture the most recent sync request data per repository while it waits in the queue.", - "reason": "capture the most recent sync request data per repository while it waits in the queue.", - "terms": [ - "most" - ] - }, - { - "id": 142, - "name": "HandleHealth", - "qualified_name": "server.HandleHealth", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "가장 가벼운 liveness probe로 프로세스 응답 가능 여부만 반환한다.", - "reason": "가장 가벼운 liveness probe로 프로세스 응답 가능 여부만 반환한다.", - "terms": [ - "live" - ] - }, - { - "id": 1252, - "name": "uniqueCallable", - "qualified_name": "resolve.uniqueCallable", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "return nil if multiple ambiguous functions match the criteria.", - "reason": "return nil if multiple ambiguous functions match the criteria.", - "terms": [ - "functions" - ] - }, - { - "id": 1895, - "name": "getPlatformKey", - "qualified_name": "getPlatformKey", - "kind": "function", - "file_path": "npm/install.js", - "intent": "identify the current OS and CPU architecture for picking the matching ccg release asset.", - "reason": "identify the current OS and CPU architecture for picking the matching ccg release asset.", - "terms": [ - "cpu" - ] - }, - { - "id": 1547, - "name": "Fields", - "qualified_name": "identtoken.Fields", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "expose original-case terms; lowercasing happens per consumer.", - "reason": "expose original-case terms; lowercasing happens per consumer.", - "terms": [ - "consume" - ] - }, - { - "id": 1311, - "name": "parseBuildInputs", - "qualified_name": "workflow.Service.parseBuildInputs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory.", - "reason": "parallelize CPU-bound parsing without changing spool order or retaining every parsed file in memory.", - "terms": [ - "cpu" - ] - }, - { - "id": 302, - "name": "reviewChanges", - "qualified_name": "mcp.promptHandlers.reviewChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Provides a single view of high-risk functions before reviewing changes.", - "reason": "Provides a single view of high-risk functions before reviewing changes.", - "terms": [ - "functions" - ] - }, - { - "id": 891, - "name": "resolveTestedBy", - "qualified_name": "treesitter.Walker.resolveTestedBy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "connect production functions to enclosing tests without language-specific test frameworks", - "reason": "connect production functions to enclosing tests without language-specific test frameworks", - "terms": [ - "functions" - ] - }, - { - "id": 921, - "name": "riskCandidate", - "qualified_name": "changes.riskCandidate", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "separate risk ordering from response entry allocation for paged consumers.", - "reason": "separate risk ordering from response entry allocation for paged consumers.", - "terms": [ - "consume" - ] - }, - { - "id": 1257, - "name": "uniqueNodes", - "qualified_name": "resolve.uniqueNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "deduplicate result sets before further processing or resolution.", - "reason": "deduplicate result sets before further processing or resolution.", - "terms": [ - "process" - ] - }, - { - "id": 1488, - "name": "defaultRetryConfig", - "qualified_name": "reposync.defaultRetryConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide conservative retry defaults for production webhook processing.", - "reason": "provide conservative retry defaults for production webhook processing.", - "terms": [ - "process" - ] - }, - { - "id": 304, - "name": "onboardDeveloper", - "qualified_name": "mcp.promptHandlers.onboardDeveloper", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "reason": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "terms": [ - "functions" - ] - }, - { - "id": 1140, - "name": "ImportPackagesFromContext", - "qualified_name": "ingest.ImportPackagesFromContext", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "let parser adapters consume application-owned package context without reversing dependencies.", - "reason": "let parser adapters consume application-owned package context without reversing dependencies.", - "terms": [ - "consume" - ] - }, - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "functions" - ] - }, - { - "id": 1355, - "name": "filterExistingStateByInclude", - "qualified_name": "workflow.filterExistingStateByInclude", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "terms": [ - "live" - ] - }, - { - "id": 908, - "name": "GitClient", - "qualified_name": "changes.GitClient", - "kind": "type", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "abstract git operations so risk analysis can consume changed files and hunks", - "reason": "abstract git operations so risk analysis can consume changed files and hunks", - "terms": [ - "consume" - ] - }, - { - "id": 972, - "name": "AffectedFlow", - "qualified_name": "analyze.AffectedFlow", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "reason": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "terms": [ - "consume" - ] - }, - { - "id": 1552, - "name": "Searcher", - "qualified_name": "intent.Searcher", - "kind": "type", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let search consume a bound intent-index implementation without a database handle.", - "reason": "let search consume a bound intent-index implementation without a database handle.", - "terms": [ - "consume" - ] - }, - { - "id": 688, - "name": "bestNodePackageScope", - "qualified_name": "treesitter.bestNodePackageScope", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "prefer workspace package names over the root package when files live under nested package roots.", - "reason": "prefer workspace package names over the root package when files live under nested package roots.", - "terms": [ - "live" - ] - }, - { - "id": 1004, - "name": "Store", - "qualified_name": "crossref.Store", - "kind": "type", - "file_path": "internal/app/crossref/service.go", - "intent": "keep the sync policy independent from GORM by owning a minimal consumer-side port.", - "reason": "keep the sync policy independent from GORM by owning a minimal consumer-side port.", - "terms": [ - "consume" - ] - }, - { - "id": 238, - "name": "graphService", - "qualified_name": "mcp.handlers.graphService", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "reason": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "terms": [ - "live" - ] - }, - { - "id": 450, - "name": "WithLock", - "qualified_name": "gitrepo.RepoLocker.WithLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "terms": [ - "process" - ] - }, - { - "id": 1508, - "name": "get", - "qualified_name": "reposync.SyncQueue.get", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "block workers until the next deduplicated repository payload is ready for processing.", - "reason": "block workers until the next deduplicated repository payload is ready for processing.", - "terms": [ - "process" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "process" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "process" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "process" - ] - }, - { - "id": 1503, - "name": "safeHandle", - "qualified_name": "reposync.SyncQueue.safeHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "terms": [ - "process" - ] - }, - { - "id": 1509, - "name": "done", - "qualified_name": "reposync.SyncQueue.done", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "requeue repositories that changed during processing or release payload state when work is complete.", - "reason": "requeue repositories that changed during processing or release payload state when work is complete.", - "terms": [ - "process" - ] - }, - { - "id": 490, - "name": "ccgRefNodeQuery", - "qualified_name": "graphgorm.Store.ccgRefNodeQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "reason": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "terms": [ - "consume" - ] - }, - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "process" - ] - }, - { - "id": 452, - "name": "acquireFilesystemLock", - "qualified_name": "gitrepo.acquireFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "reason": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "terms": [ - "process" - ] - }, - { - "id": 1125, - "name": "releaseContent", - "qualified_name": "incremental.releaseContent", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "terms": [ - "process" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "process" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "live" - ] - } - ] - }, - "which team owns the changed code and should review it": { - "corpus": 1901, - "terms": [ - { - "text": "team", - "in_reasons": 0 - }, - { - "text": "owns", - "in_reasons": 6 - }, - { - "text": "changed", - "in_reasons": 20 - }, - { - "text": "code", - "in_reasons": 20 - }, - { - "text": "review", - "in_reasons": 5 - } + "which dependencies have known vulnerabilities or forbidden licenses": [ + 1, + 122, + 123, + 124, + 127, + 166, + 187, + 222, + 252, + 279, + 430, + 602, + 817, + 860, + 934, + 937, + 939, + 971, + 1053, + 1059, + 1087, + 1101, + 1149, + 1183, + 1438, + 1502, + 1576, + 1664, + 1835 ], - "hits": [ - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "changed", - "review" - ] - }, - { - "id": 194, - "name": "getAffectedFlows", - "qualified_name": "mcp.handlers.getAffectedFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "reason": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "terms": [ - "changed", - "review" - ] - }, - { - "id": 1159, - "name": "PackageDiscoverer", - "qualified_name": "ingest.PackageDiscoverer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "delegate language-specific package discovery while ingest owns traversal policy.", - "reason": "delegate language-specific package discovery while ingest owns traversal policy.", - "terms": [ - "owns" - ] - }, - { - "id": 302, - "name": "reviewChanges", - "qualified_name": "mcp.promptHandlers.reviewChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Provides a single view of high-risk functions before reviewing changes.", - "reason": "Provides a single view of high-risk functions before reviewing changes.", - "terms": [ - "review" - ] - }, - { - "id": 314, - "name": "registerPrompts", - "qualified_name": "mcp.registerPrompts", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts_register.go", - "intent": "package common review, onboarding, and debugging flows into reusable server prompts.", - "reason": "package common review, onboarding, and debugging flows into reusable server prompts.", - "terms": [ - "review" - ] - }, - { - "id": 756, - "name": "goNodeContains", - "qualified_name": "treesitter.goNodeContains", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "detect which tuple element owns a type assertion when matching assignment shapes.", - "reason": "detect which tuple element owns a type assertion when matching assignment shapes.", - "terms": [ - "owns" - ] - }, - { - "id": 338, - "name": "NewWebhookHandlerWithOptions", - "qualified_name": "webhook.NewWebhookHandlerWithOptions", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "preserve older call sites while the config-based constructor owns the actual assembly logic.", - "reason": "preserve older call sites while the config-based constructor owns the actual assembly logic.", - "terms": [ - "owns" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "review" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "owns" - ] - }, - { - "id": 402, - "name": "requireMethod", - "qualified_name": "wikiserver.requireMethod", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "reject unsupported HTTP methods with a consistent status code.", - "reason": "reject unsupported HTTP methods with a consistent status code.", - "terms": [ - "code" - ] - }, - { - "id": 433, - "name": "ChangedFiles", - "qualified_name": "gitexec.ExecGitClient.ChangedFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "identify which repository paths changed since a base revision", - "reason": "identify which repository paths changed since a base revision", - "terms": [ - "changed" - ] - }, - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "code" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "owns" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "owns" - ] - }, - { - "id": 861, - "name": "rustImportAliases", - "qualified_name": "treesitter.rustImportAliases", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "support Rust trait call normalization when code references imported names.", - "reason": "support Rust trait call normalization when code references imported names.", - "terms": [ - "code" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "changed" - ] - }, - { - "id": 405, - "name": "statusForReadErr", - "qualified_name": "wikiserver.statusForReadErr", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "terms": [ - "code" - ] - }, - { - "id": 910, - "name": "RiskEntry", - "qualified_name": "changes.RiskEntry", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "return the changed node together with overlap count and computed risk", - "reason": "return the changed node together with overlap count and computed risk", - "terms": [ - "changed" - ] - }, - { - "id": 912, - "name": "Service", - "qualified_name": "changes.Service", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "identify changed nodes and score how risky they are to modify", - "reason": "identify changed nodes and score how risky they are to modify", - "terms": [ - "changed" - ] - }, - { - "id": 1098, - "name": "internal/app/ingest/incremental/incremental.go", - "qualified_name": "internal/app/ingest/incremental/incremental.go", - "kind": "file", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "changed" - ] - }, - { - "id": 1099, - "name": "Store", - "qualified_name": "incremental.Store", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "changed" - ] - }, - { - "id": 1102, - "name": "Syncer", - "qualified_name": "incremental.Syncer", - "kind": "class", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid full rebuilds by reparsing only files whose content hash changed", - "reason": "avoid full rebuilds by reparsing only files whose content hash changed", - "terms": [ - "changed" - ] - }, - { - "id": 1207, - "name": "unresolvedReason", - "qualified_name": "resolve.unresolvedReason", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "reason": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "terms": [ - "code" - ] - }, - { - "id": 1364, - "name": "logger", - "qualified_name": "workflow.Service.logger", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "keep service code logging-safe even when callers leave Logger nil.", - "reason": "keep service code logging-safe even when callers leave Logger nil.", - "terms": [ - "code" - ] - }, - { - "id": 189, - "name": "affectedFlowEntry", - "qualified_name": "mcp.affectedFlowEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "reason": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "terms": [ - "changed" - ] - }, - { - "id": 504, - "name": "AffectedFlowsPage", - "qualified_name": "graphgorm.Store.AffectedFlowsPage", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "reason": "map changed nodes to one deterministic page of namespace-scoped stored flows.", - "terms": [ - "changed" - ] - }, - { - "id": 871, - "name": "Walker", - "qualified_name": "treesitter.Walker", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "turn language-specific ASTs into the project's normalized code graph representation", - "reason": "turn language-specific ASTs into the project's normalized code graph representation", - "terms": [ - "code" - ] - }, - { - "id": 908, - "name": "GitClient", - "qualified_name": "changes.GitClient", - "kind": "type", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "abstract git operations so risk analysis can consume changed files and hunks", - "reason": "abstract git operations so risk analysis can consume changed files and hunks", - "terms": [ - "changed" - ] - }, - { - "id": 1079, - "name": "isPassthroughLine", - "qualified_name": "binding.isPassthroughLine", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "classify a single source line as non-code (passthrough) for binding logic", - "reason": "classify a single source line as non-code (passthrough) for binding logic", - "terms": [ - "code" - ] - }, - { - "id": 1085, - "name": "deferredEdgeSpool", - "qualified_name": "incremental.deferredEdgeSpool", - "kind": "class", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "preserve parsed cross-batch edges until every changed node has been applied.", - "reason": "preserve parsed cross-batch edges until every changed node has been applied.", - "terms": [ - "changed" - ] - }, - { - "id": 1012, - "name": "reresolveInbound", - "qualified_name": "crossref.Service.reresolveInbound", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "reason": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "terms": [ - "changed" - ] - }, - { - "id": 316, - "name": "NewServer", - "qualified_name": "mcp.NewServer", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/server.go", - "intent": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "reason": "Configures a server instance that exposes code graph features as MCP tools and prompts.", - "terms": [ - "code" - ] - }, - { - "id": 635, - "name": "sqliteTableExists", - "qualified_name": "searchsql.sqliteTableExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "reason": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "terms": [ - "code" - ] - }, - { - "id": 1080, - "name": "hasCodeBetween", - "qualified_name": "binding.hasCodeBetween", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "determine if real code exists between a comment and declaration for Look-Between binding", - "reason": "determine if real code exists between a comment and declaration for Look-Between binding", - "terms": [ - "code" - ] - }, - { - "id": 1509, - "name": "done", - "qualified_name": "reposync.SyncQueue.done", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "requeue repositories that changed during processing or release payload state when work is complete.", - "reason": "requeue repositories that changed during processing or release payload state when work is complete.", - "terms": [ - "changed" - ] - }, - { - "id": 1870, - "name": "Options", - "qualified_name": "mcpruntime.Options", - "kind": "class", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "reason": "pass cache, telemetry, namespace, RAG, and parse-limit settings without importing HTTP server code.", - "terms": [ - "code" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "changed" - ] - }, - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "code" - ] - }, - { - "id": 964, - "name": "QueryRepository", - "qualified_name": "analyze.QueryRepository", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep query defaults and response mapping in app code while isolating database joins and filters.", - "reason": "keep query defaults and response mapping in app code while isolating database joins and filters.", - "terms": [ - "code" - ] - }, - { - "id": 1335, - "name": "shouldSuppressExternalImportUnresolved", - "qualified_name": "workflow.shouldSuppressExternalImportUnresolved", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "reason": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "terms": [ - "code" - ] - }, - { - "id": 1580, - "name": "Signals", - "qualified_name": "rank.Signals", - "kind": "function", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "expose the ranker's per-candidate evidence to the code that builds a result list.", - "reason": "expose the ranker's per-candidate evidence to the code that builds a result list.", - "terms": [ - "code" - ] - }, - { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "terms": [ - "code" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "changed" - ] - }, - { - "id": 1874, - "name": "RunStdio", - "qualified_name": "mcpruntime.RunStdio", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "reason": "keep the local ccg binary on a stdio-only runtime without importing HTTP/webhook server code.", - "terms": [ - "code" - ] - }, - { - "id": 303, - "name": "debugIssue", - "qualified_name": "mcp.promptHandlers.debugIssue", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description.", - "reason": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description.", - "terms": [ - "code" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "changed" - ] - }, - { - "id": 1431, - "name": "applyUpdateSpoolInTx", - "qualified_name": "workflow.Service.applyUpdateSpoolInTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "terms": [ - "changed" - ] - }, - { - "id": 1821, - "name": "RecordedReason", - "qualified_name": "graph.Node.RecordedReason", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "reason": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "terms": [ - "code" - ] - } - ] - }, - "who checks that a push really came from the forge before we trust it": { - "corpus": 1901, - "terms": [ - { - "text": "checks", - "in_reasons": 13 - }, - { - "text": "push", - "in_reasons": 9 - }, - { - "text": "really", - "in_reasons": 0 - }, - { - "text": "came", - "in_reasons": 4 - }, - { - "text": "forge", - "in_reasons": 0 - }, - { - "text": "before", - "in_reasons": 85 - }, - { - "text": "we", - "in_reasons": 0 - }, - { - "text": "trust", - "in_reasons": 8 - } + "which functions consume the most CPU in a live process": [ + 97, + 119, + 147, + 187, + 189, + 254, + 256, + 396, + 397, + 398, + 436, + 634, + 837, + 855, + 870, + 883, + 891, + 923, + 953, + 1071, + 1087, + 1200, + 1205, + 1258, + 1301, + 1303, + 1440, + 1441, + 1456, + 1461, + 1462, + 1499, + 1504, + 1845 ], - "hits": [ - { - "id": 222, - "name": "safePathUnderRoot", - "qualified_name": "mcp.safePathUnderRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "reject relative paths that would resolve outside the resolved docs root.", - "reason": "reject relative paths that would resolve outside the resolved docs root.", - "terms": [ - "checks", - "before" - ] - }, - { - "id": 1250, - "name": "callerLanguage", - "qualified_name": "resolve.callerLanguage", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "avoid repeated nil checks before dispatch strategy lookup.", - "reason": "avoid repeated nil checks before dispatch strategy lookup.", - "terms": [ - "checks", - "before" - ] - }, - { - "id": 342, - "name": "verifySignature", - "qualified_name": "webhook.WebhookHandler.verifySignature", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "reason": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "terms": [ - "before", - "trust" - ] - }, - { - "id": 1891, - "name": "EnsureNoSymlinkInPath", - "qualified_name": "safepath.EnsureNoSymlinkInPath", - "kind": "function", - "file_path": "internal/safepath/safepath.go", - "intent": "prevent symlink traversal from escaping a trusted root before any filesystem mutation.", - "reason": "prevent symlink traversal from escaping a trusted root before any filesystem mutation.", - "terms": [ - "before", - "trust" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "checks", - "before" - ] - }, - { - "id": 1765, - "name": "sqliteIndexExists", - "qualified_name": "migration.sqliteIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "index presence can be verified during schema parity checks before query paths use them.", - "reason": "index presence can be verified during schema parity checks before query paths use them.", - "terms": [ - "checks", - "before" - ] - }, - { - "id": 295, - "name": "safeNamespaceRoot", - "qualified_name": "mcp.handlers.safeNamespaceRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "resolve namespace paths under a trusted, real filesystem location.", - "reason": "resolve namespace paths under a trusted, real filesystem location.", - "terms": [ - "trust" - ] - }, - { - "id": 1465, - "name": "internal/app/reposync/ports.go", - "qualified_name": "internal/app/reposync/ports.go", - "kind": "file", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "trust" - ] - }, - { - "id": 1466, - "name": "CheckoutRequest", - "qualified_name": "reposync.CheckoutRequest", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "trust" - ] - }, - { - "id": 702, - "name": "containsString", - "qualified_name": "treesitter.containsString", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep extension checks simple without importing extra helpers.", - "reason": "keep extension checks simple without importing extra helpers.", - "terms": [ - "checks" - ] - }, - { - "id": 1826, - "name": "TableName", - "qualified_name": "graph.SchemaVersion.TableName", - "kind": "function", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "reason": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "terms": [ - "checks" - ] - }, - { - "id": 608, - "name": "buildPrefixQuery", - "qualified_name": "searchsql.buildPrefixQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "reason": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "terms": [ - "came" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "came" - ] - }, - { - "id": 341, - "name": "ServeHTTP", - "qualified_name": "webhook.WebhookHandler.ServeHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "reason": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "terms": [ - "push" - ] - }, - { - "id": 272, - "name": "logger", - "qualified_name": "mcp.handlers.logger", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "give handlers a consistent logging interface without repeating nil checks.", - "reason": "give handlers a consistent logging interface without repeating nil checks.", - "terms": [ - "checks" - ] - }, - { - "id": 178, - "name": "namespaceEvidence", - "qualified_name": "mcp.handlers.namespaceEvidence", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "reason": "collect namespace-scoped path and git provenance so MCP responses can explain where graph evidence came from.", - "terms": [ - "came" - ] - }, - { - "id": 438, - "name": "parseHunkHeader", - "qualified_name": "gitexec.parseHunkHeader", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "decode git hunk metadata into line numbers usable for overlap checks", - "reason": "decode git hunk metadata into line numbers usable for overlap checks", - "terms": [ - "checks" - ] - }, - { - "id": 1057, - "name": "RootedFiles", - "qualified_name": "docs.RootedFiles", - "kind": "type", - "file_path": "internal/app/docs/ports.go", - "intent": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "reason": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "terms": [ - "checks" - ] - }, - { - "id": 1275, - "name": "ResolveSameReceiverCall", - "qualified_name": "resolve.goLanguageDispatch.ResolveSameReceiverCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "preserve Go method-call resolution without hardcoding language checks in Resolve.", - "reason": "preserve Go method-call resolution without hardcoding language checks in Resolve.", - "terms": [ - "checks" - ] - }, - { - "id": 1154, - "name": "ParseCacheKey", - "qualified_name": "ingest.ParseCacheKey", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "include every input known to affect parser output instead of trusting source content alone.", - "reason": "include every input known to affect parser output instead of trusting source content alone.", - "terms": [ - "trust" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "push" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "push" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "push" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "before" - ] - }, - { - "id": 628, - "name": "insertSQLiteFTSBatch", - "qualified_name": "searchsql.insertSQLiteFTSBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "push" - ] - }, - { - "id": 629, - "name": "insertSQLiteIntentBatch", - "qualified_name": "searchsql.insertSQLiteIntentBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "push" - ] - }, - { - "id": 408, - "name": "realPathRoot", - "qualified_name": "wikiserver.realPathRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve an allowed root to an absolute symlink-aware path for containment checks.", - "reason": "resolve an allowed root to an absolute symlink-aware path for containment checks.", - "terms": [ - "checks" - ] - }, - { - "id": 340, - "name": "pushEvent", - "qualified_name": "webhook.pushEvent", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch.", - "reason": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch.", - "terms": [ - "push" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "push" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "trust" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "checks" - ] - }, - { - "id": 1541, - "name": "reasonOverlaps", - "qualified_name": "evidence.reasonOverlaps", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "reason": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "terms": [ - "came" - ] - }, - { - "id": 1463, - "name": "buildCloneURL", - "qualified_name": "reposync.buildCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "reason": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "terms": [ - "trust" - ] - }, - { - "id": 274, - "name": "cachedExecute", - "qualified_name": "mcp.handlers.cachedExecute", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "reason": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "terms": [ - "before" - ] - }, - { - "id": 1219, - "name": "filterCallableNodes", - "qualified_name": "resolve.filterCallableNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "normalize a candidate list before deterministic tie-breaking.", - "reason": "normalize a candidate list before deterministic tie-breaking.", - "terms": [ - "before" - ] - }, - { - "id": 1254, - "name": "uniqueTypeNodeByName", - "qualified_name": "resolve.uniqueTypeNodeByName", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "filter nodes by name before applying uniqueness check.", - "reason": "filter nodes by name before applying uniqueness check.", - "terms": [ - "before" - ] - }, - { - "id": 1257, - "name": "uniqueNodes", - "qualified_name": "resolve.uniqueNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "deduplicate result sets before further processing or resolution.", - "reason": "deduplicate result sets before further processing or resolution.", - "terms": [ - "before" - ] - }, - { - "id": 1274, - "name": "EnsureDispatchTargets", - "qualified_name": "resolve.goLanguageDispatch.EnsureDispatchTargets", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "preload potential interface implementer methods before call resolution.", - "reason": "preload potential interface implementer methods before call resolution.", - "terms": [ - "before" - ] - }, - { - "id": 81, - "name": "filterIgnoredLintReport", - "qualified_name": "cli.filterIgnoredLintReport", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "strip suppressed findings before display and strict-mode counting", - "reason": "strip suppressed findings before display and strict-mode counting", - "terms": [ - "before" - ] - }, - { - "id": 362, - "name": "readDoc", - "qualified_name": "wikiserver.Server.readDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce doc size limits before returning generated Markdown content.", - "reason": "enforce doc size limits before returning generated Markdown content.", - "terms": [ - "before" - ] - }, - { - "id": 493, - "name": "DeleteFlows", - "qualified_name": "graphgorm.Store.DeleteFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "clear stale flow state before a transaction-scoped rebuild.", - "reason": "clear stale flow state before a transaction-scoped rebuild.", - "terms": [ - "before" - ] - }, - { - "id": 698, - "name": "trimNodeWildcard", - "qualified_name": "treesitter.trimNodeWildcard", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize alias rules before matching them against source directories.", - "reason": "normalize alias rules before matching them against source directories.", - "terms": [ - "before" - ] - }, - { - "id": 779, - "name": "collectTypeScriptMemberTypes", - "qualified_name": "treesitter.collectTypeScriptMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "prove intermediate member hops before rewriting TypeScript call chains.", - "reason": "prove intermediate member hops before rewriting TypeScript call chains.", - "terms": [ - "before" - ] - }, - { - "id": 819, - "name": "collectKotlinMemberTypes", - "qualified_name": "treesitter.collectKotlinMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "prove receiver-member chains before rewriting Kotlin call selectors.", - "reason": "prove receiver-member chains before rewriting Kotlin call selectors.", - "terms": [ - "before" - ] - }, - { - "id": 854, - "name": "rustImplTraitName", - "qualified_name": "treesitter.rustImplTraitName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "recover stable trait identifiers before implementation edges are emitted.", - "reason": "recover stable trait identifiers before implementation edges are emitted.", - "terms": [ - "before" - ] - }, - { - "id": 1778, - "name": "internal/domain/annotation/normalizer.go", - "qualified_name": "internal/domain/annotation/normalizer.go", - "kind": "file", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "before" - ] - }, - { - "id": 1779, - "name": "Normalizer", - "qualified_name": "annotation.Normalizer", - "kind": "class", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "before" - ] - }, - { - "id": 80, - "name": "lintRuleMatches", - "qualified_name": "cli.lintRuleMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "determine if a single ignore rule covers a specific lint finding", - "reason": "determine if a single ignore rule covers a specific lint finding", - "terms": [ - "before" - ] - }, - { - "id": 128, - "name": "ValidateConfig", - "qualified_name": "server.ValidateConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "reason": "reject invalid webhook and HTTP exposure settings before opening listeners.", - "terms": [ - "before" - ] - }, - { - "id": 817, - "name": "collectJavaMemberTypes", - "qualified_name": "treesitter.collectJavaMemberTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "prove intermediate receiver hops before rewriting Java member-call chains.", - "reason": "prove intermediate receiver hops before rewriting Java member-call chains.", - "terms": [ - "before" - ] - } - ] - }, - "why are handwritten pages kept when obsolete generated docs are pruned": { - "corpus": 1901, - "terms": [ - { - "text": "handwritten", - "in_reasons": 0 - }, - { - "text": "pages", - "in_reasons": 0 - }, - { - "text": "kept", - "in_reasons": 1 - }, - { - "text": "obsolete", - "in_reasons": 0 - }, - { - "text": "generated", - "in_reasons": 33 - }, - { - "text": "docs", - "in_reasons": 44 - }, - { - "text": "pruned", - "in_reasons": 1 - } + "which team owns the changed code and should review it": [ + 63, + 64, + 121, + 143, + 145, + 147, + 148, + 149, + 189, + 254, + 255, + 267, + 268, + 282, + 349, + 352, + 379, + 449, + 583, + 701, + 806, + 815, + 855, + 857, + 859, + 862, + 906, + 915, + 957, + 963, + 1025, + 1026, + 1030, + 1042, + 1043, + 1046, + 1054, + 1059, + 1107, + 1155, + 1282, + 1309, + 1373, + 1462, + 1530, + 1777, + 1822, + 1824, + 1826 ], - "hits": [ - { - "id": 70, - "name": "resolveRagDescription", - "qualified_name": "cli.resolveRagDescription", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep the docs-generated Wiki root summary aligned with configuration.", - "reason": "keep the docs-generated Wiki root summary aligned with configuration.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 414, - "name": "Root", - "qualified_name": "contentfiles.Root", - "kind": "class", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "centralize containment, symlink rejection, and atomic replacement for generated docs.", - "reason": "centralize containment, symlink rejection, and atomic replacement for generated docs.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 1043, - "name": "pruneManaged", - "qualified_name": "docs.Generator.pruneManaged", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "clean up stale generated docs without touching manually created files", - "reason": "clean up stale generated docs without touching manually created files", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "kept" - ] - }, - { - "id": 69, - "name": "resolveRagIndexDir", - "qualified_name": "cli.resolveRagIndexDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep docs-generated Wiki output aligned with the configured index directory.", - "reason": "keep docs-generated Wiki output aligned with the configured index directory.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 1957, - "name": "retrieveDocs", - "qualified_name": "retrieveDocs", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "reason": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 364, - "name": "resolveDocPath", - "qualified_name": "wikiserver.Server.resolveDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 421, - "name": "ModTime", - "qualified_name": "contentfiles.Root.ModTime", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "let docs lint compare source and generated timestamps through a narrow port.", - "reason": "let docs lint compare source and generated timestamps through a narrow port.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 1907, - "name": "ViewMode", - "qualified_name": "ViewMode", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "switch the center work area between generated docs and the visual edge graph.", - "reason": "switch the center work area between generated docs and the visual edge graph.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 391, - "name": "nodeMarkdownSection", - "qualified_name": "wikiserver.nodeMarkdownSection", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map graph node kinds to generated docs section names for DB-backed Wiki fallback.", - "reason": "map graph node kinds to generated docs section names for DB-backed Wiki fallback.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 352, - "name": "handleTree", - "qualified_name": "wikiserver.Server.handleTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "reason": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "terms": [ - "pruned" - ] - }, - { - "id": 392, - "name": "nodeMarkdownChild", - "qualified_name": "wikiserver.nodeMarkdownChild", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render one fallback tree child in the same symbol-card Markdown shape as generated docs.", - "reason": "render one fallback tree child in the same symbol-card Markdown shape as generated docs.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 355, - "name": "readDBFallbackDoc", - "qualified_name": "wikiserver.Server.readDBFallbackDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "reason": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "terms": [ - "generated", - "docs" - ] - }, - { - "id": 389, - "name": "nodeMarkdown", - "qualified_name": "wikiserver.nodeMarkdown", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "reason": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "terms": [ - "generated" - ] - }, - { - "id": 1944, - "name": "DocResponse", - "qualified_name": "DocResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return generated Markdown content for one documentation path.", - "reason": "return generated Markdown content for one documentation path.", - "terms": [ - "generated" - ] - }, - { - "id": 1954, - "name": "getDoc", - "qualified_name": "getDoc", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "load generated Markdown for the selected tree item.", - "reason": "load generated Markdown for the selected tree item.", - "terms": [ - "generated" - ] - }, - { - "id": 362, - "name": "readDoc", - "qualified_name": "wikiserver.Server.readDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce doc size limits before returning generated Markdown content.", - "reason": "enforce doc size limits before returning generated Markdown content.", - "terms": [ - "generated" - ] - }, - { - "id": 382, - "name": "findDocPath", - "qualified_name": "wikiserver.findDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "find a tree node by its generated doc_path value.", - "reason": "find a tree node by its generated doc_path value.", - "terms": [ - "generated" - ] - }, - { - "id": 395, - "name": "formatParamMarkdownTag", - "qualified_name": "wikiserver.formatParamMarkdownTag", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format @param tags consistently with browser-side generated doc fallback.", - "reason": "format @param tags consistently with browser-side generated doc fallback.", - "terms": [ - "generated" - ] - }, - { - "id": 1059, - "name": "Repository", - "qualified_name": "docs.Repository", - "kind": "type", - "file_path": "internal/app/docs/ports.go", - "intent": "isolate generated-format and lint policy from GORM query construction.", - "reason": "isolate generated-format and lint policy from GORM query construction.", - "terms": [ - "generated" - ] - }, - { - "id": 357, - "name": "handleDoc", - "qualified_name": "wikiserver.Server.handleDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read one generated Markdown document for display in the Wiki viewer.", - "reason": "read one generated Markdown document for display in the Wiki viewer.", - "terms": [ - "generated" - ] - }, - { - "id": 380, - "name": "docPathForSource", - "qualified_name": "wikiserver.docPathForSource", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert repository-relative source paths to their generated Markdown doc path.", - "reason": "convert repository-relative source paths to their generated Markdown doc path.", - "terms": [ - "generated" - ] - }, - { - "id": 381, - "name": "readDocFile", - "qualified_name": "wikiserver.readDocFile", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce generated doc size limits and read the resolved Markdown file.", - "reason": "enforce generated doc size limits and read the resolved Markdown file.", - "terms": [ - "generated" - ] - }, - { - "id": 397, - "name": "markdownLineRange", - "qualified_name": "wikiserver.markdownLineRange", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format graph node source ranges for generated-doc-compatible fallback Markdown.", - "reason": "format graph node source ranges for generated-doc-compatible fallback Markdown.", - "terms": [ - "generated" - ] - }, - { - "id": 420, - "name": "Remove", - "qualified_name": "contentfiles.Root.Remove", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prune only the relative generated path selected by application manifest policy.", - "reason": "prune only the relative generated path selected by application manifest policy.", - "terms": [ - "generated" - ] - }, - { - "id": 488, - "name": "QualifiedNameExists", - "qualified_name": "graphgorm.Store.QualifiedNameExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate local @see targets within the active docs namespace.", - "reason": "validate local @see targets within the active docs namespace.", - "terms": [ - "docs" - ] - }, - { - "id": 844, - "name": "walkPythonDocstrings", - "qualified_name": "treesitter.walkPythonDocstrings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "implement Python docstring discovery separately from the generic Walker.", - "reason": "implement Python docstring discovery separately from the generic Walker.", - "terms": [ - "docs" - ] - }, - { - "id": 1947, - "name": "ContextResponse", - "qualified_name": "ContextResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return a server-assembled Markdown bundle for selected docs.", - "reason": "return a server-assembled Markdown bundle for selected docs.", - "terms": [ - "docs" - ] - }, - { - "id": 219, - "name": "ragIndexRoot", - "qualified_name": "mcp.handlers.ragIndexRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "terms": [ - "generated" - ] - }, - { - "id": 495, - "name": "CreateFlow", - "qualified_name": "graphgorm.Store.CreateFlow", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "store traced flow aggregates while keeping generated IDs visible to application results.", - "reason": "store traced flow aggregates while keeping generated IDs visible to application results.", - "terms": [ - "generated" - ] - }, - { - "id": 1651, - "name": "docPath", - "qualified_name": "wiki.Builder.docPath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "convert a repository-relative source path to the generated Markdown doc path.", - "reason": "convert a repository-relative source path to the generated Markdown doc path.", - "terms": [ - "generated" - ] - }, - { - "id": 1673, - "name": "NodeDetails", - "qualified_name": "wiki.NodeDetails", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "reason": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "terms": [ - "generated" - ] - }, - { - "id": 99, - "name": "resolveOutDir", - "qualified_name": "cli.resolveOutDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "reason": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "terms": [ - "docs" - ] - }, - { - "id": 393, - "name": "annotationMarkdownBlocks", - "qualified_name": "wikiserver.annotationMarkdownBlocks", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "reason": "format annotation tags into labels already understood by the Wiki generated-doc renderer.", - "terms": [ - "generated" - ] - }, - { - "id": 419, - "name": "Write", - "qualified_name": "contentfiles.Root.Write", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "persist generated output only after safe-root validation and durable temporary-file completion.", - "reason": "persist generated output only after safe-root validation and durable temporary-file completion.", - "terms": [ - "generated" - ] - }, - { - "id": 222, - "name": "safePathUnderRoot", - "qualified_name": "mcp.safePathUnderRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "reject relative paths that would resolve outside the resolved docs root.", - "reason": "reject relative paths that would resolve outside the resolved docs root.", - "terms": [ - "docs" - ] - }, - { - "id": 714, - "name": "CommentSemantics", - "qualified_name": "treesitter.CommentSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages contribute docstrings or similar constructs without Walker language branches.", - "reason": "let languages contribute docstrings or similar constructs without Walker language branches.", - "terms": [ - "docs" - ] - }, - { - "id": 735, - "name": "additionalCommentsOrDefault", - "qualified_name": "treesitter.additionalCommentsOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages expose docstring-like constructs without affecting generic comment extraction.", - "reason": "let languages expose docstring-like constructs without affecting generic comment extraction.", - "terms": [ - "docs" - ] - }, - { - "id": 839, - "name": "AdditionalComments", - "qualified_name": "treesitter.PythonSemantics.AdditionalComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "surface docstrings through the same binder pipeline used for ordinary comments.", - "reason": "surface docstrings through the same binder pipeline used for ordinary comments.", - "terms": [ - "docs" - ] - }, - { - "id": 845, - "name": "tryExtractPythonDocstring", - "qualified_name": "treesitter.tryExtractPythonDocstring", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "reason": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "terms": [ - "docs" - ] - }, - { - "id": 847, - "name": "isFirstStringExprStmt", - "qualified_name": "treesitter.isFirstStringExprStmt", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "preserve Python docstring semantics that only the leading string literal counts.", - "reason": "preserve Python docstring semantics that only the leading string literal counts.", - "terms": [ - "docs" - ] - }, - { - "id": 1057, - "name": "RootedFiles", - "qualified_name": "docs.RootedFiles", - "kind": "type", - "file_path": "internal/app/docs/ports.go", - "intent": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "reason": "keep path containment, symlink checks, and filesystem mutation outside docs policy.", - "terms": [ - "docs" - ] - }, - { - "id": 423, - "name": "syncDir", - "qualified_name": "contentfiles.syncDir", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "reason": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "terms": [ - "generated" - ] - }, - { - "id": 359, - "name": "handleContext", - "qualified_name": "wikiserver.Server.handleContext", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "assemble selected docs or summaries into one Markdown block for LLM context.", - "reason": "assemble selected docs or summaries into one Markdown block for LLM context.", - "terms": [ - "docs" - ] - }, - { - "id": 836, - "name": "internal/adapters/outbound/treesitter/semantics_python.go", - "qualified_name": "internal/adapters/outbound/treesitter/semantics_python.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", - "reason": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", - "terms": [ - "docs" - ] - }, - { - "id": 837, - "name": "PythonSemantics", - "qualified_name": "treesitter.PythonSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", - "reason": "emit inheritance edges and docstrings while keeping the generic walker language-agnostic.", - "terms": [ - "docs" - ] - }, - { - "id": 843, - "name": "collectPythonDocstrings", - "qualified_name": "treesitter.collectPythonDocstrings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "move Python docstring extraction out of Walker while preserving binder-facing behavior.", - "reason": "move Python docstring extraction out of Walker while preserving binder-facing behavior.", - "terms": [ - "docs" - ] - }, - { - "id": 846, - "name": "isSupportedPythonDocstringLiteral", - "qualified_name": "treesitter.isSupportedPythonDocstringLiteral", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "accept only Python string literal forms that can legally act as docstrings.", - "reason": "accept only Python string literal forms that can legally act as docstrings.", - "terms": [ - "docs" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "docs" - ] - }, - { - "id": 1146, - "name": "CommentBlock", - "qualified_name": "ingest.CommentBlock", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "carry comments and docstring ownership from parser adapters into ingest binding policy.", - "reason": "carry comments and docstring ownership from parser adapters into ingest binding policy.", - "terms": [ - "docs" - ] - } - ] - }, - "why are old generated pages still present after their source files were removed": { - "corpus": 1901, - "terms": [ - { - "text": "old", - "in_reasons": 0 - }, - { - "text": "generated", - "in_reasons": 33 - }, - { - "text": "pages", - "in_reasons": 0 - }, - { - "text": "still", - "in_reasons": 10 - }, - { - "text": "present", - "in_reasons": 5 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "their", - "in_reasons": 34 - }, - { - "text": "source", - "in_reasons": 74 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "removed", - "in_reasons": 2 - } + "who checks that a push really came from the forge before we trust it": [ + 30, + 31, + 80, + 132, + 145, + 150, + 158, + 171, + 172, + 174, + 182, + 192, + 223, + 224, + 226, + 239, + 246, + 248, + 249, + 251, + 254, + 284, + 285, + 286, + 287, + 289, + 308, + 355, + 363, + 381, + 384, + 392, + 396, + 397, + 439, + 475, + 476, + 489, + 532, + 555, + 571, + 576, + 577, + 591, + 638, + 644, + 648, + 656, + 700, + 720, + 724, + 744, + 762, + 764, + 799, + 809, + 846, + 866, + 984, + 999, + 1002, + 1027, + 1064, + 1077, + 1079, + 1101, + 1147, + 1167, + 1198, + 1202, + 1205, + 1209, + 1216, + 1222, + 1223, + 1233, + 1237, + 1240, + 1257, + 1262, + 1283, + 1285, + 1286, + 1290, + 1296, + 1333, + 1356, + 1372, + 1373, + 1385, + 1393, + 1396, + 1397, + 1406, + 1413, + 1415, + 1418, + 1419, + 1447, + 1448, + 1484, + 1494, + 1508, + 1529, + 1546, + 1618, + 1711, + 1727, + 1728, + 1780, + 1831, + 1842, + 1843 ], - "hits": [ - { - "id": 380, - "name": "docPathForSource", - "qualified_name": "wikiserver.docPathForSource", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert repository-relative source paths to their generated Markdown doc path.", - "reason": "convert repository-relative source paths to their generated Markdown doc path.", - "terms": [ - "generated", - "their", - "source" - ] - }, - { - "id": 669, - "name": "DiscoverPackages", - "qualified_name": "treesitter.GoPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "walk the repository to identify Go packages and their source files.", - "reason": "walk the repository to identify Go packages and their source files.", - "terms": [ - "their", - "source", - "files" - ] - }, - { - "id": 1390, - "name": "upsertPackageContainsEdges", - "qualified_name": "workflow.upsertPackageContainsEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "populate the graph's structural hierarchy by connecting packages to their source files.", - "reason": "populate the graph's structural hierarchy by connecting packages to their source files.", - "terms": [ - "their", - "source", - "files" - ] - }, - { - "id": 554, - "name": "FindUnresolvedEdgesByFiles", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "reason": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "terms": [ - "after", - "source", - "files" - ] - }, - { - "id": 1673, - "name": "NodeDetails", - "qualified_name": "wiki.NodeDetails", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "reason": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "terms": [ - "generated", - "present" - ] - }, - { - "id": 154, - "name": "Get", - "qualified_name": "mcp.Cache.Get", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Returns only cached responses that are still within their validity period.", - "reason": "Returns only cached responses that are still within their validity period.", - "terms": [ - "still", - "their" - ] - }, - { - "id": 1356, - "name": "forceReparseFiles", - "qualified_name": "workflow.forceReparseFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "reason": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "terms": [ - "their", - "source", - "files" - ] - }, - { - "id": 1223, - "name": "resolveImportsFrom", - "qualified_name": "resolve.resolveImportsFrom", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link importing files to their target packages or files.", - "reason": "link importing files to their target packages or files.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 364, - "name": "resolveDocPath", - "qualified_name": "wikiserver.Server.resolveDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "terms": [ - "generated", - "source", - "files" - ] - }, - { - "id": 1297, - "name": "parsedBuildEdgeBatch", - "qualified_name": "workflow.parsedBuildEdgeBatch", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "persist edges only after their referenced nodes exist in the graph.", - "reason": "persist edges only after their referenced nodes exist in the graph.", - "terms": [ - "after", - "their" - ] - }, - { - "id": 1821, - "name": "RecordedReason", - "qualified_name": "graph.Node.RecordedReason", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "reason": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "terms": [ - "still", - "present" - ] - }, - { - "id": 419, - "name": "Write", - "qualified_name": "contentfiles.Root.Write", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "persist generated output only after safe-root validation and durable temporary-file completion.", - "reason": "persist generated output only after safe-root validation and durable temporary-file completion.", - "terms": [ - "generated", - "after" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "after", - "files" - ] - }, - { - "id": 423, - "name": "syncDir", - "qualified_name": "contentfiles.syncDir", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "reason": "best-effort directory fsync after atomic replacement to preserve prior generated-doc durability behavior.", - "terms": [ - "generated", - "after" - ] - }, - { - "id": 1043, - "name": "pruneManaged", - "qualified_name": "docs.Generator.pruneManaged", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "clean up stale generated docs without touching manually created files", - "reason": "clean up stale generated docs without touching manually created files", - "terms": [ - "generated", - "files" - ] - }, - { - "id": 420, - "name": "Remove", - "qualified_name": "contentfiles.Root.Remove", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prune only the relative generated path selected by application manifest policy.", - "reason": "prune only the relative generated path selected by application manifest policy.", - "terms": [ - "generated", - "files" - ] - }, - { - "id": 1389, - "name": "upsertPackageNodes", - "qualified_name": "workflow.upsertPackageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "ensure package nodes exist before their member files are linked.", - "reason": "ensure package nodes exist before their member files are linked.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 397, - "name": "markdownLineRange", - "qualified_name": "wikiserver.markdownLineRange", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "format graph node source ranges for generated-doc-compatible fallback Markdown.", - "reason": "format graph node source ranges for generated-doc-compatible fallback Markdown.", - "terms": [ - "generated", - "source" - ] - }, - { - "id": 1083, - "name": "deferredEdgeFile", - "qualified_name": "incremental.deferredEdgeFile", - "kind": "class", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "retain only the edge-resolution input needed after source bytes are released.", - "reason": "retain only the edge-resolution input needed after source bytes are released.", - "terms": [ - "after", - "source" - ] - }, - { - "id": 421, - "name": "ModTime", - "qualified_name": "contentfiles.Root.ModTime", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "let docs lint compare source and generated timestamps through a narrow port.", - "reason": "let docs lint compare source and generated timestamps through a narrow port.", - "terms": [ - "generated", - "source" - ] - }, - { - "id": 1651, - "name": "docPath", - "qualified_name": "wiki.Builder.docPath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "convert a repository-relative source path to the generated Markdown doc path.", - "reason": "convert a repository-relative source path to the generated Markdown doc path.", - "terms": [ - "generated", - "source" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "still", - "files" - ] - }, - { - "id": 679, - "name": "nodePackageScope", - "qualified_name": "treesitter.nodePackageScope", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "map repository files back to the package node that should own their imports.", - "reason": "map repository files back to the package node that should own their imports.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 1392, - "name": "packageFilePaths", - "qualified_name": "workflow.packageFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "collect all files that need to be linked to their containing package nodes.", - "reason": "collect all files that need to be linked to their containing package nodes.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 553, - "name": "FindUnresolvedEdgesByLookupKeys", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByLookupKeys", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "use the reverse index to identify affected unchanged source files.", - "reason": "use the reverse index to identify affected unchanged source files.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 1125, - "name": "releaseContent", - "qualified_name": "incremental.releaseContent", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "terms": [ - "after", - "source" - ] - }, - { - "id": 527, - "name": "DeleteNodesByFile", - "qualified_name": "graphgorm.Store.DeleteNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "reason": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "terms": [ - "removed" - ] - }, - { - "id": 1432, - "name": "addedUpdateFiles", - "qualified_name": "workflow.addedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "seed semi-naive unresolved lookup from newly introduced source files only.", - "reason": "seed semi-naive unresolved lookup from newly introduced source files only.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 1116, - "name": "stageBatch", - "qualified_name": "incremental.Syncer.stageBatch", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "terms": [ - "after", - "source" - ] - }, - { - "id": 672, - "name": "mergeSplitPackageDir", - "qualified_name": "treesitter.mergeSplitPackageDir", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep package nodes deterministic even when files come from multiple source roots.", - "reason": "keep package nodes deterministic even when files come from multiple source roots.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "after", - "files" - ] - }, - { - "id": 477, - "name": "crossRefEdges", - "qualified_name": "graphgorm.crossRefEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "reason": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "terms": [ - "present" - ] - }, - { - "id": 1610, - "name": "Search", - "qualified_name": "search.Service.Search", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer a search with the files that can justify their place, not the backend's raw order.", - "reason": "answer a search with the files that can justify their place, not the backend's raw order.", - "terms": [ - "their", - "files" - ] - }, - { - "id": 1630, - "name": "Builder", - "qualified_name": "wiki.Builder", - "kind": "class", - "file_path": "internal/app/wiki/builder.go", - "intent": "derive a package/file/symbol presentation tree directly from graph nodes.", - "reason": "derive a package/file/symbol presentation tree directly from graph nodes.", - "terms": [ - "present" - ] - }, - { - "id": 1689, - "name": "Repository", - "qualified_name": "wiki.Repository", - "kind": "type", - "file_path": "internal/app/wiki/ports.go", - "intent": "keep Wiki hierarchy and presentation policy independent of GORM query construction.", - "reason": "keep Wiki hierarchy and presentation policy independent of GORM query construction.", - "terms": [ - "present" - ] - }, - { - "id": 667, - "name": "DiscoverPackages", - "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "reason": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 1343, - "name": "walkMatchingFiles", - "qualified_name": "workflow.walkMatchingFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "reason": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 528, - "name": "DeleteNodesByFiles", - "qualified_name": "graphgorm.Store.DeleteNodesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "reason": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "terms": [ - "removed" - ] - }, - { - "id": 663, - "name": "DiscoverPackages", - "qualified_name": "treesitter.PythonPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "reason": "group Python source files by containing directory and support both __init__.py packages and implicit namespace packages.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 555, - "name": "DeleteUnresolvedEdgesByFingerprints", - "qualified_name": "graphgorm.Store.DeleteUnresolvedEdgesByFingerprints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep the reverse index limited to relationships that still lack endpoints.", - "reason": "keep the reverse index limited to relationships that still lack endpoints.", - "terms": [ - "still" - ] - }, - { - "id": 1455, - "name": "ParseRepoRule", - "qualified_name": "reposync.ParseRepoRule", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "reason": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "terms": [ - "still" - ] - }, - { - "id": 666, - "name": "DiscoverPackages", - "qualified_name": "treesitter.JavaPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "reason": "group Java source files by declared package so package nodes reflect actual import targets rather than directory guesses.", - "terms": [ - "source", - "files" - ] - }, - { - "id": 719, - "name": "DefinitionResult", - "qualified_name": "treesitter.DefinitionResult", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "reason": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "terms": [ - "still" - ] - }, - { - "id": 389, - "name": "nodeMarkdown", - "qualified_name": "wikiserver.nodeMarkdown", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "reason": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "terms": [ - "generated" - ] - }, - { - "id": 1365, - "name": "parserForExt", - "qualified_name": "workflow.Service.parserForExt", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "let tests inject custom parsers while still using the production walker registry by default.", - "reason": "let tests inject custom parsers while still using the production walker registry by default.", - "terms": [ - "still" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "still" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "after" - ] - }, - { - "id": 1143, - "name": "withStringMap", - "qualified_name": "ingest.withStringMap", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "prevent callers from mutating parser context maps after injection.", - "reason": "prevent callers from mutating parser context maps after injection.", - "terms": [ - "after" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "after" - ] - } - ] - }, - "why are only reasons and rules searchable in the intent index": { - "corpus": 1901, - "terms": [ - { - "text": "only", - "in_reasons": 85 - }, - { - "text": "reasons", - "in_reasons": 7 - }, - { - "text": "rules", - "in_reasons": 17 - }, - { - "text": "searchable", - "in_reasons": 1 - }, - { - "text": "intent", - "in_reasons": 15 - }, - { - "text": "index", - "in_reasons": 61 - } + "why are handwritten pages kept when obsolete generated docs are pruned": [ + 9, + 11, + 12, + 51, + 168, + 171, + 173, + 290, + 294, + 297, + 300, + 301, + 303, + 305, + 308, + 309, + 310, + 311, + 316, + 327, + 328, + 329, + 336, + 338, + 339, + 340, + 342, + 344, + 360, + 362, + 365, + 366, + 368, + 370, + 434, + 442, + 487, + 659, + 665, + 680, + 781, + 782, + 784, + 788, + 789, + 790, + 791, + 792, + 989, + 990, + 998, + 999, + 1001, + 1002, + 1004, + 1092, + 1579, + 1598, + 1620, + 1733, + 1734, + 1735, + 1855, + 1864, + 1891, + 1894, + 1901, + 1904, + 1906 ], - "hits": [ - { - "id": 630, - "name": "buildSQLiteIntentInsert", - "qualified_name": "searchsql.buildSQLiteIntentInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "keep the intent index limited to reasons that were actually written down.", - "reason": "keep the intent index limited to reasons that were actually written down.", - "terms": [ - "reasons", - "intent", - "index" - ] - }, - { - "id": 621, - "name": "rebuildIntentTable", - "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces.", - "reason": "resynchronize the namespace-scoped intent index from the recorded reasons without disturbing other namespaces.", - "terms": [ - "reasons", - "intent", - "index" - ] - }, - { - "id": 615, - "name": "migrateIntentTable", - "qualified_name": "searchsql.SQLiteBackend.migrateIntentTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "reason": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "terms": [ - "reasons", - "intent", - "index" - ] - }, - { - "id": 607, - "name": "intentTerm", - "qualified_name": "searchsql.intentTerm", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "reason": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "terms": [ - "only", - "intent", - "index" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "reasons", - "index" - ] - }, - { - "id": 1552, - "name": "Searcher", - "qualified_name": "intent.Searcher", - "kind": "type", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let search consume a bound intent-index implementation without a database handle.", - "reason": "let search consume a bound intent-index implementation without a database handle.", - "terms": [ - "intent", - "index" - ] - }, - { - "id": 1523, - "name": "pathTokens", - "qualified_name": "document.pathTokens", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "make basename, extension, and human language names searchable.", - "reason": "make basename, extension, and human language names searchable.", - "terms": [ - "searchable" - ] - }, - { - "id": 622, - "name": "rebuildIntentTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "only", - "reasons" - ] - }, - { - "id": 80, - "name": "lintRuleMatches", - "qualified_name": "cli.lintRuleMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "determine if a single ignore rule covers a specific lint finding", - "reason": "determine if a single ignore rule covers a specific lint finding", - "terms": [ - "only", - "rules" - ] - }, - { - "id": 1456, - "name": "AllowRuleOwners", - "qualified_name": "reposync.AllowRuleOwners", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "terms": [ - "only", - "rules" - ] - }, - { - "id": 603, - "name": "SanitizeIntentFTS5", - "qualified_name": "searchsql.SanitizeIntentFTS5", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "let a sentence-shaped question match a sentence-shaped reason.", - "reason": "let a sentence-shaped question match a sentence-shaped reason.", - "terms": [ - "intent", - "index" - ] - }, - { - "id": 605, - "name": "SanitizePostgresIntentTSQuery", - "qualified_name": "searchsql.SanitizePostgresIntentTSQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "let a sentence-shaped question match a sentence-shaped reason on PostgreSQL.", - "reason": "let a sentence-shaped question match a sentence-shaped reason on PostgreSQL.", - "terms": [ - "intent", - "index" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "only", - "rules" - ] - }, - { - "id": 1557, - "name": "CanAnswer", - "qualified_name": "intent.Result.CanAnswer", - "kind": "function", - "file_path": "internal/app/search/intent/intent.go", - "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason.", - "terms": [ - "only", - "intent" - ] - }, - { - "id": 631, - "name": "createSQLiteIntentFTSTable", - "qualified_name": "searchsql.createSQLiteIntentFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "create an FTS5 table whose only indexed text is the reason a node exists.", - "reason": "create an FTS5 table whose only indexed text is the reason a node exists.", - "terms": [ - "only", - "index" - ] - }, - { - "id": 1529, - "name": "IntentHit", - "qualified_name": "evidence.IntentHit", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "carry the intent query's evidence into the list without the list depending on the intent packages.", - "reason": "carry the intent query's evidence into the list without the list depending on the intent packages.", - "terms": [ - "intent" - ] - }, - { - "id": 1162, - "name": "SearchWriter", - "qualified_name": "ingest.SearchWriter", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose full and scoped search rebuilds as indivisible application operations.", - "reason": "expose full and scoped search rebuilds as indivisible application operations.", - "terms": [ - "only", - "index" - ] - }, - { - "id": 1244, - "name": "isExportedName", - "qualified_name": "resolve.isExportedName", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "apply Go visibility rules during symbol resolution.", - "reason": "apply Go visibility rules during symbol resolution.", - "terms": [ - "rules" - ] - }, - { - "id": 367, - "name": "retrieveResultFromFile", - "qualified_name": "wikiserver.retrieveResultFromFile", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "show a file through the reasons its declarations gave, not just its path.", - "reason": "show a file through the reasons its declarations gave, not just its path.", - "terms": [ - "reasons" - ] - }, - { - "id": 399, - "name": "validateNamespace", - "qualified_name": "wikiserver.validateNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep namespace path validation aligned with namespace filesystem rules.", - "reason": "keep namespace path validation aligned with namespace filesystem rules.", - "terms": [ - "rules" - ] - }, - { - "id": 698, - "name": "trimNodeWildcard", - "qualified_name": "treesitter.trimNodeWildcard", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize alias rules before matching them against source directories.", - "reason": "normalize alias rules before matching them against source directories.", - "terms": [ - "rules" - ] - }, - { - "id": 629, - "name": "insertSQLiteIntentBatch", - "qualified_name": "searchsql.insertSQLiteIntentBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "reasons" - ] - }, - { - "id": 1277, - "name": "PackagePrefix", - "qualified_name": "resolve.goLanguageDispatch.PackagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "keep Go package naming rules in the Go dispatch strategy.", - "reason": "keep Go package naming rules in the Go dispatch strategy.", - "terms": [ - "rules" - ] - }, - { - "id": 1791, - "name": "Parse", - "qualified_name": "annotation.Parser.Parse", - "kind": "function", - "file_path": "internal/domain/annotation/parser.go", - "intent": "extract machine-readable metadata from developer comments", - "reason": "extract machine-readable metadata from developer comments", - "terms": [ - "intent" - ] - }, - { - "id": 845, - "name": "tryExtractPythonDocstring", - "qualified_name": "treesitter.tryExtractPythonDocstring", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "reason": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "terms": [ - "rules" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "rules" - ] - }, - { - "id": 728, - "name": "NoopCallRewriter", - "qualified_name": "treesitter.NoopCallRewriter", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "provide the default empty implementation for language specs without call rewrite rules.", - "reason": "provide the default empty implementation for language specs without call rewrite rules.", - "terms": [ - "rules" - ] - }, - { - "id": 877, - "name": "Spec", - "qualified_name": "treesitter.Walker.Spec", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "expose the configured language rules and query paths for this walker instance", - "reason": "expose the configured language rules and query paths for this walker instance", - "terms": [ - "rules" - ] - }, - { - "id": 1288, - "name": "PackagePrefix", - "qualified_name": "resolve.rustLanguageDispatch.PackagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_rust.go", - "intent": "keep Rust naming rules localized even though current resolver use is minimal.", - "reason": "keep Rust naming rules localized even though current resolver use is minimal.", - "terms": [ - "rules" - ] - }, - { - "id": 1618, - "name": "coverageFromIntent", - "qualified_name": "search.coverageFromIntent", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep the intent port's types out of the answer the surfaces serialize.", - "reason": "keep the intent port's types out of the answer the surfaces serialize.", - "terms": [ - "intent" - ] - }, - { - "id": 1333, - "name": "mergeFilterResolvedDiagnostics", - "qualified_name": "workflow.mergeFilterResolvedDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "reason": "reuse the same unresolved-edge aggregation rules across build and incremental sync flows.", - "terms": [ - "rules" - ] - }, - { - "id": 1528, - "name": "NodeRef", - "qualified_name": "evidence.NodeRef", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "key per-node intent evidence so it cannot leak onto another repository's node.", - "reason": "key per-node intent evidence so it cannot leak onto another repository's node.", - "terms": [ - "intent" - ] - }, - { - "id": 671, - "name": "rememberSplitPackage", - "qualified_name": "treesitter.rememberSplitPackage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "support JVM source-set layouts where one package is intentionally spread across main/test directories.", - "reason": "support JVM source-set layouts where one package is intentionally spread across main/test directories.", - "terms": [ - "intent" - ] - }, - { - "id": 1335, - "name": "shouldSuppressExternalImportUnresolved", - "qualified_name": "workflow.shouldSuppressExternalImportUnresolved", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "reason": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "terms": [ - "intent" - ] - }, - { - "id": 1454, - "name": "matchBranchPatterns", - "qualified_name": "reposync.matchBranchPatterns", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites.", - "reason": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites.", - "terms": [ - "rules" - ] - }, - { - "id": 1193, - "name": "addNodes", - "qualified_name": "resolve.resolveState.addNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "batch add nodes to internal indexes.", - "reason": "batch add nodes to internal indexes.", - "terms": [ - "index" - ] - }, - { - "id": 1541, - "name": "reasonOverlaps", - "qualified_name": "evidence.reasonOverlaps", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "reason": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "terms": [ - "only", - "index" - ] - }, - { - "id": 1209, - "name": "flattenNodes", - "qualified_name": "resolve.flattenNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "prepare nodes for indexing and state population.", - "reason": "prepare nodes for indexing and state population.", - "terms": [ - "index" - ] - }, - { - "id": 1448, - "name": "RepoFilter", - "qualified_name": "reposync.RepoFilter", - "kind": "class", - "file_path": "internal/app/reposync/admission.go", - "intent": "provide a single matcher whose result depends on rule declaration order, where later matching rules override earlier ones.", - "reason": "provide a single matcher whose result depends on rule declaration order, where later matching rules override earlier ones.", - "terms": [ - "rules" - ] - }, - { - "id": 1064, - "name": "writeIndex", - "qualified_name": "docs.Generator.writeIndex", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "전체 파일 문서에 대한 탐색용 index.md를 저장한다.", - "reason": "전체 파일 문서에 대한 탐색용 index.md를 저장한다.", - "terms": [ - "index" - ] - }, - { - "id": 597, - "name": "QueryIntent", - "qualified_name": "searchsql.Reader.QueryIntent", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "reason": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "terms": [ - "intent" - ] - }, - { - "id": 614, - "name": "Migrate", - "qualified_name": "searchsql.SQLiteBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Creates a full-text search index table for SQLite.", - "reason": "Creates a full-text search index table for SQLite.", - "terms": [ - "index" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "only" - ] - }, - { - "id": 407, - "name": "safeAbsolutePath", - "qualified_name": "wikiserver.safeAbsolutePath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "validate an absolute wiki-index path against one approved root.", - "reason": "validate an absolute wiki-index path against one approved root.", - "terms": [ - "index" - ] - }, - { - "id": 425, - "name": "WikiIndexWriter", - "qualified_name": "contentfiles.WikiIndexWriter", - "kind": "class", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "prevent readers from observing partial built-in Wiki index snapshots.", - "reason": "prevent readers from observing partial built-in Wiki index snapshots.", - "terms": [ - "index" - ] - }, - { - "id": 553, - "name": "FindUnresolvedEdgesByLookupKeys", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByLookupKeys", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "use the reverse index to identify affected unchanged source files.", - "reason": "use the reverse index to identify affected unchanged source files.", - "terms": [ - "index" - ] - }, - { - "id": 606, - "name": "alwaysPrefix", - "qualified_name": "searchsql.alwaysPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep prefix expansion the default for the shared search index.", - "reason": "keep prefix expansion the default for the shared search index.", - "terms": [ - "index" - ] - }, - { - "id": 1194, - "name": "indexNode", - "qualified_name": "resolve.resolveState.indexNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "maintain consistent node indexing by ID, QN, file, and name.", - "reason": "maintain consistent node indexing by ID, QN, file, and name.", - "terms": [ - "index" - ] - }, - { - "id": 1568, - "name": "parseGroups", - "qualified_name": "intentrank.parseGroups", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "score the same terms the index was asked to match.", - "reason": "score the same terms the index was asked to match.", - "terms": [ - "index" - ] - }, - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "only" - ] - } - ] - }, - "why are unchanged files skipped without calling a parser again": { - "corpus": 1901, - "terms": [ - { - "text": "unchanged", - "in_reasons": 10 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "skipped", - "in_reasons": 7 - }, - { - "text": "without", - "in_reasons": 214 - }, - { - "text": "calling", - "in_reasons": 0 - }, - { - "text": "parser", - "in_reasons": 61 - }, - { - "text": "again", - "in_reasons": 17 - } + "why are old generated pages still present after their source files were removed": [ + 11, + 12, + 42, + 43, + 109, + 111, + 121, + 125, + 140, + 147, + 150, + 152, + 168, + 170, + 172, + 174, + 192, + 200, + 207, + 218, + 244, + 248, + 249, + 250, + 287, + 301, + 303, + 308, + 309, + 310, + 311, + 327, + 328, + 329, + 336, + 338, + 339, + 340, + 342, + 344, + 346, + 352, + 360, + 362, + 365, + 366, + 367, + 368, + 370, + 373, + 394, + 397, + 399, + 400, + 422, + 423, + 428, + 431, + 432, + 442, + 459, + 465, + 471, + 473, + 501, + 502, + 503, + 504, + 562, + 605, + 606, + 609, + 612, + 613, + 615, + 616, + 617, + 618, + 620, + 625, + 632, + 633, + 634, + 639, + 642, + 644, + 645, + 646, + 647, + 664, + 687, + 705, + 706, + 707, + 711, + 753, + 769, + 818, + 830, + 835, + 854, + 855, + 862, + 952, + 956, + 963, + 987, + 988, + 989, + 990, + 991, + 998, + 999, + 1002, + 1004, + 1018, + 1019, + 1021, + 1025, + 1028, + 1033, + 1034, + 1042, + 1043, + 1046, + 1053, + 1055, + 1059, + 1060, + 1061, + 1062, + 1068, + 1071, + 1078, + 1081, + 1090, + 1098, + 1101, + 1104, + 1119, + 1121, + 1156, + 1171, + 1174, + 1176, + 1177, + 1180, + 1191, + 1193, + 1243, + 1244, + 1246, + 1248, + 1249, + 1256, + 1259, + 1261, + 1275, + 1278, + 1285, + 1287, + 1288, + 1290, + 1296, + 1301, + 1302, + 1303, + 1310, + 1323, + 1324, + 1326, + 1333, + 1334, + 1336, + 1341, + 1344, + 1345, + 1353, + 1369, + 1370, + 1374, + 1377, + 1378, + 1379, + 1380, + 1402, + 1423, + 1426, + 1447, + 1457, + 1458, + 1488, + 1495, + 1496, + 1502, + 1522, + 1538, + 1549, + 1550, + 1555, + 1558, + 1570, + 1577, + 1579, + 1587, + 1598, + 1603, + 1608, + 1618, + 1620, + 1625, + 1635, + 1636, + 1683, + 1684, + 1685, + 1688, + 1698, + 1730, + 1756, + 1777, + 1778, + 1818, + 1819, + 1842, + 1855, + 1873, + 1891, + 1901, + 1904 ], - "hits": [ - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "unchanged", - "files", - "skipped" - ] - }, - { - "id": 553, - "name": "FindUnresolvedEdgesByLookupKeys", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByLookupKeys", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "use the reverse index to identify affected unchanged source files.", - "reason": "use the reverse index to identify affected unchanged source files.", - "terms": [ - "unchanged", - "files" - ] - }, - { - "id": 701, - "name": "stripJSONComments", - "qualified_name": "treesitter.stripJSONComments", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "reason": "let tsconfig discovery accept common commented config files without introducing a separate parser dependency.", - "terms": [ - "files", - "without", - "parser" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "unchanged", - "files" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "files", - "again" - ] - }, - { - "id": 184, - "name": "traceFlowMember", - "qualified_name": "mcp.traceFlowMember", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "serialize flow member references without exposing the full node record.", - "reason": "serialize flow member references without exposing the full node record.", - "terms": [ - "unchanged", - "without" - ] - }, - { - "id": 1156, - "name": "UnresolvedEdgeStore", - "qualified_name": "ingest.UnresolvedEdgeStore", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "select unchanged source edges affected by newly added symbols without exposing persistence details.", - "reason": "select unchanged source edges affected by newly added symbols without exposing persistence details.", - "terms": [ - "unchanged", - "without" - ] - }, - { - "id": 1831, - "name": "UnresolvedEdgeCandidate", - "qualified_name": "graph.UnresolvedEdgeCandidate", - "kind": "class", - "file_path": "internal/domain/graph/unresolved.go", - "intent": "let newly added symbols select affected unchanged callers without reparsing the whole graph.", - "reason": "let newly added symbols select affected unchanged callers without reparsing the whole graph.", - "terms": [ - "unchanged", - "without" - ] - }, - { - "id": 699, - "name": "dirMatchesPrefix", - "qualified_name": "treesitter.dirMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match source directories against tsconfig path targets without partial-segment false positives.", - "reason": "match source directories against tsconfig path targets without partial-segment false positives.", - "terms": [ - "without", - "again" - ] - }, - { - "id": 1299, - "name": "buildParseInput", - "qualified_name": "workflow.buildParseInput", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "reason": "keep deterministic input sequencing separate from concurrent filesystem and parser work.", - "terms": [ - "files", - "parser" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "files", - "parser" - ] - }, - { - "id": 1342, - "name": "shouldSkipDir", - "qualified_name": "workflow.shouldSkipDir", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep default source traversal exclusions local to the ingest workflow.", - "reason": "keep default source traversal exclusions local to the ingest workflow.", - "terms": [ - "skipped" - ] - }, - { - "id": 1147, - "name": "PackageInterfaceInfo", - "qualified_name": "ingest.PackageInterfaceInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "preserve package-level implementation inference without exposing parser implementation types.", - "reason": "preserve package-level implementation inference without exposing parser implementation types.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1571, - "name": "MatchesByPrefix", - "qualified_name": "intentrank.MatchesByPrefix", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "measure a term against the misfire that motivated the rule, not against a raw length.", - "reason": "measure a term against the misfire that motivated the rule, not against a raw length.", - "terms": [ - "again" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "unchanged", - "without" - ] - }, - { - "id": 1140, - "name": "ImportPackagesFromContext", - "qualified_name": "ingest.ImportPackagesFromContext", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "let parser adapters consume application-owned package context without reversing dependencies.", - "reason": "let parser adapters consume application-owned package context without reversing dependencies.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1158, - "name": "MetadataParser", - "qualified_name": "ingest.MetadataParser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose package/interface metadata without coupling ingest to parser adapter structs.", - "reason": "expose package/interface metadata without coupling ingest to parser adapter structs.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1464, - "name": "parseCloneBaseURL", - "qualified_name": "reposync.parseCloneBaseURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "reason": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1043, - "name": "pruneManaged", - "qualified_name": "docs.Generator.pruneManaged", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "clean up stale generated docs without touching manually created files", - "reason": "clean up stale generated docs without touching manually created files", - "terms": [ - "files", - "without" - ] - }, - { - "id": 1107, - "name": "NewWithRegistry", - "qualified_name": "incremental.NewWithRegistry", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "support multi-language incremental parsing without breaking the legacy single-parser constructor", - "reason": "support multi-language incremental parsing without breaking the legacy single-parser constructor", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1377, - "name": "packageDiscoverers", - "qualified_name": "workflow.Service.packageDiscoverers", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "discover packages through the ingest parser port without exposing adapter language specifications.", - "reason": "discover packages through the ingest parser port without exposing adapter language specifications.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 477, - "name": "crossRefEdges", - "qualified_name": "graphgorm.crossRefEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "reason": "reuse existing traversal algorithms unchanged by presenting refs as edges.", - "terms": [ - "unchanged" - ] - }, - { - "id": 243, - "name": "appendUniqueStrings", - "qualified_name": "mcp.appendUniqueStrings", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "append values to a slice while preserving uniqueness for skipped-step reporting.", - "reason": "append values to a slice while preserving uniqueness for skipped-step reporting.", - "terms": [ - "skipped" - ] - }, - { - "id": 602, - "name": "SanitizeFTS5", - "qualified_name": "searchsql.SanitizeFTS5", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "reason": "build SQLite FTS queries that preserve prefix matching without exposing parser-breaking characters.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 721, - "name": "WithImportPackages", - "qualified_name": "treesitter.WithImportPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let build/update provide package-clause-aware import normalization without widening parser interfaces.", - "reason": "let build/update provide package-clause-aware import normalization without widening parser interfaces.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1151, - "name": "PackageContext", - "qualified_name": "ingest.PackageContext", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "let parser adapters enrich multi-file packages without leaking AST types into ingest.", - "reason": "let parser adapters enrich multi-file packages without leaking AST types into ingest.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1348, - "name": "asError", - "qualified_name": "workflow.unreadableFileSummary.asError", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "reason": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "terms": [ - "skipped" - ] - }, - { - "id": 1690, - "name": "IndexWriter", - "qualified_name": "wiki.IndexWriter", - "kind": "type", - "file_path": "internal/app/wiki/ports.go", - "intent": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "reason": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "terms": [ - "files", - "without" - ] - }, - { - "id": 738, - "name": "SemanticsForLanguage", - "qualified_name": "treesitter.SemanticsForLanguage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "reason": "let non-parser orchestration reuse the centralized language semantics registry without local language switches.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1139, - "name": "WithImportPackages", - "qualified_name": "ingest.WithImportPackages", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "thread parser-neutral package names through build and update calls without adapter-specific APIs.", - "reason": "thread parser-neutral package names through build and update calls without adapter-specific APIs.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1386, - "name": "filePackageImportPaths", - "qualified_name": "workflow.filePackageImportPaths", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "seed parser qualified names from discovered package ownership without depending on map iteration order.", - "reason": "seed parser qualified names from discovered package ownership without depending on map iteration order.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 698, - "name": "trimNodeWildcard", - "qualified_name": "treesitter.trimNodeWildcard", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize alias rules before matching them against source directories.", - "reason": "normalize alias rules before matching them against source directories.", - "terms": [ - "again" - ] - }, - { - "id": 1589, - "name": "nameSim", - "qualified_name": "rank.nameSim", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score query tokens against simple and qualified node identifiers.", - "reason": "score query tokens against simple and qualified node identifiers.", - "terms": [ - "again" - ] - }, - { - "id": 811, - "name": "parseJavaClassHierarchy", - "qualified_name": "treesitter.parseJavaClassHierarchy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions.", - "reason": "derive Java hierarchy edge endpoints without depending on grammar field-name stability across parser revisions.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1121, - "name": "resolveParser", - "qualified_name": "incremental.Syncer.resolveParser", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "reason": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "terms": [ - "without", - "parser" - ] - }, - { - "id": 1428, - "name": "classifyUpdateSnapshot", - "qualified_name": "workflow.classifyUpdateSnapshot", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "reason": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "terms": [ - "skipped" - ] - }, - { - "id": 407, - "name": "safeAbsolutePath", - "qualified_name": "wikiserver.safeAbsolutePath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "validate an absolute wiki-index path against one approved root.", - "reason": "validate an absolute wiki-index path against one approved root.", - "terms": [ - "again" - ] - }, - { - "id": 700, - "name": "pathMatchesPrefix", - "qualified_name": "treesitter.pathMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match concrete source file paths against tsconfig alias target roots.", - "reason": "match concrete source file paths against tsconfig alias target roots.", - "terms": [ - "again" - ] - }, - { - "id": 1591, - "name": "scoreTargets", - "qualified_name": "rank.scoreTargets", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score one query against several spellings of the same node.", - "reason": "score one query against several spellings of the same node.", - "terms": [ - "again" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "files", - "without" - ] - }, - { - "id": 274, - "name": "cachedExecute", - "qualified_name": "mcp.handlers.cachedExecute", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "reason": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "terms": [ - "skipped" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "skipped" - ] - }, - { - "id": 1055, - "name": "ccgRefExists", - "qualified_name": "docs.Generator.ccgRefExists", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "reason": "let docs lint validate cross-namespace refs while keeping local @see lookup semantics unchanged.", - "terms": [ - "unchanged" - ] - }, - { - "id": 82, - "name": "countNonIgnoredWithRules", - "qualified_name": "cli.countNonIgnoredWithRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "compute the strict-mode failure count against an explicit rule set", - "reason": "compute the strict-mode failure count against an explicit rule set", - "terms": [ - "again" - ] - }, - { - "id": 384, - "name": "refPathMatchesTree", - "qualified_name": "wikiserver.refPathMatchesTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "compare a ccg:// path/symbol target against one Wiki tree node.", - "reason": "compare a ccg:// path/symbol target against one Wiki tree node.", - "terms": [ - "again" - ] - }, - { - "id": 387, - "name": "sameRefPath", - "qualified_name": "wikiserver.sameRefPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "match ccg:// file paths against graph and Wiki slash-separated paths.", - "reason": "match ccg:// file paths against graph and Wiki slash-separated paths.", - "terms": [ - "again" - ] - }, - { - "id": 909, - "name": "Hunk", - "qualified_name": "changes.Hunk", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "represent a diff segment that can be matched against graph nodes", - "reason": "represent a diff segment that can be matched against graph nodes", - "terms": [ - "again" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "files", - "without" - ] - }, - { - "id": 1622, - "name": "ResultItem", - "qualified_name": "wire.ResultItem", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "preserve a stable per-item DTO for search responses.", - "reason": "preserve a stable per-item DTO for search responses.", - "terms": [ - "unchanged" - ] - } - ] - }, - "why can searching for a language name find files that only carry an extension": { - "corpus": 1901, - "terms": [ - { - "text": "searching", - "in_reasons": 1 - }, - { - "text": "language", - "in_reasons": 87 - }, - { - "text": "name", - "in_reasons": 289 - }, - { - "text": "find", - "in_reasons": 16 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "only", - "in_reasons": 85 - }, - { - "text": "carry", - "in_reasons": 26 - }, - { - "text": "extension", - "in_reasons": 8 - } + "why are only reasons and rules searchable in the intent index": [ + 9, + 11, + 29, + 109, + 111, + 121, + 122, + 123, + 125, + 138, + 168, + 171, + 191, + 193, + 244, + 286, + 289, + 311, + 314, + 333, + 346, + 354, + 362, + 365, + 366, + 371, + 468, + 473, + 478, + 485, + 487, + 501, + 502, + 503, + 504, + 506, + 524, + 526, + 529, + 539, + 546, + 550, + 551, + 553, + 556, + 559, + 561, + 562, + 563, + 564, + 568, + 569, + 570, + 575, + 577, + 578, + 579, + 617, + 644, + 673, + 719, + 723, + 736, + 739, + 748, + 752, + 774, + 783, + 790, + 791, + 792, + 813, + 822, + 835, + 838, + 898, + 900, + 961, + 998, + 1009, + 1024, + 1028, + 1046, + 1053, + 1062, + 1078, + 1080, + 1100, + 1111, + 1113, + 1121, + 1124, + 1135, + 1136, + 1141, + 1142, + 1152, + 1157, + 1192, + 1211, + 1225, + 1236, + 1242, + 1244, + 1255, + 1275, + 1276, + 1280, + 1282, + 1326, + 1354, + 1374, + 1375, + 1378, + 1380, + 1381, + 1382, + 1390, + 1394, + 1398, + 1399, + 1401, + 1404, + 1407, + 1418, + 1419, + 1424, + 1428, + 1472, + 1474, + 1475, + 1478, + 1479, + 1493, + 1500, + 1502, + 1504, + 1505, + 1507, + 1510, + 1511, + 1513, + 1518, + 1519, + 1520, + 1526, + 1534, + 1547, + 1554, + 1565, + 1569, + 1579, + 1596, + 1603, + 1620, + 1625, + 1648, + 1711, + 1732, + 1741, + 1765, + 1766, + 1786, + 1800, + 1826, + 1870 ], - "hits": [ - { - "id": 1524, - "name": "languageAlias", - "qualified_name": "document.languageAlias", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "preserve language-name recall for extension-only file paths.", - "reason": "preserve language-name recall for extension-only file paths.", - "terms": [ - "language", - "name", - "only", - "extension" - ] - }, - { - "id": 1523, - "name": "pathTokens", - "qualified_name": "document.pathTokens", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "make basename, extension, and human language names searchable.", - "reason": "make basename, extension, and human language names searchable.", - "terms": [ - "language", - "name", - "extension" - ] - }, - { - "id": 1887, - "name": "langEntry", - "qualified_name": "runtime.langEntry", - "kind": "class", - "file_path": "internal/runtime/runtime.go", - "intent": "keep language specs and extension aliases together during registry initialization.", - "reason": "keep language specs and extension aliases together during registry initialization.", - "terms": [ - "language", - "extension" - ] - }, - { - "id": 1269, - "name": "explicitOwnerShortNameCandidates", - "qualified_name": "resolve.explicitOwnerShortNameCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "terms": [ - "searching", - "name" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "name", - "files", - "only" - ] - }, - { - "id": 1105, - "name": "WithParsers", - "qualified_name": "incremental.WithParsers", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let incremental sync dispatch parsing per file extension for multi-language projects", - "reason": "let incremental sync dispatch parsing per file extension for multi-language projects", - "terms": [ - "language", - "extension" - ] - }, - { - "id": 87, - "name": "lintRule", - "qualified_name": "cli.lintRule", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "carry the pattern, category, and action that determine how a lint finding is handled", - "reason": "carry the pattern, category, and action that determine how a lint finding is handled", - "terms": [ - "find", - "carry" - ] - }, - { - "id": 1465, - "name": "internal/app/reposync/ports.go", - "qualified_name": "internal/app/reposync/ports.go", - "kind": "file", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "only", - "carry" - ] - }, - { - "id": 1466, - "name": "CheckoutRequest", - "qualified_name": "reposync.CheckoutRequest", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "only", - "carry" - ] - }, - { - "id": 80, - "name": "lintRuleMatches", - "qualified_name": "cli.lintRuleMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "determine if a single ignore rule covers a specific lint finding", - "reason": "determine if a single ignore rule covers a specific lint finding", - "terms": [ - "find", - "only" - ] - }, - { - "id": 889, - "name": "mapDefTypeToNodeKind", - "qualified_name": "treesitter.Walker.mapDefTypeToNodeKind", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep language query captures aligned with graph node categorization", - "reason": "keep language query captures aligned with graph node categorization", - "terms": [ - "language", - "name", - "only" - ] - }, - { - "id": 1553, - "name": "Hit", - "qualified_name": "intent.Hit", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "carry the reason a declaration ranked, not only that it ranked.", - "reason": "carry the reason a declaration ranked, not only that it ranked.", - "terms": [ - "only", - "carry" - ] - }, - { - "id": 518, - "name": "GetNode", - "qualified_name": "graphgorm.Store.GetNode", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "find one node by the declaration's qualified name.", - "reason": "find one node by the declaration's qualified name.", - "terms": [ - "name", - "find" - ] - }, - { - "id": 1124, - "name": "parsedSyncFile", - "qualified_name": "incremental.parsedSyncFile", - "kind": "class", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "carry parsed nodes, edges, comments, and language state through the sync pipeline.", - "reason": "carry parsed nodes, edges, comments, and language state through the sync pipeline.", - "terms": [ - "language", - "carry" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "files", - "only" - ] - }, - { - "id": 1719, - "name": "resolvePostgresExtensionSchema", - "qualified_name": "dbtest.resolvePostgresExtensionSchema", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "settle the extension's location once so every test's search_path can name it.", - "reason": "settle the extension's location once so every test's search_path can name it.", - "terms": [ - "name", - "extension" - ] - }, - { - "id": 970, - "name": "NamespaceSummary", - "qualified_name": "analyze.NamespaceSummary", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry namespace discovery results independently of MCP response types.", - "reason": "carry namespace discovery results independently of MCP response types.", - "terms": [ - "name", - "carry" - ] - }, - { - "id": 420, - "name": "Remove", - "qualified_name": "contentfiles.Root.Remove", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prune only the relative generated path selected by application manifest policy.", - "reason": "prune only the relative generated path selected by application manifest policy.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 474, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", - "reason": "let impact analysis find foreign namespaces that depend on the target nodes.", - "terms": [ - "name", - "find" - ] - }, - { - "id": 1943, - "name": "GraphResponse", - "qualified_name": "GraphResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry bounded namespace graph data for the visual graph tab.", - "reason": "carry bounded namespace graph data for the visual graph tab.", - "terms": [ - "name", - "carry" - ] - }, - { - "id": 891, - "name": "resolveTestedBy", - "qualified_name": "treesitter.Walker.resolveTestedBy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "connect production functions to enclosing tests without language-specific test frameworks", - "reason": "connect production functions to enclosing tests without language-specific test frameworks", - "terms": [ - "language", - "only" - ] - }, - { - "id": 1174, - "name": "languageDispatch", - "qualified_name": "resolve.languageDispatch", - "kind": "type", - "file_path": "internal/app/ingest/resolve/dispatch.go", - "intent": "keep Resolve generic while allowing languages to customize dispatch semantics.", - "reason": "keep Resolve generic while allowing languages to customize dispatch semantics.", - "terms": [ - "language", - "only" - ] - }, - { - "id": 1102, - "name": "Syncer", - "qualified_name": "incremental.Syncer", - "kind": "class", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid full rebuilds by reparsing only files whose content hash changed", - "reason": "avoid full rebuilds by reparsing only files whose content hash changed", - "terms": [ - "files", - "only" - ] - }, - { - "id": 1432, - "name": "addedUpdateFiles", - "qualified_name": "workflow.addedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "seed semi-naive unresolved lookup from newly introduced source files only.", - "reason": "seed semi-naive unresolved lookup from newly introduced source files only.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 1938, - "name": "TreeResponse", - "qualified_name": "TreeResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry a namespace-scoped RAG tree payload from the Wiki API.", - "reason": "carry a namespace-scoped RAG tree payload from the Wiki API.", - "terms": [ - "name", - "carry" - ] - }, - { - "id": 364, - "name": "resolveDocPath", - "qualified_name": "wikiserver.Server.resolveDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "reason": "resolve a generated doc path under approved docs, RAG, or namespace roots.", - "terms": [ - "name", - "files", - "only" - ] - }, - { - "id": 702, - "name": "containsString", - "qualified_name": "treesitter.containsString", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep extension checks simple without importing extra helpers.", - "reason": "keep extension checks simple without importing extra helpers.", - "terms": [ - "extension" - ] - }, - { - "id": 399, - "name": "validateNamespace", - "qualified_name": "wikiserver.validateNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep namespace path validation aligned with namespace filesystem rules.", - "reason": "keep namespace path validation aligned with namespace filesystem rules.", - "terms": [ - "name", - "files" - ] - }, - { - "id": 1003, - "name": "AnnotationRef", - "qualified_name": "crossref.AnnotationRef", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "carry the minimal source facts needed to materialize a cross-namespace reference.", - "reason": "carry the minimal source facts needed to materialize a cross-namespace reference.", - "terms": [ - "name", - "carry" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 934, - "name": "Config", - "qualified_name": "flow.Config", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "provides an extension point for stored flow rebuild configuration.", - "reason": "provides an extension point for stored flow rebuild configuration.", - "terms": [ - "extension" - ] - }, - { - "id": 1040, - "name": "manifestPath", - "qualified_name": "docs.Generator.manifestPath", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "isolate manifest files per namespace so concurrent namespaces do not collide", - "reason": "isolate manifest files per namespace so concurrent namespaces do not collide", - "terms": [ - "name", - "files" - ] - }, - { - "id": 1132, - "name": "importEdgesByFile", - "qualified_name": "incremental.importEdgesByFile", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "warm call-edge resolution with import context only for files that actually need it.", - "reason": "warm call-edge resolution with import context only for files that actually need it.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 1382, - "name": "packageSemanticMetadataForFile", - "qualified_name": "workflow.Service.packageSemanticMetadataForFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "reload package and interface metadata only for files participating in a package semantic refresh.", - "reason": "reload package and interface metadata only for files participating in a package semantic refresh.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 388, - "name": "symbolMatches", - "qualified_name": "wikiserver.symbolMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "allow short symbol refs to match names and language-qualified names.", - "reason": "allow short symbol refs to match names and language-qualified names.", - "terms": [ - "language", - "name" - ] - }, - { - "id": 1437, - "name": "existingFilesMissingFromSet", - "qualified_name": "workflow.existingFilesMissingFromSet", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 184, - "name": "traceFlowMember", - "qualified_name": "mcp.traceFlowMember", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "serialize flow member references without exposing the full node record.", - "reason": "serialize flow member references without exposing the full node record.", - "terms": [ - "name", - "only" - ] - }, - { - "id": 519, - "name": "GetNodeByID", - "qualified_name": "graphgorm.Store.GetNodeByID", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "find one node by its internal identifier.", - "reason": "find one node by its internal identifier.", - "terms": [ - "find" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 1622, - "name": "ResultItem", - "qualified_name": "wire.ResultItem", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "preserve a stable per-item DTO for search responses.", - "reason": "preserve a stable per-item DTO for search responses.", - "terms": [ - "name", - "only" - ] - }, - { - "id": 295, - "name": "safeNamespaceRoot", - "qualified_name": "mcp.handlers.safeNamespaceRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "resolve namespace paths under a trusted, real filesystem location.", - "reason": "resolve namespace paths under a trusted, real filesystem location.", - "terms": [ - "name", - "files" - ] - }, - { - "id": 897, - "name": "getLanguage", - "qualified_name": "treesitter.Walker.getLanguage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "bind configured language names to the concrete parser implementation", - "reason": "bind configured language names to the concrete parser implementation", - "terms": [ - "language", - "name" - ] - }, - { - "id": 1456, - "name": "AllowRuleOwners", - "qualified_name": "reposync.AllowRuleOwners", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "terms": [ - "name", - "only" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "files", - "only" - ] - }, - { - "id": 733, - "name": "definitionNameOrDefault", - "qualified_name": "treesitter.definitionNameOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize per-language symbol-name normalization behind an optional hook.", - "reason": "centralize per-language symbol-name normalization behind an optional hook.", - "terms": [ - "language", - "name" - ] - }, - { - "id": 81, - "name": "filterIgnoredLintReport", - "qualified_name": "cli.filterIgnoredLintReport", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "strip suppressed findings before display and strict-mode counting", - "reason": "strip suppressed findings before display and strict-mode counting", - "terms": [ - "find" - ] - }, - { - "id": 382, - "name": "findDocPath", - "qualified_name": "wikiserver.findDocPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "find a tree node by its generated doc_path value.", - "reason": "find a tree node by its generated doc_path value.", - "terms": [ - "find" - ] - }, - { - "id": 981, - "name": "CallersOf", - "qualified_name": "query.Service.CallersOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "find upstream callers of a function or method node", - "reason": "find upstream callers of a function or method node", - "terms": [ - "find" - ] - }, - { - "id": 289, - "name": "nodeSummary", - "qualified_name": "mcp.nodeSummary", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "reuse one typed node representation across multiple tool responses.", - "reason": "reuse one typed node representation across multiple tool responses.", - "terms": [ - "name", - "only" - ] - }, - { - "id": 609, - "name": "extractExactNameToken", - "qualified_name": "searchsql.extractExactNameToken", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "treat only single-identifier queries as eligible for exact-name promotion.", - "reason": "treat only single-identifier queries as eligible for exact-name promotion.", - "terms": [ - "name", - "only" - ] - } - ] - }, - "why did a failing sync stop retrying instead of backing off again": { - "corpus": 1901, - "terms": [ - { - "text": "failing", - "in_reasons": 2 - }, - { - "text": "sync", - "in_reasons": 75 - }, - { - "text": "stop", - "in_reasons": 9 - }, - { - "text": "retrying", - "in_reasons": 1 - }, - { - "text": "instead", - "in_reasons": 28 - }, - { - "text": "backing", - "in_reasons": 0 - }, - { - "text": "off", - "in_reasons": 2 - }, - { - "text": "again", - "in_reasons": 17 - } + "why are unchanged files skipped without calling a parser again": [ + 32, + 61, + 66, + 82, + 84, + 115, + 116, + 121, + 124, + 137, + 138, + 147, + 150, + 155, + 156, + 157, + 159, + 160, + 170, + 183, + 184, + 186, + 192, + 194, + 203, + 218, + 221, + 223, + 225, + 248, + 249, + 250, + 257, + 283, + 293, + 295, + 300, + 311, + 312, + 331, + 334, + 341, + 343, + 346, + 352, + 354, + 364, + 367, + 386, + 394, + 397, + 399, + 400, + 406, + 410, + 414, + 415, + 422, + 435, + 438, + 444, + 450, + 458, + 460, + 467, + 468, + 477, + 484, + 494, + 501, + 502, + 504, + 505, + 507, + 538, + 539, + 543, + 562, + 566, + 567, + 569, + 575, + 583, + 588, + 589, + 596, + 599, + 609, + 612, + 613, + 615, + 616, + 618, + 619, + 620, + 621, + 625, + 626, + 632, + 634, + 637, + 642, + 644, + 645, + 646, + 647, + 648, + 653, + 654, + 655, + 658, + 659, + 660, + 666, + 668, + 669, + 673, + 674, + 676, + 680, + 683, + 687, + 692, + 699, + 703, + 710, + 715, + 716, + 728, + 735, + 756, + 761, + 763, + 778, + 783, + 796, + 800, + 801, + 811, + 812, + 814, + 817, + 818, + 819, + 820, + 823, + 837, + 839, + 840, + 842, + 843, + 844, + 845, + 855, + 856, + 864, + 875, + 890, + 891, + 892, + 910, + 912, + 919, + 924, + 925, + 929, + 930, + 957, + 964, + 978, + 987, + 988, + 989, + 990, + 991, + 998, + 999, + 1000, + 1001, + 1002, + 1022, + 1042, + 1043, + 1046, + 1047, + 1050, + 1051, + 1053, + 1055, + 1059, + 1060, + 1067, + 1068, + 1069, + 1078, + 1081, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1104, + 1106, + 1108, + 1109, + 1112, + 1115, + 1126, + 1129, + 1150, + 1156, + 1164, + 1171, + 1174, + 1176, + 1180, + 1184, + 1212, + 1217, + 1223, + 1229, + 1230, + 1241, + 1246, + 1249, + 1252, + 1256, + 1258, + 1259, + 1266, + 1272, + 1273, + 1276, + 1277, + 1278, + 1285, + 1289, + 1290, + 1295, + 1296, + 1301, + 1302, + 1303, + 1305, + 1308, + 1310, + 1313, + 1314, + 1319, + 1321, + 1322, + 1324, + 1326, + 1327, + 1330, + 1333, + 1334, + 1336, + 1338, + 1345, + 1346, + 1350, + 1353, + 1357, + 1359, + 1361, + 1364, + 1367, + 1368, + 1370, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1384, + 1388, + 1401, + 1416, + 1425, + 1429, + 1439, + 1446, + 1456, + 1459, + 1470, + 1471, + 1473, + 1479, + 1486, + 1488, + 1495, + 1496, + 1498, + 1502, + 1504, + 1509, + 1521, + 1524, + 1539, + 1540, + 1541, + 1552, + 1558, + 1564, + 1567, + 1569, + 1570, + 1580, + 1581, + 1587, + 1589, + 1603, + 1608, + 1618, + 1620, + 1623, + 1625, + 1630, + 1631, + 1633, + 1636, + 1652, + 1661, + 1664, + 1665, + 1668, + 1730, + 1734, + 1738, + 1752, + 1753, + 1767, + 1772, + 1784, + 1787, + 1821, + 1822, + 1824, + 1826, + 1827, + 1831, + 1832, + 1834, + 1842, + 1860, + 1866 ], - "hits": [ - { - "id": 1482, - "name": "nonRetryableError", - "qualified_name": "reposync.nonRetryableError", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "mark sync failures that should stop retry backoff immediately.", - "reason": "mark sync failures that should stop retry backoff immediately.", - "terms": [ - "sync", - "stop" - ] - }, - { - "id": 307, - "name": "promptLimitArg", - "qualified_name": "mcp.promptLimitArg", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "clamp the optional prompt limit argument to the handler's hard cap.", - "reason": "clamp the optional prompt limit argument to the handler's hard cap.", - "terms": [ - "failing", - "instead" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "sync", - "instead" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "sync", - "instead" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "sync", - "instead" - ] - }, - { - "id": 1503, - "name": "safeHandle", - "qualified_name": "reposync.SyncQueue.safeHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "terms": [ - "retrying" - ] - }, - { - "id": 717, - "name": "SemanticContext", - "qualified_name": "treesitter.SemanticContext", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "avoid expanding Walker with one-off language branches as graph inference grows.", - "reason": "avoid expanding Walker with one-off language branches as graph inference grows.", - "terms": [ - "off" - ] - }, - { - "id": 1008, - "name": "targetKey", - "qualified_name": "crossref.targetKey", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row.", - "reason": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row.", - "terms": [ - "sync", - "instead" - ] - }, - { - "id": 1752, - "name": "RequiredTextColumns", - "qualified_name": "migration.RequiredTextColumns", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths.", - "reason": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths.", - "terms": [ - "failing" - ] - }, - { - "id": 1571, - "name": "MatchesByPrefix", - "qualified_name": "intentrank.MatchesByPrefix", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "measure a term against the misfire that motivated the rule, not against a raw length.", - "reason": "measure a term against the misfire that motivated the rule, not against a raw length.", - "terms": [ - "again" - ] - }, - { - "id": 157, - "name": "Close", - "qualified_name": "mcp.Cache.Close", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Safely stops the cleanup goroutine when the cache is no longer used.", - "reason": "Safely stops the cleanup goroutine when the cache is no longer used.", - "terms": [ - "stop" - ] - }, - { - "id": 1566, - "name": "saturate", - "qualified_name": "intentrank.saturate", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "stop a long or repetitive reason from outranking a short exact one.", - "reason": "stop a long or repetitive reason from outranking a short exact one.", - "terms": [ - "stop" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "stop" - ] - }, - { - "id": 698, - "name": "trimNodeWildcard", - "qualified_name": "treesitter.trimNodeWildcard", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "normalize alias rules before matching them against source directories.", - "reason": "normalize alias rules before matching them against source directories.", - "terms": [ - "again" - ] - }, - { - "id": 1589, - "name": "nameSim", - "qualified_name": "rank.nameSim", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score query tokens against simple and qualified node identifiers.", - "reason": "score query tokens against simple and qualified node identifiers.", - "terms": [ - "again" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "stop" - ] - }, - { - "id": 1598, - "name": "meaningfulPart", - "qualified_name": "rank.queryTokens.meaningfulPart", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "stop a single shared character from standing as a candidate's only evidence.", - "reason": "stop a single shared character from standing as a candidate's only evidence.", - "terms": [ - "stop" - ] - }, - { - "id": 407, - "name": "safeAbsolutePath", - "qualified_name": "wikiserver.safeAbsolutePath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "validate an absolute wiki-index path against one approved root.", - "reason": "validate an absolute wiki-index path against one approved root.", - "terms": [ - "again" - ] - }, - { - "id": 700, - "name": "pathMatchesPrefix", - "qualified_name": "treesitter.pathMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match concrete source file paths against tsconfig alias target roots.", - "reason": "match concrete source file paths against tsconfig alias target roots.", - "terms": [ - "again" - ] - }, - { - "id": 1591, - "name": "scoreTargets", - "qualified_name": "rank.scoreTargets", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "score one query against several spellings of the same node.", - "reason": "score one query against several spellings of the same node.", - "terms": [ - "again" - ] - }, - { - "id": 82, - "name": "countNonIgnoredWithRules", - "qualified_name": "cli.countNonIgnoredWithRules", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "compute the strict-mode failure count against an explicit rule set", - "reason": "compute the strict-mode failure count against an explicit rule set", - "terms": [ - "again" - ] - }, - { - "id": 384, - "name": "refPathMatchesTree", - "qualified_name": "wikiserver.refPathMatchesTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "compare a ccg:// path/symbol target against one Wiki tree node.", - "reason": "compare a ccg:// path/symbol target against one Wiki tree node.", - "terms": [ - "again" - ] - }, - { - "id": 387, - "name": "sameRefPath", - "qualified_name": "wikiserver.sameRefPath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "match ccg:// file paths against graph and Wiki slash-separated paths.", - "reason": "match ccg:// file paths against graph and Wiki slash-separated paths.", - "terms": [ - "again" - ] - }, - { - "id": 909, - "name": "Hunk", - "qualified_name": "changes.Hunk", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "represent a diff segment that can be matched against graph nodes", - "reason": "represent a diff segment that can be matched against graph nodes", - "terms": [ - "again" - ] - }, - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "stop" - ] - }, - { - "id": 1350, - "name": "CheckTotalParsedBytes", - "qualified_name": "workflow.CheckTotalParsedBytes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "reason": "stop one build or update pass once cumulative parsed bytes would exceed the configured safety limit.", - "terms": [ - "stop" - ] - }, - { - "id": 489, - "name": "CCGRefExists", - "qualified_name": "graphgorm.Store.CCGRefExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "reason": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "terms": [ - "again" - ] - }, - { - "id": 680, - "name": "nodeAliasScope", - "qualified_name": "treesitter.nodeAliasScope", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "resolve aliased Node imports against the package node scope they belong to.", - "reason": "resolve aliased Node imports against the package node scope they belong to.", - "terms": [ - "again" - ] - }, - { - "id": 699, - "name": "dirMatchesPrefix", - "qualified_name": "treesitter.dirMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match source directories against tsconfig path targets without partial-segment false positives.", - "reason": "match source directories against tsconfig path targets without partial-segment false positives.", - "terms": [ - "again" - ] - }, - { - "id": 1611, - "name": "SearchFederated", - "qualified_name": "search.Service.SearchFederated", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "off" - ] - }, - { - "id": 1486, - "name": "IsNonRetryable", - "qualified_name": "reposync.IsNonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "reason": "let retry logic stop early when a failure is known to be permanent for the current payload.", - "terms": [ - "stop" - ] - }, - { - "id": 265, - "name": "federatedGraphStatsEntry", - "qualified_name": "mcp.federatedGraphStatsEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "reason": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "terms": [ - "instead" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "again" - ] - }, - { - "id": 365, - "name": "findRefGraphNode", - "qualified_name": "wikiserver.Server.findRefGraphNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "reason": "resolve a ccg:// ref against graph nodes so the browser graph can focus the destination.", - "terms": [ - "again" - ] - }, - { - "id": 787, - "name": "firstNamedTypeReference", - "qualified_name": "treesitter.firstNamedTypeReference", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "reason": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "terms": [ - "instead" - ] - }, - { - "id": 615, - "name": "migrateIntentTable", - "qualified_name": "searchsql.SQLiteBackend.migrateIntentTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "reason": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "terms": [ - "again" - ] - }, - { - "id": 758, - "name": "goStructuralImplements", - "qualified_name": "treesitter.goStructuralImplements", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "support Go's implicit structural typing by matching concrete method names against package-wide interface declarations.", - "reason": "support Go's implicit structural typing by matching concrete method names against package-wide interface declarations.", - "terms": [ - "again" - ] - }, - { - "id": 633, - "name": "sqliteColumnExists", - "qualified_name": "searchsql.sqliteColumnExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "gate schema migrations on actual table layout instead of guessing from version markers.", - "reason": "gate schema migrations on actual table layout instead of guessing from version markers.", - "terms": [ - "instead" - ] - }, - { - "id": 896, - "name": "releaseParser", - "qualified_name": "treesitter.Walker.releaseParser", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "reason": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "terms": [ - "instead" - ] - }, - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "instead" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "instead" - ] - }, - { - "id": 213, - "name": "describeSuggestion", - "qualified_name": "mcp.describeSuggestion", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 1023, - "name": "Suggestion", - "qualified_name": "describe.Suggestion", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 1154, - "name": "ParseCacheKey", - "qualified_name": "ingest.ParseCacheKey", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "include every input known to affect parser output instead of trusting source content alone.", - "reason": "include every input known to affect parser output instead of trusting source content alone.", - "terms": [ - "instead" - ] - }, - { - "id": 1378, - "name": "packageEdgeBuilder", - "qualified_name": "workflow.Service.packageEdgeBuilder", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "reason": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "terms": [ - "instead" - ] - }, - { - "id": 1586, - "name": "RerankGroups", - "qualified_name": "rank.RerankGroups", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "reason": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "terms": [ - "instead" - ] - }, - { - "id": 212, - "name": "describeChild", - "qualified_name": "mcp.describeChild", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "let a caller descend one step at a time instead of reading a whole subtree.", - "reason": "let a caller descend one step at a time instead of reading a whole subtree.", - "terms": [ - "instead" - ] - }, - { - "id": 516, - "name": "StoreParseResult", - "qualified_name": "graphgorm.Store.StoreParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "reason": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "terms": [ - "instead" - ] - }, - { - "id": 969, - "name": "GraphLookup", - "qualified_name": "analyze.GraphLookup", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "reason": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "terms": [ - "instead" - ] - }, - { - "id": 1373, - "name": "Error", - "qualified_name": "workflow.UnreadableFilesError.Error", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "reason": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "terms": [ - "instead" - ] - } - ] - }, - "why did an incremental update lose relationships between files read in different batches": { - "corpus": 1901, - "terms": [ - { - "text": "incremental", - "in_reasons": 37 - }, - { - "text": "update", - "in_reasons": 64 - }, - { - "text": "lose", - "in_reasons": 0 - }, - { - "text": "relationships", - "in_reasons": 25 - }, - { - "text": "between", - "in_reasons": 21 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "read", - "in_reasons": 81 - }, - { - "text": "different", - "in_reasons": 7 - }, - { - "text": "batches", - "in_reasons": 10 - } + "why can searching for a language name find files that only carry an extension": [ + 28, + 29, + 31, + 40, + 42, + 43, + 52, + 62, + 109, + 115, + 121, + 122, + 123, + 125, + 126, + 129, + 131, + 132, + 133, + 134, + 138, + 147, + 150, + 158, + 161, + 163, + 170, + 180, + 181, + 182, + 192, + 193, + 201, + 204, + 206, + 207, + 211, + 212, + 213, + 215, + 216, + 217, + 224, + 226, + 227, + 228, + 229, + 230, + 231, + 244, + 247, + 248, + 249, + 250, + 251, + 256, + 257, + 265, + 266, + 274, + 275, + 280, + 286, + 289, + 294, + 296, + 297, + 298, + 300, + 301, + 302, + 310, + 311, + 329, + 335, + 338, + 341, + 345, + 346, + 352, + 362, + 365, + 366, + 367, + 369, + 373, + 374, + 392, + 394, + 397, + 399, + 400, + 401, + 402, + 407, + 411, + 414, + 416, + 418, + 419, + 420, + 421, + 423, + 425, + 427, + 428, + 429, + 430, + 431, + 432, + 434, + 435, + 437, + 440, + 443, + 445, + 446, + 447, + 449, + 450, + 451, + 452, + 454, + 458, + 461, + 462, + 464, + 467, + 473, + 475, + 476, + 478, + 485, + 487, + 489, + 501, + 502, + 507, + 520, + 530, + 531, + 534, + 553, + 556, + 557, + 558, + 565, + 566, + 567, + 568, + 569, + 570, + 573, + 575, + 579, + 582, + 595, + 596, + 598, + 600, + 601, + 608, + 609, + 612, + 613, + 615, + 616, + 618, + 620, + 621, + 623, + 625, + 632, + 634, + 642, + 643, + 647, + 648, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 662, + 663, + 664, + 665, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 678, + 679, + 680, + 683, + 687, + 690, + 692, + 693, + 695, + 696, + 699, + 700, + 703, + 705, + 706, + 708, + 711, + 715, + 716, + 719, + 723, + 727, + 730, + 731, + 733, + 736, + 737, + 739, + 740, + 744, + 748, + 749, + 751, + 752, + 755, + 756, + 760, + 766, + 769, + 771, + 774, + 780, + 781, + 782, + 783, + 785, + 786, + 791, + 792, + 795, + 797, + 804, + 805, + 806, + 813, + 815, + 820, + 822, + 824, + 830, + 831, + 833, + 834, + 835, + 837, + 838, + 842, + 844, + 846, + 851, + 855, + 863, + 882, + 886, + 887, + 890, + 891, + 892, + 898, + 900, + 913, + 914, + 916, + 921, + 922, + 923, + 925, + 931, + 934, + 942, + 944, + 946, + 947, + 948, + 952, + 954, + 956, + 959, + 961, + 962, + 963, + 964, + 968, + 980, + 987, + 988, + 989, + 990, + 991, + 998, + 999, + 1000, + 1001, + 1002, + 1024, + 1028, + 1042, + 1043, + 1044, + 1046, + 1049, + 1051, + 1053, + 1055, + 1059, + 1062, + 1067, + 1068, + 1070, + 1078, + 1080, + 1081, + 1082, + 1086, + 1088, + 1089, + 1092, + 1095, + 1096, + 1100, + 1107, + 1108, + 1111, + 1113, + 1121, + 1123, + 1124, + 1125, + 1135, + 1136, + 1142, + 1152, + 1153, + 1156, + 1160, + 1163, + 1165, + 1171, + 1172, + 1174, + 1176, + 1179, + 1180, + 1185, + 1186, + 1190, + 1194, + 1195, + 1196, + 1197, + 1199, + 1202, + 1206, + 1207, + 1208, + 1211, + 1213, + 1216, + 1217, + 1220, + 1223, + 1224, + 1226, + 1231, + 1238, + 1242, + 1244, + 1246, + 1249, + 1256, + 1259, + 1269, + 1275, + 1278, + 1290, + 1291, + 1296, + 1301, + 1302, + 1303, + 1308, + 1321, + 1323, + 1326, + 1329, + 1330, + 1333, + 1334, + 1336, + 1353, + 1354, + 1367, + 1374, + 1378, + 1379, + 1380, + 1386, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1418, + 1419, + 1421, + 1423, + 1424, + 1428, + 1471, + 1474, + 1475, + 1477, + 1479, + 1488, + 1491, + 1493, + 1495, + 1496, + 1500, + 1502, + 1505, + 1510, + 1511, + 1512, + 1513, + 1526, + 1534, + 1536, + 1540, + 1547, + 1552, + 1554, + 1558, + 1559, + 1560, + 1567, + 1569, + 1570, + 1573, + 1583, + 1587, + 1596, + 1603, + 1608, + 1618, + 1622, + 1625, + 1630, + 1636, + 1641, + 1642, + 1643, + 1644, + 1648, + 1661, + 1662, + 1663, + 1667, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1717, + 1722, + 1725, + 1727, + 1728, + 1732, + 1736, + 1742, + 1744, + 1748, + 1755, + 1756, + 1771, + 1787, + 1788, + 1789, + 1790, + 1792, + 1793, + 1795, + 1800, + 1814, + 1822, + 1826, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1846, + 1856, + 1857, + 1858, + 1860, + 1861, + 1863, + 1870, + 1871, + 1875, + 1882, + 1884, + 1885, + 1890, + 1898, + 1900, + 1903, + 1905 ], - "hits": [ - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "incremental", - "files", - "batches" - ] - }, - { - "id": 1134, - "name": "splitEdgeChunks", - "qualified_name": "incremental.splitEdgeChunks", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "cap incremental resolution work so large files do not create oversized resolve batches.", - "reason": "cap incremental resolution work so large files do not create oversized resolve batches.", - "terms": [ - "incremental", - "files", - "batches" - ] - }, - { - "id": 1623, - "name": "FileGroup", - "qualified_name": "wire.FileGroup", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller choose between files, then read inside the one it chose.", - "reason": "let a caller choose between files, then read inside the one it chose.", - "terms": [ - "between", - "files", - "read" - ] - }, - { - "id": 1419, - "name": "readRecord", - "qualified_name": "workflow.updateSpool.readRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream update inputs back into the update transaction in batches.", - "reason": "stream update inputs back into the update transaction in batches.", - "terms": [ - "update", - "batches" - ] - }, - { - "id": 587, - "name": "RebuildNodes", - "qualified_name": "searchsql.PostgresBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Avoids full namespace tsv updates during incremental update paths.", - "reason": "Avoids full namespace tsv updates during incremental update paths.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1314, - "name": "packageSemanticEdgeBatches", - "qualified_name": "workflow.Service.packageSemanticEdgeBatches", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "reason": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "terms": [ - "relationships", - "batches" - ] - }, - { - "id": 645, - "name": "RefreshSearchDocumentsFor", - "qualified_name": "searchsql.RefreshSearchDocumentsFor", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "reason": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "incremental", - "update", - "files" - ] - }, - { - "id": 536, - "name": "DeleteEdgesByFile", - "qualified_name": "graphgorm.Store.DeleteEdgesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "selectively clean existing relationships during file-scoped updates.", - "reason": "selectively clean existing relationships during file-scoped updates.", - "terms": [ - "update", - "relationships" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "update", - "batches" - ] - }, - { - "id": 1172, - "name": "TransactionalBatchIncrementalSyncer", - "qualified_name": "ingest.TransactionalBatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "preserve one atomic graph and search transaction while reconciling streamed update batches.", - "reason": "preserve one atomic graph and search transaction while reconciling streamed update batches.", - "terms": [ - "update", - "batches" - ] - }, - { - "id": 1418, - "name": "writeRecord", - "qualified_name": "workflow.updateSpool.writeRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "persist update inputs for transactional replay without holding all batches in memory.", - "reason": "persist update inputs for transactional replay without holding all batches in memory.", - "terms": [ - "update", - "batches" - ] - }, - { - "id": 1331, - "name": "rewriteImplementsFingerprintScope", - "qualified_name": "workflow.rewriteImplementsFingerprintScope", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files.", - "reason": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files.", - "terms": [ - "files", - "different" - ] - }, - { - "id": 617, - "name": "RebuildNodes", - "qualified_name": "searchsql.SQLiteBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Avoids full namespace FTS reloading during incremental update paths.", - "reason": "Avoids full namespace FTS reloading during incremental update paths.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1434, - "name": "updateGraphWithoutTx", - "qualified_name": "workflow.Service.updateGraphWithoutTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "reason": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "terms": [ - "incremental", - "batches" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "incremental", - "files" - ] - }, - { - "id": 643, - "name": "RebuildNodes", - "qualified_name": "searchsql.Writer.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "implement the incremental derived-search refresh required by graph updates.", - "reason": "implement the incremental derived-search refresh required by graph updates.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1353, - "name": "ExistingGraphFiles", - "qualified_name": "workflow.ExistingGraphFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "share deletion-scope discovery across CLI and MCP incremental updates", - "reason": "share deletion-scope discovery across CLI and MCP incremental updates", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "incremental", - "relationships" - ] - }, - { - "id": 1930, - "name": "configureForces", - "qualified_name": "configureForces", - "kind": "function", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "spread dense CCG graphs enough that zooming creates readable separation between nodes.", - "reason": "spread dense CCG graphs enough that zooming creates readable separation between nodes.", - "terms": [ - "between", - "read" - ] - }, - { - "id": 1166, - "name": "SyncStats", - "qualified_name": "ingest.SyncStats", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose update results without coupling callers to the incremental implementation package.", - "reason": "expose update results without coupling callers to the incremental implementation package.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1117, - "name": "resolveAndUpsertEdges", - "qualified_name": "incremental.Syncer.resolveAndUpsertEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "preserve interface dispatch and import-backed call resolution during incremental sync updates.", - "reason": "preserve interface dispatch and import-backed call resolution during incremental sync updates.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1165, - "name": "FileInfo", - "qualified_name": "ingest.FileInfo", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep incremental update inputs owned by ingest rather than a concrete sync implementation.", - "reason": "keep incremental update inputs owned by ingest rather than a concrete sync implementation.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1430, - "name": "prepareUpdateSpool", - "qualified_name": "workflow.Service.prepareUpdateSpool", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "capture the current update input set and file hashes before transactional incremental sync begins.", - "reason": "capture the current update input set and file hashes before transactional incremental sync begins.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 156, - "name": "Flush", - "qualified_name": "mcp.Cache.Flush", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Invalidates all cached read results after a graph or index update.", - "reason": "Invalidates all cached read results after a graph or index update.", - "terms": [ - "update", - "read" - ] - }, - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "files", - "read" - ] - }, - { - "id": 622, - "name": "rebuildIntentTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 1168, - "name": "TransactionalIncrementalSyncer", - "qualified_name": "ingest.TransactionalIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "keep incremental graph mutations inside the same unit of work as package and search updates.", - "reason": "keep incremental graph mutations inside the same unit of work as package and search updates.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 296, - "name": "resolveNamespacePath", - "qualified_name": "mcp.handlers.resolveNamespacePath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "reason": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "terms": [ - "files", - "read" - ] - }, - { - "id": 1355, - "name": "filterExistingStateByInclude", - "qualified_name": "workflow.filterExistingStateByInclude", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "terms": [ - "update", - "files" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "incremental", - "update" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "files", - "read" - ] - }, - { - "id": 1542, - "name": "groupByFile", - "qualified_name": "evidence.groupByFile", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "turn a ranked list of declarations into a ranked list of files to read.", - "reason": "turn a ranked list of declarations into a ranked list of files to read.", - "terms": [ - "files", - "read" - ] - }, - { - "id": 1080, - "name": "hasCodeBetween", - "qualified_name": "binding.hasCodeBetween", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "determine if real code exists between a comment and declaration for Look-Between binding", - "reason": "determine if real code exists between a comment and declaration for Look-Between binding", - "terms": [ - "between" - ] - }, - { - "id": 1341, - "name": "readRegularSourceFile", - "qualified_name": "workflow.readRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "terms": [ - "update", - "read" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "different" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "different" - ] - }, - { - "id": 1543, - "name": "page", - "qualified_name": "evidence.page", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "bound an answer by files, so paging through it never lands a reader mid-file.", - "reason": "bound an answer by files, so paging through it never lands a reader mid-file.", - "terms": [ - "files", - "read" - ] - }, - { - "id": 1078, - "name": "Bind", - "qualified_name": "binding.Binder.Bind", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "build node-to-annotation bindings from parsed comments and node positions", - "reason": "build node-to-annotation bindings from parsed comments and node positions", - "terms": [ - "between" - ] - }, - { - "id": 1786, - "name": "isSupportedPythonDocstringPrefix", - "qualified_name": "annotation.isSupportedPythonDocstringPrefix", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling.", - "reason": "avoid stripping byte-string or formatted-string docstrings whose escapes need different handling.", - "terms": [ - "different" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "different" - ] - }, - { - "id": 1841, - "name": "scopeFor", - "qualified_name": "reference.scopeFor", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "classify refs for clients that want to render namespace, path, and symbol scopes differently.", - "reason": "classify refs for clients that want to render namespace, path, and symbol scopes differently.", - "terms": [ - "different" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "relationships" - ] - }, - { - "id": 532, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.Store.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for a specific declaration.", - "reason": "load outbound relationships for a specific declaration.", - "terms": [ - "relationships" - ] - }, - { - "id": 534, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.Store.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for a specific declaration.", - "reason": "load inbound relationships for a specific declaration.", - "terms": [ - "relationships" - ] - }, - { - "id": 1222, - "name": "resolveImplements", - "qualified_name": "resolve.resolveImplements", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "capture implementation relationships and populate implementer cache.", - "reason": "capture implementation relationships and populate implementer cache.", - "terms": [ - "relationships" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "relationships" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "different" - ] - }, - { - "id": 646, - "name": "refreshSearchDocuments", - "qualified_name": "searchsql.refreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "reason": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "terms": [ - "batches" - ] - }, - { - "id": 92, - "name": "resolveMigrationsDir", - "qualified_name": "cli.resolveMigrationsDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "resolve migration directory precedence between flag, config, and environment defaults.", - "reason": "resolve migration directory precedence between flag, config, and environment defaults.", - "terms": [ - "between" - ] - } - ] - }, - "why did an update merely warn about unreadable files instead of failing": { - "corpus": 1901, - "terms": [ - { - "text": "update", - "in_reasons": 64 - }, - { - "text": "merely", - "in_reasons": 1 - }, - { - "text": "warn", - "in_reasons": 6 - }, - { - "text": "about", - "in_reasons": 2 - }, - { - "text": "unreadable", - "in_reasons": 2 - }, - { - "text": "files", - "in_reasons": 83 - }, - { - "text": "instead", - "in_reasons": 28 - }, - { - "text": "failing", - "in_reasons": 2 - } + "why did a failing sync stop retrying instead of backing off again": [ + 32, + 112, + 121, + 150, + 164, + 165, + 189, + 190, + 217, + 240, + 260, + 278, + 280, + 285, + 287, + 289, + 312, + 331, + 334, + 354, + 359, + 386, + 395, + 397, + 398, + 404, + 409, + 435, + 459, + 518, + 519, + 520, + 523, + 562, + 563, + 581, + 626, + 632, + 644, + 645, + 646, + 662, + 703, + 732, + 843, + 856, + 899, + 920, + 953, + 955, + 959, + 961, + 970, + 1044, + 1045, + 1047, + 1048, + 1049, + 1050, + 1052, + 1056, + 1063, + 1067, + 1068, + 1070, + 1073, + 1074, + 1101, + 1114, + 1116, + 1118, + 1280, + 1292, + 1297, + 1298, + 1303, + 1317, + 1318, + 1322, + 1324, + 1353, + 1355, + 1371, + 1372, + 1376, + 1377, + 1383, + 1385, + 1393, + 1396, + 1409, + 1420, + 1422, + 1424, + 1425, + 1434, + 1437, + 1438, + 1439, + 1441, + 1443, + 1447, + 1448, + 1449, + 1450, + 1456, + 1457, + 1458, + 1460, + 1465, + 1467, + 1469, + 1517, + 1521, + 1525, + 1527, + 1528, + 1536, + 1539, + 1541, + 1547, + 1556, + 1560, + 1651, + 1665, + 1698, + 1754, + 1829, + 1874 ], - "hits": [ - { - "id": 1437, - "name": "existingFilesMissingFromSet", - "qualified_name": "workflow.existingFilesMissingFromSet", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "terms": [ - "unreadable", - "files" - ] - }, - { - "id": 307, - "name": "promptLimitArg", - "qualified_name": "mcp.promptLimitArg", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "clamp the optional prompt limit argument to the handler's hard cap.", - "reason": "clamp the optional prompt limit argument to the handler's hard cap.", - "terms": [ - "instead", - "failing" - ] - }, - { - "id": 1345, - "name": "unreadableFileSummary", - "qualified_name": "workflow.unreadableFileSummary", - "kind": "class", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "let callers surface a single structured failure or warning instead of one log entry per file.", - "reason": "let callers surface a single structured failure or warning instead of one log entry per file.", - "terms": [ - "warn", - "instead" - ] - }, - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "files", - "instead" - ] - }, - { - "id": 1573, - "name": "Validate", - "qualified_name": "offsetrule.Validate", - "kind": "function", - "file_path": "internal/app/search/offsetrule/offsetrule.go", - "intent": "keep every paged entry point agreeing about which requests are askable.", - "reason": "keep every paged entry point agreeing about which requests are askable.", - "terms": [ - "about" - ] - }, - { - "id": 1536, - "name": "Justified", - "qualified_name": "evidence.List.Justified", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "tell a page that answered something apart from one that merely has rows on it.", - "reason": "tell a page that answered something apart from one that merely has rows on it.", - "terms": [ - "merely" - ] - }, - { - "id": 1410, - "name": "spooledBuildRecord", - "qualified_name": "workflow.spooledBuildRecord", - "kind": "class", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "let the build transaction stream parsed input from disk instead of holding all files in memory.", - "reason": "let the build transaction stream parsed input from disk instead of holding all files in memory.", - "terms": [ - "files", - "instead" - ] - }, - { - "id": 1752, - "name": "RequiredTextColumns", - "qualified_name": "migration.RequiredTextColumns", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths.", - "reason": "prevent source-derived graph values from failing persistence because of arbitrary varchar widths.", - "terms": [ - "failing" - ] - }, - { - "id": 686, - "name": "discoverNodePackageScopes", - "qualified_name": "treesitter.discoverNodePackageScopes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "reason": "pick the nearest package.json name for monorepo files instead of assuming the repository root package applies everywhere.", - "terms": [ - "files", - "instead" - ] - }, - { - "id": 1355, - "name": "filterExistingStateByInclude", - "qualified_name": "workflow.filterExistingStateByInclude", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "terms": [ - "update", - "files" - ] - }, - { - "id": 108, - "name": "printEvidenceList", - "qualified_name": "cli.printEvidenceList", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "let a reader see why each result is in the list without opening the file.", - "reason": "let a reader see why each result is in the list without opening the file.", - "terms": [ - "about" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "update", - "files" - ] - }, - { - "id": 1347, - "name": "log", - "qualified_name": "workflow.unreadableFileSummary.log", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "prevent log spam by collapsing per-file warnings into one phase-tagged entry.", - "reason": "prevent log spam by collapsing per-file warnings into one phase-tagged entry.", - "terms": [ - "warn" - ] - }, - { - "id": 118, - "name": "callFallbackWarning", - "qualified_name": "cli.callFallbackWarning", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/status.go", - "intent": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "reason": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "terms": [ - "warn" - ] - }, - { - "id": 1335, - "name": "shouldSuppressExternalImportUnresolved", - "qualified_name": "workflow.shouldSuppressExternalImportUnresolved", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "reason": "reduce false-positive warning volume when dependency code is intentionally absent in the local graph.", - "terms": [ - "warn" - ] - }, - { - "id": 1456, - "name": "AllowRuleOwners", - "qualified_name": "reposync.AllowRuleOwners", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "terms": [ - "warn" - ] - }, - { - "id": 587, - "name": "RebuildNodes", - "qualified_name": "searchsql.PostgresBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Avoids full namespace tsv updates during incremental update paths.", - "reason": "Avoids full namespace tsv updates during incremental update paths.", - "terms": [ - "update" - ] - }, - { - "id": 1419, - "name": "readRecord", - "qualified_name": "workflow.updateSpool.readRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream update inputs back into the update transaction in batches.", - "reason": "stream update inputs back into the update transaction in batches.", - "terms": [ - "update" - ] - }, - { - "id": 1223, - "name": "resolveImportsFrom", - "qualified_name": "resolve.resolveImportsFrom", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link importing files to their target packages or files.", - "reason": "link importing files to their target packages or files.", - "terms": [ - "files" - ] - }, - { - "id": 265, - "name": "federatedGraphStatsEntry", - "qualified_name": "mcp.federatedGraphStatsEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "reason": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "terms": [ - "instead" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "files" - ] - }, - { - "id": 787, - "name": "firstNamedTypeReference", - "qualified_name": "treesitter.firstNamedTypeReference", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "reason": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "terms": [ - "instead" - ] - }, - { - "id": 645, - "name": "RefreshSearchDocumentsFor", - "qualified_name": "searchsql.RefreshSearchDocumentsFor", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "reason": "incremental update 경로에서 영향받은 문서만 갱신한다.", - "terms": [ - "update" - ] - }, - { - "id": 633, - "name": "sqliteColumnExists", - "qualified_name": "searchsql.sqliteColumnExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "gate schema migrations on actual table layout instead of guessing from version markers.", - "reason": "gate schema migrations on actual table layout instead of guessing from version markers.", - "terms": [ - "instead" - ] - }, - { - "id": 896, - "name": "releaseParser", - "qualified_name": "treesitter.Walker.releaseParser", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "reason": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "terms": [ - "instead" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "instead" - ] - }, - { - "id": 1915, - "name": "runSearch", - "qualified_name": "runSearch", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "update search results for the active namespace.", - "reason": "update search results for the active namespace.", - "terms": [ - "update" - ] - }, - { - "id": 213, - "name": "describeSuggestion", - "qualified_name": "mcp.describeSuggestion", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "instead" - ] - }, - { - "id": 1023, - "name": "Suggestion", - "qualified_name": "describe.Suggestion", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 1154, - "name": "ParseCacheKey", - "qualified_name": "ingest.ParseCacheKey", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "include every input known to affect parser output instead of trusting source content alone.", - "reason": "include every input known to affect parser output instead of trusting source content alone.", - "terms": [ - "instead" - ] - }, - { - "id": 1378, - "name": "packageEdgeBuilder", - "qualified_name": "workflow.Service.packageEdgeBuilder", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "reason": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "terms": [ - "instead" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "instead" - ] - }, - { - "id": 1586, - "name": "RerankGroups", - "qualified_name": "rank.RerankGroups", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "reason": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "terms": [ - "instead" - ] - }, - { - "id": 536, - "name": "DeleteEdgesByFile", - "qualified_name": "graphgorm.Store.DeleteEdgesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "selectively clean existing relationships during file-scoped updates.", - "reason": "selectively clean existing relationships during file-scoped updates.", - "terms": [ - "update" - ] - }, - { - "id": 212, - "name": "describeChild", - "qualified_name": "mcp.describeChild", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "let a caller descend one step at a time instead of reading a whole subtree.", - "reason": "let a caller descend one step at a time instead of reading a whole subtree.", - "terms": [ - "instead" - ] - }, - { - "id": 516, - "name": "StoreParseResult", - "qualified_name": "graphgorm.Store.StoreParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "reason": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "terms": [ - "instead" - ] - }, - { - "id": 969, - "name": "GraphLookup", - "qualified_name": "analyze.GraphLookup", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "reason": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "terms": [ - "instead" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "instead" - ] - }, - { - "id": 1373, - "name": "Error", - "qualified_name": "workflow.UnreadableFilesError.Error", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "reason": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "terms": [ - "instead" - ] - }, - { - "id": 617, - "name": "RebuildNodes", - "qualified_name": "searchsql.SQLiteBackend.RebuildNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Avoids full namespace FTS reloading during incremental update paths.", - "reason": "Avoids full namespace FTS reloading during incremental update paths.", - "terms": [ - "update" - ] - }, - { - "id": 1108, - "name": "SetResolveOptions", - "qualified_name": "incremental.Syncer.SetResolveOptions", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid rebuilding the syncer for every Build/Update invocation.", - "reason": "avoid rebuilding the syncer for every Build/Update invocation.", - "terms": [ - "update" - ] - }, - { - "id": 1471, - "name": "UpdateStats", - "qualified_name": "reposync.UpdateStats", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "report only update counts needed by repository sync observability.", - "reason": "report only update counts needed by repository sync observability.", - "terms": [ - "update" - ] - }, - { - "id": 286, - "name": "validateOffset", - "qualified_name": "mcp.validateOffset", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "let a caller who mistyped an offset read what went wrong instead of a transport failure.", - "reason": "let a caller who mistyped an offset read what went wrong instead of a transport failure.", - "terms": [ - "instead" - ] - }, - { - "id": 1008, - "name": "targetKey", - "qualified_name": "crossref.targetKey", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row.", - "reason": "resolve every distinct (namespace, path, symbol) target once per sync instead of once per referencing row.", - "terms": [ - "instead" - ] - }, - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "files" - ] - }, - { - "id": 1232, - "name": "uniqueFileNode", - "qualified_name": "resolve.uniqueFileNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "return nil if multiple ambiguous files match.", - "reason": "return nil if multiple ambiguous files match.", - "terms": [ - "files" - ] - }, - { - "id": 1640, - "name": "packageChildren", - "qualified_name": "wiki.Builder.packageChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list direct files inside one package node.", - "reason": "list direct files inside one package node.", - "terms": [ - "files" - ] - }, - { - "id": 1608, - "name": "Service", - "qualified_name": "search.Service", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "reason": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "terms": [ - "instead" - ] - }, - { - "id": 1707, - "name": "PostgresDSN", - "qualified_name": "dbtest.PostgresDSN", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "reason": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "terms": [ - "instead" - ] - } - ] - }, - "why did change analysis fail after a huge diff exhausted the command output limit": { - "corpus": 1901, - "terms": [ - { - "text": "change", - "in_reasons": 51 - }, - { - "text": "analysis", - "in_reasons": 19 - }, - { - "text": "fail", - "in_reasons": 33 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "huge", - "in_reasons": 0 - }, - { - "text": "diff", - "in_reasons": 22 - }, - { - "text": "exhausted", - "in_reasons": 0 - }, - { - "text": "command", - "in_reasons": 3 - }, - { - "text": "output", - "in_reasons": 30 - }, - { - "text": "limit", - "in_reasons": 31 - } + "why did an incremental update lose relationships between files read in different batches": [ + 45, + 61, + 83, + 87, + 98, + 101, + 102, + 103, + 107, + 110, + 111, + 121, + 122, + 123, + 125, + 134, + 147, + 150, + 151, + 158, + 163, + 164, + 169, + 170, + 183, + 187, + 190, + 192, + 201, + 213, + 216, + 225, + 229, + 230, + 240, + 248, + 249, + 250, + 251, + 255, + 275, + 300, + 301, + 303, + 309, + 311, + 328, + 343, + 346, + 352, + 367, + 371, + 375, + 378, + 386, + 392, + 394, + 397, + 399, + 400, + 404, + 414, + 415, + 433, + 477, + 479, + 480, + 481, + 482, + 483, + 484, + 492, + 501, + 502, + 503, + 505, + 515, + 520, + 530, + 533, + 536, + 565, + 568, + 570, + 572, + 590, + 592, + 593, + 609, + 612, + 613, + 615, + 616, + 618, + 620, + 625, + 632, + 634, + 642, + 647, + 657, + 658, + 666, + 679, + 682, + 686, + 687, + 704, + 715, + 716, + 734, + 750, + 753, + 777, + 786, + 828, + 843, + 855, + 865, + 885, + 888, + 890, + 892, + 896, + 905, + 949, + 956, + 961, + 963, + 968, + 974, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1024, + 1026, + 1029, + 1031, + 1034, + 1035, + 1039, + 1040, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1051, + 1052, + 1053, + 1055, + 1056, + 1057, + 1058, + 1059, + 1063, + 1066, + 1068, + 1072, + 1073, + 1074, + 1077, + 1078, + 1079, + 1081, + 1086, + 1109, + 1114, + 1115, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1127, + 1128, + 1148, + 1150, + 1156, + 1170, + 1171, + 1174, + 1176, + 1178, + 1180, + 1245, + 1246, + 1249, + 1250, + 1256, + 1259, + 1261, + 1265, + 1267, + 1268, + 1269, + 1270, + 1272, + 1273, + 1278, + 1280, + 1285, + 1286, + 1287, + 1290, + 1295, + 1296, + 1297, + 1298, + 1299, + 1301, + 1302, + 1303, + 1305, + 1316, + 1324, + 1325, + 1326, + 1333, + 1334, + 1336, + 1340, + 1353, + 1355, + 1356, + 1361, + 1362, + 1363, + 1366, + 1367, + 1368, + 1369, + 1372, + 1374, + 1376, + 1378, + 1379, + 1380, + 1383, + 1384, + 1406, + 1421, + 1423, + 1424, + 1447, + 1457, + 1458, + 1461, + 1476, + 1483, + 1484, + 1485, + 1488, + 1490, + 1495, + 1496, + 1501, + 1506, + 1514, + 1532, + 1545, + 1558, + 1570, + 1587, + 1596, + 1603, + 1608, + 1618, + 1636, + 1663, + 1664, + 1735, + 1739, + 1767, + 1786, + 1788, + 1795, + 1827, + 1836, + 1842, + 1855, + 1863, + 1864, + 1877, + 1906 ], - "hits": [ - { - "id": 434, - "name": "DiffHunks", - "qualified_name": "gitexec.ExecGitClient.DiffHunks", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "map git diff output into file-level hunk ranges for overlap analysis", - "reason": "map git diff output into file-level hunk ranges for overlap analysis", - "terms": [ - "analysis", - "diff", - "output" - ] - }, - { - "id": 58, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg/main.go", - "intent": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "reason": "assemble local CLI dependencies and guarantee cleanup on command failure.", - "terms": [ - "fail", - "command" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "fail", - "command" - ] - }, - { - "id": 107, - "name": "printJSONResponse", - "qualified_name": "cli.printJSONResponse", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "keep --json output byte-stable and diffable while staying the MCP contract.", - "reason": "keep --json output byte-stable and diffable while staying the MCP contract.", - "terms": [ - "diff", - "output" - ] - }, - { - "id": 465, - "name": "NodesByFiles", - "qualified_name": "graphgorm.Store.NodesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/changes.go", - "intent": "supply diff-overlap inputs without exposing database filters to change policy.", - "reason": "supply diff-overlap inputs without exposing database filters to change policy.", - "terms": [ - "change", - "diff" - ] - }, - { - "id": 1402, - "name": "cachedParseRecordFrom", - "qualified_name": "workflow.cachedParseRecordFrom", - "kind": "function", - "file_path": "internal/app/ingest/workflow/parsecache.go", - "intent": "keep durable cache payloads limited to parser output reused by later builds.", - "reason": "keep durable cache payloads limited to parser output reused by later builds.", - "terms": [ - "output", - "limit" - ] - }, - { - "id": 908, - "name": "GitClient", - "qualified_name": "changes.GitClient", - "kind": "type", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "abstract git operations so risk analysis can consume changed files and hunks", - "reason": "abstract git operations so risk analysis can consume changed files and hunks", - "terms": [ - "change", - "analysis" - ] - }, - { - "id": 965, - "name": "ChangeRepository", - "qualified_name": "analyze.ChangeRepository", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms.", - "reason": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms.", - "terms": [ - "change", - "analysis" - ] - }, - { - "id": 972, - "name": "AffectedFlow", - "qualified_name": "analyze.AffectedFlow", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "reason": "carry change-to-flow overlap facts from analysis persistence to application consumers.", - "terms": [ - "change", - "analysis" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "change", - "after" - ] - }, - { - "id": 419, - "name": "Write", - "qualified_name": "contentfiles.Root.Write", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "persist generated output only after safe-root validation and durable temporary-file completion.", - "reason": "persist generated output only after safe-root validation and durable temporary-file completion.", - "terms": [ - "after", - "output" - ] - }, - { - "id": 1504, - "name": "recordFailure", - "qualified_name": "reposync.SyncQueue.recordFailure", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "update queue-level and per-repository failure tracking after a terminal sync error.", - "reason": "update queue-level and per-repository failure tracking after a terminal sync error.", - "terms": [ - "fail", - "after" - ] - }, - { - "id": 307, - "name": "promptLimitArg", - "qualified_name": "mcp.promptLimitArg", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "clamp the optional prompt limit argument to the handler's hard cap.", - "reason": "clamp the optional prompt limit argument to the handler's hard cap.", - "terms": [ - "fail", - "limit" - ] - }, - { - "id": 1012, - "name": "reresolveInbound", - "qualified_name": "crossref.Service.reresolveInbound", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "reason": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "terms": [ - "change", - "after" - ] - }, - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "change", - "diff" - ] - }, - { - "id": 917, - "name": "collectDiffHunks", - "qualified_name": "changes.Service.collectDiffHunks", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "gather the minimal diff context needed before matching git changes back to graph nodes.", - "reason": "gather the minimal diff context needed before matching git changes back to graph nodes.", - "terms": [ - "change", - "diff" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "fail", - "diff" - ] - }, - { - "id": 417, - "name": "Validate", - "qualified_name": "contentfiles.Root.Validate", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "fail generation preflight before any output when a path could escape or traverse a symlink.", - "reason": "fail generation preflight before any output when a path could escape or traverse a symlink.", - "terms": [ - "fail", - "output" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "change", - "after" - ] - }, - { - "id": 515, - "name": "LoadParseResult", - "qualified_name": "graphgorm.Store.LoadParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "terms": [ - "change", - "output" - ] - }, - { - "id": 1881, - "name": "NewRuntime", - "qualified_name": "runtime.NewRuntime", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "initialize parser walkers once before command-specific database setup runs.", - "reason": "initialize parser walkers once before command-specific database setup runs.", - "terms": [ - "command" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "change", - "limit" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "analysis" - ] - }, - { - "id": 1155, - "name": "ParseCache", - "qualified_name": "ingest.ParseCache", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "reason": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "terms": [ - "fail" - ] - }, - { - "id": 1348, - "name": "asError", - "qualified_name": "workflow.unreadableFileSummary.asError", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "reason": "let callers escalate skipped reads into a structured failure when FailOnUnreadable is set.", - "terms": [ - "fail" - ] - }, - { - "id": 499, - "name": "NodesByExactName", - "qualified_name": "graphgorm.Store.NodesByExactName", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "support exact-name fallback suggestions through the analysis repository.", - "reason": "support exact-name fallback suggestions through the analysis repository.", - "terms": [ - "analysis" - ] - }, - { - "id": 1715, - "name": "close", - "qualified_name": "dbtest.postgresSchema.close", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "terms": [ - "fail" - ] - }, - { - "id": 1669, - "name": "sortTree", - "qualified_name": "wiki.sortTree", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "keep Wiki tree output deterministic across builds.", - "reason": "keep Wiki tree output deterministic across builds.", - "terms": [ - "output" - ] - }, - { - "id": 497, - "name": "RelatedNodes", - "qualified_name": "graphgorm.Store.RelatedNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "implement namespace-scoped relationship joins behind the analysis query repository.", - "reason": "implement namespace-scoped relationship joins behind the analysis query repository.", - "terms": [ - "analysis" - ] - }, - { - "id": 415, - "name": "NewRoot", - "qualified_name": "contentfiles.NewRoot", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/root.go", - "intent": "prevent application policy from handling absolute output paths.", - "reason": "prevent application policy from handling absolute output paths.", - "terms": [ - "output" - ] - }, - { - "id": 1129, - "name": "formatEdgeKindCounts", - "qualified_name": "incremental.formatEdgeKindCounts", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "serialize EdgeKind counters into diagnostics-friendly logging output.", - "reason": "serialize EdgeKind counters into diagnostics-friendly logging output.", - "terms": [ - "output" - ] - }, - { - "id": 1334, - "name": "formatEdgeKindCounts", - "qualified_name": "workflow.formatEdgeKindCounts", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "serialize EdgeKind counters into diagnostics-friendly logging output.", - "reason": "serialize EdgeKind counters into diagnostics-friendly logging output.", - "terms": [ - "output" - ] - }, - { - "id": 432, - "name": "NewExecGitClient", - "qualified_name": "gitexec.NewExecGitClient", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "construct a GitClient that reads diffs from the local repository", - "reason": "construct a GitClient that reads diffs from the local repository", - "terms": [ - "diff" - ] - }, - { - "id": 436, - "name": "runGitLimited", - "qualified_name": "gitexec.runGitLimited", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "share a single bounded git invocation helper across diff operations", - "reason": "share a single bounded git invocation helper across diff operations", - "terms": [ - "diff" - ] - }, - { - "id": 199, - "name": "validatePathWithinAllowedRoots", - "qualified_name": "mcp.validatePathWithinAllowedRoots", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "reason": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "terms": [ - "analysis" - ] - }, - { - "id": 318, - "name": "analysisTools", - "qualified_name": "mcp.analysisTools", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/tools_analysis.go", - "intent": "keep analysis capabilities grouped so server startup can expose them consistently.", - "reason": "keep analysis capabilities grouped so server startup can expose them consistently.", - "terms": [ - "analysis" - ] - }, - { - "id": 483, - "name": "ListOutboundCrossRefs", - "qualified_name": "graphgorm.Store.ListOutboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "expose a namespace's declared external dependencies for listing and analysis.", - "reason": "expose a namespace's declared external dependencies for listing and analysis.", - "terms": [ - "analysis" - ] - }, - { - "id": 999, - "name": "QueryOptions", - "qualified_name": "query.QueryOptions", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "let callers choose between compatibility mode and strict call-edge analysis.", - "reason": "let callers choose between compatibility mode and strict call-edge analysis.", - "terms": [ - "analysis" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "after" - ] - }, - { - "id": 1143, - "name": "withStringMap", - "qualified_name": "ingest.withStringMap", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "prevent callers from mutating parser context maps after injection.", - "reason": "prevent callers from mutating parser context maps after injection.", - "terms": [ - "after" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "after" - ] - }, - { - "id": 1465, - "name": "internal/app/reposync/ports.go", - "qualified_name": "internal/app/reposync/ports.go", - "kind": "file", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "output" - ] - }, - { - "id": 1466, - "name": "CheckoutRequest", - "qualified_name": "reposync.CheckoutRequest", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "output" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "diff" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "diff" - ] - }, - { - "id": 909, - "name": "Hunk", - "qualified_name": "changes.Hunk", - "kind": "class", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "represent a diff segment that can be matched against graph nodes", - "reason": "represent a diff segment that can be matched against graph nodes", - "terms": [ - "diff" - ] - }, - { - "id": 196, - "name": "validateRepoRootWithin", - "qualified_name": "mcp.validateRepoRootWithin", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "reason": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "terms": [ - "analysis" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "analysis" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "analysis" - ] - }, - { - "id": 474, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", - "reason": "let impact analysis find foreign namespaces that depend on the target nodes.", - "terms": [ - "analysis" - ] - } - ] - }, - "why did one oversized file abort indexing before it was read": { - "corpus": 1901, - "terms": [ - { - "text": "one", - "in_reasons": 192 - }, - { - "text": "oversized", - "in_reasons": 1 - }, - { - "text": "file", - "in_reasons": 209 - }, - { - "text": "abort", - "in_reasons": 1 - }, - { - "text": "indexing", - "in_reasons": 5 - }, - { - "text": "before", - "in_reasons": 85 - }, - { - "text": "read", - "in_reasons": 81 - } + "why did an update merely warn about unreadable files instead of failing": [ + 60, + 71, + 111, + 121, + 122, + 147, + 150, + 164, + 165, + 170, + 183, + 187, + 192, + 217, + 240, + 248, + 249, + 250, + 260, + 289, + 311, + 346, + 352, + 367, + 392, + 394, + 397, + 399, + 400, + 404, + 459, + 483, + 492, + 501, + 502, + 505, + 530, + 565, + 568, + 570, + 581, + 590, + 592, + 609, + 612, + 613, + 615, + 616, + 618, + 620, + 625, + 632, + 634, + 642, + 647, + 666, + 682, + 687, + 732, + 828, + 843, + 855, + 920, + 956, + 959, + 963, + 970, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1029, + 1031, + 1034, + 1039, + 1040, + 1042, + 1043, + 1046, + 1052, + 1053, + 1055, + 1057, + 1058, + 1059, + 1063, + 1068, + 1078, + 1081, + 1086, + 1101, + 1114, + 1115, + 1117, + 1118, + 1120, + 1122, + 1127, + 1148, + 1150, + 1156, + 1171, + 1174, + 1176, + 1180, + 1246, + 1249, + 1256, + 1259, + 1278, + 1282, + 1287, + 1290, + 1292, + 1294, + 1296, + 1297, + 1299, + 1301, + 1302, + 1303, + 1305, + 1316, + 1317, + 1318, + 1322, + 1325, + 1326, + 1333, + 1334, + 1336, + 1353, + 1356, + 1361, + 1362, + 1363, + 1366, + 1367, + 1368, + 1369, + 1372, + 1374, + 1378, + 1379, + 1380, + 1383, + 1384, + 1403, + 1421, + 1424, + 1449, + 1457, + 1458, + 1487, + 1488, + 1495, + 1496, + 1523, + 1527, + 1528, + 1536, + 1556, + 1558, + 1570, + 1587, + 1603, + 1608, + 1618, + 1636, + 1651, + 1698, + 1742, + 1754, + 1768, + 1827, + 1836, + 1842, + 1863 ], - "hits": [ - { - "id": 1134, - "name": "splitEdgeChunks", - "qualified_name": "incremental.splitEdgeChunks", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "cap incremental resolution work so large files do not create oversized resolve batches.", - "reason": "cap incremental resolution work so large files do not create oversized resolve batches.", - "terms": [ - "oversized", - "file" - ] - }, - { - "id": 1194, - "name": "indexNode", - "qualified_name": "resolve.resolveState.indexNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "maintain consistent node indexing by ID, QN, file, and name.", - "reason": "maintain consistent node indexing by ID, QN, file, and name.", - "terms": [ - "file", - "indexing" - ] - }, - { - "id": 296, - "name": "resolveNamespacePath", - "qualified_name": "mcp.handlers.resolveNamespacePath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "reason": "reject path traversal and symlink escapes before any namespace-scoped filesystem read.", - "terms": [ - "file", - "before", - "read" - ] - }, - { - "id": 1533, - "name": "HitCount", - "qualified_name": "evidence.File.HitCount", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let a caller weigh a file before reading any of its hits.", - "reason": "let a caller weigh a file before reading any of its hits.", - "terms": [ - "file", - "before", - "read" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "file", - "before", - "read" - ] - }, - { - "id": 1623, - "name": "FileGroup", - "qualified_name": "wire.FileGroup", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller choose between files, then read inside the one it chose.", - "reason": "let a caller choose between files, then read inside the one it chose.", - "terms": [ - "one", - "file", - "read" - ] - }, - { - "id": 1209, - "name": "flattenNodes", - "qualified_name": "resolve.flattenNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "prepare nodes for indexing and state population.", - "reason": "prepare nodes for indexing and state population.", - "terms": [ - "indexing" - ] - }, - { - "id": 274, - "name": "cachedExecute", - "qualified_name": "mcp.handlers.cachedExecute", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "reason": "centralize caching for read-oriented tool responses so repeated DB and analyzer work can be skipped.", - "terms": [ - "before", - "read" - ] - }, - { - "id": 298, - "name": "ensureNoSymlinkInPath", - "qualified_name": "mcp.ensureNoSymlinkInPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/namespace_paths.go", - "intent": "prevent symlink traversal from escaping the namespace root before a read.", - "reason": "prevent symlink traversal from escaping the namespace root before a read.", - "terms": [ - "before", - "read" - ] - }, - { - "id": 1896, - "name": "getAssetName", - "qualified_name": "getAssetName", - "kind": "function", - "file_path": "npm/install.js", - "intent": "map the current platform key to the published ccg release asset name and abort if unsupported.", - "reason": "map the current platform key to the published ccg release asset name and abort if unsupported.", - "terms": [ - "abort" - ] - }, - { - "id": 583, - "name": "PostgresBackend", - "qualified_name": "searchsql.PostgresBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "reason": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "terms": [ - "indexing" - ] - }, - { - "id": 612, - "name": "SQLiteBackend", - "qualified_name": "searchsql.SQLiteBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Handles full-text search indexing and querying in a SQLite environment.", - "reason": "Handles full-text search indexing and querying in a SQLite environment.", - "terms": [ - "indexing" - ] - }, - { - "id": 1597, - "name": "empty", - "qualified_name": "rank.queryTokens.empty", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "give callers one question to ask before scoring a candidate.", - "reason": "give callers one question to ask before scoring a candidate.", - "terms": [ - "one", - "before" - ] - }, - { - "id": 1340, - "name": "openRegularSourceFile", - "qualified_name": "workflow.openRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "prevent replacement races from turning a validated regular path into a followed symlink before reading.", - "reason": "prevent replacement races from turning a validated regular path into a followed symlink before reading.", - "terms": [ - "before", - "read" - ] - }, - { - "id": 1543, - "name": "page", - "qualified_name": "evidence.page", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "bound an answer by files, so paging through it never lands a reader mid-file.", - "reason": "bound an answer by files, so paging through it never lands a reader mid-file.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1389, - "name": "upsertPackageNodes", - "qualified_name": "workflow.upsertPackageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "ensure package nodes exist before their member files are linked.", - "reason": "ensure package nodes exist before their member files are linked.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 357, - "name": "handleDoc", - "qualified_name": "wikiserver.Server.handleDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read one generated Markdown document for display in the Wiki viewer.", - "reason": "read one generated Markdown document for display in the Wiki viewer.", - "terms": [ - "one", - "read" - ] - }, - { - "id": 220, - "name": "getDocContent", - "qualified_name": "mcp.handlers.getDocContent", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "reason": "Returns the content of a documentation file directly so agents can read detailed descriptions.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 381, - "name": "readDocFile", - "qualified_name": "wikiserver.readDocFile", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce generated doc size limits and read the resolved Markdown file.", - "reason": "enforce generated doc size limits and read the resolved Markdown file.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1321, - "name": "GetNodesByFiles", - "qualified_name": "workflow.buildResolveLookup.GetNodesByFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "measure file-node store reads while preserving the resolver lookup contract.", - "reason": "measure file-node store reads while preserving the resolver lookup contract.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1349, - "name": "CheckParseFileSize", - "qualified_name": "workflow.CheckParseFileSize", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "reject individual files that exceed the configured per-file parse budget before loading them into memory.", - "reason": "reject individual files that exceed the configured per-file parse budget before loading them into memory.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1037, - "name": "validateDocGroups", - "qualified_name": "docs.Generator.validateDocGroups", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "prevent path-traversal writes before any file I/O is attempted", - "reason": "prevent path-traversal writes before any file I/O is attempted", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1916, - "name": "copyContext", - "qualified_name": "copyContext", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "copy selected docs or summaries as one LLM-ready Markdown context block.", - "reason": "copy selected docs or summaries as one LLM-ready Markdown context block.", - "terms": [ - "one", - "read" - ] - }, - { - "id": 1579, - "name": "Any", - "qualified_name": "rank.Structural.Any", - "kind": "function", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "give callers one question to ask before deciding a candidate is unexplainable.", - "reason": "give callers one question to ask before deciding a candidate is unexplainable.", - "terms": [ - "one", - "before" - ] - }, - { - "id": 1640, - "name": "packageChildren", - "qualified_name": "wiki.Builder.packageChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list direct files inside one package node.", - "reason": "list direct files inside one package node.", - "terms": [ - "one", - "file" - ] - }, - { - "id": 1641, - "name": "fileChildren", - "qualified_name": "wiki.Builder.fileChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list symbols declared inside one file node.", - "reason": "list symbols declared inside one file node.", - "terms": [ - "one", - "file" - ] - }, - { - "id": 204, - "name": "getMinimalContext", - "qualified_name": "mcp.handlers.getMinimalContext", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_context.go", - "intent": "give agents a cheap first read of namespace state before they spend tokens on deeper graph queries.", - "reason": "give agents a cheap first read of namespace state before they spend tokens on deeper graph queries.", - "terms": [ - "before", - "read" - ] - }, - { - "id": 1339, - "name": "inspectRegularSourceFile", - "qualified_name": "workflow.inspectRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes.", - "reason": "reject symlink and non-regular source paths before any parser or package discoverer can read target bytes.", - "terms": [ - "before", - "read" - ] - }, - { - "id": 429, - "name": "LoadWikiIndex", - "qualified_name": "contentfiles.LoadWikiIndex", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "round-trip compatibility fixtures and fallback readers through the outbound file adapter.", - "reason": "round-trip compatibility fixtures and fallback readers through the outbound file adapter.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1310, - "name": "collectBuildParseInputs", - "qualified_name": "workflow.Service.collectBuildParseInputs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "reason": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1891, - "name": "EnsureNoSymlinkInPath", - "qualified_name": "safepath.EnsureNoSymlinkInPath", - "kind": "function", - "file_path": "internal/safepath/safepath.go", - "intent": "prevent symlink traversal from escaping a trusted root before any filesystem mutation.", - "reason": "prevent symlink traversal from escaping a trusted root before any filesystem mutation.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1959, - "name": "buildContext", - "qualified_name": "buildContext", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "reason": "ask ccg-server to assemble selected docs into one LLM-ready Markdown block.", - "terms": [ - "one", - "read" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1431, - "name": "applyUpdateSpoolInTx", - "qualified_name": "workflow.Service.applyUpdateSpoolInTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1268, - "name": "explicitOwnerTarget", - "qualified_name": "resolve.explicitOwnerTarget", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "reason": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "terms": [ - "one", - "before" - ] - }, - { - "id": 1542, - "name": "groupByFile", - "qualified_name": "evidence.groupByFile", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "turn a ranked list of declarations into a ranked list of files to read.", - "reason": "turn a ranked list of declarations into a ranked list of files to read.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1678, - "name": "SearchTextForAnnotation", - "qualified_name": "wiki.SearchTextForAnnotation", - "kind": "function", - "file_path": "internal/app/wiki/model.go", - "intent": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata.", - "reason": "include annotation summary, context, tag kinds, names, types, and values without indexing source or generic node metadata.", - "terms": [ - "indexing" - ] - }, - { - "id": 1131, - "name": "partitionParsedSyncEdges", - "qualified_name": "incremental.partitionParsedSyncEdges", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "reason": "resolve interface fulfillment before file-local edge chunks that may depend on those relationships.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1430, - "name": "prepareUpdateSpool", - "qualified_name": "workflow.Service.prepareUpdateSpool", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "capture the current update input set and file hashes before transactional incremental sync begins.", - "reason": "capture the current update input set and file hashes before transactional incremental sync begins.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 212, - "name": "describeChild", - "qualified_name": "mcp.describeChild", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "let a caller descend one step at a time instead of reading a whole subtree.", - "reason": "let a caller descend one step at a time instead of reading a whole subtree.", - "terms": [ - "one", - "read" - ] - }, - { - "id": 363, - "name": "readDocUnderRoot", - "qualified_name": "wikiserver.Server.readDocUnderRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read a generated doc path from one explicit root with the standard Wiki size limit.", - "reason": "read a generated doc path from one explicit root with the standard Wiki size limit.", - "terms": [ - "one", - "read" - ] - }, - { - "id": 108, - "name": "printEvidenceList", - "qualified_name": "cli.printEvidenceList", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "let a reader see why each result is in the list without opening the file.", - "reason": "let a reader see why each result is in the list without opening the file.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1028, - "name": "declarationsOf", - "qualified_name": "describe.Service.declarationsOf", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "hand back a file's contents in the order a reader would scroll through them.", - "reason": "hand back a file's contents in the order a reader would scroll through them.", - "terms": [ - "file", - "read" - ] - }, - { - "id": 1537, - "name": "Options", - "qualified_name": "evidence.Options", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "reason": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "terms": [ - "one", - "file" - ] - }, - { - "id": 1343, - "name": "walkMatchingFiles", - "qualified_name": "workflow.walkMatchingFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "reason": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 1413, - "name": "updateSpool", - "qualified_name": "workflow.updateSpool", - "kind": "class", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "capture the current file set, hashes, and force-reparse decisions before the update transaction begins.", - "reason": "capture the current file set, hashes, and force-reparse decisions before the update transaction begins.", - "terms": [ - "file", - "before" - ] - }, - { - "id": 566, - "name": "FileSymbols", - "qualified_name": "graphgorm.Store.FileSymbols", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "load stable symbol children for one lazy Wiki file node.", - "reason": "load stable symbol children for one lazy Wiki file node.", - "terms": [ - "one", - "file" - ] - }, - { - "id": 1458, - "name": "ValidateRepoNameNamespaceRules", - "qualified_name": "reposync.ValidateRepoNameNamespaceRules", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "reason": "fail webhook startup before equal repo names from different owners can share checkout and graph state.", - "terms": [ - "one", - "before" - ] - } - ] - }, - "why did the build refuse a source file that changed while it was being opened": { - "corpus": 1901, - "terms": [ - { - "text": "build", - "in_reasons": 81 - }, - { - "text": "refuse", - "in_reasons": 0 - }, - { - "text": "source", - "in_reasons": 74 - }, - { - "text": "file", - "in_reasons": 209 - }, - { - "text": "changed", - "in_reasons": 20 - }, - { - "text": "while", - "in_reasons": 105 - }, - { - "text": "being", - "in_reasons": 3 - }, - { - "text": "opened", - "in_reasons": 1 - } + "why did change analysis fail after a huge diff exhausted the command output limit": [ + 1, + 11, + 32, + 44, + 59, + 71, + 77, + 78, + 111, + 114, + 116, + 121, + 126, + 142, + 143, + 145, + 147, + 148, + 149, + 150, + 151, + 154, + 157, + 172, + 174, + 186, + 192, + 193, + 201, + 212, + 214, + 219, + 236, + 239, + 240, + 244, + 254, + 259, + 260, + 269, + 292, + 308, + 309, + 313, + 323, + 328, + 352, + 361, + 363, + 365, + 370, + 372, + 378, + 379, + 380, + 381, + 382, + 383, + 400, + 410, + 411, + 413, + 419, + 428, + 430, + 431, + 438, + 443, + 445, + 449, + 458, + 502, + 503, + 515, + 533, + 572, + 578, + 594, + 639, + 728, + 730, + 733, + 753, + 778, + 820, + 821, + 855, + 856, + 857, + 858, + 859, + 862, + 864, + 865, + 866, + 868, + 869, + 902, + 903, + 906, + 908, + 916, + 923, + 949, + 956, + 963, + 964, + 988, + 991, + 999, + 1028, + 1030, + 1034, + 1042, + 1043, + 1046, + 1054, + 1059, + 1062, + 1071, + 1074, + 1075, + 1090, + 1100, + 1101, + 1103, + 1113, + 1168, + 1244, + 1260, + 1261, + 1275, + 1278, + 1279, + 1281, + 1292, + 1293, + 1295, + 1297, + 1302, + 1316, + 1317, + 1324, + 1325, + 1346, + 1350, + 1351, + 1352, + 1360, + 1363, + 1365, + 1366, + 1370, + 1373, + 1378, + 1382, + 1383, + 1406, + 1418, + 1419, + 1423, + 1426, + 1434, + 1435, + 1437, + 1438, + 1439, + 1442, + 1447, + 1451, + 1453, + 1456, + 1457, + 1458, + 1462, + 1463, + 1488, + 1503, + 1532, + 1538, + 1596, + 1617, + 1647, + 1659, + 1698, + 1735, + 1755, + 1779, + 1795, + 1819, + 1822, + 1831, + 1856, + 1873, + 1875 ], - "hits": [ - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "file", - "changed", - "while" - ] - }, - { - "id": 1652, - "name": "treeState", - "qualified_name": "wiki.treeState", - "kind": "class", - "file_path": "internal/app/wiki/builder.go", - "intent": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "reason": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "terms": [ - "build", - "file", - "while" - ] - }, - { - "id": 1301, - "name": "newParsedBuildNodeBatch", - "qualified_name": "workflow.newParsedBuildNodeBatch", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "defer comment binding until storage time while keeping per-file source line context available.", - "reason": "defer comment binding until storage time while keeping per-file source line context available.", - "terms": [ - "source", - "file", - "while" - ] - }, - { - "id": 1343, - "name": "walkMatchingFiles", - "qualified_name": "workflow.walkMatchingFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "reason": "walk candidate source files once while applying recursion, exclude, and include-path policy before parsing.", - "terms": [ - "source", - "file", - "while" - ] - }, - { - "id": 189, - "name": "affectedFlowEntry", - "qualified_name": "mcp.affectedFlowEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "reason": "preserve a stable DTO for getAffectedFlows items while retaining changed node identifiers.", - "terms": [ - "changed", - "while" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1116, - "name": "stageBatch", - "qualified_name": "incremental.Syncer.stageBatch", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "terms": [ - "source", - "file", - "while" - ] - }, - { - "id": 1399, - "name": "appendUniqueStrings", - "qualified_name": "workflow.appendUniqueStrings", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "aggregate strings from multiple sources while filtering duplicates.", - "reason": "aggregate strings from multiple sources while filtering duplicates.", - "terms": [ - "source", - "while" - ] - }, - { - "id": 1098, - "name": "internal/app/ingest/incremental/incremental.go", - "qualified_name": "internal/app/ingest/incremental/incremental.go", - "kind": "file", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1099, - "name": "Store", - "qualified_name": "incremental.Store", - "kind": "type", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "abstract graph storage so changed files can be reparsed and upserted", - "reason": "abstract graph storage so changed files can be reparsed and upserted", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1102, - "name": "Syncer", - "qualified_name": "incremental.Syncer", - "kind": "class", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "avoid full rebuilds by reparsing only files whose content hash changed", - "reason": "avoid full rebuilds by reparsing only files whose content hash changed", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 908, - "name": "GitClient", - "qualified_name": "changes.GitClient", - "kind": "type", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "abstract git operations so risk analysis can consume changed files and hunks", - "reason": "abstract git operations so risk analysis can consume changed files and hunks", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1939, - "name": "SearchResult", - "qualified_name": "SearchResult", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "represent a tree search hit that can be opened or added to LLM context.", - "reason": "represent a tree search hit that can be opened or added to LLM context.", - "terms": [ - "opened" - ] - }, - { - "id": 1531, - "name": "Known", - "qualified_name": "evidence.Coverage.Known", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep an unmeasured coverage from being reported as a measured zero.", - "reason": "keep an unmeasured coverage from being reported as a measured zero.", - "terms": [ - "being" - ] - }, - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1431, - "name": "applyUpdateSpoolInTx", - "qualified_name": "workflow.Service.applyUpdateSpoolInTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "reason": "prefer staged reconciliation so every changed or forced file node is current before any cross-file edge is resolved.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 522, - "name": "GetNodesByFile", - "qualified_name": "graphgorm.Store.GetNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load declarations parsed from a specific source file.", - "reason": "load declarations parsed from a specific source file.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 167, - "name": "IncrementalSyncer", - "qualified_name": "mcp.IncrementalSyncer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "reason": "Injects a syncer that reflects only changed files into the graph without full re-parsing.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1200, - "name": "FilterResolvedWithDiagnostics", - "qualified_name": "resolve.FilterResolvedWithDiagnostics", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging.", - "reason": "preserve current filtering semantics while exposing actionable diagnostics for build/update debugging.", - "terms": [ - "build", - "while" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "file", - "changed" - ] - }, - { - "id": 1170, - "name": "FileBatchSource", - "qualified_name": "ingest.FileBatchSource", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "reason": "let workflow retain source spooling while incremental reconciliation controls node and edge phases.", - "terms": [ - "source", - "while" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "build", - "source" - ] - }, - { - "id": 553, - "name": "FindUnresolvedEdgesByLookupKeys", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByLookupKeys", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "use the reverse index to identify affected unchanged source files.", - "reason": "use the reverse index to identify affected unchanged source files.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 700, - "name": "pathMatchesPrefix", - "qualified_name": "treesitter.pathMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match concrete source file paths against tsconfig alias target roots.", - "reason": "match concrete source file paths against tsconfig alias target roots.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1243, - "name": "packageForFile", - "qualified_name": "resolve.packageForFile", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "determine the logical package context for a physical source file.", - "reason": "determine the logical package context for a physical source file.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 197, - "name": "configuredAnalysisRoots", - "qualified_name": "mcp.configuredAnalysisRoots", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "build the allowlist used by path validation so each source of truth contributes exactly once.", - "reason": "build the allowlist used by path validation so each source of truth contributes exactly once.", - "terms": [ - "build", - "source" - ] - }, - { - "id": 1125, - "name": "releaseContent", - "qualified_name": "incremental.releaseContent", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1356, - "name": "forceReparseFiles", - "qualified_name": "workflow.forceReparseFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "reason": "keep cross-file edges consistent by reparsing edge-source files when their referenced nodes change.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1823, - "name": "ParseCacheEntry", - "qualified_name": "graph.ParseCacheEntry", - "kind": "class", - "file_path": "internal/domain/graph/parse_cache.go", - "intent": "bound cache growth per active source path while validating the complete semantic cache identity.", - "reason": "bound cache growth per active source path while validating the complete semantic cache identity.", - "terms": [ - "source", - "while" - ] - }, - { - "id": 515, - "name": "LoadParseResult", - "qualified_name": "graphgorm.Store.LoadParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "reason": "prevent stale parser output from being reused across content, path, parser, context, or namespace changes.", - "terms": [ - "being" - ] - }, - { - "id": 1327, - "name": "flushBuildEdgeSourceWithTiming", - "qualified_name": "workflow.Service.flushBuildEdgeSourceWithTiming", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts.", - "reason": "avoid retaining or repartitioning every build edge while preserving resolver ordering and timing contracts.", - "terms": [ - "build", - "while" - ] - }, - { - "id": 1341, - "name": "readRegularSourceFile", - "qualified_name": "workflow.readRegularSourceFile", - "kind": "function", - "file_path": "internal/app/ingest/workflow/fileio.go", - "intent": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "reason": "keep all secondary source reads on the same no-follow path as build and update ingestion.", - "terms": [ - "build", - "source" - ] - }, - { - "id": 669, - "name": "DiscoverPackages", - "qualified_name": "treesitter.GoPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "walk the repository to identify Go packages and their source files.", - "reason": "walk the repository to identify Go packages and their source files.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1432, - "name": "addedUpdateFiles", - "qualified_name": "workflow.addedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "seed semi-naive unresolved lookup from newly introduced source files only.", - "reason": "seed semi-naive unresolved lookup from newly introduced source files only.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "being" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 337, - "name": "NewWebhookHandler", - "qualified_name": "webhook.NewWebhookHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "keep the default construction path small while routing all configuration through the shared config builder.", - "reason": "keep the default construction path small while routing all configuration through the shared config builder.", - "terms": [ - "build", - "while" - ] - }, - { - "id": 1329, - "name": "persistBuildUnresolvedEdges", - "qualified_name": "workflow.persistBuildUnresolvedEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "populate the reverse index during full builds while keeping stores without the optional capability compatible.", - "reason": "populate the reverse index during full builds while keeping stores without the optional capability compatible.", - "terms": [ - "build", - "while" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "build", - "source" - ] - }, - { - "id": 672, - "name": "mergeSplitPackageDir", - "qualified_name": "treesitter.mergeSplitPackageDir", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "keep package nodes deterministic even when files come from multiple source roots.", - "reason": "keep package nodes deterministic even when files come from multiple source roots.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1310, - "name": "collectBuildParseInputs", - "qualified_name": "workflow.Service.collectBuildParseInputs", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "reason": "preserve build traversal policy and deterministic file order before concurrent parsing starts.", - "terms": [ - "build", - "file" - ] - }, - { - "id": 1690, - "name": "IndexWriter", - "qualified_name": "wiki.IndexWriter", - "kind": "type", - "file_path": "internal/app/wiki/ports.go", - "intent": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "reason": "let Wiki build policy choose namespace and payload without owning filesystem implementation.", - "terms": [ - "build", - "file" - ] - }, - { - "id": 1390, - "name": "upsertPackageContainsEdges", - "qualified_name": "workflow.upsertPackageContainsEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "populate the graph's structural hierarchy by connecting packages to their source files.", - "reason": "populate the graph's structural hierarchy by connecting packages to their source files.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1321, - "name": "GetNodesByFiles", - "qualified_name": "workflow.buildResolveLookup.GetNodesByFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "measure file-node store reads while preserving the resolver lookup contract.", - "reason": "measure file-node store reads while preserving the resolver lookup contract.", - "terms": [ - "file", - "while" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "build", - "file" - ] - }, - { - "id": 1317, - "name": "newBuildResolveLookup", - "qualified_name": "workflow.newBuildResolveLookup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "share immutable import file-node results across all resolver chunks in one build.", - "reason": "share immutable import file-node results across all resolver chunks in one build.", - "terms": [ - "build", - "file" - ] - }, - { - "id": 1415, - "name": "readRecord", - "qualified_name": "workflow.buildSpool.readRecord", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "stream parsed input back into the build transaction one file at a time.", - "reason": "stream parsed input back into the build transaction one file at a time.", - "terms": [ - "build", - "file" - ] - }, - { - "id": 554, - "name": "FindUnresolvedEdgesByFiles", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "reason": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 667, - "name": "DiscoverPackages", - "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "reason": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "terms": [ - "source", - "file" - ] - }, - { - "id": 1302, - "name": "buildPersistBatch", - "qualified_name": "workflow.buildPersistBatch", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "amortize transaction overhead by persisting groups of files together while bounding memory.", - "reason": "amortize transaction overhead by persisting groups of files together while bounding memory.", - "terms": [ - "file", - "while" - ] - } - ] - }, - "why do uncertain call targets appear in a flow unless I opt out": { - "corpus": 1901, - "terms": [ - { - "text": "uncertain", - "in_reasons": 0 - }, - { - "text": "call", - "in_reasons": 177 - }, - { - "text": "targets", - "in_reasons": 18 - }, - { - "text": "appear", - "in_reasons": 3 - }, - { - "text": "flow", - "in_reasons": 52 - }, - { - "text": "unless", - "in_reasons": 3 - }, - { - "text": "opt", - "in_reasons": 3 - }, - { - "text": "out", - "in_reasons": 10 - } + "why did one oversized file abort indexing before it was read": [ + 30, + 31, + 42, + 43, + 61, + 62, + 80, + 81, + 83, + 87, + 98, + 101, + 102, + 103, + 107, + 110, + 111, + 113, + 121, + 123, + 125, + 134, + 147, + 150, + 151, + 158, + 163, + 164, + 165, + 167, + 169, + 170, + 171, + 174, + 182, + 187, + 192, + 201, + 206, + 209, + 211, + 212, + 213, + 216, + 218, + 220, + 224, + 225, + 226, + 229, + 230, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 254, + 271, + 273, + 275, + 277, + 279, + 287, + 300, + 301, + 303, + 305, + 307, + 308, + 309, + 311, + 314, + 316, + 318, + 320, + 321, + 328, + 331, + 332, + 334, + 336, + 339, + 343, + 346, + 352, + 353, + 354, + 363, + 364, + 365, + 367, + 371, + 375, + 378, + 380, + 381, + 390, + 392, + 394, + 396, + 397, + 398, + 399, + 400, + 401, + 411, + 412, + 414, + 415, + 417, + 421, + 426, + 432, + 436, + 437, + 439, + 444, + 446, + 447, + 449, + 459, + 461, + 462, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 475, + 476, + 480, + 482, + 483, + 487, + 489, + 491, + 501, + 502, + 509, + 510, + 512, + 514, + 515, + 520, + 524, + 526, + 528, + 532, + 536, + 554, + 559, + 567, + 571, + 580, + 591, + 596, + 598, + 609, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 625, + 630, + 631, + 632, + 634, + 638, + 642, + 644, + 646, + 647, + 656, + 658, + 662, + 665, + 669, + 670, + 687, + 700, + 710, + 718, + 720, + 721, + 724, + 740, + 742, + 744, + 762, + 764, + 765, + 786, + 799, + 807, + 809, + 819, + 823, + 829, + 830, + 846, + 855, + 863, + 866, + 869, + 885, + 888, + 890, + 892, + 896, + 897, + 905, + 937, + 941, + 955, + 960, + 961, + 965, + 968, + 969, + 970, + 972, + 974, + 975, + 976, + 984, + 987, + 988, + 989, + 990, + 991, + 998, + 999, + 1002, + 1020, + 1027, + 1032, + 1036, + 1038, + 1039, + 1042, + 1043, + 1046, + 1049, + 1053, + 1054, + 1055, + 1057, + 1058, + 1059, + 1060, + 1062, + 1064, + 1065, + 1068, + 1069, + 1071, + 1077, + 1078, + 1079, + 1081, + 1085, + 1089, + 1097, + 1099, + 1102, + 1109, + 1111, + 1120, + 1122, + 1125, + 1126, + 1128, + 1131, + 1136, + 1137, + 1138, + 1139, + 1142, + 1147, + 1152, + 1153, + 1156, + 1157, + 1160, + 1161, + 1167, + 1169, + 1171, + 1172, + 1173, + 1174, + 1176, + 1180, + 1191, + 1198, + 1202, + 1205, + 1209, + 1216, + 1222, + 1233, + 1234, + 1237, + 1240, + 1246, + 1248, + 1249, + 1253, + 1255, + 1256, + 1257, + 1258, + 1259, + 1262, + 1263, + 1264, + 1265, + 1267, + 1268, + 1269, + 1270, + 1273, + 1278, + 1283, + 1285, + 1286, + 1287, + 1290, + 1292, + 1294, + 1295, + 1296, + 1297, + 1300, + 1301, + 1302, + 1303, + 1320, + 1324, + 1325, + 1326, + 1329, + 1333, + 1334, + 1336, + 1351, + 1353, + 1356, + 1358, + 1366, + 1372, + 1373, + 1374, + 1376, + 1378, + 1379, + 1380, + 1385, + 1392, + 1393, + 1396, + 1406, + 1407, + 1408, + 1415, + 1421, + 1422, + 1423, + 1428, + 1448, + 1453, + 1460, + 1461, + 1463, + 1470, + 1472, + 1475, + 1476, + 1483, + 1484, + 1485, + 1486, + 1487, + 1488, + 1489, + 1490, + 1495, + 1496, + 1497, + 1501, + 1506, + 1509, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1519, + 1524, + 1525, + 1529, + 1533, + 1534, + 1535, + 1541, + 1543, + 1545, + 1546, + 1553, + 1556, + 1558, + 1559, + 1560, + 1570, + 1572, + 1573, + 1575, + 1576, + 1577, + 1582, + 1585, + 1587, + 1588, + 1589, + 1591, + 1593, + 1594, + 1595, + 1596, + 1599, + 1602, + 1603, + 1604, + 1605, + 1608, + 1613, + 1614, + 1618, + 1620, + 1625, + 1636, + 1646, + 1648, + 1651, + 1653, + 1654, + 1658, + 1663, + 1664, + 1711, + 1727, + 1728, + 1739, + 1743, + 1756, + 1765, + 1766, + 1767, + 1768, + 1769, + 1770, + 1776, + 1791, + 1794, + 1796, + 1797, + 1821, + 1825, + 1829, + 1830, + 1831, + 1832, + 1835, + 1839, + 1841, + 1842, + 1843, + 1846, + 1850, + 1858, + 1864, + 1866, + 1867, + 1870, + 1877, + 1879, + 1880, + 1883, + 1887, + 1888, + 1889, + 1891, + 1892, + 1906 ], - "hits": [ - { - "id": 1000, - "name": "defaultQueryOptions", - "qualified_name": "query.defaultQueryOptions", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "keep legacy callers fallback-inclusive unless they explicitly opt into strict mode.", - "reason": "keep legacy callers fallback-inclusive unless they explicitly opt into strict mode.", - "terms": [ - "call", - "unless", - "opt" - ] - }, - { - "id": 946, - "name": "defaultTraceOptions", - "qualified_name": "flow.defaultTraceOptions", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "reason": "default flow tracing to include fallback call edges unless a caller explicitly requests strict mode.", - "terms": [ - "call", - "flow", - "unless" - ] - }, - { - "id": 1279, - "name": "interfaceMethodSelector", - "qualified_name": "resolve.interfaceMethodSelector", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "identify polymorphic call targets in Go selector expressions.", - "reason": "identify polymorphic call targets in Go selector expressions.", - "terms": [ - "call", - "targets" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 732, - "name": "definitionResultOrDefault", - "qualified_name": "treesitter.definitionResultOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep Walker generic while allowing opt-in definition hooks.", - "reason": "keep Walker generic while allowing opt-in definition hooks.", - "terms": [ - "opt" - ] - }, - { - "id": 1337, - "name": "chunkWithImportWarmup", - "qualified_name": "workflow.chunkWithImportWarmup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "ensure the edge resolver has enough context to resolve call targets through imports.", - "reason": "ensure the edge resolver has enough context to resolve call targets through imports.", - "terms": [ - "call", - "targets" - ] - }, - { - "id": 941, - "name": "Tracer", - "qualified_name": "flow.Tracer", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "produce reusable flow records that describe reachable call paths", - "reason": "produce reusable flow records that describe reachable call paths", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 708, - "name": "LanguageSemantics", - "qualified_name": "treesitter.LanguageSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep language-specific inference opt-in while the generic parser remains shared.", - "reason": "keep language-specific inference opt-in while the generic parser remains shared.", - "terms": [ - "opt" - ] - }, - { - "id": 595, - "name": "NewReader", - "qualified_name": "searchsql.NewReader", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "keep database handles out of application service construction.", - "reason": "keep database handles out of application service construction.", - "terms": [ - "out" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 164, - "name": "FlowTracer", - "qualified_name": "mcp.FlowTracer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "reason": "inject a node-capped call-flow tracer so a deep call chain cannot expand into an\nunbounded traversal.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 940, - "name": "EdgeReader", - "qualified_name": "flow.EdgeReader", - "kind": "type", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "abstract graph reads so flow tracing can follow call edges from any store", - "reason": "abstract graph reads so flow tracing can follow call edges from any store", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 192, - "name": "traceFlow", - "qualified_name": "mcp.handlers.traceFlow", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "reconstruct the call flow containing the starting node so operators can understand execution context.", - "reason": "reconstruct the call flow containing the starting node so operators can understand execution context.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 226, - "name": "listFlows", - "qualified_name": "mcp.handlers.listFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "Exposes stored call flows in a summarized format to aid in exploration and prioritization.", - "reason": "Exposes stored call flows in a summarized format to aid in exploration and prioritization.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 1666, - "name": "isSymbolKind", - "qualified_name": "wiki.isSymbolKind", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "identify graph node kinds that should appear as symbols under a file in the Wiki tree.", - "reason": "identify graph node kinds that should appear as symbols under a file in the Wiki tree.", - "terms": [ - "appear" - ] - }, - { - "id": 652, - "name": "DiscoverPackages", - "qualified_name": "treesitter.NoopPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/langspec.go", - "intent": "let callers reuse one package-discovery flow even when a language has no package model.", - "reason": "let callers reuse one package-discovery flow even when a language has no package model.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 1461, - "name": "ResolveCloneURL", - "qualified_name": "reposync.ResolveCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "terms": [ - "unless" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "appear" - ] - }, - { - "id": 843, - "name": "collectPythonDocstrings", - "qualified_name": "treesitter.collectPythonDocstrings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "move Python docstring extraction out of Walker while preserving binder-facing behavior.", - "reason": "move Python docstring extraction out of Walker while preserving binder-facing behavior.", - "terms": [ - "out" - ] - }, - { - "id": 1300, - "name": "buildParseResult", - "qualified_name": "workflow.buildParseResult", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let workers finish out of order while the coordinator preserves record order.", - "reason": "let workers finish out of order while the coordinator preserves record order.", - "terms": [ - "out" - ] - }, - { - "id": 943, - "name": "stampMemberNamespaces", - "qualified_name": "flow.Tracer.stampMemberNamespaces", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "reason": "make cross-namespace flow members resolvable by callers; single-namespace traces are unchanged\nbecause every member already lives in the context namespace.", - "terms": [ - "call", - "flow" - ] - }, - { - "id": 488, - "name": "QualifiedNameExists", - "qualified_name": "graphgorm.Store.QualifiedNameExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate local @see targets within the active docs namespace.", - "reason": "validate local @see targets within the active docs namespace.", - "terms": [ - "targets" - ] - }, - { - "id": 757, - "name": "isGoIdent", - "qualified_name": "treesitter.isGoIdent", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "reject non-identifier assignment targets when extracting assertion bindings.", - "reason": "reject non-identifier assignment targets when extracting assertion bindings.", - "terms": [ - "targets" - ] - }, - { - "id": 936, - "name": "Builder", - "qualified_name": "flow.Builder", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "persists traced flows per entrypoint back into the flows table.", - "reason": "persists traced flows per entrypoint back into the flows table.", - "terms": [ - "flow" - ] - }, - { - "id": 743, - "name": "EnrichDefinition", - "qualified_name": "treesitter.GoSemantics.EnrichDefinition", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "reason": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "terms": [ - "out" - ] - }, - { - "id": 1618, - "name": "coverageFromIntent", - "qualified_name": "search.coverageFromIntent", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep the intent port's types out of the answer the surfaces serialize.", - "reason": "keep the intent port's types out of the answer the surfaces serialize.", - "terms": [ - "out" - ] - }, - { - "id": 1557, - "name": "CanAnswer", - "qualified_name": "intent.Result.CanAnswer", - "kind": "function", - "file_path": "internal/app/search/intent/intent.go", - "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason.", - "terms": [ - "appear" - ] - }, - { - "id": 775, - "name": "qualifyTypeScriptHeritageTypeName", - "qualified_name": "treesitter.qualifyTypeScriptHeritageTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "keep TypeScript extends and implements targets consistently qualified before edge creation.", - "reason": "keep TypeScript extends and implements targets consistently qualified before edge creation.", - "terms": [ - "targets" - ] - }, - { - "id": 959, - "name": "FlowRebuildStore", - "qualified_name": "analyze.FlowRebuildStore", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "let flow application policy trace and replace flows without importing a database adapter.", - "reason": "let flow application policy trace and replace flows without importing a database adapter.", - "terms": [ - "flow" - ] - }, - { - "id": 960, - "name": "FlowUnitOfWork", - "qualified_name": "analyze.FlowUnitOfWork", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "reason": "ensure stale-flow deletion and every replacement flow commit or roll back together.", - "terms": [ - "flow" - ] - }, - { - "id": 277, - "name": "requestNamespaces", - "qualified_name": "mcp.requestNamespaces", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "reason": "let read tools fan out over several namespaces while keeping the single-namespace contract untouched.", - "terms": [ - "out" - ] - }, - { - "id": 699, - "name": "dirMatchesPrefix", - "qualified_name": "treesitter.dirMatchesPrefix", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "match source directories against tsconfig path targets without partial-segment false positives.", - "reason": "match source directories against tsconfig path targets without partial-segment false positives.", - "terms": [ - "targets" - ] - }, - { - "id": 760, - "name": "goImportAliases", - "qualified_name": "treesitter.goImportAliases", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "resolve locally-used package names to their canonical import targets during parsing.", - "reason": "resolve locally-used package names to their canonical import targets during parsing.", - "terms": [ - "targets" - ] - }, - { - "id": 787, - "name": "firstNamedTypeReference", - "qualified_name": "treesitter.firstNamedTypeReference", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "reason": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "terms": [ - "targets" - ] - }, - { - "id": 1235, - "name": "IsLikelyExternalImportEdge", - "qualified_name": "resolve.IsLikelyExternalImportEdge", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "classify import edges that are not expected to have local resolution targets.", - "reason": "classify import edges that are not expected to have local resolution targets.", - "terms": [ - "targets" - ] - }, - { - "id": 125, - "name": "internal/adapters/inbound/http/config.go", - "qualified_name": "internal/adapters/inbound/http/config.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "out" - ] - }, - { - "id": 126, - "name": "Config", - "qualified_name": "server.Config", - "kind": "class", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "reason": "keep long-running HTTP, webhook, cache, and parse-limit settings out of the local CLI layer.", - "terms": [ - "out" - ] - }, - { - "id": 556, - "name": "unresolvedIndexHashes", - "qualified_name": "graphgorm.unresolvedIndexHashes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries.", - "reason": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries.", - "terms": [ - "out" - ] - }, - { - "id": 194, - "name": "getAffectedFlows", - "qualified_name": "mcp.handlers.getAffectedFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "reason": "trace flows touched by changed nodes so regression review can happen at the flow level.", - "terms": [ - "flow" - ] - }, - { - "id": 715, - "name": "CallRewriter", - "qualified_name": "treesitter.CallRewriter", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "reason": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "terms": [ - "targets" - ] - }, - { - "id": 812, - "name": "javaClassHierarchy", - "qualified_name": "treesitter.javaClassHierarchy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "prefer grammar-aware traversal so commas inside generics do not split hierarchy targets.", - "reason": "prefer grammar-aware traversal so commas inside generics do not split hierarchy targets.", - "terms": [ - "targets" - ] - }, - { - "id": 1425, - "name": "updateOutcome", - "qualified_name": "workflow.updateOutcome", - "kind": "class", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "carry the transaction-scoped update decision out to the orchestration layer without exposing a public result type.", - "reason": "carry the transaction-scoped update decision out to the orchestration layer without exposing a public result type.", - "terms": [ - "out" - ] - }, - { - "id": 667, - "name": "DiscoverPackages", - "qualified_name": "treesitter.KotlinPackageDiscovery.DiscoverPackages", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "reason": "group Kotlin source files by declared package so package nodes reflect Kotlin import targets.", - "terms": [ - "targets" - ] - }, - { - "id": 1267, - "name": "explicitOwnerImplementers", - "qualified_name": "resolve.explicitOwnerImplementers", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "reuse implements edges to prefer concrete dispatch targets over abstract owner nodes when unique.", - "reason": "reuse implements edges to prefer concrete dispatch targets over abstract owner nodes when unique.", - "terms": [ - "targets" - ] - }, - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "flow" - ] - }, - { - "id": 945, - "name": "TraceResult", - "qualified_name": "flow.TraceResult", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "communicate truncation status alongside the produced flow", - "reason": "communicate truncation status alongside the produced flow", - "terms": [ - "flow" - ] - }, - { - "id": 661, - "name": "JavaPackageDiscovery", - "qualified_name": "treesitter.JavaPackageDiscovery", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets.", - "reason": "map JVM package declarations to package nodes so Java imports can bind to semantic package targets.", - "terms": [ - "targets" - ] - }, - { - "id": 657, - "name": "internal/adapters/outbound/treesitter/package_discovery.go", - "qualified_name": "internal/adapters/outbound/treesitter/package_discovery.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "reason": "model Python import targets as directory-based package nodes so package contains/import edges can be resolved.", - "terms": [ - "targets" - ] - } - ] - }, - "why does a configured clone host take precedence over the address in a webhook": { - "corpus": 1901, - "terms": [ - { - "text": "configured", - "in_reasons": 21 - }, - { - "text": "clone", - "in_reasons": 11 - }, - { - "text": "host", - "in_reasons": 12 - }, - { - "text": "take", - "in_reasons": 2 - }, - { - "text": "precedence", - "in_reasons": 2 - }, - { - "text": "over", - "in_reasons": 32 - }, - { - "text": "address", - "in_reasons": 0 - }, - { - "text": "webhook", - "in_reasons": 44 - } + "why did the build refuse a source file that changed while it was being opened": [ + 10, + 42, + 43, + 59, + 61, + 63, + 64, + 81, + 119, + 121, + 122, + 129, + 130, + 143, + 147, + 148, + 149, + 150, + 152, + 169, + 170, + 183, + 192, + 194, + 227, + 230, + 248, + 249, + 250, + 281, + 282, + 285, + 290, + 307, + 311, + 313, + 314, + 323, + 327, + 328, + 334, + 336, + 344, + 346, + 352, + 353, + 359, + 364, + 365, + 367, + 368, + 372, + 375, + 379, + 380, + 383, + 390, + 394, + 397, + 398, + 399, + 400, + 401, + 402, + 409, + 423, + 426, + 437, + 442, + 444, + 449, + 454, + 458, + 459, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 474, + 483, + 486, + 496, + 501, + 502, + 504, + 510, + 512, + 514, + 516, + 543, + 587, + 596, + 600, + 605, + 606, + 609, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 623, + 625, + 628, + 631, + 632, + 634, + 642, + 644, + 645, + 646, + 647, + 653, + 658, + 664, + 665, + 666, + 669, + 670, + 677, + 682, + 687, + 706, + 721, + 733, + 736, + 751, + 769, + 778, + 781, + 782, + 788, + 795, + 807, + 819, + 820, + 823, + 827, + 828, + 829, + 830, + 839, + 840, + 854, + 855, + 857, + 858, + 859, + 861, + 862, + 863, + 869, + 871, + 872, + 874, + 915, + 937, + 941, + 952, + 956, + 958, + 963, + 965, + 974, + 984, + 987, + 988, + 989, + 990, + 991, + 998, + 1001, + 1002, + 1018, + 1019, + 1021, + 1023, + 1025, + 1028, + 1030, + 1032, + 1033, + 1034, + 1036, + 1038, + 1040, + 1041, + 1042, + 1043, + 1046, + 1049, + 1052, + 1053, + 1054, + 1055, + 1059, + 1060, + 1061, + 1062, + 1065, + 1068, + 1069, + 1071, + 1077, + 1078, + 1081, + 1085, + 1086, + 1089, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1107, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1126, + 1127, + 1131, + 1136, + 1137, + 1138, + 1139, + 1142, + 1146, + 1148, + 1149, + 1150, + 1152, + 1153, + 1156, + 1160, + 1161, + 1169, + 1171, + 1172, + 1173, + 1174, + 1176, + 1180, + 1191, + 1193, + 1234, + 1243, + 1245, + 1246, + 1247, + 1248, + 1249, + 1251, + 1252, + 1253, + 1254, + 1256, + 1257, + 1258, + 1259, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1271, + 1272, + 1274, + 1276, + 1277, + 1278, + 1279, + 1280, + 1285, + 1287, + 1288, + 1290, + 1292, + 1293, + 1294, + 1296, + 1297, + 1300, + 1301, + 1302, + 1303, + 1304, + 1305, + 1307, + 1308, + 1310, + 1313, + 1314, + 1315, + 1320, + 1324, + 1325, + 1326, + 1328, + 1329, + 1333, + 1334, + 1335, + 1336, + 1340, + 1341, + 1342, + 1343, + 1344, + 1345, + 1346, + 1347, + 1351, + 1353, + 1354, + 1356, + 1358, + 1359, + 1360, + 1366, + 1368, + 1370, + 1371, + 1372, + 1373, + 1374, + 1376, + 1377, + 1378, + 1379, + 1380, + 1382, + 1386, + 1402, + 1421, + 1422, + 1423, + 1430, + 1441, + 1446, + 1447, + 1448, + 1462, + 1475, + 1482, + 1483, + 1484, + 1488, + 1490, + 1495, + 1496, + 1502, + 1530, + 1534, + 1549, + 1558, + 1560, + 1562, + 1570, + 1577, + 1581, + 1582, + 1586, + 1587, + 1588, + 1589, + 1591, + 1592, + 1593, + 1594, + 1595, + 1598, + 1599, + 1602, + 1603, + 1604, + 1605, + 1608, + 1613, + 1614, + 1617, + 1618, + 1620, + 1625, + 1636, + 1648, + 1652, + 1658, + 1683, + 1684, + 1685, + 1688, + 1698, + 1730, + 1756, + 1769, + 1770, + 1772, + 1778, + 1785, + 1791, + 1792, + 1794, + 1818, + 1823, + 1836, + 1839, + 1841, + 1842, + 1847, + 1848, + 1849, + 1866, + 1886 ], - "hits": [ - { - "id": 1463, - "name": "buildCloneURL", - "qualified_name": "reposync.buildCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "reason": "derive a clone URL from a trusted base URL plus a normalized repo path so the host/scheme are not taken from webhook payload data.", - "terms": [ - "clone", - "host", - "take", - "webhook" - ] - }, - { - "id": 113, - "name": "newServeCmd", - "qualified_name": "cli.newServeCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "reason": "let local agents start MCP over stdio without self-hosted HTTP/webhook settings.", - "terms": [ - "host", - "over", - "webhook" - ] - }, - { - "id": 1464, - "name": "parseCloneBaseURL", - "qualified_name": "reposync.parseCloneBaseURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "reason": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "terms": [ - "configured", - "clone", - "host" - ] - }, - { - "id": 133, - "name": "internal/adapters/inbound/http/serve.go", - "qualified_name": "internal/adapters/inbound/http/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "terms": [ - "host", - "webhook" - ] - }, - { - "id": 134, - "name": "HostDeps", - "qualified_name": "server.HostDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "reason": "keep protocol hosting independent of runtime, persistence, Wiki, and webhook construction.", - "terms": [ - "host", - "webhook" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "host", - "webhook" - ] - }, - { - "id": 336, - "name": "WebhookHandlerConfig", - "qualified_name": "webhook.WebhookHandlerConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "reason": "carry all constructor options for webhook validation, clone URL policy, and sync dispatch.", - "terms": [ - "clone", - "webhook" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "configured", - "webhook" - ] - }, - { - "id": 459, - "name": "CloneOrPullBranchLocked", - "qualified_name": "gitrepo.CloneOrPullBranchLocked", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "reason": "prevent overlapping webhook deliveries from cloning or resetting the same checkout simultaneously.", - "terms": [ - "over", - "webhook" - ] - }, - { - "id": 1461, - "name": "ResolveCloneURL", - "qualified_name": "reposync.ResolveCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "terms": [ - "clone", - "webhook" - ] - }, - { - "id": 110, - "name": "internal/adapters/inbound/cli/serve.go", - "qualified_name": "internal/adapters/inbound/cli/serve.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "host", - "webhook" - ] - }, - { - "id": 111, - "name": "ServeConfig", - "qualified_name": "cli.ServeConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "reason": "keep the ccg binary focused on local stdio MCP use while ccg-server owns HTTP/webhook hosting.", - "terms": [ - "host", - "webhook" - ] - }, - { - "id": 440, - "name": "GitAuth", - "qualified_name": "gitrepo.GitAuth", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "reason": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "terms": [ - "clone", - "webhook" - ] - }, - { - "id": 1487, - "name": "RetryConfig", - "qualified_name": "reposync.RetryConfig", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "reason": "tune retry backoff so transient webhook sync failures can recover without overwhelming the remote.", - "terms": [ - "over", - "webhook" - ] - }, - { - "id": 1179, - "name": "Find", - "qualified_name": "resolve.ImportFileIndex.Find", - "kind": "function", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "preserve GraphStore import lookup precedence using bounded map reads.", - "reason": "preserve GraphStore import lookup precedence using bounded map reads.", - "terms": [ - "precedence" - ] - }, - { - "id": 441, - "name": "Resolve", - "qualified_name": "gitrepo.GitAuth.Resolve", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "reason": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "terms": [ - "configured", - "webhook" - ] - }, - { - "id": 92, - "name": "resolveMigrationsDir", - "qualified_name": "cli.resolveMigrationsDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "resolve migration directory precedence between flag, config, and environment defaults.", - "reason": "resolve migration directory precedence between flag, config, and environment defaults.", - "terms": [ - "precedence" - ] - }, - { - "id": 1626, - "name": "NextAction", - "qualified_name": "wire.NextAction", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "turn what a search withheld into a step the caller can actually take.", - "reason": "turn what a search withheld into a step the caller can actually take.", - "terms": [ - "take" - ] - }, - { - "id": 461, - "name": "cloneRepo", - "qualified_name": "gitrepo.cloneRepo", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "perform the first namespace clone via a temp directory so partially cloned repos are never promoted.", - "reason": "perform the first namespace clone via a temp directory so partially cloned repos are never promoted.", - "terms": [ - "clone" - ] - }, - { - "id": 460, - "name": "sanitizeURL", - "qualified_name": "gitrepo.sanitizeURL", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "log clone URLs without leaking embedded credentials.", - "reason": "log clone URLs without leaking embedded credentials.", - "terms": [ - "clone" - ] - }, - { - "id": 456, - "name": "RepoDir", - "qualified_name": "gitrepo.RepoDir", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "keep namespace naming stable across clone, pull, and downstream build steps.", - "reason": "keep namespace naming stable across clone, pull, and downstream build steps.", - "terms": [ - "clone" - ] - }, - { - "id": 61, - "name": "newRootCmd", - "qualified_name": "main.newRootCmd", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "keep self-hosted server flags separate from the local ccg CLI.", - "reason": "keep self-hosted server flags separate from the local ccg CLI.", - "terms": [ - "host" - ] - }, - { - "id": 129, - "name": "ConfiguredCloneBaseURLs", - "qualified_name": "server.ConfiguredCloneBaseURLs", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "preserve legacy singular URL behavior while exposing one ordered clone URL list.", - "reason": "preserve legacy singular URL behavior while exposing one ordered clone URL list.", - "terms": [ - "clone" - ] - }, - { - "id": 458, - "name": "CloneOrPullBranch", - "qualified_name": "gitrepo.CloneOrPullBranch", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "reuse the same repo sync path for first clone and subsequent updates.", - "reason": "reuse the same repo sync path for first clone and subsequent updates.", - "terms": [ - "clone" - ] - }, - { - "id": 897, - "name": "getLanguage", - "qualified_name": "treesitter.Walker.getLanguage", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "bind configured language names to the concrete parser implementation", - "reason": "bind configured language names to the concrete parser implementation", - "terms": [ - "configured" - ] - }, - { - "id": 1475, - "name": "Invalidate", - "qualified_name": "reposync.CacheInvalidatorFunc.Invalidate", - "kind": "function", - "file_path": "internal/app/reposync/ports.go", - "intent": "invoke the configured cache invalidation only when one exists.", - "reason": "invoke the configured cache invalidation only when one exists.", - "terms": [ - "configured" - ] - }, - { - "id": 1479, - "name": "noopObservability", - "qualified_name": "reposync.noopObservability", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "preserve queue behavior when no observability adapter is configured.", - "reason": "preserve queue behavior when no observability adapter is configured.", - "terms": [ - "configured" - ] - }, - { - "id": 1880, - "name": "Runtime", - "qualified_name": "runtime.Runtime", - "kind": "class", - "file_path": "internal/runtime/runtime.go", - "intent": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "reason": "provide one dependency assembly path for local CLI and self-hosted server binaries.", - "terms": [ - "host" - ] - }, - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "configured" - ] - }, - { - "id": 1388, - "name": "packageContainsEdgeCount", - "qualified_name": "workflow.packageContainsEdgeCount", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "estimate the edge overhead for package structural nodes.", - "reason": "estimate the edge overhead for package structural nodes.", - "terms": [ - "over" - ] - }, - { - "id": 69, - "name": "resolveRagIndexDir", - "qualified_name": "cli.resolveRagIndexDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep docs-generated Wiki output aligned with the configured index directory.", - "reason": "keep docs-generated Wiki output aligned with the configured index directory.", - "terms": [ - "configured" - ] - }, - { - "id": 155, - "name": "Set", - "qualified_name": "mcp.Cache.Set", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Stores read-tool results in the cache with the configured TTL.", - "reason": "Stores read-tool results in the cache with the configured TTL.", - "terms": [ - "configured" - ] - }, - { - "id": 199, - "name": "validatePathWithinAllowedRoots", - "qualified_name": "mcp.validatePathWithinAllowedRoots", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "reason": "enforce that user-supplied paths cannot escape the configured analysis boundary.", - "terms": [ - "configured" - ] - }, - { - "id": 112, - "name": "validateServeConfig", - "qualified_name": "cli.validateServeConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/serve.go", - "intent": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "reason": "reject self-hosted HTTP transport on the local CLI and point callers to ccg-server.", - "terms": [ - "host" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "clone" - ] - }, - { - "id": 137, - "name": "ValidateHTTPExposure", - "qualified_name": "server.ValidateHTTPExposure", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다.", - "reason": "외부 바인딩된 HTTP MCP 서버가 인증 없이 노출되는 구성을 사전에 차단한다.", - "terms": [ - "over" - ] - }, - { - "id": 162, - "name": "ChangeAnalyzer", - "qualified_name": "mcp.ChangeAnalyzer", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "inject a configured application change service without exposing Git or persistence implementations.", - "reason": "inject a configured application change service without exposing Git or persistence implementations.", - "terms": [ - "configured" - ] - }, - { - "id": 196, - "name": "validateRepoRootWithin", - "qualified_name": "mcp.validateRepoRootWithin", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "reason": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "terms": [ - "configured" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "configured" - ] - }, - { - "id": 426, - "name": "NewWikiIndexWriter", - "qualified_name": "contentfiles.NewWikiIndexWriter", - "kind": "function", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "preserve the default .ccg output root while allowing CLI-configured state paths.", - "reason": "preserve the default .ccg output root while allowing CLI-configured state paths.", - "terms": [ - "configured" - ] - }, - { - "id": 877, - "name": "Spec", - "qualified_name": "treesitter.Walker.Spec", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "expose the configured language rules and query paths for this walker instance", - "reason": "expose the configured language rules and query paths for this walker instance", - "terms": [ - "configured" - ] - }, - { - "id": 900, - "name": "appendUniqueEdges", - "qualified_name": "treesitter.appendUniqueEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges.", - "reason": "prevent overlapping Tree-sitter captures from emitting duplicate relationship edges.", - "terms": [ - "over" - ] - }, - { - "id": 906, - "name": "rangesOverlap", - "qualified_name": "treesitter.rangesOverlap", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "detect whether two symbol captures refer to overlapping source spans", - "reason": "detect whether two symbol captures refer to overlapping source spans", - "terms": [ - "over" - ] - }, - { - "id": 1135, - "name": "annotationBindingKey", - "qualified_name": "incremental.annotationBindingKey", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "disambiguate overloaded or repeated declarations sharing the same qualified name.", - "reason": "disambiguate overloaded or repeated declarations sharing the same qualified name.", - "terms": [ - "over" - ] - }, - { - "id": 1899, - "name": "download", - "qualified_name": "download", - "kind": "function", - "file_path": "npm/install.js", - "intent": "fetch a release archive over HTTPS while transparently following redirects.", - "reason": "fetch a release archive over HTTPS while transparently following redirects.", - "terms": [ - "over" - ] - }, - { - "id": 144, - "name": "statusResponse", - "qualified_name": "server.statusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "reason": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "terms": [ - "webhook" - ] - }, - { - "id": 1488, - "name": "defaultRetryConfig", - "qualified_name": "reposync.defaultRetryConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide conservative retry defaults for production webhook processing.", - "reason": "provide conservative retry defaults for production webhook processing.", - "terms": [ - "webhook" - ] - }, - { - "id": 1492, - "name": "NewSyncQueue", - "qualified_name": "reposync.NewSyncQueue", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide the smallest constructor for production webhook dispatch.", - "reason": "provide the smallest constructor for production webhook dispatch.", - "terms": [ - "webhook" - ] - }, - { - "id": 158, - "name": "evictOneLocked", - "qualified_name": "mcp.Cache.evictOneLocked", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "drop one cache entry to keep total size at or below the configured maximum.", - "reason": "drop one cache entry to keep total size at or below the configured maximum.", - "terms": [ - "configured" - ] - }, - { - "id": 195, - "name": "validateRepoRoot", - "qualified_name": "mcp.handlers.validateRepoRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "reason": "validate repo_root inputs against configured analysis roots before git-based analysis reads the filesystem.", - "terms": [ - "configured" - ] - } - ] - }, - "why does a result say it was cut short instead of returning everything": { - "corpus": 1901, - "terms": [ - { - "text": "result", - "in_reasons": 62 - }, - { - "text": "say", - "in_reasons": 4 - }, - { - "text": "cut", - "in_reasons": 1 - }, - { - "text": "short", - "in_reasons": 18 - }, - { - "text": "instead", - "in_reasons": 28 - }, - { - "text": "returning", - "in_reasons": 1 - }, - { - "text": "everything", - "in_reasons": 1 - } + "why do uncertain call targets appear in a flow unless I opt out": [ + 65, + 70, + 77, + 78, + 118, + 119, + 137, + 140, + 144, + 146, + 148, + 156, + 159, + 164, + 177, + 178, + 179, + 181, + 191, + 195, + 197, + 204, + 213, + 216, + 218, + 220, + 230, + 234, + 236, + 240, + 241, + 255, + 267, + 271, + 278, + 282, + 351, + 381, + 386, + 413, + 433, + 434, + 438, + 439, + 440, + 441, + 442, + 447, + 448, + 449, + 452, + 480, + 482, + 497, + 498, + 499, + 504, + 528, + 537, + 582, + 598, + 602, + 603, + 604, + 607, + 612, + 613, + 645, + 653, + 654, + 660, + 661, + 667, + 673, + 674, + 676, + 677, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 702, + 705, + 719, + 720, + 724, + 725, + 732, + 738, + 739, + 741, + 742, + 748, + 752, + 757, + 761, + 762, + 763, + 764, + 768, + 788, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 817, + 818, + 825, + 826, + 831, + 838, + 839, + 840, + 858, + 865, + 867, + 872, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 891, + 892, + 893, + 894, + 895, + 897, + 898, + 899, + 900, + 903, + 908, + 910, + 911, + 922, + 923, + 929, + 930, + 931, + 933, + 934, + 936, + 949, + 950, + 965, + 969, + 976, + 1048, + 1056, + 1063, + 1064, + 1065, + 1067, + 1078, + 1079, + 1080, + 1086, + 1090, + 1111, + 1112, + 1113, + 1115, + 1132, + 1140, + 1145, + 1151, + 1160, + 1165, + 1168, + 1183, + 1188, + 1189, + 1193, + 1195, + 1211, + 1214, + 1215, + 1217, + 1218, + 1219, + 1222, + 1223, + 1227, + 1229, + 1230, + 1235, + 1237, + 1238, + 1239, + 1247, + 1277, + 1280, + 1283, + 1284, + 1292, + 1295, + 1309, + 1317, + 1340, + 1341, + 1366, + 1367, + 1384, + 1393, + 1401, + 1409, + 1415, + 1446, + 1483, + 1484, + 1489, + 1497, + 1510, + 1524, + 1527, + 1528, + 1529, + 1531, + 1533, + 1538, + 1546, + 1564, + 1565, + 1570, + 1572, + 1573, + 1574, + 1579, + 1603, + 1614, + 1742, + 1759, + 1760, + 1784, + 1788, + 1819, + 1871, + 1897 ], - "hits": [ - { - "id": 362, - "name": "readDoc", - "qualified_name": "wikiserver.Server.readDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "enforce doc size limits before returning generated Markdown content.", - "reason": "enforce doc size limits before returning generated Markdown content.", - "terms": [ - "returning" - ] - }, - { - "id": 1030, - "name": "childrenOf", - "qualified_name": "describe.childrenOf", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a recursive row set into the one level a caller can choose from.", - "reason": "turn a recursive row set into the one level a caller can choose from.", - "terms": [ - "everything" - ] - }, - { - "id": 1586, - "name": "RerankGroups", - "qualified_name": "rank.RerankGroups", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "reason": "make federated results comparable across namespaces instead of favouring whichever namespace was queried first.", - "terms": [ - "result", - "instead" - ] - }, - { - "id": 1596, - "name": "newQueryTokens", - "qualified_name": "rank.newQueryTokens", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "read a query once and hand each scorer the cut it can use.", - "reason": "read a query once and hand each scorer the cut it can use.", - "terms": [ - "cut" - ] - }, - { - "id": 1577, - "name": "internal/app/search/rank/evidence.go", - "qualified_name": "internal/app/search/rank/evidence.go", - "kind": "file", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "terms": [ - "result", - "instead" - ] - }, - { - "id": 1578, - "name": "Structural", - "qualified_name": "rank.Structural", - "kind": "class", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "terms": [ - "result", - "instead" - ] - }, - { - "id": 1530, - "name": "Coverage", - "qualified_name": "evidence.Coverage", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let an empty answer say whether anyone ever recorded a reason to search.", - "reason": "let an empty answer say whether anyone ever recorded a reason to search.", - "terms": [ - "say" - ] - }, - { - "id": 1560, - "name": "Match", - "qualified_name": "intentrank.Match", - "kind": "class", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "say what earned a declaration its place, not only that it earned one.", - "reason": "say what earned a declaration its place, not only that it earned one.", - "terms": [ - "say" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "say" - ] - }, - { - "id": 1017, - "name": "Scope", - "qualified_name": "describe.Scope", - "kind": "type", - "file_path": "internal/app/describe/describe.go", - "intent": "let one call answer for a folder, a file, or a miss, and say which it was.", - "reason": "let one call answer for a folder, a file, or a miss, and say which it was.", - "terms": [ - "say" - ] - }, - { - "id": 1265, - "name": "PackagePrefix", - "qualified_name": "resolve.explicitOwnerLanguageDispatch.PackagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "reason": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "terms": [ - "short" - ] - }, - { - "id": 1838, - "name": "Display", - "qualified_name": "reference.Ref.Display", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "reason": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "terms": [ - "short" - ] - }, - { - "id": 388, - "name": "symbolMatches", - "qualified_name": "wikiserver.symbolMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "allow short symbol refs to match names and language-qualified names.", - "reason": "allow short symbol refs to match names and language-qualified names.", - "terms": [ - "short" - ] - }, - { - "id": 1033, - "name": "lastSegment", - "qualified_name": "describe.lastSegment", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "recover the stored short name from a dotted or slashed guess.", - "reason": "recover the stored short name from a dotted or slashed guess.", - "terms": [ - "short" - ] - }, - { - "id": 996, - "name": "FindExactNameMatches", - "qualified_name": "query.Service.FindExactNameMatches", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "reason": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "terms": [ - "short" - ] - }, - { - "id": 1269, - "name": "explicitOwnerShortNameCandidates", - "qualified_name": "resolve.explicitOwnerShortNameCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "terms": [ - "short" - ] - }, - { - "id": 1485, - "name": "NonRetryable", - "qualified_name": "reposync.NonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "reason": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "terms": [ - "short" - ] - }, - { - "id": 1566, - "name": "saturate", - "qualified_name": "intentrank.saturate", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "stop a long or repetitive reason from outranking a short exact one.", - "reason": "stop a long or repetitive reason from outranking a short exact one.", - "terms": [ - "short" - ] - }, - { - "id": 265, - "name": "federatedGraphStatsEntry", - "qualified_name": "mcp.federatedGraphStatsEntry", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "reason": "keep per-namespace statistics separable instead of summing unrelated graphs.", - "terms": [ - "instead" - ] - }, - { - "id": 998, - "name": "CandidateMatch", - "qualified_name": "query.CandidateMatch", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "reason": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "terms": [ - "short" - ] - }, - { - "id": 607, - "name": "intentTerm", - "qualified_name": "searchsql.intentTerm", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "reason": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "terms": [ - "short" - ] - }, - { - "id": 815, - "name": "qualifyImportedTypeName", - "qualified_name": "treesitter.qualifyImportedTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "let hierarchy edges point to imported types across packages when declarations use short names.", - "reason": "let hierarchy edges point to imported types across packages when declarations use short names.", - "terms": [ - "short" - ] - }, - { - "id": 1268, - "name": "explicitOwnerTarget", - "qualified_name": "resolve.explicitOwnerTarget", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "reason": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "terms": [ - "short" - ] - }, - { - "id": 1833, - "name": "UnresolvedIndexState", - "qualified_name": "graph.UnresolvedIndexState", - "kind": "class", - "file_path": "internal/domain/graph/unresolved.go", - "intent": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "reason": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "terms": [ - "short" - ] - }, - { - "id": 268, - "name": "compactQueryTargetAmbiguity", - "qualified_name": "mcp.compactQueryTargetAmbiguity", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "compress ambiguous short-symbol matches into one line so callers can choose the intended node.", - "reason": "compress ambiguous short-symbol matches into one line so callers can choose the intended node.", - "terms": [ - "short" - ] - }, - { - "id": 675, - "name": "pathBaseName", - "qualified_name": "treesitter.pathBaseName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "reason": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "terms": [ - "short" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "short" - ] - }, - { - "id": 1625, - "name": "Limits", - "qualified_name": "wire.Limits", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller tell a short answer from the first page of a long one.", - "reason": "let a caller tell a short answer from the first page of a long one.", - "terms": [ - "short" - ] - }, - { - "id": 787, - "name": "firstNamedTypeReference", - "qualified_name": "treesitter.firstNamedTypeReference", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "reason": "recover stable hierarchy targets from AST nodes instead of brittle text slicing.", - "terms": [ - "instead" - ] - }, - { - "id": 1256, - "name": "appendUniqueNode", - "qualified_name": "resolve.appendUniqueNode", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "prevent duplicate nodes in resolution result sets.", - "reason": "prevent duplicate nodes in resolution result sets.", - "terms": [ - "result" - ] - }, - { - "id": 1915, - "name": "runSearch", - "qualified_name": "runSearch", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "update search results for the active namespace.", - "reason": "update search results for the active namespace.", - "terms": [ - "result" - ] - }, - { - "id": 633, - "name": "sqliteColumnExists", - "qualified_name": "searchsql.sqliteColumnExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "gate schema migrations on actual table layout instead of guessing from version markers.", - "reason": "gate schema migrations on actual table layout instead of guessing from version markers.", - "terms": [ - "instead" - ] - }, - { - "id": 896, - "name": "releaseParser", - "qualified_name": "treesitter.Walker.releaseParser", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "reason": "keep allocated parsers alive between parses instead of letting them be garbage collected.", - "terms": [ - "instead" - ] - }, - { - "id": 1122, - "name": "persistParsedNodesAndAnnotations", - "qualified_name": "incremental.Syncer.persistParsedNodesAndAnnotations", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "reason": "keep incremental persistence proportional to bounded batches instead of individual files or comments.", - "terms": [ - "instead" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "instead" - ] - }, - { - "id": 238, - "name": "graphService", - "qualified_name": "mcp.handlers.graphService", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "reason": "assemble a short-lived ingest workflow service from injected MCP dependencies for one parse or update request.", - "terms": [ - "short" - ] - }, - { - "id": 213, - "name": "describeSuggestion", - "qualified_name": "mcp.describeSuggestion", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "instead" - ] - }, - { - "id": 1023, - "name": "Suggestion", - "qualified_name": "describe.Suggestion", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "instead" - ] - }, - { - "id": 1154, - "name": "ParseCacheKey", - "qualified_name": "ingest.ParseCacheKey", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "include every input known to affect parser output instead of trusting source content alone.", - "reason": "include every input known to affect parser output instead of trusting source content alone.", - "terms": [ - "instead" - ] - }, - { - "id": 1378, - "name": "packageEdgeBuilder", - "qualified_name": "workflow.Service.packageEdgeBuilder", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "reason": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "terms": [ - "instead" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "instead" - ] - }, - { - "id": 224, - "name": "graphFlowInfo", - "qualified_name": "mcp.graphFlowInfo", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "serialize listFlows results with the legacy response shape.", - "reason": "serialize listFlows results with the legacy response shape.", - "terms": [ - "result" - ] - }, - { - "id": 1257, - "name": "uniqueNodes", - "qualified_name": "resolve.uniqueNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "deduplicate result sets before further processing or resolution.", - "reason": "deduplicate result sets before further processing or resolution.", - "terms": [ - "result" - ] - }, - { - "id": 1384, - "name": "mergeLanguagePackages", - "qualified_name": "workflow.mergeLanguagePackages", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "consolidate package discovery results while discarding conflicting definitions.", - "reason": "consolidate package discovery results while discarding conflicting definitions.", - "terms": [ - "result" - ] - }, - { - "id": 212, - "name": "describeChild", - "qualified_name": "mcp.describeChild", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "let a caller descend one step at a time instead of reading a whole subtree.", - "reason": "let a caller descend one step at a time instead of reading a whole subtree.", - "terms": [ - "instead" - ] - }, - { - "id": 516, - "name": "StoreParseResult", - "qualified_name": "graphgorm.Store.StoreParseResult", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "reason": "retain one bounded current cache entry per source path instead of accumulating every historical hash.", - "terms": [ - "instead" - ] - }, - { - "id": 969, - "name": "GraphLookup", - "qualified_name": "analyze.GraphLookup", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "reason": "keep MCP graph lookups on an application-owned port instead of a global storage contract.", - "terms": [ - "instead" - ] - }, - { - "id": 1372, - "name": "UnreadableFilesError", - "qualified_name": "workflow.UnreadableFilesError", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "reason": "give webhook/server callers a structured failure they can surface instead of silent partial sync", - "terms": [ - "instead" - ] - }, - { - "id": 1373, - "name": "Error", - "qualified_name": "workflow.UnreadableFilesError.Error", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "reason": "give operators a stable, single-line summary they can grep instead of dumping every path.", - "terms": [ - "instead" - ] - } - ] - }, - "why does an answer with nothing in it still suggest another call": { - "corpus": 1901, - "terms": [ - { - "text": "answer", - "in_reasons": 30 - }, - { - "text": "nothing", - "in_reasons": 1 - }, - { - "text": "still", - "in_reasons": 10 - }, - { - "text": "suggest", - "in_reasons": 3 - }, - { - "text": "another", - "in_reasons": 6 - }, - { - "text": "call", - "in_reasons": 177 - } + "why does a configured clone host take precedence over the address in a webhook": [ + 2, + 3, + 11, + 45, + 63, + 64, + 65, + 66, + 77, + 78, + 80, + 81, + 85, + 86, + 87, + 90, + 99, + 110, + 113, + 116, + 125, + 150, + 151, + 154, + 185, + 192, + 193, + 218, + 228, + 230, + 265, + 278, + 279, + 280, + 283, + 287, + 289, + 291, + 359, + 362, + 372, + 380, + 384, + 385, + 386, + 387, + 393, + 395, + 396, + 402, + 403, + 404, + 405, + 406, + 407, + 410, + 580, + 634, + 822, + 844, + 847, + 854, + 857, + 865, + 868, + 923, + 1081, + 1082, + 1128, + 1151, + 1215, + 1245, + 1249, + 1296, + 1297, + 1317, + 1325, + 1332, + 1387, + 1390, + 1392, + 1394, + 1396, + 1397, + 1398, + 1403, + 1406, + 1409, + 1413, + 1415, + 1417, + 1421, + 1428, + 1431, + 1439, + 1440, + 1444, + 1447, + 1448, + 1450, + 1456, + 1511, + 1574, + 1824, + 1826, + 1830, + 1849 ], - "hits": [ - { - "id": 1534, - "name": "List", - "qualified_name": "evidence.List", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "make \"nothing to show\" a readable answer rather than an empty array.", - "reason": "make \"nothing to show\" a readable answer rather than an empty array.", - "terms": [ - "answer", - "nothing" - ] - }, - { - "id": 1611, - "name": "SearchFederated", - "qualified_name": "search.Service.SearchFederated", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "answer", - "another" - ] - }, - { - "id": 1544, - "name": "pagePerNamespace", - "qualified_name": "evidence.pagePerNamespace", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "reason": "give federated search one offset that resumes every repository at once, so the next call it suggests is a call that works.", - "terms": [ - "suggest", - "call" - ] - }, - { - "id": 499, - "name": "NodesByExactName", - "qualified_name": "graphgorm.Store.NodesByExactName", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "support exact-name fallback suggestions through the analysis repository.", - "reason": "support exact-name fallback suggestions through the analysis repository.", - "terms": [ - "suggest" - ] - }, - { - "id": 475, - "name": "GetNodeByID", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodeByID", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "resolve traversal frontiers that crossed into another namespace.", - "reason": "resolve traversal frontiers that crossed into another namespace.", - "terms": [ - "another" - ] - }, - { - "id": 998, - "name": "CandidateMatch", - "qualified_name": "query.CandidateMatch", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "reason": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "terms": [ - "suggest" - ] - }, - { - "id": 1625, - "name": "Limits", - "qualified_name": "wire.Limits", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller tell a short answer from the first page of a long one.", - "reason": "let a caller tell a short answer from the first page of a long one.", - "terms": [ - "answer", - "call" - ] - }, - { - "id": 1017, - "name": "Scope", - "qualified_name": "describe.Scope", - "kind": "type", - "file_path": "internal/app/describe/describe.go", - "intent": "let one call answer for a folder, a file, or a miss, and say which it was.", - "reason": "let one call answer for a folder, a file, or a miss, and say which it was.", - "terms": [ - "answer", - "call" - ] - }, - { - "id": 154, - "name": "Get", - "qualified_name": "mcp.Cache.Get", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Returns only cached responses that are still within their validity period.", - "reason": "Returns only cached responses that are still within their validity period.", - "terms": [ - "still" - ] - }, - { - "id": 555, - "name": "DeleteUnresolvedEdgesByFingerprints", - "qualified_name": "graphgorm.Store.DeleteUnresolvedEdgesByFingerprints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep the reverse index limited to relationships that still lack endpoints.", - "reason": "keep the reverse index limited to relationships that still lack endpoints.", - "terms": [ - "still" - ] - }, - { - "id": 1455, - "name": "ParseRepoRule", - "qualified_name": "reposync.ParseRepoRule", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "reason": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "terms": [ - "still" - ] - }, - { - "id": 1152, - "name": "Parser", - "qualified_name": "ingest.Parser", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "reason": "parse source into domain graph values without exposing Tree-sitter or another parser implementation.", - "terms": [ - "another" - ] - }, - { - "id": 1528, - "name": "NodeRef", - "qualified_name": "evidence.NodeRef", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "key per-node intent evidence so it cannot leak onto another repository's node.", - "reason": "key per-node intent evidence so it cannot leak onto another repository's node.", - "terms": [ - "another" - ] - }, - { - "id": 719, - "name": "DefinitionResult", - "qualified_name": "treesitter.DefinitionResult", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "reason": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "terms": [ - "still" - ] - }, - { - "id": 355, - "name": "readDBFallbackDoc", - "qualified_name": "wikiserver.Server.readDBFallbackDoc", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "reason": "read DB fallback document content without crossing from a named namespace into shared/global docs roots.", - "terms": [ - "another" - ] - }, - { - "id": 1365, - "name": "parserForExt", - "qualified_name": "workflow.Service.parserForExt", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "let tests inject custom parsers while still using the production walker registry by default.", - "reason": "let tests inject custom parsers while still using the production walker registry by default.", - "terms": [ - "still" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "still" - ] - }, - { - "id": 1029, - "name": "suggestionsFor", - "qualified_name": "describe.Service.suggestionsFor", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "answer a wrong path with the right one.", - "reason": "answer a wrong path with the right one.", - "terms": [ - "answer" - ] - }, - { - "id": 1865, - "name": "MatchIncludePaths", - "qualified_name": "pathspec.MatchIncludePaths", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "reason": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "terms": [ - "still" - ] - }, - { - "id": 1521, - "name": "BuildReasons", - "qualified_name": "document.BuildReasons", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "reason": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "terms": [ - "another" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "still" - ] - }, - { - "id": 568, - "name": "HasSymbol", - "qualified_name": "graphgorm.Store.HasSymbol", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "answer whether a lazy file node has expandable symbol children.", - "reason": "answer whether a lazy file node has expandable symbol children.", - "terms": [ - "answer" - ] - }, - { - "id": 914, - "name": "AnalyzePage", - "qualified_name": "changes.Service.AnalyzePage", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "reason": "bound handler response allocation while preserving the same sorted risk window that legacy Analyze would expose.", - "terms": [ - "still" - ] - }, - { - "id": 256, - "name": "searchFederated", - "qualified_name": "mcp.handlers.searchFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "answer" - ] - }, - { - "id": 1619, - "name": "addCoverage", - "qualified_name": "search.addCoverage", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "make a federated answer's coverage cover every repository it searched.", - "reason": "make a federated answer's coverage cover every repository it searched.", - "terms": [ - "answer" - ] - }, - { - "id": 1624, - "name": "Response", - "qualified_name": "wire.Response", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "make a search answer self-describing, including when it is empty.", - "reason": "make a search answer self-describing, including when it is empty.", - "terms": [ - "answer" - ] - }, - { - "id": 366, - "name": "retrieveResult", - "qualified_name": "wikiserver.retrieveResult", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep the browser contract stable while the answer behind it changes pipelines.", - "reason": "keep the browser contract stable while the answer behind it changes pipelines.", - "terms": [ - "answer" - ] - }, - { - "id": 1530, - "name": "Coverage", - "qualified_name": "evidence.Coverage", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let an empty answer say whether anyone ever recorded a reason to search.", - "reason": "let an empty answer say whether anyone ever recorded a reason to search.", - "terms": [ - "answer" - ] - }, - { - "id": 1618, - "name": "coverageFromIntent", - "qualified_name": "search.coverageFromIntent", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep the intent port's types out of the answer the surfaces serialize.", - "reason": "keep the intent port's types out of the answer the surfaces serialize.", - "terms": [ - "answer" - ] - }, - { - "id": 213, - "name": "describeSuggestion", - "qualified_name": "mcp.describeSuggestion", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "answer" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "answer" - ] - }, - { - "id": 1023, - "name": "Suggestion", - "qualified_name": "describe.Suggestion", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a wrong path into the right one instead of into an empty answer.", - "reason": "turn a wrong path into the right one instead of into an empty answer.", - "terms": [ - "answer" - ] - }, - { - "id": 1024, - "name": "Outline", - "qualified_name": "describe.Outline", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "terms": [ - "answer" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "answer" - ] - }, - { - "id": 1607, - "name": "Params", - "qualified_name": "search.Params", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "give MCP and the CLI the same request shape so their answers stay comparable.", - "reason": "give MCP and the CLI the same request shape so their answers stay comparable.", - "terms": [ - "answer" - ] - }, - { - "id": 1821, - "name": "RecordedReason", - "qualified_name": "graph.Node.RecordedReason", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "reason": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "terms": [ - "still" - ] - }, - { - "id": 1536, - "name": "Justified", - "qualified_name": "evidence.List.Justified", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "tell a page that answered something apart from one that merely has rows on it.", - "reason": "tell a page that answered something apart from one that merely has rows on it.", - "terms": [ - "answer" - ] - }, - { - "id": 1539, - "name": "emptyNote", - "qualified_name": "evidence.emptyNote", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "name the cause of an empty answer, rather than guessing at a remedy for it.", - "reason": "name the cause of an empty answer, rather than guessing at a remedy for it.", - "terms": [ - "answer" - ] - }, - { - "id": 1543, - "name": "page", - "qualified_name": "evidence.page", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "bound an answer by files, so paging through it never lands a reader mid-file.", - "reason": "bound an answer by files, so paging through it never lands a reader mid-file.", - "terms": [ - "answer" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "answer" - ] - }, - { - "id": 1770, - "name": "postgresColumnNotNull", - "qualified_name": "migration.postgresColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "reason": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "terms": [ - "answer" - ] - }, - { - "id": 1774, - "name": "postgresIndexExists", - "qualified_name": "migration.postgresIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "reason": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "terms": [ - "answer" - ] - }, - { - "id": 1217, - "name": "resolveCall", - "qualified_name": "resolve.resolveCall", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "find the unique caller and callee nodes for a call relationship.", - "reason": "find the unique caller and callee nodes for a call relationship.", - "terms": [ - "call" - ] - }, - { - "id": 599, - "name": "annotationCoverage", - "qualified_name": "searchsql.Reader.annotationCoverage", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\".", - "reason": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\".", - "terms": [ - "answer" - ] - }, - { - "id": 1562, - "name": "Result", - "qualified_name": "intentrank.Result", - "kind": "class", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "reason": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "terms": [ - "answer" - ] - }, - { - "id": 354, - "name": "handleRetrieve", - "qualified_name": "wikiserver.Server.handleRetrieve", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract.", - "reason": "give the Wiki UI the same search answer every other surface gets, in its own viewer contract.", - "terms": [ - "answer" - ] - }, - { - "id": 1610, - "name": "Search", - "qualified_name": "search.Service.Search", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "answer a search with the files that can justify their place, not the backend's raw order.", - "reason": "answer a search with the files that can justify their place, not the backend's raw order.", - "terms": [ - "answer" - ] - }, - { - "id": 1707, - "name": "PostgresDSN", - "qualified_name": "dbtest.PostgresDSN", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "reason": "give every postgres-tagged package one shared answer for \"which server\" instead of a copy per package.", - "terms": [ - "answer" - ] - }, - { - "id": 729, - "name": "RewriteCall", - "qualified_name": "treesitter.NoopCallRewriter.RewriteCall", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "satisfy CallRewriter for languages without additional call inference.", - "reason": "satisfy CallRewriter for languages without additional call inference.", - "terms": [ - "call" - ] - }, - { - "id": 247, - "name": "queryGraphEvidence", - "qualified_name": "mcp.queryGraphEvidence", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose edge location details that justify caller/callee confidence labels.", - "reason": "expose edge location details that justify caller/callee confidence labels.", - "terms": [ - "call" - ] - } - ] - }, - "why does an exact short name jump ahead of stronger text matches": { - "corpus": 1901, - "terms": [ - { - "text": "exact", - "in_reasons": 15 - }, - { - "text": "short", - "in_reasons": 18 - }, - { - "text": "name", - "in_reasons": 289 - }, - { - "text": "jump", - "in_reasons": 0 - }, - { - "text": "ahead", - "in_reasons": 1 - }, - { - "text": "stronger", - "in_reasons": 0 - }, - { - "text": "text", - "in_reasons": 31 - }, - { - "text": "matches", - "in_reasons": 12 - } + "why does a result say it was cut short instead of returning everything": [ + 60, + 61, + 62, + 110, + 111, + 119, + 139, + 140, + 141, + 142, + 164, + 165, + 175, + 183, + 184, + 187, + 198, + 199, + 208, + 217, + 219, + 220, + 232, + 240, + 241, + 260, + 289, + 308, + 335, + 411, + 421, + 442, + 459, + 460, + 532, + 552, + 558, + 571, + 581, + 621, + 632, + 696, + 699, + 732, + 760, + 827, + 843, + 858, + 883, + 920, + 921, + 930, + 946, + 948, + 959, + 965, + 970, + 977, + 980, + 1020, + 1068, + 1101, + 1115, + 1176, + 1204, + 1205, + 1213, + 1216, + 1217, + 1264, + 1266, + 1292, + 1303, + 1317, + 1318, + 1322, + 1328, + 1345, + 1351, + 1353, + 1367, + 1368, + 1384, + 1390, + 1398, + 1414, + 1437, + 1449, + 1476, + 1481, + 1508, + 1513, + 1517, + 1525, + 1527, + 1528, + 1530, + 1531, + 1532, + 1536, + 1538, + 1545, + 1556, + 1572, + 1651, + 1754, + 1776, + 1786, + 1792, + 1853, + 1863, + 1887 ], - "hits": [ - { - "id": 998, - "name": "CandidateMatch", - "qualified_name": "query.CandidateMatch", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "reason": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "terms": [ - "short", - "name", - "matches" - ] - }, - { - "id": 1715, - "name": "close", - "qualified_name": "dbtest.postgresSchema.close", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "reason": "end the schema's life exactly once, reporting the drop failure ahead of the close failure.", - "terms": [ - "exact", - "ahead" - ] - }, - { - "id": 1566, - "name": "saturate", - "qualified_name": "intentrank.saturate", - "kind": "function", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "stop a long or repetitive reason from outranking a short exact one.", - "reason": "stop a long or repetitive reason from outranking a short exact one.", - "terms": [ - "exact", - "short" - ] - }, - { - "id": 607, - "name": "intentTerm", - "qualified_name": "searchsql.intentTerm", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "reason": "keep a short question word from reaching an identifier spelled inside a recorded reason.", - "terms": [ - "exact", - "short" - ] - }, - { - "id": 1705, - "name": "NewSearchBackend", - "qualified_name": "db.NewSearchBackend", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "select the full-text search backend implementation that matches the active database driver.", - "reason": "select the full-text search backend implementation that matches the active database driver.", - "terms": [ - "text", - "matches" - ] - }, - { - "id": 268, - "name": "compactQueryTargetAmbiguity", - "qualified_name": "mcp.compactQueryTargetAmbiguity", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "compress ambiguous short-symbol matches into one line so callers can choose the intended node.", - "reason": "compress ambiguous short-symbol matches into one line so callers can choose the intended node.", - "terms": [ - "short", - "matches" - ] - }, - { - "id": 556, - "name": "unresolvedIndexHashes", - "qualified_name": "graphgorm.unresolvedIndexHashes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries.", - "reason": "keep arbitrary source-derived text out of PostgreSQL B-tree indexes without weakening exact-match queries.", - "terms": [ - "exact", - "text" - ] - }, - { - "id": 1559, - "name": "Doc", - "qualified_name": "intentrank.Doc", - "kind": "class", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "carry the exact indexed text into scoring so the score is computed over what was matched.", - "reason": "carry the exact indexed text into scoring so the score is computed over what was matched.", - "terms": [ - "exact", - "text" - ] - }, - { - "id": 490, - "name": "ccgRefNodeQuery", - "qualified_name": "graphgorm.Store.ccgRefNodeQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "reason": "keep one matcher for every consumer of ccg ref resolution so lint and cross-ref state never disagree.", - "terms": [ - "name", - "matches" - ] - }, - { - "id": 499, - "name": "NodesByExactName", - "qualified_name": "graphgorm.Store.NodesByExactName", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "support exact-name fallback suggestions through the analysis repository.", - "reason": "support exact-name fallback suggestions through the analysis repository.", - "terms": [ - "exact", - "name" - ] - }, - { - "id": 388, - "name": "symbolMatches", - "qualified_name": "wikiserver.symbolMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "allow short symbol refs to match names and language-qualified names.", - "reason": "allow short symbol refs to match names and language-qualified names.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 609, - "name": "extractExactNameToken", - "qualified_name": "searchsql.extractExactNameToken", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "treat only single-identifier queries as eligible for exact-name promotion.", - "reason": "treat only single-identifier queries as eligible for exact-name promotion.", - "terms": [ - "exact", - "name" - ] - }, - { - "id": 1231, - "name": "resolveProductionFunction", - "qualified_name": "resolve.resolveProductionFunction", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "locate the tested symbol by checking qualified and bare name matches.", - "reason": "locate the tested symbol by checking qualified and bare name matches.", - "terms": [ - "name", - "matches" - ] - }, - { - "id": 1265, - "name": "PackagePrefix", - "qualified_name": "resolve.explicitOwnerLanguageDispatch.PackagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "reason": "reuse existing qualified-name prefixes when expanding short owner candidates.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 1838, - "name": "Display", - "qualified_name": "reference.Ref.Display", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "reason": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 1033, - "name": "lastSegment", - "qualified_name": "describe.lastSegment", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "recover the stored short name from a dotted or slashed guess.", - "reason": "recover the stored short name from a dotted or slashed guess.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 885, - "name": "nodeKey", - "qualified_name": "treesitter.nodeKey", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "key duplicate symbol matches by name and source span during one query execution.", - "reason": "key duplicate symbol matches by name and source span during one query execution.", - "terms": [ - "name", - "matches" - ] - }, - { - "id": 996, - "name": "FindExactNameMatches", - "qualified_name": "query.Service.FindExactNameMatches", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "reason": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 1269, - "name": "explicitOwnerShortNameCandidates", - "qualified_name": "resolve.explicitOwnerShortNameCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "reason": "preserve short-owner support without searching unrelated packages outside the caller namespace.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 815, - "name": "qualifyImportedTypeName", - "qualified_name": "treesitter.qualifyImportedTypeName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "let hierarchy edges point to imported types across packages when declarations use short names.", - "reason": "let hierarchy edges point to imported types across packages when declarations use short names.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 1268, - "name": "explicitOwnerTarget", - "qualified_name": "resolve.explicitOwnerTarget", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "reason": "normalize short and fully qualified owner names into one dispatch anchor before method lookup.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 610, - "name": "promoteExactNameMatch", - "qualified_name": "searchsql.promoteExactNameMatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "move an exact symbol-name hit to the front of search results to improve precision.", - "reason": "move an exact symbol-name hit to the front of search results to improve precision.", - "terms": [ - "exact", - "name" - ] - }, - { - "id": 1620, - "name": "absorbIntent", - "qualified_name": "search.absorbIntent", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "let a recorded reason put a node on the page without letting it reshuffle the name matches.", - "reason": "let a recorded reason put a node on the page without letting it reshuffle the name matches.", - "terms": [ - "name", - "matches" - ] - }, - { - "id": 675, - "name": "pathBaseName", - "qualified_name": "treesitter.pathBaseName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "reason": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "terms": [ - "short", - "name" - ] - }, - { - "id": 806, - "name": "KotlinSemantics", - "qualified_name": "treesitter.KotlinSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "emit Kotlin hierarchy edges from declaration text while preserving package-qualified child names.", - "reason": "emit Kotlin hierarchy edges from declaration text while preserving package-qualified child names.", - "terms": [ - "name", - "text" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "name", - "text" - ] - }, - { - "id": 385, - "name": "refTargetFromMatches", - "qualified_name": "wikiserver.refTargetFromMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "merge tree and graph matches into one browser navigation payload.", - "reason": "merge tree and graph matches into one browser navigation payload.", - "terms": [ - "matches" - ] - }, - { - "id": 383, - "name": "findRefTreeNode", - "qualified_name": "wikiserver.findRefTreeNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "reason": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "terms": [ - "matches" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "matches" - ] - }, - { - "id": 1225, - "name": "bestImportFileMatch", - "qualified_name": "resolve.bestImportFileMatch", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "handle cases where import paths don't exactly match file system paths.", - "reason": "handle cases where import paths don't exactly match file system paths.", - "terms": [ - "exact" - ] - }, - { - "id": 1789, - "name": "Parser", - "qualified_name": "annotation.Parser", - "kind": "class", - "file_path": "internal/domain/annotation/parser.go", - "intent": "convert stripped documentation text into graph.Annotation values", - "reason": "convert stripped documentation text into graph.Annotation values", - "terms": [ - "text" - ] - }, - { - "id": 1485, - "name": "NonRetryable", - "qualified_name": "reposync.NonRetryable", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "reason": "wrap permanent sync failures so queue retry logic can short-circuit them.", - "terms": [ - "short" - ] - }, - { - "id": 608, - "name": "buildPrefixQuery", - "qualified_name": "searchsql.buildPrefixQuery", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "reason": "share one injection-safe term expansion policy across SQLite FTS5 and PostgreSQL tsquery syntax.", - "terms": [ - "matches" - ] - }, - { - "id": 614, - "name": "Migrate", - "qualified_name": "searchsql.SQLiteBackend.Migrate", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Creates a full-text search index table for SQLite.", - "reason": "Creates a full-text search index table for SQLite.", - "terms": [ - "text" - ] - }, - { - "id": 1599, - "name": "tokenize", - "qualified_name": "rank.tokenize", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "normalize free-text search input into comparable Unicode tokens.", - "reason": "normalize free-text search input into comparable Unicode tokens.", - "terms": [ - "text" - ] - }, - { - "id": 1778, - "name": "internal/domain/annotation/normalizer.go", - "qualified_name": "internal/domain/annotation/normalizer.go", - "kind": "file", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "text" - ] - }, - { - "id": 1779, - "name": "Normalizer", - "qualified_name": "annotation.Normalizer", - "kind": "class", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "normalize comment text before annotation parsing across supported languages", - "reason": "normalize comment text before annotation parsing across supported languages", - "terms": [ - "text" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "exact" - ] - }, - { - "id": 851, - "name": "CallRewriter", - "qualified_name": "treesitter.RustSemantics.CallRewriter", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "preserve exact trait path and optional concrete type information without changing generic walker logic.", - "reason": "preserve exact trait path and optional concrete type information without changing generic walker logic.", - "terms": [ - "exact" - ] - }, - { - "id": 1024, - "name": "Outline", - "qualified_name": "describe.Outline", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "terms": [ - "exact" - ] - }, - { - "id": 197, - "name": "configuredAnalysisRoots", - "qualified_name": "mcp.configuredAnalysisRoots", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "build the allowlist used by path validation so each source of truth contributes exactly once.", - "reason": "build the allowlist used by path validation so each source of truth contributes exactly once.", - "terms": [ - "exact" - ] - }, - { - "id": 1178, - "name": "NewImportFileIndex", - "qualified_name": "resolve.NewImportFileIndex", - "kind": "function", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "share the exact-directory and longest-suffix import policy across build and staged update resolution.", - "reason": "share the exact-directory and longest-suffix import policy across build and staged update resolution.", - "terms": [ - "exact" - ] - }, - { - "id": 1833, - "name": "UnresolvedIndexState", - "qualified_name": "graph.UnresolvedIndexState", - "kind": "class", - "file_path": "internal/domain/graph/unresolved.go", - "intent": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "reason": "prevent upgraded databases with an empty, uninitialized index from taking an unsafe incremental shortcut.", - "terms": [ - "short" - ] - }, - { - "id": 583, - "name": "PostgresBackend", - "qualified_name": "searchsql.PostgresBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "reason": "Handles full-text search indexing and querying in a PostgreSQL environment.", - "terms": [ - "text" - ] - }, - { - "id": 612, - "name": "SQLiteBackend", - "qualified_name": "searchsql.SQLiteBackend", - "kind": "class", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Handles full-text search indexing and querying in a SQLite environment.", - "reason": "Handles full-text search indexing and querying in a SQLite environment.", - "terms": [ - "text" - ] - }, - { - "id": 778, - "name": "collectTypeScriptReceiverBindings", - "qualified_name": "treesitter.collectTypeScriptReceiverBindings", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "seed conservative receiver rewriting with only textually provable TypeScript type annotations.", - "reason": "seed conservative receiver rewriting with only textually provable TypeScript type annotations.", - "terms": [ - "text" - ] - }, - { - "id": 829, - "name": "kotlinSupertypes", - "qualified_name": "treesitter.kotlinSupertypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes.", - "reason": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes.", - "terms": [ - "text" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "short" - ] - }, - { - "id": 1625, - "name": "Limits", - "qualified_name": "wire.Limits", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "let a caller tell a short answer from the first page of a long one.", - "reason": "let a caller tell a short answer from the first page of a long one.", - "terms": [ - "short" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "matches" - ] - } - ] - }, - "why does an invoice get a loyalty discount": {}, - "why does editing a function with many outgoing links rank as riskier": { - "corpus": 1901, - "terms": [ - { - "text": "editing", - "in_reasons": 0 - }, - { - "text": "function", - "in_reasons": 10 - }, - { - "text": "many", - "in_reasons": 7 - }, - { - "text": "outgoing", - "in_reasons": 6 - }, - { - "text": "links", - "in_reasons": 4 - }, - { - "text": "rank", - "in_reasons": 22 - }, - { - "text": "riskier", - "in_reasons": 0 - } + "why does an answer with nothing in it still suggest another call": [ + 65, + 70, + 109, + 118, + 146, + 159, + 164, + 165, + 166, + 177, + 178, + 181, + 195, + 197, + 204, + 206, + 213, + 216, + 218, + 220, + 236, + 240, + 255, + 278, + 282, + 299, + 301, + 313, + 351, + 381, + 386, + 420, + 433, + 441, + 445, + 448, + 480, + 482, + 497, + 498, + 499, + 503, + 514, + 528, + 541, + 598, + 602, + 654, + 661, + 664, + 667, + 673, + 674, + 676, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 719, + 724, + 725, + 738, + 739, + 741, + 742, + 748, + 752, + 761, + 762, + 763, + 764, + 768, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 817, + 818, + 825, + 826, + 831, + 838, + 839, + 840, + 858, + 862, + 872, + 888, + 889, + 891, + 893, + 895, + 897, + 898, + 900, + 903, + 908, + 929, + 930, + 931, + 933, + 934, + 936, + 948, + 949, + 950, + 965, + 969, + 970, + 971, + 975, + 976, + 1048, + 1056, + 1063, + 1064, + 1065, + 1067, + 1078, + 1079, + 1080, + 1086, + 1090, + 1098, + 1111, + 1112, + 1113, + 1115, + 1132, + 1140, + 1145, + 1151, + 1160, + 1165, + 1168, + 1188, + 1189, + 1193, + 1195, + 1211, + 1214, + 1217, + 1222, + 1223, + 1227, + 1235, + 1237, + 1238, + 1239, + 1277, + 1283, + 1284, + 1292, + 1295, + 1309, + 1310, + 1317, + 1340, + 1341, + 1366, + 1384, + 1393, + 1401, + 1402, + 1446, + 1447, + 1472, + 1478, + 1481, + 1483, + 1484, + 1485, + 1487, + 1489, + 1491, + 1496, + 1497, + 1508, + 1515, + 1524, + 1526, + 1527, + 1528, + 1529, + 1531, + 1533, + 1538, + 1546, + 1555, + 1558, + 1559, + 1560, + 1564, + 1565, + 1566, + 1570, + 1571, + 1572, + 1573, + 1574, + 1579, + 1603, + 1651, + 1717, + 1722, + 1725, + 1742, + 1759, + 1760, + 1777, + 1784, + 1788, + 1818, + 1819, + 1871, + 1897 ], - "hits": [ - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "outgoing" - ] - }, - { - "id": 1802, - "name": "CrossRefStatus", - "qualified_name": "graph.CrossRefStatus", - "kind": "type", - "file_path": "internal/domain/graph/crossref.go", - "intent": "distinguish navigable references from dangling ones without deleting authored links.", - "reason": "distinguish navigable references from dangling ones without deleting authored links.", - "terms": [ - "links" - ] - }, - { - "id": 1835, - "name": "Ref", - "qualified_name": "reference.Ref", - "kind": "class", - "file_path": "internal/domain/reference/ref.go", - "intent": "represent cross-namespace @see links without coupling annotations to graph storage.", - "reason": "represent cross-namespace @see links without coupling annotations to graph storage.", - "terms": [ - "links" - ] - }, - { - "id": 1553, - "name": "Hit", - "qualified_name": "intent.Hit", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "carry the reason a declaration ranked, not only that it ranked.", - "reason": "carry the reason a declaration ranked, not only that it ranked.", - "terms": [ - "rank" - ] - }, - { - "id": 987, - "name": "ImportsOf", - "qualified_name": "query.Service.ImportsOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "reveal outgoing import dependencies for a file or package node", - "reason": "reveal outgoing import dependencies for a file or package node", - "terms": [ - "outgoing" - ] - }, - { - "id": 875, - "name": "NewWalker", - "qualified_name": "treesitter.NewWalker", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "amortize parser and query compilation cost across many file parses", - "reason": "amortize parser and query compilation cost across many file parses", - "terms": [ - "many" - ] - }, - { - "id": 957, - "name": "ImpactRadiusBounded", - "qualified_name": "impact.Analyzer.ImpactRadiusBounded", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "terms": [ - "outgoing" - ] - }, - { - "id": 961, - "name": "EdgeDirection", - "qualified_name": "analyze.EdgeDirection", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "express incoming and outgoing graph queries without leaking SQL join details.", - "reason": "express incoming and outgoing graph queries without leaking SQL join details.", - "terms": [ - "outgoing" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "links" - ] - }, - { - "id": 1542, - "name": "groupByFile", - "qualified_name": "evidence.groupByFile", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "turn a ranked list of declarations into a ranked list of files to read.", - "reason": "turn a ranked list of declarations into a ranked list of files to read.", - "terms": [ - "rank" - ] - }, - { - "id": 981, - "name": "CallersOf", - "qualified_name": "query.Service.CallersOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "find upstream callers of a function or method node", - "reason": "find upstream callers of a function or method node", - "terms": [ - "function" - ] - }, - { - "id": 1252, - "name": "uniqueCallable", - "qualified_name": "resolve.uniqueCallable", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "return nil if multiple ambiguous functions match the criteria.", - "reason": "return nil if multiple ambiguous functions match the criteria.", - "terms": [ - "function" - ] - }, - { - "id": 895, - "name": "acquireParser", - "qualified_name": "treesitter.Walker.acquireParser", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "amortize parser construction cost across many parses on the same language.", - "reason": "amortize parser construction cost across many parses on the same language.", - "terms": [ - "many" - ] - }, - { - "id": 965, - "name": "ChangeRepository", - "qualified_name": "analyze.ChangeRepository", - "kind": "type", - "file_path": "internal/app/analyze/ports.go", - "intent": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms.", - "reason": "isolate namespace-scoped node and outgoing-edge queries from change analysis algorithms.", - "terms": [ - "outgoing" - ] - }, - { - "id": 984, - "name": "CalleesOf", - "qualified_name": "query.Service.CalleesOf", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "find downstream call dependencies of a function or method node", - "reason": "find downstream call dependencies of a function or method node", - "terms": [ - "function" - ] - }, - { - "id": 302, - "name": "reviewChanges", - "qualified_name": "mcp.promptHandlers.reviewChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Provides a single view of high-risk functions before reviewing changes.", - "reason": "Provides a single view of high-risk functions before reviewing changes.", - "terms": [ - "function" - ] - }, - { - "id": 891, - "name": "resolveTestedBy", - "qualified_name": "treesitter.Walker.resolveTestedBy", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "connect production functions to enclosing tests without language-specific test frameworks", - "reason": "connect production functions to enclosing tests without language-specific test frameworks", - "terms": [ - "function" - ] - }, - { - "id": 506, - "name": "TopCommunities", - "qualified_name": "graphgorm.Store.TopCommunities", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace communities by stored membership count.", - "reason": "rank namespace communities by stored membership count.", - "terms": [ - "rank" - ] - }, - { - "id": 507, - "name": "TopFlows", - "qualified_name": "graphgorm.Store.TopFlows", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "rank namespace flows by stored membership count.", - "reason": "rank namespace flows by stored membership count.", - "terms": [ - "rank" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "links" - ] - }, - { - "id": 308, - "name": "appendPromptTruncation", - "qualified_name": "mcp.appendPromptTruncation", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "append a visible truncation marker when a prompt section omits extra items.", - "reason": "append a visible truncation marker when a prompt section omits extra items.", - "terms": [ - "many" - ] - }, - { - "id": 1177, - "name": "ImportFileIndex", - "qualified_name": "resolve.ImportFileIndex", - "kind": "class", - "file_path": "internal/app/ingest/resolve/import_file_index.go", - "intent": "resolve many import paths from one immutable file-node snapshot without repeated store scans.", - "reason": "resolve many import paths from one immutable file-node snapshot without repeated store scans.", - "terms": [ - "many" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "outgoing" - ] - }, - { - "id": 628, - "name": "insertSQLiteFTSBatch", - "qualified_name": "searchsql.insertSQLiteFTSBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "many" - ] - }, - { - "id": 629, - "name": "insertSQLiteIntentBatch", - "qualified_name": "searchsql.insertSQLiteIntentBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "many" - ] - }, - { - "id": 304, - "name": "onboardDeveloper", - "qualified_name": "mcp.promptHandlers.onboardDeveloper", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "reason": "Quickly familiarizes new developers with graph scale, language distribution, communities, and large functions.", - "terms": [ - "function" - ] - }, - { - "id": 973, - "name": "NamedCount", - "qualified_name": "analyze.NamedCount", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "represent ranked membership aggregates without exposing SQL scan structs.", - "reason": "represent ranked membership aggregates without exposing SQL scan structs.", - "terms": [ - "rank" - ] - }, - { - "id": 193, - "name": "detectChanges", - "qualified_name": "mcp.handlers.detectChanges", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "reason": "identify changed files and functions with elevated review risk from recent git diff hunks.", - "terms": [ - "function" - ] - }, - { - "id": 481, - "name": "ReplaceCrossRefsFrom", - "qualified_name": "graphgorm.Store.ReplaceCrossRefsFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "make outbound cross-ref state a pure function of the namespace's current annotations.", - "reason": "make outbound cross-ref state a pure function of the namespace's current annotations.", - "terms": [ - "function" - ] - }, - { - "id": 1576, - "name": "DropFunctionWords", - "qualified_name": "queryterm.DropFunctionWords", - "kind": "function", - "file_path": "internal/app/search/queryterm/queryterm.go", - "intent": "stop one unremarkable English word from deciding which results a query returns.", - "reason": "stop one unremarkable English word from deciding which results a query returns.", - "terms": [ - "function" - ] - }, - { - "id": 1604, - "name": "rankBy", - "qualified_name": "rank.rankBy", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "convert a structural ordering to deterministic ordinal ranks so equally-scored candidates share one rank and fall through to the retrieval tie-break.", - "reason": "convert a structural ordering to deterministic ordinal ranks so equally-scored candidates share one rank and fall through to the retrieval tie-break.", - "terms": [ - "rank" - ] - }, - { - "id": 1905, - "name": "RetrieveEvidence", - "qualified_name": "RetrieveEvidence", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "preserve the tree nodes that caused a Retrieve result to rank.", - "reason": "preserve the tree nodes that caused a Retrieve result to rank.", - "terms": [ - "rank" - ] - }, - { - "id": 1957, - "name": "retrieveDocs", - "qualified_name": "retrieveDocs", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "reason": "retrieve ranked generated docs using DB-backed graph and annotation evidence.", - "terms": [ - "rank" - ] - }, - { - "id": 632, - "name": "buildSQLiteFTSInsert", - "qualified_name": "searchsql.buildSQLiteFTSInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "reason": "batch SQLite FTS inserts into one statement so rebuild paths can stream many documents with minimal per-row overhead.", - "terms": [ - "many" - ] - }, - { - "id": 1592, - "name": "subsequenceScore", - "qualified_name": "rank.subsequenceScore", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "rank identifiers that contain the query by how prominently they contain it.", - "reason": "rank identifiers that contain the query by how prominently they contain it.", - "terms": [ - "rank" - ] - }, - { - "id": 581, - "name": "loadNodesInOrder", - "qualified_name": "searchsql.loadNodesInOrder", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/backend.go", - "intent": "keep the ranked order across the round trip that loads the nodes themselves.", - "reason": "keep the ranked order across the round trip that loads the nodes themselves.", - "terms": [ - "rank" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "rank" - ] - }, - { - "id": 1024, - "name": "Outline", - "qualified_name": "describe.Outline", - "kind": "class", - "file_path": "internal/app/describe/describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "reason": "answer \"what is in here\" exactly, so the ranked tools do not have to.", - "terms": [ - "rank" - ] - }, - { - "id": 1540, - "name": "matchedSignals", - "qualified_name": "evidence.matchedSignals", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "state a candidate's evidence in the same terms the ranker ordered it by.", - "reason": "state a candidate's evidence in the same terms the ranker ordered it by.", - "terms": [ - "rank" - ] - }, - { - "id": 1545, - "name": "groupByNamespace", - "qualified_name": "evidence.groupByNamespace", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let each repository be paged through its own list without losing the shared ranking.", - "reason": "let each repository be paged through its own list without losing the shared ranking.", - "terms": [ - "rank" - ] - }, - { - "id": 1580, - "name": "Signals", - "qualified_name": "rank.Signals", - "kind": "function", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "expose the ranker's per-candidate evidence to the code that builds a result list.", - "reason": "expose the ranker's per-candidate evidence to the code that builds a result list.", - "terms": [ - "rank" - ] - }, - { - "id": 1562, - "name": "Result", - "qualified_name": "intentrank.Result", - "kind": "class", - "file_path": "internal/app/search/intentrank/rank.go", - "intent": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "reason": "hand back what matched alongside what ranked, so a weak answer can be recognised as one.", - "terms": [ - "rank" - ] - }, - { - "id": 256, - "name": "searchFederated", - "qualified_name": "mcp.handlers.searchFederated", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "answer one search across several repositories with per-item namespace labels.", - "reason": "answer one search across several repositories with per-item namespace labels.", - "terms": [ - "rank" - ] - }, - { - "id": 1577, - "name": "internal/app/search/rank/evidence.go", - "qualified_name": "internal/app/search/rank/evidence.go", - "kind": "file", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "terms": [ - "rank" - ] - }, - { - "id": 1578, - "name": "Structural", - "qualified_name": "rank.Structural", - "kind": "class", - "file_path": "internal/app/search/rank/evidence.go", - "intent": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "reason": "let a caller explain a search result using the ranker's own signals instead of re-deriving them.", - "terms": [ - "rank" - ] - }, - { - "id": 1584, - "name": "Rerank", - "qualified_name": "rank.Rerank", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break.", - "reason": "order candidates by identifier-name and file-path evidence, using backend rank only as a deterministic tie-break.", - "terms": [ - "rank" - ] - }, - { - "id": 597, - "name": "QueryIntent", - "qualified_name": "searchsql.Reader.QueryIntent", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "reason": "implement the bound intent-search port without exposing a DB argument, and rank the same way on every backend.", - "terms": [ - "rank" - ] - }, - { - "id": 1556, - "name": "Result", - "qualified_name": "intent.Result", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "keep the ranking and the evidence for it on one value, so neither can be reported without the other.", - "reason": "keep the ranking and the evidence for it on one value, so neither can be reported without the other.", - "terms": [ - "rank" - ] - }, - { - "id": 889, - "name": "mapDefTypeToNodeKind", - "qualified_name": "treesitter.Walker.mapDefTypeToNodeKind", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "keep language query captures aligned with graph node categorization", - "reason": "keep language query captures aligned with graph node categorization", - "terms": [ - "function" - ] - } - ] - }, - "why does impact include code on both sides of a relationship": { - "corpus": 1901, - "terms": [ - { - "text": "impact", - "in_reasons": 6 - }, - { - "text": "include", - "in_reasons": 20 - }, - { - "text": "code", - "in_reasons": 20 - }, - { - "text": "both", - "in_reasons": 25 - }, - { - "text": "sides", - "in_reasons": 1 - }, - { - "text": "relationship", - "in_reasons": 35 - } + "why does an exact short name jump ahead of stronger text matches": [ + 52, + 62, + 126, + 129, + 131, + 132, + 133, + 134, + 138, + 152, + 158, + 161, + 163, + 166, + 180, + 181, + 182, + 187, + 201, + 204, + 206, + 207, + 211, + 212, + 213, + 216, + 217, + 220, + 224, + 226, + 227, + 228, + 229, + 230, + 231, + 244, + 247, + 248, + 249, + 250, + 251, + 265, + 266, + 274, + 275, + 294, + 296, + 297, + 298, + 300, + 301, + 302, + 310, + 330, + 332, + 335, + 338, + 341, + 345, + 346, + 369, + 373, + 374, + 392, + 401, + 402, + 407, + 414, + 416, + 418, + 419, + 420, + 421, + 423, + 425, + 427, + 428, + 429, + 430, + 431, + 432, + 434, + 435, + 437, + 440, + 443, + 445, + 446, + 447, + 449, + 450, + 451, + 452, + 454, + 458, + 461, + 464, + 467, + 473, + 475, + 476, + 489, + 504, + 507, + 520, + 526, + 529, + 530, + 531, + 546, + 550, + 552, + 553, + 555, + 556, + 557, + 558, + 559, + 561, + 562, + 565, + 566, + 567, + 568, + 569, + 570, + 575, + 579, + 582, + 595, + 601, + 608, + 609, + 621, + 623, + 632, + 634, + 643, + 650, + 656, + 661, + 668, + 670, + 678, + 693, + 695, + 696, + 699, + 700, + 703, + 705, + 706, + 708, + 711, + 723, + 725, + 727, + 728, + 730, + 731, + 732, + 733, + 737, + 744, + 749, + 751, + 755, + 756, + 760, + 766, + 768, + 769, + 771, + 774, + 780, + 785, + 786, + 796, + 797, + 804, + 805, + 806, + 830, + 831, + 833, + 835, + 844, + 851, + 863, + 886, + 887, + 890, + 891, + 892, + 914, + 916, + 921, + 925, + 946, + 948, + 952, + 954, + 956, + 959, + 962, + 963, + 964, + 968, + 971, + 980, + 987, + 998, + 999, + 1000, + 1001, + 1018, + 1019, + 1055, + 1082, + 1086, + 1089, + 1127, + 1136, + 1142, + 1152, + 1153, + 1160, + 1163, + 1173, + 1179, + 1185, + 1186, + 1190, + 1195, + 1196, + 1197, + 1199, + 1202, + 1213, + 1216, + 1217, + 1238, + 1269, + 1303, + 1308, + 1323, + 1329, + 1330, + 1345, + 1386, + 1400, + 1403, + 1405, + 1406, + 1407, + 1408, + 1423, + 1437, + 1471, + 1474, + 1475, + 1491, + 1511, + 1512, + 1517, + 1534, + 1536, + 1540, + 1548, + 1552, + 1559, + 1560, + 1567, + 1569, + 1572, + 1573, + 1583, + 1596, + 1615, + 1622, + 1625, + 1636, + 1641, + 1642, + 1643, + 1644, + 1649, + 1659, + 1662, + 1663, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1717, + 1722, + 1725, + 1727, + 1728, + 1730, + 1733, + 1737, + 1742, + 1744, + 1748, + 1754, + 1755, + 1756, + 1786, + 1787, + 1788, + 1789, + 1790, + 1792, + 1793, + 1795, + 1814, + 1822, + 1838, + 1839, + 1840, + 1841, + 1846, + 1856, + 1857, + 1858, + 1860, + 1861, + 1863, + 1871, + 1875, + 1884, + 1885, + 1890, + 1898, + 1900, + 1903, + 1905 ], - "hits": [ - { - "id": 956, - "name": "ImpactRadius", - "qualified_name": "impact.Analyzer.ImpactRadius", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "identify blast radius of code changes for risk assessment", - "reason": "identify blast radius of code changes for risk assessment", - "terms": [ - "code", - "both" - ] - }, - { - "id": 741, - "name": "AdditionalEdges", - "qualified_name": "treesitter.GoSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "identify \"implements\" relationships using both structural and explicit compile-time assertions.", - "reason": "identify \"implements\" relationships using both structural and explicit compile-time assertions.", - "terms": [ - "both", - "relationship" - ] - }, - { - "id": 1541, - "name": "reasonOverlaps", - "qualified_name": "evidence.reasonOverlaps", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "reason": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "terms": [ - "both", - "sides" - ] - }, - { - "id": 303, - "name": "debugIssue", - "qualified_name": "mcp.promptHandlers.debugIssue", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/prompts.go", - "intent": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description.", - "reason": "Creates a starting point for debugging by gathering code candidates and call relationships related to an issue description.", - "terms": [ - "code", - "relationship" - ] - }, - { - "id": 1821, - "name": "RecordedReason", - "qualified_name": "graph.Node.RecordedReason", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "reason": "still wins when both are present, because it says why the code exists\nand a domain rule says what it must hold to.", - "terms": [ - "code", - "both" - ] - }, - { - "id": 471, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 183, - "name": "impactRadiusResponse", - "qualified_name": "mcp.impactRadiusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "preserve a stable typed response envelope for impact-radius queries.", - "reason": "preserve a stable typed response envelope for impact-radius queries.", - "terms": [ - "impact" - ] - }, - { - "id": 473, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "reason": "satisfy the impact analyzer contract for reverse cross-namespace traversal.", - "terms": [ - "impact" - ] - }, - { - "id": 469, - "name": "CrossNamespaceReader", - "qualified_name": "graphgorm.CrossNamespaceReader", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "reason": "let impact and flow analysis walk across repository boundaries declared by annotations.", - "terms": [ - "impact" - ] - }, - { - "id": 474, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.CrossNamespaceReader.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "let impact analysis find foreign namespaces that depend on the target nodes.", - "reason": "let impact analysis find foreign namespaces that depend on the target nodes.", - "terms": [ - "impact" - ] - }, - { - "id": 402, - "name": "requireMethod", - "qualified_name": "wikiserver.requireMethod", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "reject unsupported HTTP methods with a consistent status code.", - "reason": "reject unsupported HTTP methods with a consistent status code.", - "terms": [ - "code" - ] - }, - { - "id": 494, - "name": "FindFlowEntrypoints", - "qualified_name": "graphgorm.Store.FindFlowEntrypoints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/flow.go", - "intent": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "reason": "provide deterministic namespace-scoped entrypoints for stored-flow rebuild policy.", - "terms": [ - "include" - ] - }, - { - "id": 916, - "name": "changedNodeHits", - "qualified_name": "changes.Service.changedNodeHits", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "reason": "share the git-diff and node-overlap pipeline between legacy Analyze, paged AnalyzePage, and flow impact lookup.", - "terms": [ - "impact" - ] - }, - { - "id": 861, - "name": "rustImportAliases", - "qualified_name": "treesitter.rustImportAliases", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "support Rust trait call normalization when code references imported names.", - "reason": "support Rust trait call normalization when code references imported names.", - "terms": [ - "code" - ] - }, - { - "id": 1030, - "name": "childrenOf", - "qualified_name": "describe.childrenOf", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "turn a recursive row set into the one level a caller can choose from.", - "reason": "turn a recursive row set into the one level a caller can choose from.", - "terms": [ - "include" - ] - }, - { - "id": 1885, - "name": "Close", - "qualified_name": "runtime.Runtime.Close", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "give both binaries one cleanup path for shared dependencies.", - "reason": "give both binaries one cleanup path for shared dependencies.", - "terms": [ - "both" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "relationship" - ] - }, - { - "id": 532, - "name": "GetEdgesFrom", - "qualified_name": "graphgorm.Store.GetEdgesFrom", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for a specific declaration.", - "reason": "load outbound relationships for a specific declaration.", - "terms": [ - "relationship" - ] - }, - { - "id": 534, - "name": "GetEdgesTo", - "qualified_name": "graphgorm.Store.GetEdgesTo", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for a specific declaration.", - "reason": "load inbound relationships for a specific declaration.", - "terms": [ - "relationship" - ] - }, - { - "id": 1222, - "name": "resolveImplements", - "qualified_name": "resolve.resolveImplements", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "capture implementation relationships and populate implementer cache.", - "reason": "capture implementation relationships and populate implementer cache.", - "terms": [ - "relationship" - ] - }, - { - "id": 405, - "name": "statusForReadErr", - "qualified_name": "wikiserver.statusForReadErr", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "terms": [ - "code" - ] - }, - { - "id": 530, - "name": "DeleteGraph", - "qualified_name": "graphgorm.Store.DeleteGraph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "reason": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "terms": [ - "include" - ] - }, - { - "id": 690, - "name": "readPNPMWorkspacePatterns", - "qualified_name": "treesitter.readPNPMWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "include pnpm-managed workspace package roots in Node-family package discovery.", - "reason": "include pnpm-managed workspace package roots in Node-family package discovery.", - "terms": [ - "include" - ] - }, - { - "id": 1207, - "name": "unresolvedReason", - "qualified_name": "resolve.unresolvedReason", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "reason": "provide stable reason codes for unresolved-edge diagnostics and logging summaries.", - "terms": [ - "code" - ] - }, - { - "id": 1364, - "name": "logger", - "qualified_name": "workflow.Service.logger", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "keep service code logging-safe even when callers leave Logger nil.", - "reason": "keep service code logging-safe even when callers leave Logger nil.", - "terms": [ - "code" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "relationship" - ] - }, - { - "id": 536, - "name": "DeleteEdgesByFile", - "qualified_name": "graphgorm.Store.DeleteEdgesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "selectively clean existing relationships during file-scoped updates.", - "reason": "selectively clean existing relationships during file-scoped updates.", - "terms": [ - "relationship" - ] - }, - { - "id": 410, - "name": "internal/adapters/outbound/configfiles/includes.go", - "qualified_name": "internal/adapters/outbound/configfiles/includes.go", - "kind": "file", - "file_path": "internal/adapters/outbound/configfiles/includes.go", - "intent": "adapt repository include and exclude configuration parsing to the reposync application port.", - "reason": "adapt repository include and exclude configuration parsing to the reposync application port.", - "terms": [ - "include" - ] - }, - { - "id": 411, - "name": "BuildScope", - "qualified_name": "configfiles.BuildScope", - "kind": "class", - "file_path": "internal/adapters/outbound/configfiles/includes.go", - "intent": "adapt repository include and exclude configuration parsing to the reposync application port.", - "reason": "adapt repository include and exclude configuration parsing to the reposync application port.", - "terms": [ - "include" - ] - }, - { - "id": 693, - "name": "matchesWorkspacePatterns", - "qualified_name": "treesitter.matchesWorkspacePatterns", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "reason": "apply include-first and negate-after semantics consistently across workspace root discovery.", - "terms": [ - "include" - ] - }, - { - "id": 852, - "name": "DefinitionName", - "qualified_name": "treesitter.RustSemantics.DefinitionName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "keep impl_item class names stable when the captured type includes generic arguments.", - "reason": "keep impl_item class names stable when the captured type includes generic arguments.", - "terms": [ - "include" - ] - }, - { - "id": 871, - "name": "Walker", - "qualified_name": "treesitter.Walker", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "turn language-specific ASTs into the project's normalized code graph representation", - "reason": "turn language-specific ASTs into the project's normalized code graph representation", - "terms": [ - "code" - ] - }, - { - "id": 1079, - "name": "isPassthroughLine", - "qualified_name": "binding.isPassthroughLine", - "kind": "function", - "file_path": "internal/app/ingest/binding/binder.go", - "intent": "classify a single source line as non-code (passthrough) for binding logic", - "reason": "classify a single source line as non-code (passthrough) for binding logic", - "terms": [ - "code" - ] - }, - { - "id": 533, - "name": "GetEdgesFromNodes", - "qualified_name": "graphgorm.Store.GetEdgesFromNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load outbound relationships for multiple declarations in one call.", - "reason": "load outbound relationships for multiple declarations in one call.", - "terms": [ - "relationship" - ] - }, - { - "id": 535, - "name": "GetEdgesToNodes", - "qualified_name": "graphgorm.Store.GetEdgesToNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "load inbound relationships for multiple declarations in one call.", - "reason": "load inbound relationships for multiple declarations in one call.", - "terms": [ - "relationship" - ] - }, - { - "id": 790, - "name": "ImplementedTypes", - "qualified_name": "treesitter.JavaScriptSemantics.ImplementedTypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "satisfy shared relationship normalization without inventing JS interface semantics.", - "reason": "satisfy shared relationship normalization without inventing JS interface semantics.", - "terms": [ - "relationship" - ] - }, - { - "id": 177, - "name": "namespaceEvidenceFromContext", - "qualified_name": "mcp.handlers.namespaceEvidenceFromContext", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "include namespace path and git state when available so LLM has traceable provenance.", - "reason": "include namespace path and git state when available so LLM has traceable provenance.", - "terms": [ - "include" - ] - }, - { - "id": 1150, - "name": "PackageDiscoveryOptions", - "qualified_name": "ingest.PackageDiscoveryOptions", - "kind": "class", - "file_path": "internal/app/ingest/ports.go", - "intent": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "reason": "reuse ingest include/exclude and parser-registration policy during language-specific package discovery.", - "terms": [ - "include" - ] - }, - { - "id": 1424, - "name": "Update", - "qualified_name": "workflow.Service.Update", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "centralize file collection, include path, parse limit, and search policy for update callers", - "reason": "centralize file collection, include path, parse limit, and search policy for update callers", - "terms": [ - "include" - ] - }, - { - "id": 1427, - "name": "canBuildForUpdate", - "qualified_name": "workflow.Service.canBuildForUpdate", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "prevent partial non-replacing updates from deleting graph data outside their include paths.", - "reason": "prevent partial non-replacing updates from deleting graph data outside their include paths.", - "terms": [ - "include" - ] - }, - { - "id": 1866, - "name": "HasPathPrefix", - "qualified_name": "pathspec.HasPathPrefix", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "compare include path scopes after normalization so callers can test path containment reliably.", - "reason": "compare include path scopes after normalization so callers can test path containment reliably.", - "terms": [ - "include" - ] - }, - { - "id": 188, - "name": "detectChangesResponse", - "qualified_name": "mcp.detectChangesResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "expose diff-risk results with both legacy entries and shared pagination fields.", - "reason": "expose diff-risk results with both legacy entries and shared pagination fields.", - "terms": [ - "both" - ] - }, - { - "id": 865, - "name": "rustImportAliasEntry", - "qualified_name": "treesitter.rustImportAliasEntry", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "support both explicit `as` aliases and default basename aliases for Rust imports.", - "reason": "support both explicit `as` aliases and default basename aliases for Rust imports.", - "terms": [ - "both" - ] - }, - { - "id": 1005, - "name": "Service", - "qualified_name": "crossref.Service", - "kind": "class", - "file_path": "internal/app/crossref/service.go", - "intent": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "reason": "keep cross_refs derived state consistent with annotations and both namespaces' current nodes.", - "terms": [ - "both" - ] - }, - { - "id": 1585, - "name": "rerankWithRanks", - "qualified_name": "rank.rerankWithRanks", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "keep one ordering implementation for both single-list and multi-list retrieval.", - "reason": "keep one ordering implementation for both single-list and multi-list retrieval.", - "terms": [ - "both" - ] - }, - { - "id": 1784, - "name": "stripPythonDocstringDelimiters", - "qualified_name": "annotation.stripPythonDocstringDelimiters", - "kind": "function", - "file_path": "internal/domain/annotation/normalizer.go", - "intent": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms.", - "reason": "expose the raw docstring text by trying both \"\"\" and ”' triple-quote forms.", - "terms": [ - "both" - ] - }, - { - "id": 497, - "name": "RelatedNodes", - "qualified_name": "graphgorm.Store.RelatedNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "implement namespace-scoped relationship joins behind the analysis query repository.", - "reason": "implement namespace-scoped relationship joins behind the analysis query repository.", - "terms": [ - "relationship" - ] - }, - { - "id": 734, - "name": "implementedTypesOrDefault", - "qualified_name": "treesitter.implementedTypesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize query-captured implements relationships behind an optional language hook.", - "reason": "centralize query-captured implements relationships behind an optional language hook.", - "terms": [ - "relationship" - ] - }, - { - "id": 808, - "name": "AdditionalEdges", - "qualified_name": "treesitter.KotlinSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "reason": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "terms": [ - "relationship" - ] - }, - { - "id": 850, - "name": "AdditionalEdges", - "qualified_name": "treesitter.RustSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks.", - "reason": "satisfy LanguageSemantics while keeping Rust relationship normalization in definition hooks.", - "terms": [ - "relationship" - ] - } - ] - }, - "why does status stay degraded after the latest repository sync failed": { - "corpus": 1901, - "terms": [ - { - "text": "status", - "in_reasons": 11 - }, - { - "text": "stay", - "in_reasons": 17 - }, - { - "text": "degraded", - "in_reasons": 1 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "latest", - "in_reasons": 7 - }, - { - "text": "repository", - "in_reasons": 77 - }, - { - "text": "sync", - "in_reasons": 75 - }, - { - "text": "failed", - "in_reasons": 3 - } + "why does an invoice get a loyalty discount": [], + "why does editing a function with many outgoing links rank as riskier": [ + 147, + 166, + 207, + 254, + 256, + 262, + 427, + 451, + 452, + 525, + 539, + 576, + 577, + 580, + 819, + 835, + 837, + 842, + 900, + 907, + 909, + 912, + 916, + 924, + 931, + 934, + 937, + 956, + 971, + 1126, + 1200, + 1492, + 1495, + 1498, + 1505, + 1509, + 1515, + 1526, + 1527, + 1528, + 1530, + 1534, + 1542, + 1553, + 1752, + 1754, + 1765, + 1766, + 1787, + 1853, + 1904 ], - "hits": [ - { - "id": 1505, - "name": "recordSuccess", - "qualified_name": "reposync.SyncQueue.recordSuccess", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "update the latest successful sync timestamps after a repository finishes cleanly.", - "reason": "update the latest successful sync timestamps after a repository finishes cleanly.", - "terms": [ - "after", - "latest", - "repository", - "sync" - ] - }, - { - "id": 1504, - "name": "recordFailure", - "qualified_name": "reposync.SyncQueue.recordFailure", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "update queue-level and per-repository failure tracking after a terminal sync error.", - "reason": "update queue-level and per-repository failure tracking after a terminal sync error.", - "terms": [ - "after", - "repository", - "sync" - ] - }, - { - "id": 1314, - "name": "packageSemanticEdgeBatches", - "qualified_name": "workflow.Service.packageSemanticEdgeBatches", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "reason": "regenerate package-scoped semantic relationships after node batches reveal the latest package contents.", - "terms": [ - "after", - "latest" - ] - }, - { - "id": 1469, - "name": "BuildScopeLoader", - "qualified_name": "reposync.BuildScopeLoader", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "separate repository config file parsing from repository sync orchestration.", - "reason": "separate repository config file parsing from repository sync orchestration.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "latest", - "sync" - ] - }, - { - "id": 1127, - "name": "sortedFilePaths", - "qualified_name": "incremental.sortedFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "reason": "stabilize incremental sync traversal so logs, batching, and tests stay reproducible.", - "terms": [ - "stay", - "sync" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "after", - "repository" - ] - }, - { - "id": 1473, - "name": "CacheInvalidator", - "qualified_name": "reposync.CacheInvalidator", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "keep derived query cache invalidation after successful repository graph commit.", - "reason": "keep derived query cache invalidation after successful repository graph commit.", - "terms": [ - "after", - "repository" - ] - }, - { - "id": 1510, - "name": "repoStatEntry", - "qualified_name": "reposync.repoStatEntry", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map.", - "reason": "retain the latest success and failure outcome for one repository inside the bounded MRU stats map.", - "terms": [ - "latest", - "repository" - ] - }, - { - "id": 148, - "name": "WebhookStatsDegraded", - "qualified_name": "server.WebhookStatsDegraded", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "최근 성공보다 최신 실패가 남아 있는 큐 상태를 degraded로 분류한다.", - "reason": "최근 성공보다 최신 실패가 남아 있는 큐 상태를 degraded로 분류한다.", - "terms": [ - "degraded" - ] - }, - { - "id": 578, - "name": "LogArgs", - "qualified_name": "reposyncobs.Hooks.LogArgs", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "preserve trace correlation fields on repository sync queue logs.", - "reason": "preserve trace correlation fields on repository sync queue logs.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1471, - "name": "UpdateStats", - "qualified_name": "reposync.UpdateStats", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "report only update counts needed by repository sync observability.", - "reason": "report only update counts needed by repository sync observability.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1380, - "name": "refreshPackageSemanticEdges", - "qualified_name": "workflow.Service.refreshPackageSemanticEdges", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "reason": "keep synthesized package relationships in sync after incremental file changes without rebuilding every package.", - "terms": [ - "after", - "sync" - ] - }, - { - "id": 412, - "name": "Load", - "qualified_name": "configfiles.BuildScope.Load", - "kind": "function", - "file_path": "internal/adapters/outbound/configfiles/includes.go", - "intent": "own repository build scope configuration I/O for webhook synchronization.", - "reason": "own repository build scope configuration I/O for webhook synchronization.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 572, - "name": "internal/adapters/outbound/reposyncgraph/updater.go", - "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", - "kind": "file", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 573, - "name": "Updater", - "qualified_name": "reposyncgraph.Updater", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1443, - "name": "NormalizeBranchRef", - "qualified_name": "reposync.NormalizeBranchRef", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "reject tags and other Git refs before repository sync admission.", - "reason": "reject tags and other Git refs before repository sync admission.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1491, - "name": "SyncQueue", - "qualified_name": "reposync.SyncQueue", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "coordinate deduplicated per-repository sync execution across a worker pool.", - "reason": "coordinate deduplicated per-repository sync execution across a worker pool.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1417, - "name": "cleanup", - "qualified_name": "workflow.buildSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the build succeeded or failed.", - "reason": "reclaim spool disk space whether the build succeeded or failed.", - "terms": [ - "failed" - ] - }, - { - "id": 1420, - "name": "cleanup", - "qualified_name": "workflow.updateSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/workflow/spool.go", - "intent": "reclaim spool disk space whether the update succeeded or failed.", - "reason": "reclaim spool disk space whether the update succeeded or failed.", - "terms": [ - "failed" - ] - }, - { - "id": 1451, - "name": "IsAllowed", - "qualified_name": "reposync.RepoFilter.IsAllowed", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let callers gate repository-level sync before looking at branch-specific restrictions.", - "reason": "let callers gate repository-level sync before looking at branch-specific restrictions.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 334, - "name": "SyncFunc", - "qualified_name": "webhook.SyncFunc", - "kind": "type", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "define the callback signature webhook intake invokes to trigger repository sync.", - "reason": "define the callback signature webhook intake invokes to trigger repository sync.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 342, - "name": "verifySignature", - "qualified_name": "webhook.WebhookHandler.verifySignature", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "reason": "authenticate webhook payloads before the sync pipeline trusts their repository metadata.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 574, - "name": "Update", - "qualified_name": "reposyncgraph.Updater.Update", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "reason": "replace one synchronized repository namespace using the existing incremental ingest contract.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1472, - "name": "GraphUpdater", - "qualified_name": "reposync.GraphUpdater", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "adapt repository sync to the ingest application without importing workflow types.", - "reason": "adapt repository sync to the ingest application without importing workflow types.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1878, - "name": "buildRepoSyncHTTP", - "qualified_name": "remote.buildRepoSyncHTTP", - "kind": "function", - "file_path": "internal/runtime/remote/http.go", - "intent": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook.", - "reason": "centralize remote repository-sync adapter construction and return one idempotent cleanup hook.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 341, - "name": "ServeHTTP", - "qualified_name": "webhook.WebhookHandler.ServeHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "reason": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 945, - "name": "TraceResult", - "qualified_name": "flow.TraceResult", - "kind": "class", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "communicate truncation status alongside the produced flow", - "reason": "communicate truncation status alongside the produced flow", - "terms": [ - "status" - ] - }, - { - "id": 1089, - "name": "cleanup", - "qualified_name": "incremental.deferredEdgeSpool.cleanup", - "kind": "function", - "file_path": "internal/app/ingest/incremental/deferred_edge_spool.go", - "intent": "ensure successful and failed staged updates do not retain temporary source-derived data.", - "reason": "ensure successful and failed staged updates do not retain temporary source-derived data.", - "terms": [ - "failed" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1110, - "name": "SyncWithExisting", - "qualified_name": "incremental.Syncer.SyncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "reconcile parsed graph state with the latest changed-file snapshot", - "reason": "reconcile parsed graph state with the latest changed-file snapshot", - "terms": [ - "latest" - ] - }, - { - "id": 144, - "name": "statusResponse", - "qualified_name": "server.statusResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "reason": "/status가 DB와 webhook 상태를 한 payload로 반환하게 한다.", - "terms": [ - "status" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 452, - "name": "acquireFilesystemLock", - "qualified_name": "gitrepo.acquireFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "reason": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 1489, - "name": "syncPayload", - "qualified_name": "reposync.syncPayload", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "capture the most recent sync request data per repository while it waits in the queue.", - "reason": "capture the most recent sync request data per repository while it waits in the queue.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 370, - "name": "contextResponse", - "qualified_name": "wikiserver.contextResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return the assembled Markdown and per-item resolution status.", - "reason": "return the assembled Markdown and per-item resolution status.", - "terms": [ - "status" - ] - }, - { - "id": 402, - "name": "requireMethod", - "qualified_name": "wikiserver.requireMethod", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "reject unsupported HTTP methods with a consistent status code.", - "reason": "reject unsupported HTTP methods with a consistent status code.", - "terms": [ - "status" - ] - }, - { - "id": 1948, - "name": "APIError", - "qualified_name": "APIError", - "kind": "class", - "file_path": "web/wiki/src/api.ts", - "intent": "preserve HTTP status alongside user-facing Wiki API errors.", - "reason": "preserve HTTP status alongside user-facing Wiki API errors.", - "terms": [ - "status" - ] - }, - { - "id": 1949, - "name": "constructor", - "qualified_name": "APIError.constructor", - "kind": "function", - "file_path": "web/wiki/src/api.ts", - "intent": "attach the HTTP status to a normal Error instance.", - "reason": "attach the HTTP status to a normal Error instance.", - "terms": [ - "status" - ] - }, - { - "id": 1010, - "name": "resolveOnce", - "qualified_name": "crossref.Service.resolveOnce", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "reason": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "terms": [ - "stay", - "sync" - ] - }, - { - "id": 1461, - "name": "ResolveCloneURL", - "qualified_name": "reposync.ResolveCloneURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "reason": "keep repository sync deterministic and prevent untrusted webhook payloads from choosing arbitrary clone endpoints unless explicitly allowed.", - "terms": [ - "repository", - "sync" - ] - }, - { - "id": 135, - "name": "RunStreamableHTTP", - "qualified_name": "server.RunStreamableHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "reason": "MCP, health, readiness, status, webhook 엔드포인트를 하나의 HTTP 런타임으로 노출한다.", - "terms": [ - "status" - ] - }, - { - "id": 1609, - "name": "New", - "qualified_name": "search.New", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep construction trivial so composition roots stay declarative.", - "reason": "keep construction trivial so composition roots stay declarative.", - "terms": [ - "stay" - ] - }, - { - "id": 405, - "name": "statusForReadErr", - "qualified_name": "wikiserver.statusForReadErr", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "reason": "map filesystem and validation failures to browser-appropriate HTTP status codes.", - "terms": [ - "status" - ] - }, - { - "id": 462, - "name": "syncRepoBranch", - "qualified_name": "gitrepo.syncRepoBranch", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds.", - "reason": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds.", - "terms": [ - "latest" - ] - }, - { - "id": 646, - "name": "refreshSearchDocuments", - "qualified_name": "searchsql.refreshSearchDocuments", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/writer.go", - "intent": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "reason": "regenerate FTS content from the latest nodes and annotations in batches to bound memory.", - "terms": [ - "latest" - ] - }, - { - "id": 118, - "name": "callFallbackWarning", - "qualified_name": "cli.callFallbackWarning", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/status.go", - "intent": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "reason": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "terms": [ - "status" - ] - }, - { - "id": 107, - "name": "printJSONResponse", - "qualified_name": "cli.printJSONResponse", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/search.go", - "intent": "keep --json output byte-stable and diffable while staying the MCP contract.", - "reason": "keep --json output byte-stable and diffable while staying the MCP contract.", - "terms": [ - "stay" - ] - } - ] - }, - "why does the wiki tree fetch only the requested number of levels": { - "corpus": 1901, - "terms": [ - { - "text": "wiki", - "in_reasons": 82 - }, - { - "text": "tree", - "in_reasons": 64 - }, - { - "text": "fetch", - "in_reasons": 10 - }, - { - "text": "only", - "in_reasons": 85 - }, - { - "text": "requested", - "in_reasons": 14 - }, - { - "text": "number", - "in_reasons": 3 - }, - { - "text": "levels", - "in_reasons": 1 - } + "why does impact include code on both sides of a relationship": [ + 131, + 136, + 142, + 189, + 255, + 268, + 349, + 352, + 357, + 358, + 413, + 416, + 418, + 419, + 433, + 441, + 443, + 475, + 477, + 479, + 480, + 481, + 482, + 483, + 484, + 499, + 503, + 582, + 583, + 609, + 631, + 635, + 636, + 639, + 657, + 658, + 679, + 686, + 704, + 715, + 716, + 734, + 735, + 750, + 753, + 795, + 797, + 806, + 810, + 815, + 828, + 847, + 865, + 895, + 906, + 907, + 914, + 915, + 954, + 977, + 1025, + 1026, + 1057, + 1077, + 1079, + 1096, + 1101, + 1155, + 1165, + 1166, + 1170, + 1193, + 1261, + 1272, + 1282, + 1290, + 1300, + 1301, + 1309, + 1324, + 1366, + 1369, + 1381, + 1421, + 1488, + 1494, + 1507, + 1530, + 1535, + 1561, + 1573, + 1596, + 1625, + 1645, + 1733, + 1777, + 1818, + 1819, + 1822, + 1824, + 1826, + 1832, + 1835 ], - "hits": [ - { - "id": 1922, - "name": "toggleOpen", - "qualified_name": "toggleOpen", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "expand one tree row by fetching children only when the user opens that node.", - "reason": "expand one tree row by fetching children only when the user opens that node.", - "terms": [ - "tree", - "fetch", - "only" - ] - }, - { - "id": 1637, - "name": "populateLazyChildren", - "qualified_name": "wiki.Builder.populateLazyChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "populate a lazy tree node to the requested relative depth.", - "reason": "populate a lazy tree node to the requested relative depth.", - "terms": [ - "tree", - "requested" - ] - }, - { - "id": 1910, - "name": "loadTreeChildren", - "qualified_name": "loadTreeChildren", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "load one expanded tree node on demand so the sidebar avoids fetching the full namespace tree.", - "reason": "load one expanded tree node on demand so the sidebar avoids fetching the full namespace tree.", - "terms": [ - "tree", - "fetch" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "wiki", - "tree", - "only" - ] - }, - { - "id": 369, - "name": "contextItem", - "qualified_name": "wikiserver.contextItem", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "report whether one requested context item was found in docs or tree summaries.", - "reason": "report whether one requested context item was found in docs or tree summaries.", - "terms": [ - "tree", - "requested" - ] - }, - { - "id": 1669, - "name": "sortTree", - "qualified_name": "wiki.sortTree", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "keep Wiki tree output deterministic across builds.", - "reason": "keep Wiki tree output deterministic across builds.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 949, - "name": "TraceFlowBounded", - "qualified_name": "flow.Tracer.TraceFlowBounded", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "expose a flow trace variant that can stop early when MaxNodes is reached", - "reason": "expose a flow trace variant that can stop early when MaxNodes is reached", - "terms": [ - "fetch", - "only" - ] - }, - { - "id": 1606, - "name": "Searcher", - "qualified_name": "search.Searcher", - "kind": "type", - "file_path": "internal/app/search/service.go", - "intent": "keep the service on fetch-only ports so no backend or scoring package leaks in.", - "reason": "keep the service on fetch-only ports so no backend or scoring package leaks in.", - "terms": [ - "fetch", - "only" - ] - }, - { - "id": 622, - "name": "rebuildIntentTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildIntentTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested nodes' reasons so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "only", - "requested" - ] - }, - { - "id": 1638, - "name": "lazyChildren", - "qualified_name": "wiki.Builder.lazyChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "resolve immediate children for one lazy Wiki tree node.", - "reason": "resolve immediate children for one lazy Wiki tree node.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 353, - "name": "handleSearch", - "qualified_name": "wikiserver.Server.handleSearch", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "search Wiki tree labels and summaries for the active namespace.", - "reason": "search Wiki tree labels and summaries for the active namespace.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 384, - "name": "refPathMatchesTree", - "qualified_name": "wikiserver.refPathMatchesTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "compare a ccg:// path/symbol target against one Wiki tree node.", - "reason": "compare a ccg:// path/symbol target against one Wiki tree node.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1938, - "name": "TreeResponse", - "qualified_name": "TreeResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry a namespace-scoped RAG tree payload from the Wiki API.", - "reason": "carry a namespace-scoped RAG tree payload from the Wiki API.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1952, - "name": "TreeRequest", - "qualified_name": "TreeRequest", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe a bounded Wiki tree request used for lazy folder expansion.", - "reason": "describe a bounded Wiki tree request used for lazy folder expansion.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 118, - "name": "callFallbackWarning", - "qualified_name": "cli.callFallbackWarning", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/status.go", - "intent": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "reason": "convert fallback edge ratio thresholds into compact operator warning levels for ccg status output.", - "terms": [ - "levels" - ] - }, - { - "id": 829, - "name": "kotlinSupertypes", - "qualified_name": "treesitter.kotlinSupertypes", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes.", - "reason": "avoid text-only parsing when tree-sitter exposes dedicated supertype nodes.", - "terms": [ - "tree", - "only" - ] - }, - { - "id": 620, - "name": "rebuildTableNodes", - "qualified_name": "searchsql.SQLiteBackend.rebuildTableNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "reason": "refresh only the requested node documents in SQLite FTS so incremental updates can avoid a full namespace rebuild.", - "terms": [ - "only", - "requested" - ] - }, - { - "id": 352, - "name": "handleTree", - "qualified_name": "wikiserver.Server.handleTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "reason": "return the active namespace Wiki tree, optionally pruned for lighter UI payloads.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 383, - "name": "findRefTreeNode", - "qualified_name": "wikiserver.findRefTreeNode", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "reason": "locate the Wiki tree node that best matches a parsed ccg:// ref.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1652, - "name": "treeState", - "qualified_name": "wiki.treeState", - "kind": "class", - "file_path": "internal/app/wiki/builder.go", - "intent": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "reason": "hold mutable lookup maps while building the folder/package/file Wiki tree.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1932, - "name": "web/wiki/src/api.ts", - "qualified_name": "web/wiki/src/api.ts", - "kind": "file", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1933, - "name": "TreeNode", - "qualified_name": "TreeNode", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "describe one node in the Wiki RAG tree returned by ccg-server.", - "reason": "describe one node in the Wiki RAG tree returned by ccg-server.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 438, - "name": "parseHunkHeader", - "qualified_name": "gitexec.parseHunkHeader", - "kind": "function", - "file_path": "internal/adapters/outbound/gitexec/git.go", - "intent": "decode git hunk metadata into line numbers usable for overlap checks", - "reason": "decode git hunk metadata into line numbers usable for overlap checks", - "terms": [ - "number" - ] - }, - { - "id": 349, - "name": "APIHandler", - "qualified_name": "wikiserver.Server.APIHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "provide browser-friendly access to namespaces, Wiki trees, docs, search, and copied context.", - "reason": "provide browser-friendly access to namespaces, Wiki trees, docs, search, and copied context.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 361, - "name": "loadWikiTreeRange", - "qualified_name": "wikiserver.Server.loadWikiTreeRange", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "build one bounded Wiki tree range from DB rows for lazy browser navigation.", - "reason": "build one bounded Wiki tree range from DB rows for lazy browser navigation.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1906, - "name": "SearchMode", - "qualified_name": "SearchMode", - "kind": "type", - "file_path": "web/wiki/src/App.tsx", - "intent": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "reason": "constrain the Wiki search control to keyword tree search or DB-backed retrieval.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1934, - "name": "NodeDetails", - "qualified_name": "NodeDetails", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "expose structured symbol metadata returned by DB-backed or snapshot-backed Wiki trees.", - "reason": "expose structured symbol metadata returned by DB-backed or snapshot-backed Wiki trees.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 360, - "name": "loadWikiTree", - "qualified_name": "wikiserver.Server.loadWikiTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "load a Wiki tree from DB rows for browser navigation and return built_at metadata.", - "reason": "load a Wiki tree from DB rows for browser navigation and return built_at metadata.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1633, - "name": "BuildSubtree", - "qualified_name": "wiki.Builder.BuildSubtree", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "support GitHub-style lazy Wiki navigation without synthesizing the full tree for every folder expansion.", - "reason": "support GitHub-style lazy Wiki navigation without synthesizing the full tree for every folder expansion.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 389, - "name": "nodeMarkdown", - "qualified_name": "wikiserver.nodeMarkdown", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "reason": "render a Wiki tree node as generated-doc-shaped fallback Markdown when no generated file exists.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1644, - "name": "treeNodeForModel", - "qualified_name": "wiki.Builder.treeNodeForModel", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "convert one graph node into the Wiki tree node shape used by full and lazy builders.", - "reason": "convert one graph node into the Wiki tree node shape used by full and lazy builders.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 1666, - "name": "isSymbolKind", - "qualified_name": "wiki.isSymbolKind", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "identify graph node kinds that should appear as symbols under a file in the Wiki tree.", - "reason": "identify graph node kinds that should appear as symbols under a file in the Wiki tree.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 599, - "name": "annotationCoverage", - "qualified_name": "searchsql.Reader.annotationCoverage", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\".", - "reason": "give an answer the two numbers that separate \"nobody wrote a reason\" from \"no reason matched\".", - "terms": [ - "number" - ] - }, - { - "id": 1899, - "name": "download", - "qualified_name": "download", - "kind": "function", - "file_path": "npm/install.js", - "intent": "fetch a release archive over HTTPS while transparently following redirects.", - "reason": "fetch a release archive over HTTPS while transparently following redirects.", - "terms": [ - "fetch" - ] - }, - { - "id": 505, - "name": "UntestedCount", - "qualified_name": "graphgorm.Store.UntestedCount", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "count requested nodes without a namespace-scoped tested_by edge.", - "reason": "count requested nodes without a namespace-scoped tested_by edge.", - "terms": [ - "requested" - ] - }, - { - "id": 1632, - "name": "BuildTree", - "qualified_name": "wiki.Builder.BuildTree", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated.", - "reason": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated.", - "terms": [ - "wiki", - "tree" - ] - }, - { - "id": 503, - "name": "CallEdges", - "qualified_name": "graphgorm.Store.CallEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/readmodels.go", - "intent": "select the strongest call evidence edge for each requested peer node.", - "reason": "select the strongest call evidence edge for each requested peer node.", - "terms": [ - "requested" - ] - }, - { - "id": 983, - "name": "CallersOfWithOptions", - "qualified_name": "query.Service.CallersOfWithOptions", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support strict caller lookups that ignore fallback-derived edges when requested.", - "reason": "support strict caller lookups that ignore fallback-derived edges when requested.", - "terms": [ - "requested" - ] - }, - { - "id": 986, - "name": "CalleesOfWithOptions", - "qualified_name": "query.Service.CalleesOfWithOptions", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support strict callee lookups that ignore fallback-derived edges when requested.", - "reason": "support strict callee lookups that ignore fallback-derived edges when requested.", - "terms": [ - "requested" - ] - }, - { - "id": 463, - "name": "fetchOptions", - "qualified_name": "gitrepo.fetchOptions", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "reason": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "terms": [ - "fetch" - ] - }, - { - "id": 208, - "name": "listCrossRefsResponse", - "qualified_name": "mcp.listCrossRefsResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", - "intent": "keep the requested namespace and direction visible next to the reference list.", - "reason": "keep the requested namespace and direction visible next to the reference list.", - "terms": [ - "requested" - ] - }, - { - "id": 273, - "name": "applyNamespace", - "qualified_name": "mcp.handlers.applyNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "attach the requested namespace to context before downstream stores and analyzers run.", - "reason": "attach the requested namespace to context before downstream stores and analyzers run.", - "terms": [ - "requested" - ] - }, - { - "id": 257, - "name": "getAnnotation", - "qualified_name": "mcp.handlers.getAnnotation", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "fetch stored annotation tags and summary data so semantic search results can show business context.", - "reason": "fetch stored annotation tags and summary data so semantic search results can show business context.", - "terms": [ - "fetch" - ] - }, - { - "id": 446, - "name": "Sync", - "qualified_name": "gitrepo.Checkout.Sync", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "make the requested namespace checkout match the admitted remote branch before graph update.", - "reason": "make the requested namespace checkout match the admitted remote branch before graph update.", - "terms": [ - "requested" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "fetch" - ] - }, - { - "id": 1355, - "name": "filterExistingStateByInclude", - "qualified_name": "workflow.filterExistingStateByInclude", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "reason": "prevent partial-scope updates from deleting files that live outside the requested include paths.", - "terms": [ - "requested" - ] - }, - { - "id": 1582, - "name": "FetchLimit", - "qualified_name": "rank.FetchLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result.", - "reason": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result.", - "terms": [ - "requested" - ] - }, - { - "id": 1608, - "name": "Service", - "qualified_name": "search.Service", - "kind": "class", - "file_path": "internal/app/search/service.go", - "intent": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "reason": "hold the fetch→filter→rerank→evidence chain in one place instead of one copy per inbound adapter.", - "terms": [ - "fetch" - ] - }, - { - "id": 922, - "name": "selectTopRiskCandidates", - "qualified_name": "changes.selectTopRiskCandidates", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window.", - "reason": "preserve AnalyzePage ordering while capping page-path memory and sort work to the requested window.", - "terms": [ - "requested" - ] - }, - { - "id": 440, - "name": "GitAuth", - "qualified_name": "gitrepo.GitAuth", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "reason": "bundle the supported git authentication inputs (SSH key, GitHub App credentials, install token) for webhook clone and fetch.", - "terms": [ - "fetch" - ] - } - ] - }, - "why is a cross-project link still dead after the target project was rebuilt": { - "corpus": 1901, - "terms": [ - { - "text": "cross", - "in_reasons": 40 - }, - { - "text": "project", - "in_reasons": 10 - }, - { - "text": "link", - "in_reasons": 14 - }, - { - "text": "still", - "in_reasons": 10 - }, - { - "text": "dead", - "in_reasons": 2 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "target", - "in_reasons": 46 - }, - { - "text": "project", - "in_reasons": 10 - }, - { - "text": "rebuilt", - "in_reasons": 5 - } + "why does status stay degraded after the latest repository sync failed": [ + 59, + 71, + 87, + 99, + 104, + 111, + 121, + 124, + 138, + 162, + 172, + 174, + 179, + 189, + 190, + 278, + 280, + 285, + 286, + 287, + 289, + 311, + 317, + 327, + 349, + 352, + 357, + 358, + 359, + 365, + 370, + 378, + 379, + 386, + 388, + 391, + 393, + 394, + 395, + 396, + 397, + 398, + 400, + 401, + 404, + 408, + 409, + 411, + 413, + 415, + 417, + 428, + 431, + 443, + 445, + 455, + 491, + 502, + 518, + 519, + 520, + 522, + 523, + 563, + 593, + 602, + 615, + 625, + 628, + 632, + 639, + 649, + 753, + 873, + 877, + 894, + 919, + 953, + 955, + 956, + 959, + 961, + 963, + 964, + 991, + 1028, + 1034, + 1044, + 1045, + 1047, + 1048, + 1049, + 1050, + 1052, + 1054, + 1056, + 1062, + 1063, + 1067, + 1070, + 1071, + 1073, + 1074, + 1090, + 1114, + 1116, + 1118, + 1240, + 1244, + 1261, + 1275, + 1280, + 1298, + 1303, + 1317, + 1324, + 1340, + 1355, + 1360, + 1363, + 1371, + 1372, + 1376, + 1377, + 1378, + 1383, + 1385, + 1386, + 1389, + 1393, + 1395, + 1396, + 1402, + 1408, + 1409, + 1420, + 1422, + 1424, + 1425, + 1426, + 1434, + 1437, + 1439, + 1441, + 1442, + 1443, + 1447, + 1448, + 1449, + 1450, + 1453, + 1455, + 1457, + 1458, + 1459, + 1460, + 1461, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1469, + 1478, + 1497, + 1498, + 1526, + 1532, + 1538, + 1555, + 1557, + 1563, + 1566, + 1569, + 1598, + 1607, + 1612, + 1731, + 1754, + 1819, + 1829, + 1873, + 1874, + 1895, + 1896 ], - "hits": [ - { - "id": 484, - "name": "UpdateCrossRefResolution", - "qualified_name": "graphgorm.Store.UpdateCrossRefResolution", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "remap or invalidate a reference after its target namespace rebuilt.", - "reason": "remap or invalidate a reference after its target namespace rebuilt.", - "terms": [ - "after", - "target", - "rebuilt" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "cross", - "link", - "after", - "target" - ] - }, - { - "id": 75, - "name": "internal/adapters/inbound/cli/init.go", - "qualified_name": "internal/adapters/inbound/cli/init.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 76, - "name": "newInitCmd", - "qualified_name": "cli.newInitCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 1387, - "name": "packageNodes", - "qualified_name": "workflow.packageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "project package metadata into the graph schema for persistence.", - "reason": "project package metadata into the graph schema for persistence.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 196, - "name": "validateRepoRootWithin", - "qualified_name": "mcp.validateRepoRootWithin", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "reason": "prevent git-based analysis from reading paths outside the configured project boundaries.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 871, - "name": "Walker", - "qualified_name": "treesitter.Walker", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "turn language-specific ASTs into the project's normalized code graph representation", - "reason": "turn language-specific ASTs into the project's normalized code graph representation", - "terms": [ - "project", - "project" - ] - }, - { - "id": 1105, - "name": "WithParsers", - "qualified_name": "incremental.WithParsers", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let incremental sync dispatch parsing per file extension for multi-language projects", - "reason": "let incremental sync dispatch parsing per file extension for multi-language projects", - "terms": [ - "project", - "project" - ] - }, - { - "id": 239, - "name": "parseProject", - "qualified_name": "mcp.handlers.parseProject", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Loads the entire project into the graph store using a simple parsing tool.", - "reason": "Loads the entire project into the graph store using a simple parsing tool.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 466, - "name": "outgoingEdgeCount", - "qualified_name": "graphgorm.outgoingEdgeCount", - "kind": "class", - "file_path": "internal/adapters/outbound/graphgorm/changes.go", - "intent": "carry one grouped edge-count projection from GORM into the change-risk repository result.", - "reason": "carry one grouped edge-count projection from GORM into the change-risk repository result.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 1012, - "name": "reresolveInbound", - "qualified_name": "crossref.Service.reresolveInbound", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "reason": "update inbound rows whose resolution changed after this namespace's nodes were rebuilt.", - "terms": [ - "after", - "rebuilt" - ] - }, - { - "id": 1223, - "name": "resolveImportsFrom", - "qualified_name": "resolve.resolveImportsFrom", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link importing files to their target packages or files.", - "reason": "link importing files to their target packages or files.", - "terms": [ - "link", - "target" - ] - }, - { - "id": 1121, - "name": "resolveParser", - "qualified_name": "incremental.Syncer.resolveParser", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "reason": "let multi-language projects sync without losing the single-parser fallback for callers using New.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 1354, - "name": "existingGraphFileState", - "qualified_name": "workflow.existingGraphFileState", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "provide both deletion-scope file paths and per-file node projections from a single query.", - "reason": "provide both deletion-scope file paths and per-file node projections from a single query.", - "terms": [ - "project", - "project" - ] - }, - { - "id": 78, - "name": "internal/adapters/inbound/cli/lint.go", - "qualified_name": "internal/adapters/inbound/cli/lint.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "ensure rule matching uses consistent category keys regardless of input spelling", - "reason": "ensure rule matching uses consistent category keys regardless of input spelling", - "terms": [ - "dead" - ] - }, - { - "id": 79, - "name": "normalizeLintCategory", - "qualified_name": "cli.normalizeLintCategory", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/lint.go", - "intent": "ensure rule matching uses consistent category keys regardless of input spelling", - "reason": "ensure rule matching uses consistent category keys regardless of input spelling", - "terms": [ - "dead" - ] - }, - { - "id": 992, - "name": "TestsFor", - "qualified_name": "query.Service.TestsFor", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "find test nodes linked to the target via tested_by edges", - "reason": "find test nodes linked to the target via tested_by edges", - "terms": [ - "link", - "target" - ] - }, - { - "id": 1835, - "name": "Ref", - "qualified_name": "reference.Ref", - "kind": "class", - "file_path": "internal/domain/reference/ref.go", - "intent": "represent cross-namespace @see links without coupling annotations to graph storage.", - "reason": "represent cross-namespace @see links without coupling annotations to graph storage.", - "terms": [ - "cross", - "link" - ] - }, - { - "id": 1926, - "name": "CanvasLink", - "qualified_name": "CanvasLink", - "kind": "type", - "file_path": "web/wiki/src/GraphView.tsx", - "intent": "allow force-graph to replace link endpoints with resolved node objects after simulation starts.", - "reason": "allow force-graph to replace link endpoints with resolved node objects after simulation starts.", - "terms": [ - "link", - "after" - ] - }, - { - "id": 1946, - "name": "RefResponse", - "qualified_name": "RefResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return the parsed ref plus the browser navigation target for a ccg:// link.", - "reason": "return the parsed ref plus the browser navigation target for a ccg:// link.", - "terms": [ - "link", - "target" - ] - }, - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "link", - "target" - ] - }, - { - "id": 1190, - "name": "loadFileNodes", - "qualified_name": "resolve.resolveState.loadFileNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "ensure target file contents are available for cross-file resolution.", - "reason": "ensure target file contents are available for cross-file resolution.", - "terms": [ - "cross", - "target" - ] - }, - { - "id": 1116, - "name": "stageBatch", - "qualified_name": "incremental.Syncer.stageBatch", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "reason": "release source content after node and annotation writes while preserving only edges required for cross-file resolution.", - "terms": [ - "cross", - "after" - ] - }, - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "cross" - ] - }, - { - "id": 1010, - "name": "resolveOnce", - "qualified_name": "crossref.Service.resolveOnce", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "reason": "collapse the per-row resolve round-trips (N+1) down to one query per distinct target.", - "terms": [ - "cross", - "target" - ] - }, - { - "id": 242, - "name": "validateAnalysisPath", - "qualified_name": "mcp.handlers.validateAnalysisPath", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "reason": "restrict parse and build requests to configured analysis roots before filesystem traversal begins.", - "terms": [ - "rebuilt" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "rebuilt" - ] - }, - { - "id": 1229, - "name": "resolveInherits", - "qualified_name": "resolve.resolveInherits", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link subclasses or derived types to their parents.", - "reason": "link subclasses or derived types to their parents.", - "terms": [ - "link" - ] - }, - { - "id": 1393, - "name": "singleNodeOfKind", - "qualified_name": "workflow.singleNodeOfKind", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "ensure unambiguous node selection during structural edge linking.", - "reason": "ensure unambiguous node selection during structural edge linking.", - "terms": [ - "link" - ] - }, - { - "id": 1331, - "name": "rewriteImplementsFingerprintScope", - "qualified_name": "workflow.rewriteImplementsFingerprintScope", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files.", - "reason": "keep synthesized package semantic edges idempotent even when they are rebuilt from different files.", - "terms": [ - "rebuilt" - ] - }, - { - "id": 154, - "name": "Get", - "qualified_name": "mcp.Cache.Get", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Returns only cached responses that are still within their validity period.", - "reason": "Returns only cached responses that are still within their validity period.", - "terms": [ - "still" - ] - }, - { - "id": 555, - "name": "DeleteUnresolvedEdgesByFingerprints", - "qualified_name": "graphgorm.Store.DeleteUnresolvedEdgesByFingerprints", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "keep the reverse index limited to relationships that still lack endpoints.", - "reason": "keep the reverse index limited to relationships that still lack endpoints.", - "terms": [ - "still" - ] - }, - { - "id": 1455, - "name": "ParseRepoRule", - "qualified_name": "reposync.ParseRepoRule", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "reason": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "terms": [ - "still" - ] - }, - { - "id": 1221, - "name": "resolveContains", - "qualified_name": "resolve.resolveContains", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link file nodes to the top-level symbols they define.", - "reason": "link file nodes to the top-level symbols they define.", - "terms": [ - "link" - ] - }, - { - "id": 1389, - "name": "upsertPackageNodes", - "qualified_name": "workflow.upsertPackageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "ensure package nodes exist before their member files are linked.", - "reason": "ensure package nodes exist before their member files are linked.", - "terms": [ - "link" - ] - }, - { - "id": 1802, - "name": "CrossRefStatus", - "qualified_name": "graph.CrossRefStatus", - "kind": "type", - "file_path": "internal/domain/graph/crossref.go", - "intent": "distinguish navigable references from dangling ones without deleting authored links.", - "reason": "distinguish navigable references from dangling ones without deleting authored links.", - "terms": [ - "link" - ] - }, - { - "id": 719, - "name": "DefinitionResult", - "qualified_name": "treesitter.DefinitionResult", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "reason": "keep Walker generic while still allowing languages to accumulate interfaces and edges.", - "terms": [ - "still" - ] - }, - { - "id": 1365, - "name": "parserForExt", - "qualified_name": "workflow.Service.parserForExt", - "kind": "function", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "let tests inject custom parsers while still using the production walker registry by default.", - "reason": "let tests inject custom parsers while still using the production walker registry by default.", - "terms": [ - "still" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "still" - ] - }, - { - "id": 1392, - "name": "packageFilePaths", - "qualified_name": "workflow.packageFilePaths", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "collect all files that need to be linked to their containing package nodes.", - "reason": "collect all files that need to be linked to their containing package nodes.", - "terms": [ - "link" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "after" - ] - }, - { - "id": 1143, - "name": "withStringMap", - "qualified_name": "ingest.withStringMap", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "prevent callers from mutating parser context maps after injection.", - "reason": "prevent callers from mutating parser context maps after injection.", - "terms": [ - "after" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "after" - ] - }, - { - "id": 1865, - "name": "MatchIncludePaths", - "qualified_name": "pathspec.MatchIncludePaths", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "reason": "let walkers prune directories that lie outside user-selected include scopes while still descending into ancestors.", - "terms": [ - "still" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "after" - ] - }, - { - "id": 808, - "name": "AdditionalEdges", - "qualified_name": "treesitter.KotlinSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "reason": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "terms": [ - "after" - ] - }, - { - "id": 1473, - "name": "CacheInvalidator", - "qualified_name": "reposync.CacheInvalidator", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "keep derived query cache invalidation after successful repository graph commit.", - "reason": "keep derived query cache invalidation after successful repository graph commit.", - "terms": [ - "after" - ] - }, - { - "id": 1656, - "name": "ensureFilePath", - "qualified_name": "wiki.treeState.ensureFilePath", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "reason": "ensure symbol-only files still appear in the Wiki tree even when no file node was parsed.", - "terms": [ - "still" - ] - }, - { - "id": 1872, - "name": "New", - "qualified_name": "mcpruntime.New", - "kind": "function", - "file_path": "internal/runtime/mcp/runtime.go", - "intent": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "reason": "centralize common MCP dependency wiring without linking webhook/HTTP code into the local CLI binary.", - "terms": [ - "link" - ] - }, - { - "id": 475, - "name": "GetNodeByID", - "qualified_name": "graphgorm.CrossNamespaceReader.GetNodeByID", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossnamespace.go", - "intent": "resolve traversal frontiers that crossed into another namespace.", - "reason": "resolve traversal frontiers that crossed into another namespace.", - "terms": [ - "cross" - ] - } - ] - }, - "why is a lock file left behind by a crashed run eventually cleaned up": { - "corpus": 1901, - "terms": [ - { - "text": "lock", - "in_reasons": 11 - }, - { - "text": "file", - "in_reasons": 209 - }, - { - "text": "left", - "in_reasons": 1 - }, - { - "text": "behind", - "in_reasons": 15 - }, - { - "text": "crashed", - "in_reasons": 2 - }, - { - "text": "run", - "in_reasons": 17 - }, - { - "text": "eventually", - "in_reasons": 0 - }, - { - "text": "cleaned", - "in_reasons": 0 - }, - { - "text": "up", - "in_reasons": 7 - } + "why does the wiki tree fetch only the requested number of levels": [ + 7, + 8, + 9, + 10, + 11, + 12, + 29, + 71, + 85, + 86, + 109, + 121, + 122, + 123, + 125, + 138, + 161, + 168, + 193, + 208, + 224, + 244, + 286, + 289, + 290, + 291, + 292, + 293, + 294, + 297, + 298, + 299, + 303, + 304, + 306, + 307, + 309, + 311, + 315, + 316, + 318, + 320, + 321, + 322, + 324, + 329, + 330, + 331, + 332, + 333, + 334, + 336, + 337, + 338, + 339, + 340, + 345, + 347, + 348, + 354, + 362, + 365, + 366, + 371, + 374, + 384, + 385, + 392, + 395, + 409, + 448, + 450, + 473, + 478, + 485, + 487, + 504, + 507, + 508, + 509, + 510, + 512, + 513, + 515, + 516, + 541, + 553, + 556, + 568, + 570, + 579, + 600, + 719, + 723, + 730, + 736, + 739, + 748, + 752, + 774, + 783, + 786, + 791, + 792, + 807, + 808, + 811, + 813, + 814, + 826, + 829, + 835, + 838, + 847, + 871, + 898, + 900, + 933, + 936, + 961, + 998, + 1024, + 1028, + 1046, + 1053, + 1062, + 1078, + 1080, + 1098, + 1100, + 1102, + 1111, + 1113, + 1121, + 1124, + 1135, + 1211, + 1242, + 1244, + 1275, + 1301, + 1326, + 1354, + 1374, + 1380, + 1404, + 1407, + 1418, + 1419, + 1424, + 1428, + 1475, + 1493, + 1500, + 1505, + 1510, + 1513, + 1526, + 1532, + 1534, + 1547, + 1554, + 1556, + 1562, + 1569, + 1577, + 1578, + 1579, + 1580, + 1581, + 1582, + 1583, + 1584, + 1585, + 1590, + 1591, + 1592, + 1596, + 1597, + 1599, + 1603, + 1604, + 1605, + 1608, + 1611, + 1613, + 1614, + 1615, + 1616, + 1617, + 1619, + 1635, + 1636, + 1639, + 1640, + 1648, + 1732, + 1748, + 1800, + 1826, + 1849, + 1852, + 1853, + 1854, + 1857, + 1858, + 1859, + 1861, + 1868, + 1870, + 1879, + 1880, + 1881, + 1885, + 1886, + 1888, + 1889, + 1892, + 1895, + 1897, + 1898, + 1899, + 1900, + 1901, + 1902, + 1903 ], - "hits": [ - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "crashed", - "run", - "up" - ] - }, - { - "id": 448, - "name": "repoLockMetadata", - "qualified_name": "gitrepo.repoLockMetadata", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "persist enough lock provenance to detect and clean up stale repository lock files safely.", - "reason": "persist enough lock provenance to detect and clean up stale repository lock files safely.", - "terms": [ - "lock", - "file", - "up" - ] - }, - { - "id": 1724, - "name": "sweepStalePostgresSchemas", - "qualified_name": "dbtest.sweepStalePostgresSchemas", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "bound how long a schema abandoned by a crashed run can survive.", - "reason": "bound how long a schema abandoned by a crashed run can survive.", - "terms": [ - "crashed", - "run" - ] - }, - { - "id": 453, - "name": "writeRepoLockMetadata", - "qualified_name": "gitrepo.writeRepoLockMetadata", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "write lock ownership metadata so stale lock cleanup can be diagnosed from the filesystem.", - "reason": "write lock ownership metadata so stale lock cleanup can be diagnosed from the filesystem.", - "terms": [ - "lock", - "file" - ] - }, - { - "id": 455, - "name": "lockFileName", - "qualified_name": "gitrepo.lockFileName", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "convert repository names into stable lock-safe filenames.", - "reason": "convert repository names into stable lock-safe filenames.", - "terms": [ - "lock", - "file" - ] - }, - { - "id": 1043, - "name": "pruneManaged", - "qualified_name": "docs.Generator.pruneManaged", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "clean up stale generated docs without touching manually created files", - "reason": "clean up stale generated docs without touching manually created files", - "terms": [ - "file", - "up" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "lock", - "file" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "file", - "run" - ] - }, - { - "id": 1909, - "name": "loadTree", - "qualified_name": "loadTree", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "load the active namespace's RAG tree into the left navigator.", - "reason": "load the active namespace's RAG tree into the left navigator.", - "terms": [ - "left" - ] - }, - { - "id": 1041, - "name": "loadManifest", - "qualified_name": "docs.Generator.loadManifest", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "restore the prior output file list so Run can compute stale files to prune", - "reason": "restore the prior output file list so Run can compute stale files to prune", - "terms": [ - "file", - "run" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "lock", - "file" - ] - }, - { - "id": 452, - "name": "acquireFilesystemLock", - "qualified_name": "gitrepo.acquireFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "reason": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "terms": [ - "lock", - "file" - ] - }, - { - "id": 480, - "name": "ResolveCCGRef", - "qualified_name": "graphgorm.Store.ResolveCCGRef", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "reason": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "terms": [ - "file", - "behind" - ] - }, - { - "id": 1434, - "name": "updateGraphWithoutTx", - "qualified_name": "workflow.Service.updateGraphWithoutTx", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "reason": "run incremental sync without a shared DB transaction while replaying spooled file batches to bound memory.", - "terms": [ - "file", - "run" - ] - }, - { - "id": 1467, - "name": "Checkout", - "qualified_name": "reposync.Checkout", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "isolate checkout locking and Git implementation from sync ordering policy.", - "reason": "isolate checkout locking and Git implementation from sync ordering policy.", - "terms": [ - "lock" - ] - }, - { - "id": 736, - "name": "packageEdgesOrDefault", - "qualified_name": "treesitter.packageEdgesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize package-level enrichment behind an optional semantics hook.", - "reason": "centralize package-level enrichment behind an optional semantics hook.", - "terms": [ - "behind" - ] - }, - { - "id": 1175, - "name": "dispatchForLanguage", - "qualified_name": "resolve.dispatchForLanguage", - "kind": "function", - "file_path": "internal/app/ingest/resolve/dispatch.go", - "intent": "centralize language-specific resolver lookup behind one internal seam.", - "reason": "centralize language-specific resolver lookup behind one internal seam.", - "terms": [ - "behind" - ] - }, - { - "id": 445, - "name": "NewCheckout", - "qualified_name": "gitrepo.NewCheckout", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "bind repository root, lock coordination, and transport authentication once at composition.", - "reason": "bind repository root, lock coordination, and transport authentication once at composition.", - "terms": [ - "lock" - ] - }, - { - "id": 845, - "name": "tryExtractPythonDocstring", - "qualified_name": "treesitter.tryExtractPythonDocstring", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_python.go", - "intent": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "reason": "encapsulate docstring acceptance rules so tests can lock the behavior precisely.", - "terms": [ - "lock" - ] - }, - { - "id": 957, - "name": "ImpactRadiusBounded", - "qualified_name": "impact.Analyzer.ImpactRadiusBounded", - "kind": "function", - "file_path": "internal/app/analyze/impact/impact.go", - "intent": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "reason": "expose a limit-aware blast radius traversal for cost-sensitive callers", - "terms": [ - "lock" - ] - }, - { - "id": 497, - "name": "RelatedNodes", - "qualified_name": "graphgorm.Store.RelatedNodes", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/query.go", - "intent": "implement namespace-scoped relationship joins behind the analysis query repository.", - "reason": "implement namespace-scoped relationship joins behind the analysis query repository.", - "terms": [ - "behind" - ] - }, - { - "id": 572, - "name": "internal/adapters/outbound/reposyncgraph/updater.go", - "qualified_name": "internal/adapters/outbound/reposyncgraph/updater.go", - "kind": "file", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "behind" - ] - }, - { - "id": 573, - "name": "Updater", - "qualified_name": "reposyncgraph.Updater", - "kind": "class", - "file_path": "internal/adapters/outbound/reposyncgraph/updater.go", - "intent": "preserve ingest workflow composition behind the repository sync graph port.", - "reason": "preserve ingest workflow composition behind the repository sync graph port.", - "terms": [ - "behind" - ] - }, - { - "id": 733, - "name": "definitionNameOrDefault", - "qualified_name": "treesitter.definitionNameOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize per-language symbol-name normalization behind an optional hook.", - "reason": "centralize per-language symbol-name normalization behind an optional hook.", - "terms": [ - "behind" - ] - }, - { - "id": 734, - "name": "implementedTypesOrDefault", - "qualified_name": "treesitter.implementedTypesOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize query-captured implements relationships behind an optional language hook.", - "reason": "centralize query-captured implements relationships behind an optional language hook.", - "terms": [ - "behind" - ] - }, - { - "id": 745, - "name": "goAssertionCallRewriter", - "qualified_name": "treesitter.goAssertionCallRewriter", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "keep Go assertion call inference behind the language semantics hook.", - "reason": "keep Go assertion call inference behind the language semantics hook.", - "terms": [ - "behind" - ] - }, - { - "id": 1276, - "name": "ResolveInterfaceDispatch", - "qualified_name": "resolve.goLanguageDispatch.ResolveInterfaceDispatch", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_go.go", - "intent": "preserve best-effort Go polymorphic dispatch behind the language seam.", - "reason": "preserve best-effort Go polymorphic dispatch behind the language seam.", - "terms": [ - "behind" - ] - }, - { - "id": 191, - "name": "getImpactRadius", - "qualified_name": "mcp.handlers.getImpactRadius", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_analysis.go", - "intent": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "reason": "explore the blast radius of a node change so reviewers can prioritize follow-up checks.", - "terms": [ - "up" - ] - }, - { - "id": 618, - "name": "PurgeNamespace", - "qualified_name": "searchsql.SQLiteBackend.PurgeNamespace", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "reason": "Cleans up stale FTS rows even in paths without a rebuild, such as namespace deletion.", - "terms": [ - "up" - ] - }, - { - "id": 541, - "name": "WithTx", - "qualified_name": "graphgorm.Store.WithTx", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "allow multiple repository operations to run atomically as one unit.", - "reason": "allow multiple repository operations to run atomically as one unit.", - "terms": [ - "run" - ] - }, - { - "id": 444, - "name": "Checkout", - "qualified_name": "gitrepo.Checkout", - "kind": "class", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "expose one locked checkout capability while retaining go-git types inside the adapter.", - "reason": "expose one locked checkout capability while retaining go-git types inside the adapter.", - "terms": [ - "lock" - ] - }, - { - "id": 1628, - "name": "nextActions", - "qualified_name": "wire.nextActions", - "kind": "function", - "file_path": "internal/app/search/wire/wire.go", - "intent": "make the follow-up step obvious enough that an agent does not have to invent one.", - "reason": "make the follow-up step obvious enough that an agent does not have to invent one.", - "terms": [ - "up" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "run" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "run" - ] - }, - { - "id": 1502, - "name": "worker", - "qualified_name": "reposync.SyncQueue.worker", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "run the main worker loop that drains deduplicated repository work items.", - "reason": "run the main worker loop that drains deduplicated repository work items.", - "terms": [ - "run" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "run" - ] - }, - { - "id": 366, - "name": "retrieveResult", - "qualified_name": "wikiserver.retrieveResult", - "kind": "class", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "keep the browser contract stable while the answer behind it changes pipelines.", - "reason": "keep the browser contract stable while the answer behind it changes pipelines.", - "terms": [ - "behind" - ] - }, - { - "id": 1703, - "name": "Open", - "qualified_name": "db.Open", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "centralize driver-specific GORM initialization and pool setup behind one entry point.", - "reason": "centralize driver-specific GORM initialization and pool setup behind one entry point.", - "terms": [ - "behind" - ] - }, - { - "id": 254, - "name": "getNode", - "qualified_name": "mcp.handlers.getNode", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "look up a node by qualified name so callers can retrieve its core identity and location metadata.", - "reason": "look up a node by qualified name so callers can retrieve its core identity and location metadata.", - "terms": [ - "up" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "run" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "run" - ] - }, - { - "id": 273, - "name": "applyNamespace", - "qualified_name": "mcp.handlers.applyNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "attach the requested namespace to context before downstream stores and analyzers run.", - "reason": "attach the requested namespace to context before downstream stores and analyzers run.", - "terms": [ - "run" - ] - }, - { - "id": 743, - "name": "EnrichDefinition", - "qualified_name": "treesitter.GoSemantics.EnrichDefinition", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_go.go", - "intent": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "reason": "move Go definition enrichment out of Walker and behind an optional semantics hook.", - "terms": [ - "behind" - ] - }, - { - "id": 1266, - "name": "explicitOwnerMethodSelector", - "qualified_name": "resolve.explicitOwnerMethodSelector", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve_explicit_owner.go", - "intent": "gate explicit-owner dispatch behind syntactic selectors that look like type-owned method calls.", - "reason": "gate explicit-owner dispatch behind syntactic selectors that look like type-owned method calls.", - "terms": [ - "behind" - ] - }, - { - "id": 1378, - "name": "packageEdgeBuilder", - "qualified_name": "workflow.Service.packageEdgeBuilder", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "reason": "keep package semantic enrichment behind the parser port instead of importing a parser adapter.", - "terms": [ - "behind" - ] - }, - { - "id": 89, - "name": "internal/adapters/inbound/cli/migrate.go", - "qualified_name": "internal/adapters/inbound/cli/migrate.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "run" - ] - }, - { - "id": 90, - "name": "MigrateConfig", - "qualified_name": "cli.MigrateConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "run" - ] - }, - { - "id": 1007, - "name": "SyncNamespace", - "qualified_name": "crossref.Service.SyncNamespace", - "kind": "function", - "file_path": "internal/app/crossref/service.go", - "intent": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "reason": "run after a build/update commit so cross-namespace links reflect the namespace's new node identity.", - "terms": [ - "run" - ] - }, - { - "id": 634, - "name": "createSQLiteFTSTable", - "qualified_name": "searchsql.createSQLiteFTSTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "reason": "create the namespace-aware SQLite FTS table shape used by both first-run migration and legacy upgrade flows.", - "terms": [ - "run" - ] - }, - { - "id": 1223, - "name": "resolveImportsFrom", - "qualified_name": "resolve.resolveImportsFrom", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link importing files to their target packages or files.", - "reason": "link importing files to their target packages or files.", - "terms": [ - "file" - ] - } - ] - }, - "why must the database schema be migrated before the server will run": { - "corpus": 1901, - "terms": [ - { - "text": "must", - "in_reasons": 22 - }, - { - "text": "database", - "in_reasons": 34 - }, - { - "text": "schema", - "in_reasons": 31 - }, - { - "text": "migrated", - "in_reasons": 0 - }, - { - "text": "before", - "in_reasons": 85 - }, - { - "text": "server", - "in_reasons": 34 - }, - { - "text": "run", - "in_reasons": 17 - } + "why is a cross-project link still dead after the target project was rebuilt": [ + 20, + 22, + 25, + 27, + 109, + 111, + 126, + 138, + 151, + 160, + 172, + 174, + 188, + 193, + 212, + 244, + 300, + 304, + 318, + 331, + 365, + 370, + 400, + 411, + 415, + 416, + 418, + 419, + 420, + 421, + 423, + 424, + 427, + 428, + 431, + 434, + 435, + 436, + 502, + 503, + 557, + 603, + 604, + 607, + 610, + 612, + 613, + 639, + 645, + 646, + 660, + 664, + 698, + 702, + 705, + 720, + 732, + 753, + 757, + 769, + 770, + 815, + 862, + 883, + 890, + 891, + 939, + 942, + 944, + 948, + 952, + 954, + 956, + 958, + 959, + 960, + 961, + 963, + 964, + 979, + 1001, + 1028, + 1030, + 1032, + 1049, + 1060, + 1062, + 1067, + 1071, + 1090, + 1118, + 1120, + 1138, + 1139, + 1154, + 1169, + 1171, + 1177, + 1183, + 1196, + 1215, + 1227, + 1244, + 1261, + 1275, + 1278, + 1284, + 1285, + 1300, + 1302, + 1305, + 1308, + 1310, + 1323, + 1324, + 1329, + 1331, + 1333, + 1336, + 1337, + 1373, + 1377, + 1378, + 1402, + 1415, + 1426, + 1447, + 1457, + 1458, + 1538, + 1603, + 1752, + 1754, + 1755, + 1777, + 1787, + 1788, + 1818, + 1819, + 1824, + 1873, + 1884, + 1893 ], - "hits": [ - { - "id": 1723, - "name": "sweepStalePostgresSchemasOnce", - "qualified_name": "dbtest.sweepStalePostgresSchemasOnce", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "stop schemas from a crashed run piling up without touching a running test's schema.", - "reason": "stop schemas from a crashed run piling up without touching a running test's schema.", - "terms": [ - "schema", - "run" - ] - }, - { - "id": 1724, - "name": "sweepStalePostgresSchemas", - "qualified_name": "dbtest.sweepStalePostgresSchemas", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "bound how long a schema abandoned by a crashed run can survive.", - "reason": "bound how long a schema abandoned by a crashed run can survive.", - "terms": [ - "schema", - "run" - ] - }, - { - "id": 60, - "name": "main", - "qualified_name": "main.main", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "reason": "run the self-hosted HTTP MCP/webhook server as a dedicated binary.", - "terms": [ - "server", - "run" - ] - }, - { - "id": 1464, - "name": "parseCloneBaseURL", - "qualified_name": "reposync.parseCloneBaseURL", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "reason": "ensure each configured base URL is an absolute URL with scheme and host before it is used to construct clone targets.", - "terms": [ - "must", - "before" - ] - }, - { - "id": 89, - "name": "internal/adapters/inbound/cli/migrate.go", - "qualified_name": "internal/adapters/inbound/cli/migrate.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "schema", - "run" - ] - }, - { - "id": 90, - "name": "MigrateConfig", - "qualified_name": "cli.MigrateConfig", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "reason": "carry the driver, DSN, and migration source needed for one explicit schema migration run.", - "terms": [ - "schema", - "run" - ] - }, - { - "id": 1883, - "name": "Init", - "qualified_name": "runtime.Runtime.Init", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "reason": "keep schema validation and graph storage wiring identical across ccg and ccg-server.", - "terms": [ - "schema", - "server" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "must", - "before" - ] - }, - { - "id": 273, - "name": "applyNamespace", - "qualified_name": "mcp.handlers.applyNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "attach the requested namespace to context before downstream stores and analyzers run.", - "reason": "attach the requested namespace to context before downstream stores and analyzers run.", - "terms": [ - "before", - "run" - ] - }, - { - "id": 1881, - "name": "NewRuntime", - "qualified_name": "runtime.NewRuntime", - "kind": "function", - "file_path": "internal/runtime/runtime.go", - "intent": "initialize parser walkers once before command-specific database setup runs.", - "reason": "initialize parser walkers once before command-specific database setup runs.", - "terms": [ - "database", - "before" - ] - }, - { - "id": 285, - "name": "validatePositiveLimit", - "qualified_name": "mcp.validatePositiveLimit", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handlers.go", - "intent": "reject zero and negative list limits before handlers hit database queries.", - "reason": "reject zero and negative list limits before handlers hit database queries.", - "terms": [ - "database", - "before" - ] - }, - { - "id": 1765, - "name": "sqliteIndexExists", - "qualified_name": "migration.sqliteIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "index presence can be verified during schema parity checks before query paths use them.", - "reason": "index presence can be verified during schema parity checks before query paths use them.", - "terms": [ - "schema", - "before" - ] - }, - { - "id": 539, - "name": "UpsertAnnotations", - "qualified_name": "graphgorm.Store.UpsertAnnotations", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "reason": "collapse per-annotation lookup and write round trips into bounded batch operations.", - "terms": [ - "must", - "before" - ] - }, - { - "id": 1776, - "name": "postgresTriggerExists", - "qualified_name": "migration.postgresTriggerExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다.", - "reason": "검색 트리거 같은 운영 필수 트리거 존재 여부를 내부 helper로 조회한다.", - "terms": [ - "database", - "schema" - ] - }, - { - "id": 1462, - "name": "normalizeRepoPath", - "qualified_name": "reposync.normalizeRepoPath", - "kind": "function", - "file_path": "internal/app/reposync/cloneurl.go", - "intent": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL.", - "reason": "reject repo identifiers that could traverse outside the intended path when joined onto a base URL.", - "terms": [ - "must" - ] - }, - { - "id": 127, - "name": "DefaultConfig", - "qualified_name": "server.DefaultConfig", - "kind": "function", - "file_path": "internal/adapters/inbound/http/config.go", - "intent": "centralize default server flag values for ccg-server.", - "reason": "centralize default server flag values for ccg-server.", - "terms": [ - "server" - ] - }, - { - "id": 1888, - "name": "internal/safepath/namespace.go", - "qualified_name": "internal/safepath/namespace.go", - "kind": "file", - "file_path": "internal/safepath/namespace.go", - "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "terms": [ - "must" - ] - }, - { - "id": 1889, - "name": "ValidateNamespacePath", - "qualified_name": "safepath.ValidateNamespacePath", - "kind": "function", - "file_path": "internal/safepath/namespace.go", - "intent": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "reason": "keep lexical namespace traversal validation beside symlink and canonical containment safeguards.", - "terms": [ - "must" - ] - }, - { - "id": 1770, - "name": "postgresColumnNotNull", - "qualified_name": "migration.postgresColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "reason": "PostgreSQL 컬럼 nullability 검증을 위한 내부 helper를 제공한다.", - "terms": [ - "schema" - ] - }, - { - "id": 1774, - "name": "postgresIndexExists", - "qualified_name": "migration.postgresIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "reason": "검색 인덱스와 운영 필수 인덱스 존재 여부를 내부 helper로 조회한다.", - "terms": [ - "schema" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "run" - ] - }, - { - "id": 258, - "name": "queryGraph", - "qualified_name": "mcp.handlers.queryGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_query.go", - "intent": "expose repeated graph traversals through one pattern-driven tool entry point.", - "reason": "expose repeated graph traversals through one pattern-driven tool entry point.", - "terms": [ - "must" - ] - }, - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "must" - ] - }, - { - "id": 541, - "name": "WithTx", - "qualified_name": "graphgorm.Store.WithTx", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "allow multiple repository operations to run atomically as one unit.", - "reason": "allow multiple repository operations to run atomically as one unit.", - "terms": [ - "run" - ] - }, - { - "id": 91, - "name": "newMigrateCmd", - "qualified_name": "cli.newMigrateCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/migrate.go", - "intent": "separate schema changes from normal runtime startup.", - "reason": "separate schema changes from normal runtime startup.", - "terms": [ - "schema" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "before" - ] - }, - { - "id": 590, - "name": "matchRows", - "qualified_name": "searchsql.PostgresBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/postgres.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "run" - ] - }, - { - "id": 624, - "name": "matchRows", - "qualified_name": "searchsql.SQLiteBackend.matchRows", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let Query run the same retrieval twice with a different expression.", - "reason": "let Query run the same retrieval twice with a different expression.", - "terms": [ - "run" - ] - }, - { - "id": 1502, - "name": "worker", - "qualified_name": "reposync.SyncQueue.worker", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "run the main worker loop that drains deduplicated repository work items.", - "reason": "run the main worker loop that drains deduplicated repository work items.", - "terms": [ - "run" - ] - }, - { - "id": 1825, - "name": "SchemaVersion", - "qualified_name": "graph.SchemaVersion", - "kind": "class", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "let runtime commands fail fast when explicit migrations were not run.", - "reason": "let runtime commands fail fast when explicit migrations were not run.", - "terms": [ - "run" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "must" - ] - }, - { - "id": 1748, - "name": "CheckSchemaVersion", - "qualified_name": "migration.CheckSchemaVersion", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다.", - "reason": "schema_migrations 메타데이터가 현재 바이너리의 요구 버전과 호환되는지 확인한다.", - "terms": [ - "schema" - ] - }, - { - "id": 227, - "name": "derivedStateFlows", - "qualified_name": "mcp.derivedStateFlows", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_graph.go", - "intent": "describe flow-membership freshness so callers know when to re-run postprocess.", - "reason": "describe flow-membership freshness so callers know when to re-run postprocess.", - "terms": [ - "run" - ] - }, - { - "id": 62, - "name": "parseLogLevel", - "qualified_name": "main.parseLogLevel", - "kind": "function", - "file_path": "cmd/ccg-server/main.go", - "intent": "normalize server log-level input consistently with ccg.", - "reason": "normalize server log-level input consistently with ccg.", - "terms": [ - "server" - ] - }, - { - "id": 595, - "name": "NewReader", - "qualified_name": "searchsql.NewReader", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/retrieval.go", - "intent": "keep database handles out of application service construction.", - "reason": "keep database handles out of application service construction.", - "terms": [ - "database" - ] - }, - { - "id": 616, - "name": "Rebuild", - "qualified_name": "searchsql.SQLiteBackend.Rebuild", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "reason": "Synchronizes stored search documents and recorded reasons with the SQLite FTS indexes.", - "terms": [ - "must" - ] - }, - { - "id": 1155, - "name": "ParseCache", - "qualified_name": "ingest.ParseCache", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "reason": "make repeated full builds skip Tree-sitter work without coupling ingest to one cache backend.", - "terms": [ - "must" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "must" - ] - }, - { - "id": 1837, - "name": "Parse", - "qualified_name": "reference.Parse", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "reason": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "terms": [ - "must" - ] - }, - { - "id": 1387, - "name": "packageNodes", - "qualified_name": "workflow.packageNodes", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "project package metadata into the graph schema for persistence.", - "reason": "project package metadata into the graph schema for persistence.", - "terms": [ - "schema" - ] - }, - { - "id": 1826, - "name": "TableName", - "qualified_name": "graph.SchemaVersion.TableName", - "kind": "function", - "file_path": "internal/domain/graph/schema_version.go", - "intent": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "reason": "keep runtime schema checks aligned with explicit migration bookkeeping.", - "terms": [ - "schema" - ] - }, - { - "id": 913, - "name": "New", - "qualified_name": "changes.New", - "kind": "function", - "file_path": "internal/app/analyze/changes/service.go", - "intent": "wire database and git dependencies into a reusable analyzer", - "reason": "wire database and git dependencies into a reusable analyzer", - "terms": [ - "database" - ] - }, - { - "id": 967, - "name": "KindCount", - "qualified_name": "analyze.KindCount", - "kind": "class", - "file_path": "internal/app/analyze/ports.go", - "intent": "preserve database aggregate row ordering for CLI-compatible rendering.", - "reason": "preserve database aggregate row ordering for CLI-compatible rendering.", - "terms": [ - "database" - ] - }, - { - "id": 1391, - "name": "sortedPackageImportPaths", - "qualified_name": "workflow.sortedPackageImportPaths", - "kind": "function", - "file_path": "internal/app/ingest/workflow/packages.go", - "intent": "keep package-related database operations stable across build runs.", - "reason": "keep package-related database operations stable across build runs.", - "terms": [ - "database" - ] - }, - { - "id": 1517, - "name": "Sync", - "qualified_name": "reposync.Service.Sync", - "kind": "function", - "file_path": "internal/app/reposync/service.go", - "intent": "make repository synchronization ordering reusable outside HTTP server composition.", - "reason": "make repository synchronization ordering reusable outside HTTP server composition.", - "terms": [ - "server" - ] - }, - { - "id": 1856, - "name": "ServerSpan", - "qualified_name": "obs.ServerSpan", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "reason": "inbound HTTP 요청 처리를 공통 helper 하나로 server span화한다.", - "terms": [ - "server" - ] - }, - { - "id": 1947, - "name": "ContextResponse", - "qualified_name": "ContextResponse", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "return a server-assembled Markdown bundle for selected docs.", - "reason": "return a server-assembled Markdown bundle for selected docs.", - "terms": [ - "server" - ] - }, - { - "id": 527, - "name": "DeleteNodesByFile", - "qualified_name": "graphgorm.Store.DeleteNodesByFile", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "reason": "keep the single-file API compatible while delegating cleanup to the bounded batch path.", - "terms": [ - "must" - ] - }, - { - "id": 1041, - "name": "loadManifest", - "qualified_name": "docs.Generator.loadManifest", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "restore the prior output file list so Run can compute stale files to prune", - "reason": "restore the prior output file list so Run can compute stale files to prune", - "terms": [ - "run" - ] - }, - { - "id": 1716, - "name": "abort", - "qualified_name": "dbtest.postgresSchema.abort", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "avoid leaking a connection when the schema never became usable.", - "reason": "avoid leaking a connection when the schema never became usable.", - "terms": [ - "schema" - ] - } - ] - }, - "why was a push that only deleted a branch ignored": { - "corpus": 1901, - "terms": [ - { - "text": "push", - "in_reasons": 9 - }, - { - "text": "only", - "in_reasons": 85 - }, - { - "text": "deleted", - "in_reasons": 6 - }, - { - "text": "branch", - "in_reasons": 28 - }, - { - "text": "ignored", - "in_reasons": 3 - } + "why is a lock file left behind by a crashed run eventually cleaned up": [ + 2, + 42, + 43, + 61, + 121, + 145, + 147, + 150, + 169, + 170, + 178, + 184, + 192, + 204, + 224, + 248, + 249, + 250, + 311, + 313, + 314, + 328, + 334, + 336, + 346, + 352, + 364, + 365, + 367, + 375, + 380, + 390, + 391, + 394, + 397, + 398, + 399, + 400, + 401, + 424, + 426, + 437, + 443, + 444, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 483, + 491, + 501, + 502, + 510, + 512, + 514, + 518, + 519, + 533, + 566, + 572, + 582, + 596, + 609, + 612, + 613, + 614, + 615, + 616, + 618, + 619, + 620, + 625, + 631, + 632, + 634, + 642, + 646, + 647, + 658, + 665, + 669, + 670, + 678, + 679, + 681, + 687, + 688, + 690, + 721, + 790, + 819, + 823, + 829, + 855, + 863, + 869, + 909, + 937, + 941, + 956, + 965, + 974, + 984, + 987, + 988, + 989, + 990, + 991, + 998, + 1002, + 1032, + 1036, + 1038, + 1042, + 1043, + 1046, + 1049, + 1053, + 1054, + 1055, + 1059, + 1060, + 1062, + 1065, + 1068, + 1069, + 1071, + 1077, + 1078, + 1081, + 1085, + 1089, + 1097, + 1120, + 1125, + 1126, + 1131, + 1136, + 1137, + 1138, + 1139, + 1142, + 1153, + 1156, + 1160, + 1161, + 1169, + 1171, + 1172, + 1173, + 1174, + 1176, + 1180, + 1191, + 1214, + 1224, + 1234, + 1246, + 1248, + 1249, + 1253, + 1256, + 1257, + 1258, + 1259, + 1263, + 1264, + 1268, + 1278, + 1290, + 1292, + 1294, + 1296, + 1300, + 1301, + 1302, + 1303, + 1320, + 1322, + 1324, + 1325, + 1326, + 1329, + 1333, + 1334, + 1336, + 1351, + 1353, + 1356, + 1358, + 1366, + 1372, + 1373, + 1374, + 1376, + 1378, + 1379, + 1380, + 1420, + 1422, + 1455, + 1475, + 1483, + 1484, + 1488, + 1490, + 1495, + 1496, + 1512, + 1534, + 1558, + 1560, + 1570, + 1576, + 1577, + 1582, + 1587, + 1588, + 1589, + 1593, + 1594, + 1595, + 1599, + 1602, + 1603, + 1604, + 1608, + 1613, + 1614, + 1618, + 1620, + 1636, + 1646, + 1648, + 1665, + 1666, + 1767, + 1769, + 1770, + 1779, + 1791, + 1794, + 1839, + 1841, + 1842, + 1857, + 1866 ], - "hits": [ - { - "id": 341, - "name": "ServeHTTP", - "qualified_name": "webhook.WebhookHandler.ServeHTTP", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "reason": "turn GitHub or Gitea push deliveries into safe, filtered sync requests for the build pipeline.", - "terms": [ - "push", - "only", - "branch" - ] - }, - { - "id": 343, - "name": "isDeletedBranchPush", - "qualified_name": "webhook.isDeletedBranchPush", - "kind": "function", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "reason": "skip webhook pushes that only report branch deletion instead of a syncable commit head.", - "terms": [ - "push", - "only", - "branch" - ] - }, - { - "id": 1456, - "name": "AllowRuleOwners", - "qualified_name": "reposync.AllowRuleOwners", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "reason": "let server startup warn when repo-name namespace extraction is used with multi-owner webhook allowlists.", - "terms": [ - "only", - "ignored" - ] - }, - { - "id": 1171, - "name": "BatchIncrementalSyncer", - "qualified_name": "ingest.BatchIncrementalSyncer", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "prevent batch order from affecting cross-file edge resolution during large updates.", - "reason": "prevent batch order from affecting cross-file edge resolution during large updates.", - "terms": [ - "only", - "deleted" - ] - }, - { - "id": 1453, - "name": "IsAllowedBranch", - "qualified_name": "reposync.RepoFilter.IsAllowedBranch", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "reason": "combine repo allowlist and branch policy so webhook handlers can skip unsupported pushes cheaply.", - "terms": [ - "push", - "branch" - ] - }, - { - "id": 1053, - "name": "lintDocFiles", - "qualified_name": "docs.Generator.lintDocFiles", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "collect only the Markdown files that belong to the active docs namespace.", - "reason": "collect only the Markdown files that belong to the active docs namespace.", - "terms": [ - "only", - "ignored" - ] - }, - { - "id": 1496, - "name": "Add", - "qualified_name": "reposync.SyncQueue.Add", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "reason": "collapse repeated push events into one queued sync while preserving the newest branch and clone data.", - "terms": [ - "push", - "branch" - ] - }, - { - "id": 1437, - "name": "existingFilesMissingFromSet", - "qualified_name": "workflow.existingFilesMissingFromSet", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "reason": "detect confirmed deleted paths while preserving unreadable files whose current state is unknown.", - "terms": [ - "only", - "deleted" - ] - }, - { - "id": 528, - "name": "DeleteNodesByFiles", - "qualified_name": "graphgorm.Store.DeleteNodesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "reason": "replace per-file deletion round trips with one transaction and a fixed deletion sequence per path chunk.", - "terms": [ - "only", - "deleted" - ] - }, - { - "id": 530, - "name": "DeleteGraph", - "qualified_name": "graphgorm.Store.DeleteGraph", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "reason": "replace namespace-scoped state before a full rebuild or include_paths rebuild.", - "terms": [ - "deleted" - ] - }, - { - "id": 1428, - "name": "classifyUpdateSnapshot", - "qualified_name": "workflow.classifyUpdateSnapshot", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "reason": "keep Added/Modified/Skipped/Deleted based on source changes rather than the chosen persistence path.", - "terms": [ - "deleted" - ] - }, - { - "id": 1114, - "name": "syncWithExisting", - "qualified_name": "incremental.Syncer.syncWithExisting", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "reason": "compare hashes for known files, parse new/changed ones, and remove deleted entries in one pass.", - "terms": [ - "deleted" - ] - }, - { - "id": 1495, - "name": "NewSyncQueueWithConfig", - "qualified_name": "reposync.NewSyncQueueWithConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "reason": "coalesce bursty webhook pushes per repository while still allowing different repos to sync concurrently.", - "terms": [ - "push" - ] - }, - { - "id": 628, - "name": "insertSQLiteFTSBatch", - "qualified_name": "searchsql.insertSQLiteFTSBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many rows in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "push" - ] - }, - { - "id": 629, - "name": "insertSQLiteIntentBatch", - "qualified_name": "searchsql.insertSQLiteIntentBatch", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "reason": "push many reasons in a single statement so rebuild paths avoid per-row round trips.", - "terms": [ - "push" - ] - }, - { - "id": 340, - "name": "pushEvent", - "qualified_name": "webhook.pushEvent", - "kind": "class", - "file_path": "internal/adapters/inbound/webhook/handler.go", - "intent": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch.", - "reason": "decode the subset of GitHub/Gitea push payload fields the handler needs for filtering and dispatch.", - "terms": [ - "push" - ] - }, - { - "id": 577, - "name": "Start", - "qualified_name": "reposyncobs.Hooks.Start", - "kind": "function", - "file_path": "internal/adapters/outbound/reposyncobs/hooks.go", - "intent": "attach repository and branch attributes to app-owned queue operations.", - "reason": "attach repository and branch attributes to app-owned queue operations.", - "terms": [ - "branch" - ] - }, - { - "id": 710, - "name": "DefinitionSemantics", - "qualified_name": "treesitter.DefinitionSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages enrich parsed definitions without adding language branches to Walker.", - "reason": "let languages enrich parsed definitions without adding language branches to Walker.", - "terms": [ - "branch" - ] - }, - { - "id": 714, - "name": "CommentSemantics", - "qualified_name": "treesitter.CommentSemantics", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let languages contribute docstrings or similar constructs without Walker language branches.", - "reason": "let languages contribute docstrings or similar constructs without Walker language branches.", - "terms": [ - "branch" - ] - }, - { - "id": 1455, - "name": "ParseRepoRule", - "qualified_name": "reposync.ParseRepoRule", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "reason": "preserve compact CLI config while still supporting per-repository branch restrictions.", - "terms": [ - "branch" - ] - }, - { - "id": 180, - "name": "branchNameForRef", - "qualified_name": "mcp.branchNameForRef", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "normalize git reference names into human-readable branch labels inside evidence metadata.", - "reason": "normalize git reference names into human-readable branch labels inside evidence metadata.", - "terms": [ - "branch" - ] - }, - { - "id": 457, - "name": "CloneOrPull", - "qualified_name": "gitrepo.CloneOrPull", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "give webhook handlers a branch-agnostic entry point for standard repo refresh.", - "reason": "give webhook handlers a branch-agnostic entry point for standard repo refresh.", - "terms": [ - "branch" - ] - }, - { - "id": 717, - "name": "SemanticContext", - "qualified_name": "treesitter.SemanticContext", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "avoid expanding Walker with one-off language branches as graph inference grows.", - "reason": "avoid expanding Walker with one-off language branches as graph inference grows.", - "terms": [ - "branch" - ] - }, - { - "id": 1451, - "name": "IsAllowed", - "qualified_name": "reposync.RepoFilter.IsAllowed", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "let callers gate repository-level sync before looking at branch-specific restrictions.", - "reason": "let callers gate repository-level sync before looking at branch-specific restrictions.", - "terms": [ - "branch" - ] - }, - { - "id": 1452, - "name": "IsAllowedRef", - "qualified_name": "reposync.RepoFilter.IsAllowedRef", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "reject non-branch webhook refs before they can enter the sync pipeline.", - "reason": "reject non-branch webhook refs before they can enter the sync pipeline.", - "terms": [ - "branch" - ] - }, - { - "id": 179, - "name": "namespaceGitEvidence", - "qualified_name": "mcp.namespaceGitEvidence", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/evidence.go", - "intent": "summarize git branch, commit, remote, and dirty state for namespace-scoped evidence blocks.", - "reason": "summarize git branch, commit, remote, and dirty state for namespace-scoped evidence blocks.", - "terms": [ - "branch" - ] - }, - { - "id": 446, - "name": "Sync", - "qualified_name": "gitrepo.Checkout.Sync", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "make the requested namespace checkout match the admitted remote branch before graph update.", - "reason": "make the requested namespace checkout match the admitted remote branch before graph update.", - "terms": [ - "branch" - ] - }, - { - "id": 463, - "name": "fetchOptions", - "qualified_name": "gitrepo.fetchOptions", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "reason": "build fetch options that keep sync traffic branch-scoped and shallow when possible.", - "terms": [ - "branch" - ] - }, - { - "id": 715, - "name": "CallRewriter", - "qualified_name": "treesitter.CallRewriter", - "kind": "type", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "reason": "let language specs recover dynamic dispatch targets without adding language branches to Walker.", - "terms": [ - "branch" - ] - }, - { - "id": 866, - "name": "rustMatchingBrace", - "qualified_name": "treesitter.rustMatchingBrace", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_rust.go", - "intent": "parse nested Rust use trees without confusing sibling branches for the current scope.", - "reason": "parse nested Rust use trees without confusing sibling branches for the current scope.", - "terms": [ - "branch" - ] - }, - { - "id": 1836, - "name": "Is", - "qualified_name": "reference.Is", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "let callers branch between local @see values and cross-namespace CCG refs cheaply.", - "reason": "let callers branch between local @see values and cross-namespace CCG refs cheaply.", - "terms": [ - "branch" - ] - }, - { - "id": 462, - "name": "syncRepoBranch", - "qualified_name": "gitrepo.syncRepoBranch", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds.", - "reason": "hard-reset an existing checkout to the latest remote branch head for deterministic rebuilds.", - "terms": [ - "branch" - ] - }, - { - "id": 635, - "name": "sqliteTableExists", - "qualified_name": "searchsql.sqliteTableExists", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "reason": "let migration code branch on table presence without depending on GORM AutoMigrate side effects.", - "terms": [ - "branch" - ] - }, - { - "id": 770, - "name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "qualified_name": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "kind": "file", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "terms": [ - "branch" - ] - }, - { - "id": 771, - "name": "TypeScriptSemantics", - "qualified_name": "treesitter.TypeScriptSemantics", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/semantics_js_ts.go", - "intent": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "reason": "emit extends and implements relationships for TypeScript classes without adding language branches to Walker.", - "terms": [ - "branch" - ] - }, - { - "id": 675, - "name": "pathBaseName", - "qualified_name": "treesitter.pathBaseName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/package_discovery.go", - "intent": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "reason": "derive the short package name from an import path without introducing language-specific branches elsewhere.", - "terms": [ - "branch" - ] - }, - { - "id": 1454, - "name": "matchBranchPatterns", - "qualified_name": "reposync.matchBranchPatterns", - "kind": "function", - "file_path": "internal/app/reposync/admission.go", - "intent": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites.", - "reason": "evaluate branch globs consistently across repo rules without duplicating path-match logic at call sites.", - "terms": [ - "branch" - ] - }, - { - "id": 948, - "name": "TraceFlow", - "qualified_name": "flow.Tracer.TraceFlow", - "kind": "function", - "file_path": "internal/app/analyze/flow/flow.go", - "intent": "capture the reachable call chain from one entry node as a flow", - "reason": "capture the reachable call chain from one entry node as a flow", - "terms": [ - "only" - ] - }, - { - "id": 441, - "name": "Resolve", - "qualified_name": "gitrepo.GitAuth.Resolve", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/auth.go", - "intent": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "reason": "allow webhook sync to switch between SSH and GitHub App token auth without branching at call sites.", - "terms": [ - "branch" - ] - }, - { - "id": 1447, - "name": "repoFilterRule", - "qualified_name": "reposync.repoFilterRule", - "kind": "class", - "file_path": "internal/app/reposync/admission.go", - "intent": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local.", - "reason": "keep branch policy attached to the rule that allowed the repo so order-sensitive evaluation stays local.", - "terms": [ - "branch" - ] - }, - { - "id": 538, - "name": "UpsertAnnotation", - "qualified_name": "graphgorm.Store.UpsertAnnotation", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "reason": "keep the single-annotation API compatible while delegating persistence to the batch path.", - "terms": [ - "only" - ] - }, - { - "id": 1547, - "name": "Fields", - "qualified_name": "identtoken.Fields", - "kind": "function", - "file_path": "internal/app/search/identtoken/identtoken.go", - "intent": "expose original-case terms; lowercasing happens per consumer.", - "reason": "expose original-case terms; lowercasing happens per consumer.", - "terms": [ - "only" - ] - }, - { - "id": 1109, - "name": "Sync", - "qualified_name": "incremental.Syncer.Sync", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "run incremental parsing when only current files are known", - "reason": "run incremental parsing when only current files are known", - "terms": [ - "only" - ] - }, - { - "id": 1465, - "name": "internal/app/reposync/ports.go", - "qualified_name": "internal/app/reposync/ports.go", - "kind": "file", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "only" - ] - }, - { - "id": 1466, - "name": "CheckoutRequest", - "qualified_name": "reposync.CheckoutRequest", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "carry only trusted admission output into the checkout adapter.", - "reason": "carry only trusted admission output into the checkout adapter.", - "terms": [ - "only" - ] - }, - { - "id": 1471, - "name": "UpdateStats", - "qualified_name": "reposync.UpdateStats", - "kind": "class", - "file_path": "internal/app/reposync/ports.go", - "intent": "report only update counts needed by repository sync observability.", - "reason": "report only update counts needed by repository sync observability.", - "terms": [ - "only" - ] - }, - { - "id": 1475, - "name": "Invalidate", - "qualified_name": "reposync.CacheInvalidatorFunc.Invalidate", - "kind": "function", - "file_path": "internal/app/reposync/ports.go", - "intent": "invoke the configured cache invalidation only when one exists.", - "reason": "invoke the configured cache invalidation only when one exists.", - "terms": [ - "only" - ] - }, - { - "id": 1524, - "name": "languageAlias", - "qualified_name": "document.languageAlias", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "preserve language-name recall for extension-only file paths.", - "reason": "preserve language-name recall for extension-only file paths.", - "terms": [ - "only" - ] - }, - { - "id": 171, - "name": "AnalysisToolsDeps", - "qualified_name": "mcp.AnalysisToolsDeps", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "group only configured application analyzers and their read-model port.", - "reason": "group only configured application analyzers and their read-model port.", - "terms": [ - "only" - ] - }, - { - "id": 531, - "name": "UpsertEdges", - "qualified_name": "graphgorm.Store.UpsertEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/store.go", - "intent": "apply graph relationships in bulk without duplicates.", - "reason": "apply graph relationships in bulk without duplicates.", - "terms": [ - "only" - ] - } - ] - }, - "why was the wiki index never left half-written after the process died": { - "corpus": 1901, - "terms": [ - { - "text": "wiki", - "in_reasons": 82 - }, - { - "text": "index", - "in_reasons": 61 - }, - { - "text": "never", - "in_reasons": 17 - }, - { - "text": "left", - "in_reasons": 1 - }, - { - "text": "half", - "in_reasons": 3 - }, - { - "text": "written", - "in_reasons": 4 - }, - { - "text": "after", - "in_reasons": 28 - }, - { - "text": "process", - "in_reasons": 13 - }, - { - "text": "died", - "in_reasons": 0 - } + "why must the database schema be migrated before the server will run": [ + 2, + 3, + 4, + 30, + 31, + 42, + 43, + 44, + 63, + 64, + 65, + 79, + 80, + 82, + 84, + 115, + 150, + 158, + 171, + 172, + 174, + 178, + 182, + 183, + 184, + 192, + 210, + 224, + 226, + 239, + 246, + 249, + 251, + 252, + 254, + 267, + 268, + 269, + 270, + 287, + 290, + 292, + 293, + 301, + 308, + 311, + 363, + 381, + 392, + 396, + 397, + 410, + 439, + 444, + 467, + 471, + 474, + 475, + 476, + 478, + 487, + 489, + 491, + 495, + 528, + 532, + 533, + 537, + 564, + 571, + 572, + 575, + 581, + 582, + 588, + 589, + 591, + 638, + 644, + 656, + 700, + 720, + 724, + 744, + 762, + 764, + 799, + 809, + 846, + 851, + 860, + 866, + 867, + 885, + 910, + 915, + 917, + 918, + 919, + 956, + 984, + 988, + 1027, + 1038, + 1053, + 1064, + 1077, + 1079, + 1099, + 1103, + 1111, + 1112, + 1121, + 1147, + 1167, + 1198, + 1202, + 1205, + 1209, + 1216, + 1222, + 1233, + 1237, + 1240, + 1257, + 1262, + 1265, + 1273, + 1283, + 1285, + 1286, + 1290, + 1296, + 1317, + 1331, + 1333, + 1335, + 1356, + 1372, + 1373, + 1376, + 1385, + 1393, + 1396, + 1403, + 1406, + 1411, + 1412, + 1415, + 1416, + 1417, + 1445, + 1450, + 1455, + 1469, + 1470, + 1484, + 1504, + 1529, + 1546, + 1618, + 1630, + 1631, + 1647, + 1649, + 1651, + 1653, + 1654, + 1655, + 1656, + 1657, + 1658, + 1659, + 1660, + 1661, + 1663, + 1664, + 1665, + 1666, + 1667, + 1692, + 1711, + 1717, + 1722, + 1725, + 1727, + 1728, + 1753, + 1777, + 1779, + 1780, + 1786, + 1790, + 1809, + 1822, + 1823, + 1826, + 1830, + 1831, + 1833, + 1839, + 1841, + 1842, + 1843, + 1851, + 1879, + 1880, + 1888, + 1889, + 1894, + 1906 ], - "hits": [ - { - "id": 630, - "name": "buildSQLiteIntentInsert", - "qualified_name": "searchsql.buildSQLiteIntentInsert", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "keep the intent index limited to reasons that were actually written down.", - "reason": "keep the intent index limited to reasons that were actually written down.", - "terms": [ - "index", - "written" - ] - }, - { - "id": 1018, - "name": "declarationKinds", - "qualified_name": "describe.declarationKinds", - "kind": "function", - "file_path": "internal/app/describe/describe.go", - "intent": "keep \"what is written here\" separate from \"where it is written\".", - "reason": "keep \"what is written here\" separate from \"where it is written\".", - "terms": [ - "written" - ] - }, - { - "id": 1162, - "name": "SearchWriter", - "qualified_name": "ingest.SearchWriter", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "expose full and scoped search rebuilds as indivisible application operations.", - "reason": "expose full and scoped search rebuilds as indivisible application operations.", - "terms": [ - "index", - "half" - ] - }, - { - "id": 1125, - "name": "releaseContent", - "qualified_name": "incremental.releaseContent", - "kind": "function", - "file_path": "internal/app/ingest/incremental/incremental.go", - "intent": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "reason": "prevent the FileInfo map from holding all source bytes after a file has been processed.", - "terms": [ - "after", - "process" - ] - }, - { - "id": 156, - "name": "Flush", - "qualified_name": "mcp.Cache.Flush", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/cache.go", - "intent": "Invalidates all cached read results after a graph or index update.", - "reason": "Invalidates all cached read results after a graph or index update.", - "terms": [ - "index", - "after" - ] - }, - { - "id": 221, - "name": "resolveSafeRoot", - "qualified_name": "mcp.resolveSafeRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "reason": "normalize a docs/index root to an absolute, symlink-evaluated path before path checks.", - "terms": [ - "index", - "after" - ] - }, - { - "id": 1555, - "name": "Coverage", - "qualified_name": "intent.Coverage", - "kind": "class", - "file_path": "internal/app/search/intent/intent.go", - "intent": "let an answer say whether it came back empty because nobody wrote a reason down.", - "reason": "let an answer say whether it came back empty because nobody wrote a reason down.", - "terms": [ - "index", - "never" - ] - }, - { - "id": 1909, - "name": "loadTree", - "qualified_name": "loadTree", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "load the active namespace's RAG tree into the left navigator.", - "reason": "load the active namespace's RAG tree into the left navigator.", - "terms": [ - "left" - ] - }, - { - "id": 615, - "name": "migrateIntentTable", - "qualified_name": "searchsql.SQLiteBackend.migrateIntentTable", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sqlite.go", - "intent": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "reason": "give recorded reasons their own index so an intent question is never scored against identifier text.", - "terms": [ - "index", - "never" - ] - }, - { - "id": 554, - "name": "FindUnresolvedEdgesByFiles", - "qualified_name": "graphgorm.Store.FindUnresolvedEdgesByFiles", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "reason": "replay import warmup and related edges together after reverse-index selection narrows source files.", - "terms": [ - "index", - "after" - ] - }, - { - "id": 407, - "name": "safeAbsolutePath", - "qualified_name": "wikiserver.safeAbsolutePath", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "validate an absolute wiki-index path against one approved root.", - "reason": "validate an absolute wiki-index path against one approved root.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 425, - "name": "WikiIndexWriter", - "qualified_name": "contentfiles.WikiIndexWriter", - "kind": "class", - "file_path": "internal/adapters/outbound/contentfiles/wiki.go", - "intent": "prevent readers from observing partial built-in Wiki index snapshots.", - "reason": "prevent readers from observing partial built-in Wiki index snapshots.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 69, - "name": "resolveRagIndexDir", - "qualified_name": "cli.resolveRagIndexDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep docs-generated Wiki output aligned with the configured index directory.", - "reason": "keep docs-generated Wiki output aligned with the configured index directory.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 219, - "name": "ragIndexRoot", - "qualified_name": "mcp.handlers.ragIndexRoot", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_docs.go", - "intent": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "reason": "resolve the base directory that stores generated documentation and Wiki index artifacts.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 1436, - "name": "affectedUpdateFiles", - "qualified_name": "workflow.affectedUpdateFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/update.go", - "intent": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "reason": "identify which files contributed nodes that need to be re-indexed for search after an incremental update.", - "terms": [ - "index", - "after" - ] - }, - { - "id": 1521, - "name": "BuildReasons", - "qualified_name": "document.BuildReasons", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "reason": "index each reason a node exists as its own document, so writing one reason down never costs another its score.", - "terms": [ - "index", - "never" - ] - }, - { - "id": 67, - "name": "docsWikiOptions", - "qualified_name": "cli.docsWikiOptions", - "kind": "class", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options.", - "reason": "keep ccg docs Wiki-index settings explicit and separate from Markdown generation options.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 1649, - "name": "namespace", - "qualified_name": "wiki.Builder.namespace", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "resolve the namespace used for both DB reads and wiki-index output paths.", - "reason": "resolve the namespace used for both DB reads and wiki-index output paths.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 1530, - "name": "Coverage", - "qualified_name": "evidence.Coverage", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "let an empty answer say whether anyone ever recorded a reason to search.", - "reason": "let an empty answer say whether anyone ever recorded a reason to search.", - "terms": [ - "never" - ] - }, - { - "id": 386, - "name": "annotationDetailFromModel", - "qualified_name": "wikiserver.annotationDetailFromModel", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "convert a stored annotation into the same details shape used by wiki-index.json.", - "reason": "convert a stored annotation into the same details shape used by wiki-index.json.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 1541, - "name": "reasonOverlaps", - "qualified_name": "evidence.reasonOverlaps", - "kind": "function", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "reason": "alone was the other half of the same divergence Korean exposed: a\nnode whose only reason is a @domainRule was found by the index and then\ndropped here as unexplainable.", - "terms": [ - "index", - "half" - ] - }, - { - "id": 1820, - "name": "Intent", - "qualified_name": "graph.Node.Intent", - "kind": "function", - "file_path": "internal/domain/graph/node.go", - "intent": "give search one line of author-written purpose to show beside a result.", - "reason": "give search one line of author-written purpose to show beside a result.", - "terms": [ - "written" - ] - }, - { - "id": 1537, - "name": "Options", - "qualified_name": "evidence.Options", - "kind": "class", - "file_path": "internal/app/search/evidence/evidence.go", - "intent": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "reason": "keep the bounds a caller controls — page size, page position, strictness — in one argument.", - "terms": [ - "never" - ] - }, - { - "id": 1257, - "name": "uniqueNodes", - "qualified_name": "resolve.uniqueNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "deduplicate result sets before further processing or resolution.", - "reason": "deduplicate result sets before further processing or resolution.", - "terms": [ - "process" - ] - }, - { - "id": 1488, - "name": "defaultRetryConfig", - "qualified_name": "reposync.defaultRetryConfig", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "provide conservative retry defaults for production webhook processing.", - "reason": "provide conservative retry defaults for production webhook processing.", - "terms": [ - "process" - ] - }, - { - "id": 1042, - "name": "saveManifest", - "qualified_name": "docs.Generator.saveManifest", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "record which files were written so future runs can detect and remove stale docs", - "reason": "record which files were written so future runs can detect and remove stale docs", - "terms": [ - "written" - ] - }, - { - "id": 1632, - "name": "BuildTree", - "qualified_name": "wiki.Builder.BuildTree", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated.", - "reason": "let runtime callers synthesize the same Wiki tree directly from DB rows when the JSON index has not been generated.", - "terms": [ - "wiki", - "index" - ] - }, - { - "id": 609, - "name": "extractExactNameToken", - "qualified_name": "searchsql.extractExactNameToken", - "kind": "function", - "file_path": "internal/adapters/outbound/searchsql/sanitize.go", - "intent": "treat only single-identifier queries as eligible for exact-name promotion.", - "reason": "treat only single-identifier queries as eligible for exact-name promotion.", - "terms": [ - "never" - ] - }, - { - "id": 1716, - "name": "abort", - "qualified_name": "dbtest.postgresSchema.abort", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "avoid leaking a connection when the schema never became usable.", - "reason": "avoid leaking a connection when the schema never became usable.", - "terms": [ - "never" - ] - }, - { - "id": 1557, - "name": "CanAnswer", - "qualified_name": "intent.Result.CanAnswer", - "kind": "function", - "file_path": "internal/app/search/intent/intent.go", - "reason": "intent hits justify membership only when at least half of the question's scored terms appear in some recorded reason.", - "terms": [ - "half" - ] - }, - { - "id": 450, - "name": "WithLock", - "qualified_name": "gitrepo.RepoLocker.WithLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "terms": [ - "process" - ] - }, - { - "id": 1508, - "name": "get", - "qualified_name": "reposync.SyncQueue.get", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "block workers until the next deduplicated repository payload is ready for processing.", - "reason": "block workers until the next deduplicated repository payload is ready for processing.", - "terms": [ - "process" - ] - }, - { - "id": 1626, - "name": "NextAction", - "qualified_name": "wire.NextAction", - "kind": "class", - "file_path": "internal/app/search/wire/wire.go", - "intent": "turn what a search withheld into a step the caller can actually take.", - "reason": "turn what a search withheld into a step the caller can actually take.", - "terms": [ - "never" - ] - }, - { - "id": 451, - "name": "acquireLocal", - "qualified_name": "gitrepo.RepoLocker.acquireLocal", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "reason": "gate same-process sync attempts for a repository before filesystem locking is attempted.", - "terms": [ - "process" - ] - }, - { - "id": 935, - "name": "Stats", - "qualified_name": "flow.Stats", - "kind": "class", - "file_path": "internal/app/analyze/flow/builder.go", - "intent": "returns the size of the rebuilt stored flow as a post-process result.", - "reason": "returns the size of the rebuilt stored flow as a post-process result.", - "terms": [ - "process" - ] - }, - { - "id": 1143, - "name": "withStringMap", - "qualified_name": "ingest.withStringMap", - "kind": "function", - "file_path": "internal/app/ingest/parse_context.go", - "intent": "prevent callers from mutating parser context maps after injection.", - "reason": "prevent callers from mutating parser context maps after injection.", - "terms": [ - "after" - ] - }, - { - "id": 1588, - "name": "applyLimit", - "qualified_name": "rank.applyLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "apply the caller's result bound after candidate reranking.", - "reason": "apply the caller's result bound after candidate reranking.", - "terms": [ - "after" - ] - }, - { - "id": 165, - "name": "FlowBuilder", - "qualified_name": "mcp.FlowBuilder", - "kind": "type", - "file_path": "internal/adapters/inbound/mcp/deps.go", - "intent": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "reason": "Injects a builder into the MCP handler that regenerates stored flow post-processing results.", - "terms": [ - "process" - ] - }, - { - "id": 1503, - "name": "safeHandle", - "qualified_name": "reposync.SyncQueue.safeHandle", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "reason": "protect webhook processing from transient git and network errors without retrying permanent failures forever.", - "terms": [ - "process" - ] - }, - { - "id": 1509, - "name": "done", - "qualified_name": "reposync.SyncQueue.done", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "requeue repositories that changed during processing or release payload state when work is complete.", - "reason": "requeue repositories that changed during processing or release payload state when work is complete.", - "terms": [ - "process" - ] - }, - { - "id": 240, - "name": "buildOrUpdateGraph", - "qualified_name": "mcp.handlers.buildOrUpdateGraph", - "kind": "function", - "file_path": "internal/adapters/inbound/mcp/handler_parse.go", - "intent": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "reason": "Synchronizes the code graph to the latest state and performs search and community post-processing.", - "terms": [ - "process" - ] - }, - { - "id": 452, - "name": "acquireFilesystemLock", - "qualified_name": "gitrepo.acquireFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "reason": "coordinate repository sync across processes by creating an exclusive lock file under the repo root.", - "terms": [ - "process" - ] - }, - { - "id": 1357, - "name": "splitForcedFiles", - "qualified_name": "workflow.splitForcedFiles", - "kind": "function", - "file_path": "internal/app/ingest/workflow/graphstate.go", - "intent": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "reason": "process unchanged-hash forced files separately so the syncer can bypass its hash short-circuit.", - "terms": [ - "process" - ] - }, - { - "id": 454, - "name": "removeStaleFilesystemLock", - "qualified_name": "gitrepo.removeStaleFilesystemLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "discard abandoned repository lock files after the stale timeout elapses.", - "reason": "discard abandoned repository lock files after the stale timeout elapses.", - "terms": [ - "after" - ] - }, - { - "id": 484, - "name": "UpdateCrossRefResolution", - "qualified_name": "graphgorm.Store.UpdateCrossRefResolution", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "remap or invalidate a reference after its target namespace rebuilt.", - "reason": "remap or invalidate a reference after its target namespace rebuilt.", - "terms": [ - "after" - ] - }, - { - "id": 808, - "name": "AdditionalEdges", - "qualified_name": "treesitter.KotlinSemantics.AdditionalEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics_jvm.go", - "intent": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "reason": "capture Kotlin supertype relationships by parsing the declaration head after ':'.", - "terms": [ - "after" - ] - }, - { - "id": 1473, - "name": "CacheInvalidator", - "qualified_name": "reposync.CacheInvalidator", - "kind": "type", - "file_path": "internal/app/reposync/ports.go", - "intent": "keep derived query cache invalidation after successful repository graph commit.", - "reason": "keep derived query cache invalidation after successful repository graph commit.", - "terms": [ - "after" - ] - }, - { - "id": 214, - "name": "describeResponse", - "qualified_name": "mcp.describeResponse", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_describe.go", - "intent": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "reason": "answer \"what is in here\" exactly, so the ranked tools never have to guess.", - "terms": [ - "never" - ] - }, - { - "id": 482, - "name": "ListInboundCrossRefs", - "qualified_name": "graphgorm.Store.ListInboundCrossRefs", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "select the rows whose resolution may change after this namespace rebuilds.", - "reason": "select the rows whose resolution may change after this namespace rebuilds.", - "terms": [ - "after" - ] - }, - { - "id": 1297, - "name": "parsedBuildEdgeBatch", - "qualified_name": "workflow.parsedBuildEdgeBatch", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "persist edges only after their referenced nodes exist in the graph.", - "reason": "persist edges only after their referenced nodes exist in the graph.", - "terms": [ - "after" - ] - } - ] - }, - "worker pool": { - "corpus": 1901, - "terms": [ - { - "text": "worker", - "in_reasons": 7 - }, - { - "text": "pool", - "in_reasons": 12 - } + "why was a push that only deleted a branch ignored": [ + 29, + 109, + 121, + 122, + 123, + 125, + 133, + 134, + 138, + 193, + 244, + 284, + 285, + 286, + 289, + 311, + 362, + 365, + 366, + 386, + 392, + 403, + 408, + 409, + 473, + 476, + 478, + 485, + 487, + 522, + 553, + 556, + 568, + 570, + 576, + 577, + 579, + 583, + 621, + 655, + 659, + 660, + 662, + 715, + 716, + 719, + 723, + 736, + 739, + 748, + 752, + 774, + 783, + 791, + 792, + 811, + 813, + 835, + 838, + 898, + 900, + 961, + 998, + 999, + 1024, + 1028, + 1046, + 1053, + 1059, + 1062, + 1078, + 1080, + 1100, + 1111, + 1113, + 1121, + 1124, + 1135, + 1211, + 1242, + 1244, + 1275, + 1326, + 1354, + 1370, + 1374, + 1379, + 1380, + 1389, + 1393, + 1396, + 1397, + 1400, + 1401, + 1402, + 1404, + 1407, + 1418, + 1419, + 1424, + 1428, + 1447, + 1448, + 1475, + 1493, + 1500, + 1505, + 1510, + 1513, + 1526, + 1534, + 1547, + 1554, + 1569, + 1603, + 1648, + 1732, + 1742, + 1788, + 1800, + 1826, + 1870 ], - "hits": [ - { - "id": 1491, - "name": "SyncQueue", - "qualified_name": "reposync.SyncQueue", - "kind": "class", - "file_path": "internal/app/reposync/queue.go", - "intent": "coordinate deduplicated per-repository sync execution across a worker pool.", - "reason": "coordinate deduplicated per-repository sync execution across a worker pool.", - "terms": [ - "worker", - "pool" - ] - }, - { - "id": 1493, - "name": "NewSyncQueueWithContext", - "qualified_name": "reposync.NewSyncQueueWithContext", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "allow server shutdown to cancel retries and worker waits cleanly.", - "reason": "allow server shutdown to cancel retries and worker waits cleanly.", - "terms": [ - "worker" - ] - }, - { - "id": 1502, - "name": "worker", - "qualified_name": "reposync.SyncQueue.worker", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "run the main worker loop that drains deduplicated repository work items.", - "reason": "run the main worker loop that drains deduplicated repository work items.", - "terms": [ - "worker" - ] - }, - { - "id": 450, - "name": "WithLock", - "qualified_name": "gitrepo.RepoLocker.WithLock", - "kind": "function", - "file_path": "internal/adapters/outbound/gitrepo/checkout.go", - "intent": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "reason": "coordinate webhook workers across goroutines and processes before touching a repository checkout.", - "terms": [ - "worker" - ] - }, - { - "id": 1300, - "name": "buildParseResult", - "qualified_name": "workflow.buildParseResult", - "kind": "class", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "let workers finish out of order while the coordinator preserves record order.", - "reason": "let workers finish out of order while the coordinator preserves record order.", - "terms": [ - "worker" - ] - }, - { - "id": 1508, - "name": "get", - "qualified_name": "reposync.SyncQueue.get", - "kind": "function", - "file_path": "internal/app/reposync/queue.go", - "intent": "block workers until the next deduplicated repository payload is ready for processing.", - "reason": "block workers until the next deduplicated repository payload is ready for processing.", - "terms": [ - "worker" - ] - }, - { - "id": 1312, - "name": "parseBuildInput", - "qualified_name": "workflow.Service.parseBuildInput", - "kind": "function", - "file_path": "internal/app/ingest/workflow/build.go", - "intent": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "reason": "keep each worker's filesystem, parser, and hash work isolated from shared build state.", - "terms": [ - "worker" - ] - }, - { - "id": 893, - "name": "parseSourceCtx", - "qualified_name": "treesitter.Walker.parseSourceCtx", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "let long parses honor caller cancellation while reusing pooled parsers for throughput.", - "reason": "let long parses honor caller cancellation while reusing pooled parsers for throughput.", - "terms": [ - "pool" - ] - }, - { - "id": 1703, - "name": "Open", - "qualified_name": "db.Open", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "centralize driver-specific GORM initialization and pool setup behind one entry point.", - "reason": "centralize driver-specific GORM initialization and pool setup behind one entry point.", - "terms": [ - "pool" - ] - }, - { - "id": 1704, - "name": "ConfigurePool", - "qualified_name": "db.ConfigurePool", - "kind": "function", - "file_path": "internal/db/db.go", - "intent": "apply connection-pool limits that match each database driver's concurrency model.", - "reason": "apply connection-pool limits that match each database driver's concurrency model.", - "terms": [ - "pool" - ] - }, - { - "id": 1582, - "name": "FetchLimit", - "qualified_name": "rank.FetchLimit", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result.", - "reason": "retain enough backend candidates for structural relevance signals to affect the caller's bounded result.", - "terms": [ - "pool" - ] - }, - { - "id": 1617, - "name": "keepPathPrefix", - "qualified_name": "search.keepPathPrefix", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "apply the caller's path filter without renumbering the pool the order was decided from.", - "reason": "apply the caller's path filter without renumbering the pool the order was decided from.", - "terms": [ - "pool" - ] - }, - { - "id": 1713, - "name": "dsn", - "qualified_name": "dbtest.postgresSchema.dsn", - "kind": "function", - "file_path": "internal/db/dbtest/postgres.go", - "intent": "make the private schema apply to every connection a pool opens, not just the first.", - "reason": "make the private schema apply to every connection a pool opens, not just the first.", - "terms": [ - "pool" - ] - }, - { - "id": 1615, - "name": "orderPool", - "qualified_name": "search.orderPool", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "reason": "keep a page already delivered from being reshuffled by the wider pool the next page fetches.", - "terms": [ - "pool" - ] - }, - { - "id": 1587, - "name": "compareIdentity", - "qualified_name": "rank.compareIdentity", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "break structural ties by node identity so the order never depends on which backend retrieved the pool.", - "reason": "break structural ties by node identity so the order never depends on which backend retrieved the pool.", - "terms": [ - "pool" - ] - }, - { - "id": 1583, - "name": "PoolWidth", - "qualified_name": "rank.PoolWidth", - "kind": "function", - "file_path": "internal/app/search/rank/rank.go", - "intent": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one.", - "reason": "size a paging caller's pool so the page it already delivered cannot be reshuffled by the next one.", - "terms": [ - "pool" - ] - }, - { - "id": 1702, - "name": "SQLDBPool", - "qualified_name": "db.SQLDBPool", - "kind": "type", - "file_path": "internal/db/db.go", - "intent": "abstract the pool configuration API so both real sql.DB handles and test doubles can share the same seam.", - "reason": "abstract the pool configuration API so both real sql.DB handles and test doubles can share the same seam.", - "terms": [ - "pool" - ] - }, - { - "id": 1613, - "name": "fetch", - "qualified_name": "search.Service.fetch", - "kind": "function", - "file_path": "internal/app/search/service.go", - "intent": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "reason": "give both search shapes the same candidate pool for the same request, wide enough to reach the page that was asked for.", - "terms": [ - "pool" - ] - } - ] - }, - "zzz nonexistent symbol qqq": { - "corpus": 1901, - "terms": [ - { - "text": "zzz", - "in_reasons": 0 - }, - { - "text": "nonexistent", - "in_reasons": 0 - }, - { - "text": "symbol", - "in_reasons": 64 - }, - { - "text": "qqq", - "in_reasons": 0 - } + "why was the wiki index never left half-written after the process died": [ + 7, + 8, + 9, + 10, + 11, + 12, + 85, + 86, + 111, + 119, + 166, + 168, + 171, + 172, + 174, + 189, + 191, + 212, + 290, + 291, + 292, + 293, + 294, + 297, + 298, + 299, + 303, + 304, + 306, + 307, + 309, + 311, + 315, + 318, + 320, + 321, + 322, + 324, + 330, + 331, + 333, + 334, + 336, + 337, + 338, + 340, + 345, + 347, + 354, + 365, + 370, + 371, + 374, + 396, + 397, + 398, + 400, + 407, + 428, + 431, + 436, + 468, + 501, + 502, + 503, + 504, + 506, + 507, + 508, + 509, + 510, + 512, + 513, + 515, + 516, + 524, + 526, + 529, + 546, + 550, + 551, + 553, + 557, + 559, + 561, + 562, + 563, + 564, + 569, + 575, + 578, + 579, + 639, + 753, + 835, + 883, + 956, + 961, + 963, + 966, + 989, + 1009, + 1028, + 1062, + 1071, + 1090, + 1111, + 1136, + 1141, + 1142, + 1152, + 1157, + 1205, + 1244, + 1255, + 1261, + 1275, + 1276, + 1303, + 1324, + 1375, + 1378, + 1381, + 1382, + 1426, + 1440, + 1456, + 1457, + 1458, + 1461, + 1462, + 1472, + 1480, + 1488, + 1493, + 1496, + 1502, + 1504, + 1507, + 1510, + 1511, + 1518, + 1519, + 1520, + 1537, + 1538, + 1573, + 1579, + 1580, + 1585, + 1591, + 1596, + 1597, + 1599, + 1603, + 1608, + 1611, + 1614, + 1615, + 1616, + 1617, + 1619, + 1620, + 1625, + 1635, + 1636, + 1639, + 1640, + 1660, + 1711, + 1765, + 1766, + 1776, + 1786, + 1819, + 1854, + 1857, + 1861, + 1873, + 1879, + 1880, + 1881, + 1885, + 1888, + 1889, + 1892, + 1895, + 1897, + 1898, + 1899, + 1902 ], - "hits": [ - { - "id": 1804, - "name": "CrossRef", - "qualified_name": "graph.CrossRef", - "kind": "class", - "file_path": "internal/domain/graph/crossref.go", - "intent": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "reason": "make annotation-declared repository links traversable and listable instead of plain tag text.", - "terms": [ - "symbol" - ] - }, - { - "id": 1837, - "name": "Parse", - "qualified_name": "reference.Parse", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "reason": "decode ccg://{namespace}/{path}#{symbol} values used by @see annotations.", - "terms": [ - "symbol" - ] - }, - { - "id": 1244, - "name": "isExportedName", - "qualified_name": "resolve.isExportedName", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "apply Go visibility rules during symbol resolution.", - "reason": "apply Go visibility rules during symbol resolution.", - "terms": [ - "symbol" - ] - }, - { - "id": 1249, - "name": "packagePrefix", - "qualified_name": "resolve.packagePrefix", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "determine the logical namespace for a symbol.", - "reason": "determine the logical namespace for a symbol.", - "terms": [ - "symbol" - ] - }, - { - "id": 1641, - "name": "fileChildren", - "qualified_name": "wiki.Builder.fileChildren", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "list symbols declared inside one file node.", - "reason": "list symbols declared inside one file node.", - "terms": [ - "symbol" - ] - }, - { - "id": 487, - "name": "OutgoingDocEdges", - "qualified_name": "graphgorm.Store.OutgoingDocEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "load call/import relationships rendered beneath symbol documentation.", - "reason": "load call/import relationships rendered beneath symbol documentation.", - "terms": [ - "symbol" - ] - }, - { - "id": 1210, - "name": "indexByQualifiedName", - "qualified_name": "resolve.indexByQualifiedName", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "enable fast lookup of symbols during endpoint resolution.", - "reason": "enable fast lookup of symbols during endpoint resolution.", - "terms": [ - "symbol" - ] - }, - { - "id": 1648, - "name": "hasSymbol", - "qualified_name": "wiki.Builder.hasSymbol", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "test whether a file node has symbol children.", - "reason": "test whether a file node has symbol children.", - "terms": [ - "symbol" - ] - }, - { - "id": 1215, - "name": "addName", - "qualified_name": "resolve.addName", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "ensure unique symbol names are collected for batch lookups.", - "reason": "ensure unique symbol names are collected for batch lookups.", - "terms": [ - "symbol" - ] - }, - { - "id": 1247, - "name": "callCallee", - "qualified_name": "resolve.callCallee", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "retrieve the callee symbol name from the persisted fingerprint.", - "reason": "retrieve the callee symbol name from the persisted fingerprint.", - "terms": [ - "symbol" - ] - }, - { - "id": 1248, - "name": "containsTarget", - "qualified_name": "resolve.containsTarget", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "retrieve the target symbol name from the persisted fingerprint.", - "reason": "retrieve the target symbol name from the persisted fingerprint.", - "terms": [ - "symbol" - ] - }, - { - "id": 1935, - "name": "AnnotationDetails", - "qualified_name": "AnnotationDetails", - "kind": "type", - "file_path": "web/wiki/src/api.ts", - "intent": "carry annotation summary and tags for symbol detail rendering.", - "reason": "carry annotation summary and tags for symbol detail rendering.", - "terms": [ - "symbol" - ] - }, - { - "id": 566, - "name": "FileSymbols", - "qualified_name": "graphgorm.Store.FileSymbols", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "load stable symbol children for one lazy Wiki file node.", - "reason": "load stable symbol children for one lazy Wiki file node.", - "terms": [ - "symbol" - ] - }, - { - "id": 568, - "name": "HasSymbol", - "qualified_name": "graphgorm.Store.HasSymbol", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "answer whether a lazy file node has expandable symbol children.", - "reason": "answer whether a lazy file node has expandable symbol children.", - "terms": [ - "symbol" - ] - }, - { - "id": 733, - "name": "definitionNameOrDefault", - "qualified_name": "treesitter.definitionNameOrDefault", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/semantics.go", - "intent": "centralize per-language symbol-name normalization behind an optional hook.", - "reason": "centralize per-language symbol-name normalization behind an optional hook.", - "terms": [ - "symbol" - ] - }, - { - "id": 903, - "name": "isTestName", - "qualified_name": "treesitter.isTestName", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "avoid misclassifying production symbols like testimonialCard or TestConfig as tests.", - "reason": "avoid misclassifying production symbols like testimonialCard or TestConfig as tests.", - "terms": [ - "symbol" - ] - }, - { - "id": 906, - "name": "rangesOverlap", - "qualified_name": "treesitter.rangesOverlap", - "kind": "function", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "detect whether two symbol captures refer to overlapping source spans", - "reason": "detect whether two symbol captures refer to overlapping source spans", - "terms": [ - "symbol" - ] - }, - { - "id": 1221, - "name": "resolveContains", - "qualified_name": "resolve.resolveContains", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "link file nodes to the top-level symbols they define.", - "reason": "link file nodes to the top-level symbols they define.", - "terms": [ - "symbol" - ] - }, - { - "id": 1230, - "name": "resolveTestedBy", - "qualified_name": "resolve.resolveTestedBy", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "bridge the gap between tests and the symbols they verify.", - "reason": "bridge the gap between tests and the symbols they verify.", - "terms": [ - "symbol" - ] - }, - { - "id": 1238, - "name": "testedByEndpoints", - "qualified_name": "resolve.testedByEndpoints", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "retrieve test and production symbol names from the persisted fingerprint.", - "reason": "retrieve test and production symbol names from the persisted fingerprint.", - "terms": [ - "symbol" - ] - }, - { - "id": 1239, - "name": "resolveTypeEndpoint", - "qualified_name": "resolve.resolveTypeEndpoint", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "resolve symbol references to physical type nodes in the graph.", - "reason": "resolve symbol references to physical type nodes in the graph.", - "terms": [ - "symbol" - ] - }, - { - "id": 1242, - "name": "implementsEndpoints", - "qualified_name": "resolve.implementsEndpoints", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "retrieve concrete and interface symbol names from the persisted fingerprint.", - "reason": "retrieve concrete and interface symbol names from the persisted fingerprint.", - "terms": [ - "symbol" - ] - }, - { - "id": 1251, - "name": "lastSegment", - "qualified_name": "resolve.lastSegment", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "extract the bare symbol name from a fully qualified name.", - "reason": "extract the bare symbol name from a fully qualified name.", - "terms": [ - "symbol" - ] - }, - { - "id": 1662, - "name": "symbolKindStrings", - "qualified_name": "wiki.symbolKindStrings", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "expose symbol node kinds as strings for GORM IN clauses.", - "reason": "expose symbol node kinds as strings for GORM IN clauses.", - "terms": [ - "symbol" - ] - }, - { - "id": 1663, - "name": "symbolKinds", - "qualified_name": "wiki.symbolKinds", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "centralize the symbol kinds eligible for built-in Wiki navigation.", - "reason": "centralize the symbol kinds eligible for built-in Wiki navigation.", - "terms": [ - "symbol" - ] - }, - { - "id": 1668, - "name": "detailsForNode", - "qualified_name": "wiki.detailsForNode", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "expose full structured annotation metadata for Wiki symbol detail views.", - "reason": "expose full structured annotation metadata for Wiki symbol detail views.", - "terms": [ - "symbol" - ] - }, - { - "id": 1838, - "name": "Display", - "qualified_name": "reference.Ref.Display", - "kind": "function", - "file_path": "internal/domain/reference/ref.go", - "intent": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "reason": "shorten ccg refs while preserving namespace, path, and symbol identity.", - "terms": [ - "symbol" - ] - }, - { - "id": 384, - "name": "refPathMatchesTree", - "qualified_name": "wikiserver.refPathMatchesTree", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "compare a ccg:// path/symbol target against one Wiki tree node.", - "reason": "compare a ccg:// path/symbol target against one Wiki tree node.", - "terms": [ - "symbol" - ] - }, - { - "id": 388, - "name": "symbolMatches", - "qualified_name": "wikiserver.symbolMatches", - "kind": "function", - "file_path": "internal/adapters/inbound/wikihttp/server.go", - "intent": "allow short symbol refs to match names and language-qualified names.", - "reason": "allow short symbol refs to match names and language-qualified names.", - "terms": [ - "symbol" - ] - }, - { - "id": 565, - "name": "SymbolNode", - "qualified_name": "graphgorm.Store.SymbolNode", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/wiki.go", - "intent": "resolve the first deterministic symbol match used by direct lazy navigation.", - "reason": "resolve the first deterministic symbol match used by direct lazy navigation.", - "terms": [ - "symbol" - ] - }, - { - "id": 1216, - "name": "addEndpointCandidates", - "qualified_name": "resolve.addEndpointCandidates", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "support resolving local symbols that might be referenced without full qualification.", - "reason": "support resolving local symbols that might be referenced without full qualification.", - "terms": [ - "symbol" - ] - }, - { - "id": 1231, - "name": "resolveProductionFunction", - "qualified_name": "resolve.resolveProductionFunction", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "locate the tested symbol by checking qualified and bare name matches.", - "reason": "locate the tested symbol by checking qualified and bare name matches.", - "terms": [ - "symbol" - ] - }, - { - "id": 1246, - "name": "span", - "qualified_name": "resolve.span", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "assist in finding the narrowest enclosing symbol for a given line.", - "reason": "assist in finding the narrowest enclosing symbol for a given line.", - "terms": [ - "symbol" - ] - }, - { - "id": 1630, - "name": "Builder", - "qualified_name": "wiki.Builder", - "kind": "class", - "file_path": "internal/app/wiki/builder.go", - "intent": "derive a package/file/symbol presentation tree directly from graph nodes.", - "reason": "derive a package/file/symbol presentation tree directly from graph nodes.", - "terms": [ - "symbol" - ] - }, - { - "id": 1670, - "name": "kindRank", - "qualified_name": "wiki.kindRank", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "sort folders before packages, packages before files, and files before symbols.", - "reason": "sort folders before packages, packages before files, and files before symbols.", - "terms": [ - "symbol" - ] - }, - { - "id": 207, - "name": "crossRefItem", - "qualified_name": "mcp.crossRefItem", - "kind": "class", - "file_path": "internal/adapters/inbound/mcp/handler_crossref.go", - "intent": "expose symbolic target identity and derived resolution state without internal row metadata.", - "reason": "expose symbolic target identity and derived resolution state without internal row metadata.", - "terms": [ - "symbol" - ] - }, - { - "id": 480, - "name": "ResolveCCGRef", - "qualified_name": "graphgorm.Store.ResolveCCGRef", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/crossref.go", - "intent": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "reason": "give cross-ref materialization the concrete node identity behind a symbolic reference.", - "terms": [ - "symbol" - ] - }, - { - "id": 489, - "name": "CCGRefExists", - "qualified_name": "graphgorm.Store.CCGRefExists", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/docs.go", - "intent": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "reason": "validate parsed cross-namespace ccg references against graph path and symbol semantics.", - "terms": [ - "symbol" - ] - }, - { - "id": 552, - "name": "UpsertUnresolvedEdges", - "qualified_name": "graphgorm.Store.UpsertUnresolvedEdges", - "kind": "function", - "file_path": "internal/adapters/outbound/graphgorm/unresolved.go", - "intent": "retain unresolved syntax candidates until a future symbol addition can resolve them.", - "reason": "retain unresolved syntax candidates until a future symbol addition can resolve them.", - "terms": [ - "symbol" - ] - }, - { - "id": 996, - "name": "FindExactNameMatches", - "qualified_name": "query.Service.FindExactNameMatches", - "kind": "function", - "file_path": "internal/app/analyze/query/service.go", - "intent": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "reason": "support MCP fallback from short symbol names to fully qualified graph nodes.", - "terms": [ - "symbol" - ] - }, - { - "id": 1189, - "name": "loadImportFileNodes", - "qualified_name": "resolve.resolveState.loadImportFileNodes", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "populate state with file nodes to support deeper resolution of imported symbols.", - "reason": "populate state with file nodes to support deeper resolution of imported symbols.", - "terms": [ - "symbol" - ] - }, - { - "id": 1245, - "name": "enclosingCallable", - "qualified_name": "resolve.enclosingCallable", - "kind": "function", - "file_path": "internal/app/ingest/resolve/resolve.go", - "intent": "identify the source symbol (caller) for a relationship originating on a line.", - "reason": "identify the source symbol (caller) for a relationship originating on a line.", - "terms": [ - "symbol" - ] - }, - { - "id": 1520, - "name": "BuildContent", - "qualified_name": "document.BuildContent", - "kind": "function", - "file_path": "internal/app/search/document/document.go", - "intent": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns.", - "reason": "combine symbol names, path/language tokens, and annotation evidence without persistence concerns.", - "terms": [ - "symbol" - ] - }, - { - "id": 1673, - "name": "NodeDetails", - "qualified_name": "wiki.NodeDetails", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "reason": "let presentation indexes expose symbol annotations without requiring a generated file doc.", - "terms": [ - "symbol" - ] - }, - { - "id": 1918, - "name": "addSelected", - "qualified_name": "addSelected", - "kind": "function", - "file_path": "web/wiki/src/App.tsx", - "intent": "add a file or symbol summary to the context tray without duplicates.", - "reason": "add a file or symbol summary to the context tray without duplicates.", - "terms": [ - "symbol" - ] - }, - { - "id": 885, - "name": "nodeKey", - "qualified_name": "treesitter.nodeKey", - "kind": "class", - "file_path": "internal/adapters/outbound/treesitter/walker.go", - "intent": "key duplicate symbol matches by name and source span during one query execution.", - "reason": "key duplicate symbol matches by name and source span during one query execution.", - "terms": [ - "symbol" - ] - }, - { - "id": 998, - "name": "CandidateMatch", - "qualified_name": "query.CandidateMatch", - "kind": "class", - "file_path": "internal/app/analyze/query/service.go", - "intent": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "reason": "provide compact, stable target suggestions when a short symbol name matches multiple nodes.", - "terms": [ - "symbol" - ] - }, - { - "id": 1156, - "name": "UnresolvedEdgeStore", - "qualified_name": "ingest.UnresolvedEdgeStore", - "kind": "type", - "file_path": "internal/app/ingest/ports.go", - "intent": "select unchanged source edges affected by newly added symbols without exposing persistence details.", - "reason": "select unchanged source edges affected by newly added symbols without exposing persistence details.", - "terms": [ - "symbol" - ] - }, - { - "id": 1636, - "name": "lazySymbolNode", - "qualified_name": "wiki.Builder.lazySymbolNode", - "kind": "function", - "file_path": "internal/app/wiki/builder.go", - "intent": "load a stored symbol tree node by qualified name for direct lazy navigation.", - "reason": "load a stored symbol tree node by qualified name for direct lazy navigation.", - "terms": [ - "symbol" - ] - }, - { - "id": 1831, - "name": "UnresolvedEdgeCandidate", - "qualified_name": "graph.UnresolvedEdgeCandidate", - "kind": "class", - "file_path": "internal/domain/graph/unresolved.go", - "intent": "let newly added symbols select affected unchanged callers without reparsing the whole graph.", - "reason": "let newly added symbols select affected unchanged callers without reparsing the whole graph.", - "terms": [ - "symbol" - ] - } - ] - }, - "네임스페이스 설정이 플래그 기본값에 가려지지 않게 하는 곳은 어디야": { - "corpus": 1901, - "terms": [ - { - "text": "네임스페이스", - "in_reasons": 1 - }, - { - "text": "설정이", - "in_reasons": 1 - }, - { - "text": "플래그", - "in_reasons": 4 - }, - { - "text": "기본값에", - "in_reasons": 1 - }, - { - "text": "가려지지", - "in_reasons": 1 - }, - { - "text": "않게", - "in_reasons": 0 - }, - { - "text": "하는", - "in_reasons": 2 - }, - { - "text": "곳은", - "in_reasons": 0 - }, - { - "text": "어디야", - "in_reasons": 0 - } + "worker pool": [ + 396, + 840, + 1247, + 1259, + 1443, + 1445, + 1455, + 1461, + 1532, + 1533, + 1537, + 1561, + 1562, + 1564, + 1645, + 1646, + 1647, + 1657 ], - "hits": [ - { - "id": 100, - "name": "resolveNamespace", - "qualified_name": "cli.resolveNamespace", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "config의 namespace 설정이 --namespace 플래그 기본값에 가려지지 않도록 우선순위대로 해석한다.", - "reason": "config의 namespace 설정이 --namespace 플래그 기본값에 가려지지 않도록 우선순위대로 해석한다.", - "terms": [ - "설정이", - "플래그", - "기본값에", - "가려지지" - ] - }, - { - "id": 73, - "name": "newHooksCmd", - "qualified_name": "cli.newHooksCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/hooks.go", - "intent": "git hook 관리 하위 명령을 하나의 네임스페이스 아래로 묶는다.", - "reason": "git hook 관리 하위 명령을 하나의 네임스페이스 아래로 묶는다.", - "terms": [ - "네임스페이스" - ] - }, - { - "id": 77, - "name": "resolveInitDest", - "qualified_name": "cli.resolveInitDest", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "reason": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "terms": [ - "하는" - ] - }, - { - "id": 1072, - "name": "tagsWithName", - "qualified_name": "docs.tagsWithName", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "@param 같이 이름과 값을 함께 출력해야 하는 태그를 보존해 전달한다.", - "reason": "@param 같이 이름과 값을 함께 출력해야 하는 태그를 보존해 전달한다.", - "terms": [ - "하는" - ] - }, - { - "id": 94, - "name": "shouldSkipDBInit", - "qualified_name": "cli.shouldSkipDBInit", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "특정 커맨드나 플래그 설정에 따라 DB 초기화 단계를 건너뛸지 결정한다.", - "reason": "특정 커맨드나 플래그 설정에 따라 DB 초기화 단계를 건너뛸지 결정한다.", - "terms": [ - "플래그" - ] - }, - { - "id": 99, - "name": "resolveOutDir", - "qualified_name": "cli.resolveOutDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "reason": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "terms": [ - "플래그" - ] - }, - { - "id": 103, - "name": "resolveMaxFileBytes", - "qualified_name": "cli.resolveMaxFileBytes", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다.", - "reason": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다.", - "terms": [ - "플래그" - ] - } - ] - }, - "여러 묶음으로 읽은 파일 사이의 호출 관계는 왜 마지막에 한꺼번에 연결하지": { - "corpus": 1901, - "terms": [ - { - "text": "여러", - "in_reasons": 0 - }, - { - "text": "묶음으로", - "in_reasons": 0 - }, - { - "text": "읽은", - "in_reasons": 0 - }, - { - "text": "파일", - "in_reasons": 22 - }, - { - "text": "사이의", - "in_reasons": 0 - }, - { - "text": "호출", - "in_reasons": 8 - }, - { - "text": "관계는", - "in_reasons": 0 - }, - { - "text": "왜", - "in_reasons": 0 - }, - { - "text": "마지막에", - "in_reasons": 0 - }, - { - "text": "한꺼번에", - "in_reasons": 0 - }, - { - "text": "연결하지", - "in_reasons": 0 - } + "zzz nonexistent symbol qqq": [ + 160, + 220, + 331, + 335, + 339, + 424, + 433, + 435, + 437, + 500, + 511, + 512, + 514, + 558, + 678, + 770, + 830, + 850, + 854, + 946, + 948, + 959, + 1104, + 1137, + 1151, + 1158, + 1163, + 1164, + 1169, + 1178, + 1179, + 1186, + 1187, + 1190, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1199, + 1471, + 1577, + 1583, + 1588, + 1595, + 1603, + 1610, + 1611, + 1614, + 1616, + 1618, + 1620, + 1755, + 1784, + 1789, + 1791, + 1792, + 1795, + 1861, + 1866, + 1868, + 1881, + 1882 ], - "hits": [ - { - "id": 143, - "name": "ReadyHandler", - "qualified_name": "server.ReadyHandler", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다.", - "reason": "호출자가 제공한 readiness 조건을 HTTP probe 응답으로 변환한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1366, - "name": "BuildOptions", - "qualified_name": "workflow.BuildOptions", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "빌드 대상 경로와 탐색 범위를 호출자에서 제어하게 한다.", - "reason": "빌드 대상 경로와 탐색 범위를 호출자에서 제어하게 한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1699, - "name": "WithNamespace", - "qualified_name": "ctx.WithNamespace", - "kind": "function", - "file_path": "internal/ctx/namespace.go", - "intent": "호출자 시그니처 변경 없이 store 레이어까지 namespace를 전달한다.", - "reason": "호출자 시그니처 변경 없이 store 레이어까지 namespace를 전달한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1747, - "name": "ActionableSchemaParityError", - "qualified_name": "migration.ActionableSchemaParityError", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다.", - "reason": "외부 호출자도 동일한 운영 지침 메시지를 재사용하게 한다.", - "terms": [ - "호출" - ] - }, - { - "id": 103, - "name": "resolveMaxFileBytes", - "qualified_name": "cli.resolveMaxFileBytes", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다.", - "reason": "분석 대상 단일 파일의 최대 크기 제한을 설정 파일 혹은 플래그로부터 결정한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1039, - "name": "loadEdges", - "qualified_name": "docs.Generator.loadEdges", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "심볼 문서에 호출 관계를 표시할 최소 엣지 집합만 조회한다.", - "reason": "심볼 문서에 호출 관계를 표시할 최소 엣지 집합만 조회한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1367, - "name": "BuildStats", - "qualified_name": "workflow.BuildStats", - "kind": "class", - "file_path": "internal/app/ingest/workflow/indexer.go", - "intent": "CLI와 호출자가 빌드 결과 규모를 사용자에게 보여줄 수 있게 한다.", - "reason": "CLI와 호출자가 빌드 결과 규모를 사용자에게 보여줄 수 있게 한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1768, - "name": "SQLiteColumnNotNull", - "qualified_name": "migration.SQLiteColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다.", - "reason": "외부 호출자가 SQLite 컬럼 nullability를 내부 helper 재사용으로 확인하게 한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1863, - "name": "MatchExcludes", - "qualified_name": "pathspec.MatchExcludes", - "kind": "function", - "file_path": "internal/pathspec/match.go", - "intent": "설정과 CLI에서 받은 제외 패턴을 상대 경로에 일관되게 적용한다.", - "reason": "설정과 CLI에서 받은 제외 패턴을 상대 경로에 일관되게 적용한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1767, - "name": "SQLiteColumnExists", - "qualified_name": "migration.SQLiteColumnExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다.", - "reason": "외부 호출자가 SQLite 컬럼 존재 여부를 내부 helper 재사용으로 확인하게 한다.", - "terms": [ - "호출" - ] - }, - { - "id": 1063, - "name": "writeFileDoc", - "qualified_name": "docs.Generator.writeFileDoc", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "단일 소스 파일 문서를 실제 산출물로 저장한다.", - "reason": "단일 소스 파일 문서를 실제 산출물로 저장한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1819, - "name": "Node", - "qualified_name": "graph.Node", - "kind": "class", - "file_path": "internal/domain/graph/node.go", - "intent": "파일 내 선언의 정체성과 위치 정보를 영속화한다.", - "reason": "파일 내 선언의 정체성과 위치 정보를 영속화한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1064, - "name": "writeIndex", - "qualified_name": "docs.Generator.writeIndex", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "전체 파일 문서에 대한 탐색용 index.md를 저장한다.", - "reason": "전체 파일 문서에 대한 탐색용 index.md를 저장한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1731, - "name": "SourceInfo", - "qualified_name": "migration.SourceInfo", - "kind": "class", - "file_path": "internal/db/migration/migration.go", - "intent": "마이그레이션 파일이 embedded인지 external인지와 사용 드라이버를 함께 기록한다.", - "reason": "마이그레이션 파일이 embedded인지 external인지와 사용 드라이버를 함께 기록한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1738, - "name": "ShouldAutoMigrateLocalSQLite", - "qualified_name": "migration.ShouldAutoMigrateLocalSQLite", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다.", - "reason": "자동 마이그레이션을 기본 로컬 ccg.db 같은 안전한 sqlite 경로로만 제한한다.", - "terms": [ - "파일" - ] - }, - { - "id": 75, - "name": "internal/adapters/inbound/cli/init.go", - "qualified_name": "internal/adapters/inbound/cli/init.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "파일" - ] - }, - { - "id": 76, - "name": "newInitCmd", - "qualified_name": "cli.newInitCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "파일" - ] - }, - { - "id": 77, - "name": "resolveInitDest", - "qualified_name": "cli.resolveInitDest", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "reason": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "terms": [ - "파일" - ] - }, - { - "id": 119, - "name": "internal/adapters/inbound/cli/update.go", - "qualified_name": "internal/adapters/inbound/cli/update.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/update.go", - "intent": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", - "reason": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", - "terms": [ - "파일" - ] - }, - { - "id": 120, - "name": "newUpdateCmd", - "qualified_name": "cli.newUpdateCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/update.go", - "intent": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", - "reason": "변경 파일만 해시 기반으로 수집해 증분 그래프 동기화를 수행한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1065, - "name": "renderFileDoc", - "qualified_name": "docs.renderFileDoc", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "파일 수준 어노테이션과 심볼 정보를 사람이 읽는 Markdown으로 직렬화한다.", - "reason": "파일 수준 어노테이션과 심볼 정보를 사람이 읽는 Markdown으로 직렬화한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1067, - "name": "renderIndex", - "qualified_name": "docs.renderIndex", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "생성된 모든 파일 문서와 심볼에 대한 탐색용 표를 만든다.", - "reason": "생성된 모든 파일 문서와 심볼에 대한 탐색용 표를 만든다.", - "terms": [ - "파일" - ] - }, - { - "id": 99, - "name": "resolveOutDir", - "qualified_name": "cli.resolveOutDir", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/root.go", - "intent": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "reason": "명시적 플래그를 우선하되 기본값일 때만 설정 파일의 docs.out을 반영한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1060, - "name": "internal/app/docs/template.go", - "qualified_name": "internal/app/docs/template.go", - "kind": "file", - "file_path": "internal/app/docs/template.go", - "intent": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", - "reason": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", - "terms": [ - "파일" - ] - }, - { - "id": 1061, - "name": "nodeGroup", - "qualified_name": "docs.nodeGroup", - "kind": "class", - "file_path": "internal/app/docs/template.go", - "intent": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", - "reason": "한 소스 파일의 문서 렌더링에 필요한 노드·어노테이션·엣지를 묶는다.", - "terms": [ - "파일" - ] - }, - { - "id": 1062, - "name": "groupByFile", - "qualified_name": "docs.groupByFile", - "kind": "function", - "file_path": "internal/app/docs/template.go", - "intent": "문서 렌더러가 파일 단위로 반복할 수 있게 입력 데이터를 재구성한다.", - "reason": "문서 렌더러가 파일 단위로 반복할 수 있게 입력 데이터를 재구성한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1672, - "name": "TreeNode", - "qualified_name": "wiki.TreeNode", - "kind": "class", - "file_path": "internal/app/wiki/model.go", - "intent": "Wiki 탐색 트리에서 디렉터리, 패키지, 파일, 심볼을 동일 구조로 표현한다.", - "reason": "Wiki 탐색 트리에서 디렉터리, 패키지, 파일, 심볼을 동일 구조로 표현한다.", - "terms": [ - "파일" - ] - }, - { - "id": 65, - "name": "internal/adapters/inbound/cli/docs.go", - "qualified_name": "internal/adapters/inbound/cli/docs.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", - "reason": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", - "terms": [ - "파일" - ] - }, - { - "id": 66, - "name": "newDocsCmd", - "qualified_name": "cli.newDocsCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/docs.go", - "intent": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", - "reason": "그래프 데이터를 파일별 Markdown 문서와 브라우저 Wiki 인덱스로 변환하는 명령을 노출한다.", - "terms": [ - "파일" - ] - }, - { - "id": 1051, - "name": "Lint", - "qualified_name": "docs.Generator.Lint", - "kind": "function", - "file_path": "internal/app/docs/lint.go", - "intent": "문서 파일, 그래프 노드, 어노테이션을 교차 검증해 문서 건강 상태를 계산한다.", - "reason": "문서 파일, 그래프 노드, 어노테이션을 교차 검증해 문서 건강 상태를 계산한다.", - "terms": [ - "파일" - ] - } - ] - }, - "읽지 못한 파일을 업데이트에서 삭제된 것으로 보지 않는 기준은 어디야": { - "corpus": 1901, - "terms": [ - { - "text": "읽지", - "in_reasons": 0 - }, - { - "text": "못한", - "in_reasons": 0 - }, - { - "text": "파일을", - "in_reasons": 3 - }, - { - "text": "업데이트에서", - "in_reasons": 0 - }, - { - "text": "삭제된", - "in_reasons": 0 - }, - { - "text": "것으로", - "in_reasons": 0 - }, - { - "text": "보지", - "in_reasons": 0 - }, - { - "text": "않는", - "in_reasons": 2 - }, - { - "text": "기준은", - "in_reasons": 0 - }, - { - "text": "어디야", - "in_reasons": 0 - } + "네임스페이스 설정이 플래그 기본값에 가려지지 않게 하는 곳은 어디야": [ + 17, + 23, + 46, + 51, + 52, + 55, + 1017 ], - "hits": [ - { - "id": 138, - "name": "MCPAuthMiddleware", - "qualified_name": "server.MCPAuthMiddleware", - "kind": "function", - "file_path": "internal/adapters/inbound/http/serve.go", - "intent": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다.", - "reason": "/mcp 요청에 선택적 bearer 인증을 적용해 외부 접근을 제한한다.", - "terms": [ - "않는" - ] - }, - { - "id": 1049, - "name": "DeadRef", - "qualified_name": "docs.DeadRef", - "kind": "class", - "file_path": "internal/app/docs/lint.go", - "intent": "해석되지 않는 @see 참조를 수집해 문서 링크 정합성을 점검한다.", - "reason": "해석되지 않는 @see 참조를 수집해 문서 링크 정합성을 점검한다.", - "terms": [ - "않는" - ] - }, - { - "id": 75, - "name": "internal/adapters/inbound/cli/init.go", - "qualified_name": "internal/adapters/inbound/cli/init.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "파일을" - ] - }, - { - "id": 76, - "name": "newInitCmd", - "qualified_name": "cli.newInitCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "reason": "프로젝트 또는 사용자 범위에 기본 .ccg 설정 파일을 생성한다.", - "terms": [ - "파일을" - ] - }, - { - "id": 77, - "name": "resolveInitDest", - "qualified_name": "cli.resolveInitDest", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/init.go", - "intent": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "reason": "init 명령이 어느 위치에 설정 파일을 만들어야 하는지 결정한다.", - "terms": [ - "파일을" - ] - } - ] - }, - "코드가 바뀐 뒤 어떤 주석을 다시 확인해야 하는지는 어디서 판단해": { - "corpus": 1901, - "terms": [ - { - "text": "코드가", - "in_reasons": 4 - }, - { - "text": "바뀐", - "in_reasons": 0 - }, - { - "text": "뒤", - "in_reasons": 0 - }, - { - "text": "어떤", - "in_reasons": 1 - }, - { - "text": "주석을", - "in_reasons": 0 - }, - { - "text": "다시", - "in_reasons": 3 - }, - { - "text": "확인해야", - "in_reasons": 0 - }, - { - "text": "하는지는", - "in_reasons": 0 - }, - { - "text": "어디서", - "in_reasons": 1 - }, - { - "text": "판단해", - "in_reasons": 0 - } + "여러 묶음으로 읽은 파일 사이의 호출 관계는 왜 마지막에 한꺼번에 연결하지": [ + 7, + 8, + 19, + 21, + 23, + 51, + 55, + 72, + 73, + 98, + 986, + 997, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1012, + 1311, + 1312, + 1619, + 1643, + 1673, + 1682, + 1691, + 1713, + 1714, + 1775, + 1816 + ], + "읽지 못한 파일을 업데이트에서 삭제된 것으로 보지 않는 기준은 어디야": [ + 19, + 21, + 23, + 92, + 995 ], - "hits": [ - { - "id": 1800, - "name": "CommunityMembership", - "qualified_name": "graph.CommunityMembership", - "kind": "class", - "file_path": "internal/domain/graph/community.go", - "intent": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다.", - "reason": "특정 노드가 어떤 커뮤니티에 속하는지 연결한다.", - "terms": [ - "어떤" - ] - }, - { - "id": 1036, - "name": "Run", - "qualified_name": "docs.Generator.Run", - "kind": "function", - "file_path": "internal/app/docs/generator.go", - "intent": "전체 문서 산출물을 한 번에 다시 생성한다.", - "reason": "전체 문서 산출물을 한 번에 다시 생성한다.", - "terms": [ - "다시" - ] - }, - { - "id": 1853, - "name": "SetGlobal", - "qualified_name": "obs.SetGlobal", - "kind": "function", - "file_path": "internal/obs/trace.go", - "intent": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "reason": "서버 초기화 이후 어디서나 같은 tracer를 쓰도록 전역 핸들을 갱신한다.", - "terms": [ - "어디서" - ] - }, - { - "id": 63, - "name": "internal/adapters/inbound/cli/build.go", - "qualified_name": "internal/adapters/inbound/cli/build.go", - "kind": "file", - "file_path": "internal/adapters/inbound/cli/build.go", - "intent": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", - "reason": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", - "terms": [ - "다시" - ] - }, - { - "id": 64, - "name": "newBuildCmd", - "qualified_name": "cli.newBuildCmd", - "kind": "function", - "file_path": "internal/adapters/inbound/cli/build.go", - "intent": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", - "reason": "소스 트리를 전체 재파싱해 그래프와 검색 인덱스를 다시 만드는 CLI 명령을 노출한다.", - "terms": [ - "다시" - ] - }, - { - "id": 1772, - "name": "PostgresColumnNotNull", - "qualified_name": "migration.PostgresColumnNotNull", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 검증 코드가 PostgreSQL 컬럼 nullability를 재사용 가능한 API로 확인하게 한다.", - "reason": "외부 검증 코드가 PostgreSQL 컬럼 nullability를 재사용 가능한 API로 확인하게 한다.", - "terms": [ - "코드가" - ] - }, - { - "id": 1773, - "name": "PostgresColumnDataType", - "qualified_name": "migration.PostgresColumnDataType", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 검증 코드가 PostgreSQL 컬럼 타입을 재사용 가능한 API로 확인하게 한다.", - "reason": "외부 검증 코드가 PostgreSQL 컬럼 타입을 재사용 가능한 API로 확인하게 한다.", - "terms": [ - "코드가" - ] - }, - { - "id": 1775, - "name": "PostgresIndexExists", - "qualified_name": "migration.PostgresIndexExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 검증 코드가 Postgres 인덱스 존재 여부를 재사용 가능한 API로 확인하게 한다.", - "reason": "외부 검증 코드가 Postgres 인덱스 존재 여부를 재사용 가능한 API로 확인하게 한다.", - "terms": [ - "코드가" - ] - }, - { - "id": 1777, - "name": "PostgresTriggerExists", - "qualified_name": "migration.PostgresTriggerExists", - "kind": "function", - "file_path": "internal/db/migration/migration.go", - "intent": "외부 검증 코드가 Postgres 트리거 존재 여부를 재사용 가능한 API로 확인하게 한다.", - "reason": "외부 검증 코드가 Postgres 트리거 존재 여부를 재사용 가능한 API로 확인하게 한다.", - "terms": [ - "코드가" - ] - } + "코드가 바뀐 뒤 어떤 주석을 다시 확인해야 하는지는 어디서 판단해": [ + 5, + 6, + 983, + 1719, + 1720, + 1723, + 1726, + 1751, + 1806 ] } } diff --git a/internal/app/search/rank/testdata/queries.json b/internal/app/search/rank/testdata/queries.json index 0a6aa351..398b119d 100644 --- a/internal/app/search/rank/testdata/queries.json +++ b/internal/app/search/rank/testdata/queries.json @@ -1,9 +1,9 @@ { "corpus": { - "source": "CCG's own graph, captured 2026-08-10", + "source": "CCG's own graph, built from current source and captured 2026-08-11", "namespace": "ccg", - "nodes": 1929, - "note": "Candidates in candidates.json were captured by replaying the production FTS path (searchsql.SQLiteBackend.Query with rank.FetchLimit(10)) against that graph; intent_candidates.json was captured the same way through Reader.QueryIntent. Both captures are frozen: they never re-read a database, so a metric change is attributable to the search service alone." + "nodes": 1967, + "note": "Candidates in candidates.json and the matched reason documents in intent_candidates.json were captured from the same scratch graph. The latter also stores the corpus size and node identity needed to replay intentrank.Rank. Both captures are frozen: they never re-read a database, so a metric change is attributable to the search service alone." }, "authorship": { "written_by": "assistant, 2026-08-08, before running any measurement; 47 intent questions merged in 2026-08-10 from the retired intent golden set, keeping their original file-level judgments as relevant_files",