Fig 4The storePoint at a drawer or a frame · RThe file · ~/.aftertrace/aftertrace.duckdb, one DuckDB file (--db)
The part you point at; a drawer opens and stands its column card upLight: traces in indigo, logs in teal, metrics in amberR sends the last batches again: keyed drawers replace, the others file a second copyThe store is one DuckDB file, ~/.aftertrace/aftertrace.duckdb by default. It has 4 tables: spans (12 columns), span_events (5 columns), events (10 columns), metric_points (7 columns). Spans are keyed on trace_id and span_id, so a span sent twice replaces itself; events and metric points have no key and are stored as often as they arrive. Writes go one batch at a time; reads never wait. 5 views (llm, tools, q_spans, turn_roots, calls) join the tables into what the UI, the rules and Ask read.