1+ <!doctype html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="utf-8 ">
5+ < title > TraceFrame Audit Report</ title >
6+ < style >
7+ : root {
8+ color-scheme : light;
9+ --ink : # 1d2733 ;
10+ --muted : # 647184 ;
11+ --line : # d9e0e8 ;
12+ --soft : # f6f8fb ;
13+ --panel : # ffffff ;
14+ --accent : # 1b7f7a ;
15+ --warn : # a15c00 ;
16+ --bad : # b42318 ;
17+ }
18+ * { box-sizing : border-box; }
19+ body {
20+ background : # eef3f7 ;
21+ color : var (--ink );
22+ font-family : -apple-system, BlinkMacSystemFont, "Segoe UI" , sans-serif;
23+ line-height : 1.5 ;
24+ margin : 0 ;
25+ }
26+ main { margin : 0 auto; max-width : 1120px ; padding : 32px 20px 56px ; }
27+ header { background : var (--panel ); border : 1px solid var (--line ); border-radius : 8px ; padding : 24px ; }
28+ h1 , h2 , h3 { color : # 111827 ; letter-spacing : 0 ; margin : 0 ; }
29+ h1 { font-size : 32px ; }
30+ h2 { font-size : 21px ; margin : 32px 0 12px ; }
31+ h3 { font-size : 16px ; margin : 18px 0 8px ; }
32+ p { margin : 8px 0 ; }
33+ table { background : var (--panel ); border : 1px solid var (--line ); border-collapse : collapse; width : 100% ; }
34+ th , td { border-bottom : 1px solid var (--line ); padding : 9px 10px ; text-align : left; vertical-align : top; }
35+ th { background : var (--soft ); font-size : 13px ; font-weight : 700 ; }
36+ code { background : # edf1f5 ; border-radius : 4px ; padding : 2px 4px ; word-break : break-word; }
37+ .muted { color : var (--muted ); }
38+ .summary { display : grid; gap : 10px ; grid-template-columns : repeat (auto-fit, minmax (140px , 1fr )); margin-top : 18px ; }
39+ .stat { background : var (--soft ); border : 1px solid var (--line ); border-radius : 8px ; padding : 12px ; }
40+ .stat strong { display : block; font-size : 24px ; line-height : 1.1 ; }
41+ .status { border-radius : 999px ; display : inline-block; font-size : 12px ; font-weight : 700 ; padding : 2px 8px ; }
42+ .ok { background : # e7f6ef ; color : # 067647 ; }
43+ .stale { background : # fff4df ; color : var (--warn ); }
44+ .missing { background : # fdecec ; color : var (--bad ); }
45+ .section-note { color : var (--muted ); margin-bottom : 12px ; }
46+ </ style >
47+ </ head >
48+ < body >
49+ < main >
50+ < header >
51+ < h1 > TraceFrame Audit Report</ h1 >
52+ < p class ="muted "> Project: ecommerce_revenue_analysis · TraceFrame 0.1.0 · Generated 2026-06-25T06:43:16.439982+00:00</ p >
53+ < div class ="summary ">
54+ < div class ="stat "> < strong > 1</ strong > < span > Datasets</ span > </ div >
55+ < div class ="stat "> < strong > 2</ strong > < span > Transformations</ span > </ div >
56+ < div class ="stat "> < strong > 1</ strong > < span > Metrics</ span > </ div >
57+ < div class ="stat "> < strong > 1</ strong > < span > Charts</ span > </ div >
58+ < div class ="stat "> < strong > 1</ strong > < span > Claims</ span > </ div >
59+ < div class ="stat "> < strong > 0</ strong > < span > Failed checks</ span > </ div >
60+ < div class ="stat "> < strong > 0</ strong > < span > Assistant plans</ span > </ div >
61+ < div class ="stat "> < strong > 0</ strong > < span > Stale warnings</ span > </ div >
62+ </ div >
63+ </ header >
64+
65+ < h2 > Project Health</ h2 >
66+ < table >
67+ < tr > < th > Status</ th > < th > Issues</ th > </ tr >
68+ < tr > < td > < span class ="status ok "> ok</ span > </ td > < td > 0</ td > </ tr >
69+ </ table >
70+ < table >
71+ < tr > < th > Severity</ th > < th > Type</ th > < th > Message</ th > </ tr >
72+
73+ < tr > < td colspan ="3 "> No issues found.</ td > </ tr >
74+
75+ </ table >
76+
77+ < h2 > Run Context</ h2 >
78+ < table >
79+ < tr > < th > Run ID</ th > < th > Started</ th > < th > Context</ th > < th > Notebook</ th > < th > Script</ th > </ tr >
80+
81+ < tr >
82+ < td > < code > run_ecommerce_revenue_analysis_31caa5f8</ code > </ td >
83+ < td > 2026-06-25T06:43:16.039316+00:00</ td >
84+ < td > script</ td >
85+ < td > </ td >
86+ < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/analysis.py</ code > </ td >
87+ </ tr >
88+
89+ </ table >
90+
91+ < h2 > Stale Checks</ h2 >
92+ < p class ="section-note "> TraceFrame compares stored dataset hashes with the current local files when this report is generated.</ p >
93+ < table >
94+ < tr > < th > Dataset</ th > < th > Status</ th > < th > Path</ th > < th > Message</ th > </ tr >
95+
96+ < tr >
97+ < td > orders</ td >
98+ < td > < span class ="status ok "> ok</ span > </ td >
99+ < td > < code > orders.csv</ code > </ td >
100+ < td > Current file matches tracked hash.</ td >
101+ </ tr >
102+
103+ </ table >
104+
105+ < h2 > Dataset Manifest</ h2 >
106+ < table >
107+ < tr > < th > Name</ th > < th > Rows</ th > < th > Columns</ th > < th > Run</ th > < th > Hash</ th > </ tr >
108+
109+ < tr >
110+ < td > orders</ td >
111+ < td > 6</ td >
112+ < td > 4</ td >
113+ < td > < code > run_ecommerce_revenue_analysis_31caa5f8</ code > </ td >
114+ < td > < code > sha256:1c23c2d6719d2b454e846a703821842bf393aa33c0ef1a9fce23381b6cadad4a</ code > </ td >
115+ </ tr >
116+
117+ </ table >
118+
119+ < h2 > Data Quality Summary</ h2 >
120+
121+ < h3 > orders</ h3 >
122+ < p > Duplicate rows: 1</ p >
123+ < table >
124+ < tr > < th > Column</ th > < th > Missing values</ th > < th > Type</ th > </ tr >
125+
126+ < tr > < td > order_date</ td > < td > 0</ td > < td > str</ td > </ tr >
127+
128+ < tr > < td > order_id</ td > < td > 0</ td > < td > int64</ td > </ tr >
129+
130+ < tr > < td > status</ td > < td > 0</ td > < td > str</ td > </ tr >
131+
132+ < tr > < td > total_price</ td > < td > 0</ td > < td > float64</ td > </ tr >
133+
134+ </ table >
135+
136+
137+ < h2 > Lineage</ h2 >
138+ < p class ="section-note "> Use < code > traceframe lineage ARTIFACT</ code > to inspect upstream and downstream dependencies for a single artifact.</ p >
139+ < table >
140+ < tr > < th > ID</ th > < th > Type</ th > < th > Name</ th > </ tr >
141+
142+ < tr > < td > < code > ds_orders_7e1a331f</ code > </ td > < td > dataset</ td > < td > orders</ td > </ tr >
143+
144+ < tr > < td > < code > tf_clean_orders_d885ddc7</ code > </ td > < td > transformation</ td > < td > clean_orders</ td > </ tr >
145+
146+ < tr > < td > < code > tf_large_orders_b03740a2</ code > </ td > < td > transformation</ td > < td > large_orders</ td > </ tr >
147+
148+ < tr > < td > < code > sql_monthly_revenue_9c0a56ab</ code > </ td > < td > sql_result</ td > < td > monthly_revenue</ td > </ tr >
149+
150+ </ table >
151+ < h3 > Edges</ h3 >
152+ < table >
153+ < tr > < th > From</ th > < th > To</ th > < th > Type</ th > </ tr >
154+
155+ < tr >
156+ < td > orders < code > ds_orders_7e1a331f</ code > </ td >
157+ < td > clean_orders < code > tf_clean_orders_d885ddc7</ code > </ td >
158+ < td > derived_from</ td >
159+ </ tr >
160+
161+ < tr >
162+ < td > clean_orders < code > tf_clean_orders_d885ddc7</ code > </ td >
163+ < td > large_orders < code > tf_large_orders_b03740a2</ code > </ td >
164+ < td > derived_from</ td >
165+ </ tr >
166+
167+ < tr >
168+ < td > large_orders < code > tf_large_orders_b03740a2</ code > </ td >
169+ < td > monthly_revenue < code > sql_monthly_revenue_9c0a56ab</ code > </ td >
170+ < td > derived_from</ td >
171+ </ tr >
172+
173+ </ table >
174+
175+ < h2 > Metrics</ h2 >
176+ < table >
177+ < tr > < th > Name</ th > < th > Formula</ th > < th > Source</ th > < th > Run</ th > < th > Description</ th > </ tr >
178+
179+ < tr > < td > revenue</ td > < td > < code > SUM(total_price)</ code > </ td > < td > large_orders</ td > < td > < code > run_ecommerce_revenue_analysis_31caa5f8</ code > </ td > < td > Total order revenue after duplicate order IDs are removed.</ td > </ tr >
180+
181+ </ table >
182+
183+ < h2 > Chart Evidence</ h2 >
184+ < table >
185+ < tr > < th > Name</ th > < th > Kind</ th > < th > X</ th > < th > Y</ th > < th > Run</ th > < th > Spec</ th > < th > Drilldown</ th > </ tr >
186+
187+ < tr >
188+ < td > monthly_revenue_chart</ td >
189+ < td > line</ td >
190+ < td > month</ td >
191+ < td > revenue</ td >
192+ < td > < code > run_ecommerce_revenue_analysis_31caa5f8</ code > </ td >
193+ < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/audit_logs/chart_monthly_revenue_chart_8f3d6958_vegalite.json</ code > </ td >
194+ < td > < code > chart_chart_monthly_revenue_chart_8f3d6958</ code > </ td >
195+ </ tr >
196+
197+ </ table >
198+
199+ < h2 > Source Rows</ h2 >
200+ < p class ="section-note "> Samples are stored locally and can be exported with < code > traceframe source-rows ARTIFACT</ code > .</ p >
201+ < table >
202+ < tr > < th > Artifact</ th > < th > Type</ th > < th > Sample file</ th > </ tr >
203+
204+ < tr > < td > orders</ td > < td > dataset</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/ds_orders_7e1a331f_sample.json</ code > </ td > </ tr >
205+
206+ < tr > < td > clean_orders</ td > < td > transformation</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/tf_clean_orders_d885ddc7_sample.json</ code > </ td > </ tr >
207+
208+ < tr > < td > large_orders</ td > < td > transformation</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/tf_large_orders_b03740a2_sample.json</ code > </ td > </ tr >
209+
210+ < tr > < td > monthly_revenue</ td > < td > sql_result</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/sql_monthly_revenue_9c0a56ab_sample.json</ code > </ td > </ tr >
211+
212+ < tr > < td > monthly_revenue_chart</ td > < td > chart</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/chart_monthly_revenue_chart_8f3d6958_sample.json</ code > </ td > </ tr >
213+
214+ </ table >
215+
216+ < h2 > Chart Drilldowns</ h2 >
217+ < table >
218+ < tr > < th > Chart</ th > < th > DuckDB file</ th > < th > Table</ th > </ tr >
219+
220+ < tr > < td > monthly_revenue_chart</ td > < td > < code > /Users/long_leg_maniac/Documents/github/traceframe/examples/ecommerce/.traceframe/source_rows/chart_drilldown.duckdb</ code > </ td > < td > < code > chart_chart_monthly_revenue_chart_8f3d6958</ code > </ td > </ tr >
221+
222+ </ table >
223+
224+ < h2 > Claims</ h2 >
225+ < table >
226+ < tr > < th > Claim</ th > < th > Supports</ th > < th > Confidence</ th > < th > Run</ th > </ tr >
227+
228+ < tr > < td > Monthly revenue trend was calculated after removing duplicate order IDs.</ td > < td > monthly_revenue, monthly_revenue_chart</ td > < td > high</ td > < td > < code > run_ecommerce_revenue_analysis_31caa5f8</ code > </ td > </ tr >
229+
230+ </ table >
231+
232+ < h2 > Data Quality Checks</ h2 >
233+ < table >
234+ < tr > < th > Name</ th > < th > Type</ th > < th > Status</ th > < th > Severity</ th > < th > Source</ th > < th > Details</ th > </ tr >
235+
236+ < tr >
237+ < td > not_null_total_price</ td >
238+ < td > not_null</ td >
239+ < td > < span class ="status ok "> pass</ span > </ td >
240+ < td > error</ td >
241+ < td > large_orders</ td >
242+ < td > < code > {'columns': ['total_price'], 'missing_values': {'total_price': 0}}</ code > </ td >
243+ </ tr >
244+
245+ < tr >
246+ < td > unique_order_id</ td >
247+ < td > unique</ td >
248+ < td > < span class ="status ok "> pass</ span > </ td >
249+ < td > error</ td >
250+ < td > large_orders</ td >
251+ < td > < code > {'columns': ['order_id'], 'duplicate_count': 0}</ code > </ td >
252+ </ tr >
253+
254+ </ table >
255+
256+ < h2 > Notebook Cell Notes</ h2 >
257+ < table >
258+ < tr > < th > Run</ th > < th > Cell ID</ th > < th > Execution</ th > < th > Source Hash</ th > < th > Tags</ th > </ tr >
259+
260+ < tr > < td colspan ="5 "> No notebook cell notes recorded.</ td > </ tr >
261+
262+ </ table >
263+
264+ < h2 > Assistant Plans</ h2 >
265+ < p class ="section-note "> TraceFrame assistant planning is local-first. No external API calls are made unless you explicitly run your own local command.</ p >
266+ < table >
267+ < tr > < th > ID</ th > < th > Mode</ th > < th > Request</ th > < th > Steps</ th > </ tr >
268+
269+ < tr > < td colspan ="4 "> No assistant plans recorded.</ td > </ tr >
270+
271+ </ table >
272+
273+ < h2 > Reproducibility</ h2 >
274+ < p > Run the analysis script or notebook from the project root, then regenerate this report with < code > traceframe report</ code > . Use < code > traceframe stale</ code > before relying on old evidence.</ p >
275+ </ main >
276+ </ body >
277+ </ html >
0 commit comments