feat(demo): make return, data-quality and knowledge flows demo-legible

Fixes a real honesty bug in Knowledge.tsx (body copy named "RAGcore" while
the active provider is the demo one) and a second real bug discovered
while fixing it: the brief's suggested Dutch questions would silently
return "insufficient evidence" against the English-only demo knowledge
base -- verified empirically and fixed by keeping suggested questions in
English. The return flow now pre-fills the odometer-regression scenario's
suspicious reading instead of asking a visitor to invent one, and links
to automation/audit after committing. Data-quality issues get a shared
plain-language "what's wrong / why it matters" explainer per rule type,
a post-resolution confirmation with audit/vehicle links, and a "demo
scenario's only" list filter. Also fixes a real async race where the
odometer pre-fill could clobber text a visitor had already started typing.
This commit is contained in:
NuklearRabbit
2026-08-03 14:41:02 +02:00
parent 6b864596e0
commit ddc3a98e4b
9 changed files with 394 additions and 29 deletions
+20 -3
View File
@@ -24,6 +24,7 @@ export function DataQuality() {
const [scanError, setScanError] = useState<string | null>(null);
const [scanResult, setScanResult] = useState<ScanResult | null>(null);
const [confirmingScan, setConfirmingScan] = useState(false);
const [demoScenariosOnly, setDemoScenariosOnly] = useState(false);
const load = useCallback(() => {
if (user?.role !== "operations_manager") return;
@@ -67,6 +68,11 @@ export function DataQuality() {
}
const scanTotal = scanResult ? Object.values(scanResult.created).reduce((a, b) => a + b, 0) : 0;
const visibleIssues = issues
? demoScenariosOnly
? issues.filter((i) => i.public_ref.startsWith("DQ-DEMO-"))
: issues
: [];
return (
<div className="page">
@@ -126,14 +132,25 @@ export function DataQuality() {
))}
</select>
</label>
<label className="checkbox-label">
<input
type="checkbox"
checked={demoScenariosOnly}
onChange={(e) => setDemoScenariosOnly(e.target.checked)}
/>
Demo scenario's only
</label>
</form>
{error && <ErrorState message={error} />}
{!error && !issues && <LoadingState label="Loading quality workbench…" />}
{issues && issues.length === 0 && <EmptyState icon="check" title="Queue is clear" detail="No issues match the current filters." />}
{issues && issues.length > 0 && visibleIssues.length === 0 && (
<EmptyState icon="check" title="No demo-scenario issues match" detail="Uncheck 'Demo scenario's only' to see the full queue." />
)}
{issues && issues.length > 0 && (
<div className="table-shell"><div className="table-meta"><span>{issues.length} issues</span><span>Evidence-backed detection</span></div><table className="data-table">
{visibleIssues.length > 0 && (
<div className="table-shell"><div className="table-meta"><span>{visibleIssues.length} issues</span><span>Evidence-backed detection</span></div><table className="data-table">
<caption className="visually-hidden">Data-quality issues</caption>
<thead>
<tr>
@@ -145,7 +162,7 @@ export function DataQuality() {
</tr>
</thead>
<tbody>
{issues.map((i) => (
{visibleIssues.map((i) => (
<tr key={i.public_ref}>
<th scope="row" data-label="Reference">
<Link to={`/data-quality/${i.public_ref}`}>{i.public_ref}</Link>