Skip to content

How GraveTrail works

GraveTrail keeps presentation separate from parsing, storage and investigation. The UI, CLI and MCP adapters call shared services. No imported SQL, SAS or CSV content is executed.

flowchart TB
    Sources[SQL / SAS / CSV] --> Import[Safe import and inventory]
    Import --> Parse[Static parsers]
    Parse --> Resolve[Identity and cross-file resolution]
    Resolve --> Store[(DuckDB and original blobs)]
    Store --> Graph[Lineage and direct usage]
    Graph --> UI[Streamlit / CLI / MCP]
    Graph --> Export[Reports and offline graph]
    Parse -. bounded optional context .-> AI[Validated AI assistance]
    AI -. explicit inferred merge .-> Store
Question Reference
Where do services, UI and persistence belong? System architecture
How are originals, operations and evidence versioned? Data model
How are assets resolved and temporary steps collapsed? Lineage engine
Which SQL constructs are supported? SQL coverage
What do SAS rules resolve, and what stays uncertain? SAS coverage
How are prompts and grounded claims validated? Prompt engineering and LLM integration
What protects imports, secrets and destructive operations? Security model
What has actually been measured? Performance evidence

Keep the distinction between facts and inference

Asset identity uses stable IDs and namespace/job context, not a global table-name merge. Ambiguous names stay unresolved. Evidence pins original source hashes and exact line ranges, so a later import cannot silently replace the statement behind an earlier edge. Temporary contraction keeps its underlying logical steps and provenance.

Direct column usage reports references to the selected source. The separate transformation service follows output/value derivations with bounded traversal and coverage markers. Wildcards expand only with trustworthy schema evidence. Logical dependency order does not establish runtime execution order.

For implementation conventions and adding parsers, continue to development.