{"scenario":"simple FTS match","nodes":[{"id":"n1","node_type":"concept","title":"Rust ownership","body":"Rust uses ownership and borrowing for memory safety","tags":["rust","memory"],"projects":["llm-kernel"],"importance":0.9,"created":"2025-01-15T10:00:00Z"},{"id":"n2","node_type":"concept","title":"Python GIL","body":"Python has a global interpreter lock for thread safety","tags":["python","threading"],"projects":["epiccounty"],"importance":0.7,"created":"2025-01-16T10:00:00Z"}],"edges":[{"source":"n1","target":"n2","relation":"contrasts","weight":0.5}],"query_type":"fts_search","query_term":"memory safety","expected_ids":["n1"]}
{"scenario":"FTS by title keyword","nodes":[{"id":"n3","node_type":"decision","title":"Use SQLite for storage","body":"Decided to use SQLite as the primary storage backend","tags":["database","sqlite"],"projects":["llm-kernel"],"importance":0.8,"created":"2025-02-01T10:00:00Z"},{"id":"n4","node_type":"concept","title":"SQLite FTS5","body":"Full-text search using SQLite FTS5 virtual tables","tags":["sqlite","search"],"projects":["llm-kernel"],"importance":0.7,"created":"2025-02-02T10:00:00Z"},{"id":"n5","node_type":"concept","title":"PostgreSQL vs SQLite","body":"Comparison of PostgreSQL and SQLite for embedded use","tags":["database"],"projects":["epiccounty"],"importance":0.5,"created":"2025-02-03T10:00:00Z"}],"edges":[{"source":"n3","target":"n4","relation":"uses","weight":0.9},{"source":"n4","target":"n5","relation":"contrasts","weight":0.4}],"query_type":"fts_search","query_term":"SQLite","expected_ids":["n3","n4"]}
{"scenario":"FTS body match","nodes":[{"id":"n6","node_type":"pattern","title":"Error handling pattern","body":"Use anyhow for application errors and thiserror for library errors in Rust","tags":["rust","error"],"projects":["llm-kernel"],"importance":0.6,"created":"2025-03-01T10:00:00Z"},{"id":"n7","node_type":"decision","title":"Error strategy","body":"Decided to use KernelError enum via thiserror for domain errors","tags":["rust","error"],"projects":["llm-kernel"],"importance":0.8,"created":"2025-03-02T10:00:00Z"}],"edges":[{"source":"n6","target":"n7","relation":"informs","weight":0.7}],"query_type":"fts_search","query_term":"thiserror","expected_ids":["n6","n7"]}
{"scenario":"FTS single result","nodes":[{"id":"n8","node_type":"concept","title":"Embedding vectors","body":"Text embeddings convert natural language to dense vector representations","tags":["embedding","nlp"],"projects":["llm-kernel"],"importance":0.9,"created":"2025-04-01T10:00:00Z"},{"id":"n9","node_type":"concept","title":"Token estimation","body":"Heuristic token counting without external dependencies","tags":["tokens","utility"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-04-02T10:00:00Z"}],"edges":[],"query_type":"fts_search","query_term":"embedding","expected_ids":["n8"]}
{"scenario":"FTS no match","nodes":[{"id":"n10","node_type":"concept","title":"Graph traversal","body":"BFS and DFS traversal algorithms for knowledge graphs","tags":["graph","algorithm"],"projects":["llm-kernel"],"importance":0.7,"created":"2025-05-01T10:00:00Z"}],"edges":[],"query_type":"fts_search","query_term":"quantum computing","expected_ids":[]}
{"scenario":"importance ordering","nodes":[{"id":"n11","node_type":"decision","title":"Critical decision A","body":"Architecture decision for the core system design","tags":["architecture"],"projects":["llm-kernel"],"importance":0.95,"created":"2025-06-01T10:00:00Z"},{"id":"n12","node_type":"concept","title":"Minor concept B","body":"A supporting concept for the architecture","tags":["architecture"],"projects":["llm-kernel"],"importance":0.3,"created":"2025-06-02T10:00:00Z"}],"edges":[],"query_type":"fts_search","query_term":"architecture","expected_ids":["n11","n12"]}
{"scenario":"multi-word FTS","nodes":[{"id":"n13","node_type":"concept","title":"Vector search","body":"Approximate nearest neighbor search with quantization for fast retrieval","tags":["search","vector"],"projects":["llm-kernel"],"importance":0.8,"created":"2025-07-01T10:00:00Z"},{"id":"n14","node_type":"concept","title":"BM25 search","body":"Traditional keyword-based search using BM25 scoring algorithm","tags":["search","keyword"],"projects":["llm-kernel"],"importance":0.7,"created":"2025-07-02T10:00:00Z"}],"edges":[{"source":"n13","target":"n14","relation":"complements","weight":0.6}],"query_type":"fts_search","query_term":"search retrieval","expected_ids":["n13"]}
{"scenario":"tag in body context","nodes":[{"id":"n15","node_type":"pattern","title":"Feature gating","body":"Use Cargo feature gates to control optional dependencies in Rust crates","tags":["rust","cargo"],"projects":["llm-kernel"],"importance":0.6,"created":"2025-08-01T10:00:00Z"},{"id":"n16","node_type":"pattern","title":"Workspace layout","body":"Organize related crates in a Cargo workspace for shared dependencies","tags":["rust","cargo"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-08-02T10:00:00Z"}],"edges":[{"source":"n15","target":"n16","relation":"related","weight":0.3}],"query_type":"fts_search","query_term":"Cargo","expected_ids":["n15","n16"]}
{"scenario":"CJK content","nodes":[{"id":"n17","node_type":"concept","title":"소유권 시스템","body":"Rust의 소유권과 대여 시스템은 메모리 안전성을 보장합니다","tags":["rust","memory"],"projects":["llm-kernel"],"importance":0.8,"created":"2025-09-01T10:00:00Z"},{"id":"n18","node_type":"concept","title":"라이프타임","body":"Rust 라이프타임은 참조의 유효 기간을 명시합니다","tags":["rust"],"projects":["llm-kernel"],"importance":0.7,"created":"2025-09-02T10:00:00Z"}],"edges":[{"source":"n17","target":"n18","relation":"related","weight":0.8}],"query_type":"fts_search","query_term":"소유권","expected_ids":["n17"]}
{"scenario":"mixed language FTS","nodes":[{"id":"n19","node_type":"decision","title":"provider 도입","body":"Decided to use a provider pattern for multiple LLM backends","tags":["architecture","provider"],"projects":["llm-kernel"],"importance":0.9,"created":"2025-10-01T10:00:00Z"},{"id":"n20","node_type":"concept","title":"catalog system","body":"Provider catalog manages service descriptors and capability profiles","tags":["provider"],"projects":["llm-kernel"],"importance":0.6,"created":"2025-10-02T10:00:00Z"}],"edges":[{"source":"n19","target":"n20","relation":"uses","weight":0.7}],"query_type":"fts_search","query_term":"provider","expected_ids":["n19","n20"]}
{"scenario":"pagerank hub dominance","nodes":[{"id":"hub","node_type":"concept","title":"Central hub","body":"Receives from many sources","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-11-01T10:00:00Z"},{"id":"alpha","node_type":"concept","title":"Alpha","body":"Leaf pointing at hub","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-11-02T10:00:00Z"},{"id":"beta","node_type":"concept","title":"Beta","body":"Leaf pointing at hub","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-11-03T10:00:00Z"},{"id":"gamma","node_type":"concept","title":"Gamma","body":"Leaf pointing at hub","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-11-04T10:00:00Z"}],"edges":[{"source":"alpha","target":"hub","relation":"related","weight":0.9},{"source":"beta","target":"hub","relation":"related","weight":0.9},{"source":"gamma","target":"hub","relation":"related","weight":0.9}],"query_type":"pagerank","query_term":null,"expected_ids":["hub"]}
{"scenario":"pagerank sink outranks source","nodes":[{"id":"root","node_type":"concept","title":"Root","body":"Pure source","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-12-01T10:00:00Z"},{"id":"a","node_type":"concept","title":"A","body":"Mid","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-12-02T10:00:00Z"},{"id":"b","node_type":"concept","title":"B","body":"Mid","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-12-03T10:00:00Z"},{"id":"sink","node_type":"concept","title":"Sink","body":"Pure sink","tags":["graph"],"projects":["llm-kernel"],"importance":0.5,"created":"2025-12-04T10:00:00Z"}],"edges":[{"source":"root","target":"a","relation":"related","weight":1.0},{"source":"root","target":"b","relation":"related","weight":1.0},{"source":"a","target":"sink","relation":"related","weight":1.0},{"source":"b","target":"sink","relation":"related","weight":1.0}],"query_type":"pagerank","query_term":null,"expected_ids":["sink"]}
