4 min read

The Console Gets a Face


The evidence system I wrote about last time lived in a Fabric notebook: you set a question code and some parameters, ran a cell, and read the answer out of a table. That’s fine for me. It’s not something you’d hand to anyone else. So I put a thin web front-end on it.

The interesting part wasn’t making it look nice. It was that a UI is exactly where a system like this usually starts lying — smoothing a ranked pile of unverified complaints and one official investigation into a single confident paragraph. I’d spent the whole backend keeping those things apart. I didn’t want the interface to merge them back together.

It’s a form, not a chat box

There’s no prompt to type into. You pick one of the eight validated questions — the same four routes from the engine, labelled right there — and fill in parameters.

The Evidence Explorer front-end. A left panel lists eight question types, each tagged with its route: Complaint count, Complaint increase ranking, and Serious incident counts as STRUCTURED; Loss-of-propulsion symptoms and Recall details as NARRATIVE; Investigation–recall relationships as RELATIONSHIP; Vehicle trend and failure patterns and Post-recall complaint patterns as HYBRID. The right panel shows the selected question, F001 Complaint count, with fields for model year, make, model, and component filled in as 2024 MAZDA CX-90 STEERING, and a Run safety analysis button.

The interface is the routing table from the last post, made clickable.

The refusal to be a chatbot stops being a design opinion and becomes the literal shape of the screen: you can’t ask it anything it can’t answer with evidence, because there’s nowhere to ask.

Structured facts and consumer reports don’t share a column

The answer comes back as deterministic cards first — candidate population, complaint trend, the open investigation number — then a monthly trend line. Below that, the evidence splits in two.

The completed H001 analysis for 2024 Mazda CX-90 steering. Three cards read candidate population 163 filtered records, complaint increase +350 percent, and official action RQ26002 open investigation. Below them a monthly complaint trend chart rises through 2024. Beneath the chart the page splits into two columns: Official Sources — Agency findings and actions on the left, and Consumer Reports — Reported experiences on the right.

The is_official_source flag that lived in the schema is now a wall you can see: Official Sources on one side, Consumer Reports on the other, different colours, different icons, never interleaved. A chatbot would have to work to keep a recall and a complaint distinct in one flowing answer. This layout can’t blur them even if it wanted to.

It prints the similarity score

This is the part I care about most. Every consumer complaint shows its cosine similarity, and they’re ranked by it — 0.759, 0.755, 0.748, 0.745, descending. The official investigation sits in the other column with no score at all, because it wasn’t retrieved approximately. It was looked up by identifier.

The evidence detail for the same run. On the left, one official card: NHTSA investigation RQ26002, with the full ODI text about increases in steering effort under Recall 24V022. On the right, four consumer complaints — 11726479, 11718090, 11740472, 11723097 — each showing a descending similarity score and its own View source link.

That empty space where a similarity score would go is doing real work. It’s the difference between this passage matched your question and this is the official record — and the UI shows it rather than papering over it. Every card, on both sides, links back to the NHTSA record it came from. The last post’s title holds up: every answer still cites its source. And a standing line at the bottom repeats what the data model already enforced — consumer complaints are unverified reports, not established findings of a defect.

The face doesn’t do the work

Underneath, nothing was rearchitected. The page doesn’t call Spark; it drops a request into a queue and waits for the notebook engine to mark it CONTEXT READY, the same dumb-runner discipline as before. A hybrid question still takes about fifty seconds. This isn’t a production app — it’s the same engine with a face.

But the face is where honesty is easiest to lose, and it’s worth being deliberate there. The whole reason to build this carefully was to keep a report from being dressed as a finding. It would have been a shame to give it an interface that put the costume back on — the evidence-versus-authority line, undone by a layout. So the front-end shows its sources, prints its scores, and keeps the two kinds of evidence in two columns. It says what it knows, and how it knows it, and no more.

More on AI-native systems Every Answer Cites Its Source →