feat(lab): publish M4.8T quality evidence

This commit is contained in:
DCCONSTRUCTIONS
2026-08-25 23:44:27 +03:00
parent 9a956c318a
commit 3ff3b9b587
20 changed files with 1419 additions and 4 deletions
@@ -45,6 +45,7 @@ import { M47ReferenceGraphResultView } from "./M47ReferenceGraphResult";
import { M48ObjectCentricQualityResultView } from "./M48ObjectCentricQualityResult";
import { M48SmallStaticPassageRegressionResultView } from "./M48SmallStaticPassageRegressionResult";
import { M48SFixedClassDetectorResultView } from "./M48SFixedClassDetectorResult";
import { M48TRiskQualityResultView } from "./M48TRiskQualityResult";
export { isAdvancedLaboratoryWorkId };
export type { AdvancedLaboratoryWorkId };
@@ -96,6 +97,9 @@ export function AdvancedLaboratoryResult({
if (workId === "m48s-fixed-class-detector" && results.m48s) {
return <M48SFixedClassDetectorResultView rigLabel={rigLabel} result={results.m48s} />;
}
if (workId === "m48t-risk-quality-temporal" && results.m48t) {
return <M48TRiskQualityResultView rigLabel={rigLabel} result={results.m48t} />;
}
if (workId === "m47-reference-graph-shadow" && results.m47Graph) {
return <M47ReferenceGraphResultView rigLabel={rigLabel} result={results.m47Graph} />;
}
@@ -0,0 +1,79 @@
import {
LaboratoryEvidence,
LaboratoryResultSummary,
LaboratorySummary,
LaboratoryWorkTemplate,
} from "../../components/laboratory/LaboratoryPresentation";
import type { M48TRiskQualityResult } from "../../core/laboratory/m48tRiskQuality";
import { M48TRiskQualityVisual } from "./M48TRiskQualityVisual";
function percent(value: number, digits = 1): string {
return `${(value * 100).toLocaleString("ru-RU", { maximumFractionDigits: digits })}%`;
}
function decimal(value: number, digits = 1): string {
return value.toLocaleString("ru-RU", { maximumFractionDigits: digits });
}
export function M48TRiskQualityResultView({
rigLabel,
result,
}: {
rigLabel: string;
result: M48TRiskQualityResult;
}) {
return (
<LaboratoryWorkTemplate
summary={(
<LaboratorySummary
title="M4.8T · semantic quality + temporal identity"
description="RF-DETR-L проверен на полном независимом COCO val2017 по заранее записанным risk-family гейтам. Отдельно тот же advisory-класс стабилизирован на geometry-owned ID полного RAVNOVES00 replay; семантика не участвует в association или occupancy."
status="Quality gate failed · temporal invariant passed"
statusTone="warning"
facts={[
{ label: "Quality truth", value: `COCO val2017 · ${result.source.quality.truthInstances.toLocaleString("ru-RU")} risk instances` },
{ label: "Candidate", value: `${result.candidate.modelId} · threshold ${decimal(result.candidate.minimumScore, 2)}` },
{ label: "Temporal source", value: `${rigLabel} · ${result.source.temporal.frames.toLocaleString("ru-RU")} world states` },
{ label: "Authority", value: "SHADOW ONLY · geometry-owned occupancy · production NO" },
]}
brief={{
question: "Достаточно ли качественна текущая risk-семантика RF-DETR и можно ли убрать кадровое мерцание класса без влияния на геометрию?",
approach: `Все ${result.source.quality.riskImages.toLocaleString("ru-RU")} COCO-изображений с risk-классами оценены при неизменном score ${decimal(result.candidate.minimumScore, 2)}. Затем bounded history 5 / confirm 2 / switch 3 применена только к advisory-классу уже существующих component ID.`,
principalResult: `Recall прошёл: ${percent(result.quality.microRecall)} overall и ${percent(result.quality.mediumLargeRecall)} medium+large. Precision ${percent(result.quality.microPrecision)} и vehicle recall ${percent(result.quality.families.vehicle)} не прошли гейты. Temporal shadow сократил class switches ${result.temporal.rawClassSwitches} → ${result.temporal.stableClassSwitches} и family switches ${result.temporal.rawFamilySwitches} → ${result.temporal.stableFamilySwitches}.`,
limitation: "COCO не является truth городского маршрута RAVNOVES00, а temporal replay не имеет независимой track/class truth. Batch timing не принимается как realtime-гейт.",
}}
method={result.method}
/>
)}
evidence={(
<LaboratoryEvidence
eyebrow="M4.8T VISUAL EVIDENCE · INDEPENDENT COCO TRUTH"
title="16 hash-bound review cases: human truth против RF-DETR"
kind="diagnostic-model"
resizable
>
<M48TRiskQualityVisual result={result} />
</LaboratoryEvidence>
)}
result={(
<LaboratoryResultSummary
title="Temporal anti-flicker принят как инвариант; detector quality не принят"
status="2/10 predeclared quality checks failed"
statusTone="warning"
metrics={[
{ label: "Precision / recall", value: `${percent(result.quality.microPrecision)} / ${percent(result.quality.microRecall)}`, hint: "gates ≥ 80% / ≥ 75%" },
{ label: "Vehicle family", value: percent(result.quality.families.vehicle), hint: "gate ≥ 85% · failed" },
{ label: "TP / FP / FN", value: `${result.counts.truePositive.toLocaleString("ru-RU")} / ${result.counts.falsePositive.toLocaleString("ru-RU")} / ${result.counts.falseNegative.toLocaleString("ru-RU")}`, hint: `${result.counts.predictions.toLocaleString("ru-RU")} predictions` },
{ label: "Class / family switches", value: `${result.temporal.rawClassSwitches}→${result.temporal.stableClassSwitches} / ${result.temporal.rawFamilySwitches}→${result.temporal.stableFamilySwitches}`, hint: `peak active ${result.temporal.peakActiveComponents}/${result.temporal.maximumActiveComponents}` },
{ label: "Batch throughput", value: `${decimal(result.execution.effectiveImagesPerSecond, 2)} image/s`, hint: `image p95 ${decimal(result.execution.imageP95Ms, 2)} ms · non-admission` },
]}
conclusion={{
proved: `На независимой COCO truth текущий RF-DETR сохраняет высокий recall: ${percent(result.quality.microRecall)} overall и ${percent(result.quality.mediumLargeRecall)} medium+large. Bounded temporal state подавил или отложил ${result.temporal.suppressedClassSwitches} class-switch и ${result.temporal.suppressedFamilySwitches} family-switch, сохранив association и occupancy class-independent; active state ${result.temporal.peakActiveComponents}/${result.temporal.maximumActiveComponents}, eviction 0.`,
notProved: `Semantic candidate не принят: precision ${percent(result.quality.microPrecision)} при gate 80%, vehicle recall ${percent(result.quality.families.vehicle)} при gate 85%. Не доказаны RAVNOVES class truth, physical track identity, child/adult, unknown moving hazards, risk policy и realtime admission этой batch-командой.`,
decision: "Не менять зафиксированные гейты и не добавлять второй detector. RF-DETR остаётся shadow-кандидатом; temporal stabilizer допустим только как advisory-слой поверх geometry-owned ID.",
}}
/>
)}
/>
);
}
@@ -0,0 +1,63 @@
import { useState } from "react";
import { Icon, IconButton } from "@nodedc/ui-react";
import { LaboratoryEvidenceViewer } from "../../components/laboratory/LaboratoryEvidenceViewer";
import type { M48TRiskQualityResult } from "../../core/laboratory/m48tRiskQuality";
export function M48TRiskQualityVisual({ result }: { result: M48TRiskQualityResult }) {
const [index, setIndex] = useState(0);
const [expanded, setExpanded] = useState(false);
const item = result.review.cases[index] ?? null;
const navigate = (offset: -1 | 1) => {
setIndex((current) => (
current + offset + result.review.cases.length
) % result.review.cases.length);
};
return (
<div className="l3-visual-audit">
<LaboratoryEvidenceViewer
label="M4.8T independent COCO quality review"
mode="quality"
modes={[{ value: "quality", label: "COCO TRUTH" }]}
expanded={expanded}
onModeChange={() => undefined}
onExpandedChange={setExpanded}
actions={(
<div className="l3-visual-audit__pagination">
<IconButton label="Предыдущий M4.8T review case" onClick={() => navigate(-1)}>
<Icon name="chevron-left" size={16} />
</IconButton>
<IconButton label="Следующий M4.8T review case" onClick={() => navigate(1)}>
<Icon name="chevron-right" size={16} />
</IconButton>
</div>
)}
overlay={item ? (
<div className="l3-visual-audit__overlay">
<div>
<span>COCO val2017 · independent human truth</span>
<strong>case {index + 1}/{result.review.cases.length} · image {item.imageId}</strong>
<small>Зелёный — truth · жёлтый — RF-DETR prediction · score ≥ 0,25</small>
</div>
</div>
) : null}
>
{item ? (
<div className="l32-camera-scene">
<img
src={item.imageUrl}
alt={`M4.8T COCO review image ${item.imageId}: truth and RF-DETR boxes`}
draggable={false}
/>
</div>
) : (
<div className="l3-visual-audit__state" role="alert">
<Icon name="alert" size={18} />
M4.8T visual evidence недоступно.
</div>
)}
</LaboratoryEvidenceViewer>
</div>
);
}
@@ -84,6 +84,13 @@ const KNOWN_WORKS: Readonly<Record<Exclude<LaboratoryWorkId, `session:${string}`
experimentName: "RAVNOVES00 fixed-class risk detector",
variantName: "M4.8S · RF-DETR-L TensorRT/Triton shadow",
},
"m48t-risk-quality-temporal": {
profileId: "rig-ravnoves-perception-gate-v1",
profileName: (rigLabel) => `${rig(rigLabel)} RIGHT · COCO quality + bounded temporal identity`,
experimentId: "m48t-risk-quality-temporal",
experimentName: "RF-DETR independent semantic quality and temporal identity",
variantName: "M4.8T · COCO val2017 truth + RAVNOVES00 temporal shadow",
},
"m47-reference-graph-shadow": {
profileId: "rig-dual-evidence-virtual-corridor-v1",
profileName: (rigLabel) => `${rig(rigLabel)} RIGHT · Camera + LiDAR dual evidence`,
@@ -22,6 +22,7 @@ function mergeResults(
m48: next.m48 ?? current.m48,
m48SmallStatic: next.m48SmallStatic ?? current.m48SmallStatic,
m48s: next.m48s ?? current.m48s,
m48t: next.m48t ?? current.m48t,
m4Threat: next.m4Threat ?? current.m4Threat,
l3: next.l3 ?? current.l3,
l31: next.l31 ?? current.l31,