Kihagyás

Two-tier graph extraction#

A pattern#

Knowledge-graph építéskor (Memgraph / Neo4j / Cypher-store-ba) NE indulj direkt LLM-extraction-nel. Helyette:

Tier 1 (deterministic baseline) — Zero-LLM, regex/parser-based: - Wikilink-importer: \[\[([^\]|]+?)(\|[^\]]+)?\]\] regex → (:SourceFile)-[:MENTIONS]->(:WikiLink) edges - Frontmatter-importer: tags:/linked-to:/depends-on: YAML mezők → typed edges - Filesystem-importer: directory-structure → (:SourceFile)-[:LOCATED_IN]->(:Folder) edges - Cost: $0, latency: O(seconds), idempotens

Tier 2 (LLM-enrichment) — Subagent-fanout-pattern-rel: - Implicit relations a markdown-szöveg-ből (entity-pair → typed-relation) - Cost: $0 (subscription) ha claude-code subagent-fanout, idő O(perc) - Confidence-tagged: minden LLM-edge confidence: 0.0-1.0 mezővel

Eval: A Tier-1 a Tier-2 ground-truth-ja — ha a Tier-2 NEM tartalmazza a Tier-1-ben szereplő edge-eket, akkor extraction-recall < 100%.

Élő példa (2026-05-17-obsidian-vault-2)#

A vault 08-Sessions/, 02-Projects/, 07-Decisions/, 11-wiki/ mappáit Memgraph-ba ingest-elve:

  • Tier 1 (Wikilink-importer): 556 :SourceFile + 562 :WikiLink + 1954 :MENTIONS edges zero-cost-tal, ~22s scan
  • Tier 2 (LLM-extracted, Week 1-α): 8975 :Entity + 12160 :Literal + 13812 typed-relations subagent-fanout-pattern-rel
  • Overlap: ~30% (a sokak közös subject-eken mind a baseline mind az LLM-pass találja). A 70% LLM-only relations = implicit relation-ok (pl. "X uses Y" without explicit wikilink)

Top hubok a deterministic baseline-ben: 1. 05-Memory/Infrastructure (67 inbound) — szervezeti tudás-központ 2. 02-Projects/Index (38 inbound) — projekt-katalógus 3. 11-wiki/Crystallization-protocol (38 inbound) — protokoll-hivatkozás-magnet

A kétréteg ROI-ja#

  • Tier 1 alone (no LLM): O(s) build, O(s) update; kevés implicit relation, magas precision, alacsony recall
  • Tier 2 alone (LLM-only): O(óra) build, magasabb recall, de NO ground-truth → schema-drift risk
  • Both tiers: Tier 1 mint regression-test, Tier 2 enrichment → optimum

Mikor érdemes alkalmazni#

  • ✅ Bármilyen markdown-knowledge-base graph-szerű query-vel (Obsidian-vault, doc-portál, wiki)
  • ✅ Bármilyen graph-extraction-pipeline, ahol az LLM-eredmény ellenőrizhetőség fontos
  • ✅ Schema-versioning kontextusban — a Tier-1 stabil, Tier-2 LLM-prompt-evolúcióval változhat

2026-05-18 — graphify-tool mint Tier-2 deterministic referencia VERIFIED#

A korábban hipotetikus Tier-1 (regex/wikilink) + Tier-2 (LLM-extract) sémát most gyakorlatban verifikáltuk egy konkrét external-tool-lal: safishamsi/graphify (uv tool install graphifyy 0.8.11).

A graphify egy pure-deterministic tree-sitter AST + Leiden clustering pipeline ($0 cost, NEM-LLM), ami a vault-on: - 5,846 node / 5,479 edge / 437 community (content-filtered: 02-Projects + 07-Decisions + 11-wiki + 06-Audits + 08-Sessions + 05-Memory + 00-Meta) - graph.html 4.8 MB (force-directed interactive viz) - GRAPH_REPORT.md 160 KB ("Surprising connections" + community-list + god-nodes)

A meglevő Memgraph entity-graph (LLM-based vault-graph-extract, 8,997 entity / 28.9% typed) és a graphify-output két különböző csomóponti-modellt ad: - Memgraph: szemantikai entitások (Concept, Decision, Sprint, Project, Skill, Person, ...) - Graphify: szintaktikai node-ok (function-call, import, file-reference, AST-leaf)

Cross-validation use-case: ha egy entity csak az LLM-graph-ban van DE a deterministic-graph-ban NINCS → hallucinációs gyanú; fordítva: ha csak a tree-sitter-ben → LLM nem ismerte fel a koncepciót.

Az eredeti two-tier-pattern most már elérhető-egészen: - Tier-1A (regex-wikilink) — vault-graph-mentions-extract ÉLES (1954 :MENTIONS edge) - Tier-1B (tree-sitter AST) — graphify ÉLES (5,846 deterministic node) - Tier-2 (LLM-extract) — vault-graph-extract + vault-graph-retype (8,997 typed entity)

2026-05-19 — Jaccard 0.0070 finding (LLM-noise signal)#

A vault-graph-diff CLI (mega-session Round 8) lefuttatta a two-tier cross-validation-t. Eredmény:

Layer Count Both Layer-only
Tier-1 (Memgraph LLM) 12,778 entity 119 12,512
Tier-2 (graphify deterministic) 4,439 node 119 4,320
Jaccard agreement 0.0070

A 0.7% agreement-rate alacsony de értelmezhető: a Tier-1 LLM-extraction sok zajt fog (quoted strings mint !busy && !mutedForTTS guard, hex-color értékek #06b6d4-cyan, code-snippet fragmentumokat) "entitásként", a Tier-2 graphify pedig structural code-symbol-okat fog amiket az LLM helyesen nem promóvál entity-szintre.

A használat: a diff-output két szegmense actionable:

  • Tier-1 only (vault-graph-diff --tier-1-only) — heurisztika-classifier name-like/fragment/short-token címkékkel → potential LLM-hallucination cleanup-list
  • Tier-2 only (vault-graph-diff --tier-2-only) — concept-like/file-ref/snake_case-ident → potential coverage gap az LLM-extraction-ben

Wider lesson: ahol két ortogonális extraction-stack működik párhuzamosan, a diff maga = signal a NOISE-ról. Ez reusable pattern bármely "LLM + deterministic" hybrid stack-en, NEM csak graph-extraction-ra. Ld. stale-numbers-in-static-artifacts-pattern.en hasonló cross-source-corroboration anti-rot disciplinát.

2026-05-19 PM — Cleanup did NOT lift Jaccard, structural vocab-merge required#

Tier-A + Tier-C noise-DELETE (12,778 → 8,913 entity, -30.2%) + extraction-prompt tightening (vocab v3, 7 anti-noise rule) — empirikus eredmény:

Phase Memgraph entities graphify entities Jaccard
Pre-cleanup 12,778 4,439 0.0070
Post-cleanup 8,913 4,439 0.0078

Δ Jaccard = +0.0008. A Phase-4 acceptance gate (≥0.05) NEM teljesül.

Mechanism: a két extraction-stack (LLM Tier-1 narrative vs tree-sitter Tier-2 code-symbol) ortogonális vocabulary-t termel. A noise-DELETE csak a denominator-t (Tier-1 ∪ Tier-2 méretét) csökkenti, a numerator-t (Tier-1 ∩ Tier-2 méretét) nem növeli. A maradék 8,913 narrative-concept és 4,439 code-symbol között strukturálisan kevés az átfedés.

Wider lesson: cross-validation Jaccard két ortogonális-vocab stack között soha nem ér el >0.5-ös értéket pure-DELETE-tel; structural vocab-merge KÖTELEZŐ. Két opció:

  • Option A (selective re-extract) — tightened prompt → új extraction → LLM-output átsoroldódik code-symbol szintre is. ETA ~3-4h.
  • Option B (tree-sitter pre-pass) — vault-ko-ingest hibrid-pass: tree-sitter tokenize → symbol-extract (LLM-output ∪ tree-sitter-output). Direct vocabulary-overlap-növelés. ETA 1 nap design + 2-3h impl.

Recommended sequence: Option-A először (gyorsabb ROI), aztán Option-B ha Phase-4 gate még mindig nem teljesül. ETA acceptance: ~2026-06-02.

Részletek: ../06-Audits/2026-05-19 Memgraph cleanup execution result + ../06-Audits/2026-05-19 Memgraph cleanup Phase-3 next-step plan + llm-graph-noise-cleanup-composite-filter (filter-pattern wiki).

2026-05-20 — Option-B tree-sitter pre-pass design (SUPERSEDED, empirically refuted)#

A Phase-3 result (post---reset Memgraph: 9,517 Tier-1 vs 4,439 Tier-2, Jaccard 0.0071) megerősítette a 2026-05-19 PM finding-et: pure prompt-tightening NEM emeli a Jaccard-ot, mert a két extraction-stack ortogonális-vocabulary-t termel. A Tier-1 LLM-anti-noise rule #3 (code-keyword ban) és #6 (fenced-code-block exclusion) szándékosan kihagyja a code-symbol-okat — pontosan azokat, amiket a Tier-2 tree-sitter felfog. A két "fél" együtt fedi le a corpus-t, de a metszetük természetesen kicsi.

Az Option-B (tree-sitter pre-pass) azt javasolta, hogy egy determinisztikus pre-pass parse-olja a markdown fenced-code-blokkokat (regex-fallback Python/JS/Bash/SQL-re), és 8 új typed-predikátum (defines_function, defines_class, defines_method, defines_constant, imports, exports, calls_function, declares_variable) alá emit triple-eket — a feltételezés szerint byte-identikus szimbólumneveket kapva mint a graphify Tier-2, közvetlen Jaccard-intersection-növekedéssel.

🔴 2026-05-20 PM empirikus cáfolat (treesitter-prepass-sandbox branch-en): a graphify-out/graph.json inspekciója megmutatta, hogy graphify 0 Python source-fájlt parse-olt (367 md + 2 json + 1 sh az input, .vault-ko/scripts/*.py excluded). graphify labels markdown-section-paths (e.g. 11_wiki_foxxi_design_system_page_level, Cél, Findings), NEM code-symbol-ok mint def extract_facts. A 156 prepass-extraktált Python-symbol (os, Path, extract_facts, …) 0 graphify-overlap-tal rendelkezne — Jaccard mozogna 0.0069 → 0.0068 (regresszió a union-növekedés miatt, intersection-növekedés nélkül).

A két tier-vocabulary disjoint source-okból van, nem csak különböző distribution ugyanazon tér felett: LLM Tier-1 = magyar/angol semantic concepts prózában (non-deterministic agent behavior, Hostinger MCP SSH key discovery), graphify Tier-2 = markdown-strukturális path-ok (02_projects_kgc_erp). Code-symbol prepass semmilyen méretben nem hídalja át.

Részletek: ../06-Audits/2026-05-20 Option-B premise empirical refutation — graphify vocabulary is markdown not code. Tanulság: inspect actual output, not advertised tooling. Az ADR a graphify-package metadata-jából (tree-sitter-multi-language support) következtetett, NEM a tényleges graph.json-ból. A vendor-feature-verify-before-workaround mintát itt sajátmagunkra is alkalmazni kellett volna (vendor-feature-verify-before-workaround). Az integration code (env-gate, vocab v4, extract_facts_treesitter) érvényes és a treesitter-prepass-sandbox branchen marad mint KO-DB-only capability (defines_* query-k független érték).

2026-05-20 — Jaccard ≥0.05 acceptance gate is misformed#

Az orthogonalitás-finding implikálja: a ≥0.05 Jaccard-target rosszul-választott proxy "egyetértésre". Két extractor, ami különböző parsing-rétegekre épül (LLM-narrative-concepts vs markdown-structural-paths), alacsony Jaccard-ot KELL hogy adjon — high Jaccard gyanús lenne. A helyes Path-Z (lásd az audit-ot) komplementaritás-metrika-cserére javasol váltani:

  • File-coverage agreement: % a vault-fájlok közül ami BOTH ≥1 tier-1 ÉS ≥1 tier-2 entitást ad ("agreement on what's important" softer mérce)
  • Co-occurrence density: ha egy tier-1 entity létezik X.md-ben, milyen gyakran létezik tier-2 path-node ugyanannak X.md-nek?
  • Cross-reference: tier-1 LangGraph entitásnak van-e párja a tier-2 11_wiki_langgraph_* path-node-ban? Ez a HOW OFTEN, NEM a labels-match.

Path-Z a honest answer: a két-rétegű orthogonalitás feature, nem defect. Sprint-2-ben új ADR-ben deklarálva.

2026-05-21 — Sprint-3 cleanup: FCA 1.0 + CD target revision#

Két finomítás landolt a Path-Z ADR Sprint-2-baseline-jén túl:

(a) Corpus normalization — FCA 0.93 → 1.0#

A 171/171 Tier-1 backfill után FCA = 0.9297-ben stabilizálódott a 26 tier2-only fájlon: 23 markdown a 00-Meta/ + 05-Memory/ alól (vault-meta dirs amit a KO-DB ingest by-design SKIP-pel) + 2 JSON + 1 shell. Ezek a fájlok nem tartoznak a Tier-1 ingestible corpus-hoz, így a complementarity-metrikának corpus-normalize-olnia kell ŐKET — vagyis a Tier-2 oldalról is ki kell szűrnünk őket, hogy ugyanazon a fájl-halmazon mérjünk.

vault-graph-complementarity patch (2026-05-21):

  • új --exclude-dir <DIR> repeatable flag, default 00-Meta, 05-Memory
  • új --include-suffix <SFX> repeatable flag, default .md
  • mindkettő uniform-ként alkalmazva BOTH Tier-1 és Tier-2 oldalon — corpus-symmetry biztosított
  • --no-corpus-normalize opt-out flag a legacy/baseline 0.9297 mérés reprodukálására

Post-normalize eredmény: FCA 1.0, XR_T1 1.0, XR_T2 1.0. Mindhárom file-szintű metrika tisztán átment a ≥0.95 / ≥0.80 targeteket.

A wider lesson: amikor két extractor disjoint corpus-policy-vel fut (Tier-1 markdown-only + vault-meta-skip, Tier-2 anything-walkable), a "fair complementarity" méréshez a lazább oldalt kell visszametszeni a szigorúbb oldal corpus-definíciójára. Hardcoded filterek a measurement-szkriptben rosszak (rejtett config-drift); explicit CLI flags + dokumentált default kombináció jó.

(b) CD target revision ≥0.50 → ≥0.35#

A 171/171 backfill után CD = 0.40-en plateau-zott. A Path-Z ADR ≥0.50 targetje empirikusan elérhetetlennek bizonyult anélkül hogy vagy (i) Tier-2 per-file outputját mesterségesen cap-elnénk (eldobjuk graphify struktúra-density signal-ját), vagy (ii) Tier-1 granularity-jét inflációlnánk (LLM section-path entity-ket bányászna → vocabulary collapse, Tier-1 abstraction elveszik).

Empirikus per-file regimes (post-backfill audit):

Regime Példa Tier-1 Tier-2 Density
Narrative-heavy superintelligent-vault-research.md 129 17 0.13
Structure-heavy Eval_Trend.md (audit, tables) 24 ~60 ~0.40
Balanced hellopack-wordpress-plugin-suite.md 80 76 0.95

A long-narrative wikis dominálják a corpus-átlagot és lehúzzák CD-t 0.40 köré — by design.

Új CD-band-interpretáció (../07-Decisions/2026-05-20 CD target revision — narrative-structural asymmetry):

CD range Reading
≥ 0.50 Vocabulary collapse — két extractor azonos rétegre konvergál, gyanús
0.35 – 0.50 Healthy orthogonal complementarity — különböző réteg, mindkettő signal-ad
0.20 – 0.35 Strong asymmetry — egyik corpus extraction-density bug-os lehet
< 0.20 Measurement bug vagy mis-config

Current 0.3967 = healthy band. Goodhart-warning: ha "higher is better" target-et adunk egy by-design-bounded metrikára, a hit-rate növelés a metrikát definiáló tulajdonságot rombolja le. CD a metric, ami fines middle-band-ben kell maradjon, NEM 1.0-höz konvergáljon.

Sprint-3 acceptance ✅✅✅✅: FCA 1.0 ≥0.95 / CD 0.40 ≥0.35 / XR_T1 1.0 ≥0.95 / XR_T2 1.0 ≥0.80.

Kapcsolódó#