feat(lab): publish M4.7 Worker graph evidence

This commit is contained in:
DCCONSTRUCTIONS
2026-08-23 22:00:46 +03:00
parent 64860be4ae
commit 34ed8a0f5f
20 changed files with 1363 additions and 16 deletions
@@ -41,6 +41,7 @@ import { E46IGroundingDinoFullReplayResultView } from "./E46IGroundingDinoFullRe
import { E46JRawFisheyeRealtimeResultView } from "./E46JRawFisheyeRealtimeResult";
import { E47SemanticSlamResultView } from "./E47SemanticSlamResult";
import { M4ReplayThreatResultView } from "./M4ReplayThreatResult";
import { M47ReferenceGraphResultView } from "./M47ReferenceGraphResult";
export { isAdvancedLaboratoryWorkId };
export type { AdvancedLaboratoryWorkId };
@@ -83,6 +84,9 @@ export function AdvancedLaboratoryResult({
failedSessionId: string | null;
replayError: string | null;
}) {
if (workId === "m47-reference-graph-shadow" && results.m47Graph) {
return <M47ReferenceGraphResultView rigLabel={rigLabel} result={results.m47Graph} />;
}
if (workId === "m4-replay-threat" && results.m4Threat) {
return <M4ReplayThreatResultView rigLabel={rigLabel} result={results.m4Threat} />;
}
@@ -0,0 +1,132 @@
import {
LaboratoryEvidence,
LaboratoryResultSummary,
LaboratorySummary,
LaboratoryWorkTemplate,
} from "../../components/laboratory/LaboratoryPresentation";
import type { M47ReferenceGraphLabResult } from "../../core/laboratory/m47ReferenceGraph";
import { formatNumber } from "../../presentation";
import { M4ReplayThreatVisual } from "./M4ReplayThreatVisual";
export function M47ReferenceGraphResultView({
rigLabel,
result,
}: {
rigLabel: string;
result: M47ReferenceGraphLabResult;
}) {
const parityDimensions = Object.keys(result.parityMismatchCounts).length;
const maximumQueue = Math.max(...Object.values(result.queueHighWatermarks));
return (
<LaboratoryWorkTemplate
summary={(
<LaboratorySummary
title="M4.7 · canonical reference graph shadow"
description="Полный source→detector→geometry→temporal/motion→rolling→threat граф выполнен на Worker 006 и побайтно сопоставлен с принятыми M4.5R/M4.6 ledgers. Ни один live-контур и ни одна команда не участвовали."
status="4489/4489 · lossless graph parity passed"
statusTone="success"
facts={[
{
label: "Конфигурация",
value: `${rigLabel} · RIGHT camera + LiDAR · recorded replay`,
},
{
label: "Исполнение",
value: `${result.worker.id} / ${result.worker.node} · ${formatNumber(result.worker.elapsedSeconds, 1)} с`,
},
{
label: "Artifact",
value: `${result.worker.artifactSha256.slice(0, 12)}… · commit ${result.worker.codeRevision.slice(0, 8)}`,
},
{
label: "Graph accounting",
value: `${result.frames.admitted}/${result.frames.expected} admitted · ${result.frames.delivered} delivered`,
},
{
label: "Визуал",
value: "VIDEO/CAMERA/3D/PLAN · единый recorded clock · exact M4.6 ledger binding",
},
]}
brief={{
question: "Сохраняет ли собранный канонический perception graph уже принятые результаты каждого кадра без потерь, перестановочных артефактов и скрытого backpressure?",
approach: "Worker 006 выполнил все 4489 кадров в lossless replay через изолированный Triton и временный graph container. Результат связан с точным artifact SHA, commit, container identity и двумя принятыми parity-ledgers. Визуальный слой использует тот же threat/temporal payload, поэтому его можно проверять на общем таймлайне.",
principalResult: `${parityDimensions}/${parityDimensions} parity dimensions имеют ноль расхождений; максимальная заполненность каждой bounded queue — ${maximumQueue}. Все ${result.frames.delivered} кадров завершились delivered.`,
limitation: "Это принятие сборки графа на recorded replay. Оно не доказывает независимую object-level точность, физический live, навигационную безопасность или готовность выдавать команды моторам.",
}}
method={{
completeness: "complete",
executionClass: "hybrid",
pipelineId: result.graphId,
components: [
{
kind: "source",
name: result.graphResultId,
version: "lossless-replay",
role: "immutable 4489-frame canonical graph output",
identitySha256: result.graphResultId.split("-").at(-1) ?? null,
},
{
kind: "source",
name: result.linkedVisualResultId,
version: "exact ledger parity",
role: "synchronized VIDEO/CAMERA/3D/PLAN evidence",
identitySha256: result.linkedVisualResultId.split("-").at(-1) ?? null,
},
{
kind: "algorithm",
name: "canonical reference perception graph",
version: result.graphId,
role: "source-neutral perception assembly without command authority",
identitySha256: result.worker.artifactSha256,
},
],
}}
/>
)}
evidence={(
<LaboratoryEvidence
eyebrow="M4.7 VISUAL EVIDENCE · VIDEO / CAMERA / 3D / PLAN"
title="Синхронная проверка accepted graph payload на общем recorded timeline"
kind="diagnostic-model"
resizable
>
<M4ReplayThreatVisual resultId={result.visual.resultId} />
</LaboratoryEvidence>
)}
result={(
<LaboratoryResultSummary
title="Каноническая сборка графа принята; открыт object-centric gate"
status="Зелёный: graph assembly parity · жёлтый: independent object truth ещё отсутствует"
statusTone="warning"
metrics={[
{
label: "Replay frames",
value: `${result.frames.delivered}/${result.frames.expected}`,
hint: `${formatNumber(result.worker.elapsedSeconds, 1)} с на Worker 006`,
},
{
label: "Parity",
value: `${parityDimensions}/${parityDimensions} · 0 mismatch`,
hint: "source/current/rolling/held/expired/camera/threat",
},
{
label: "Queue high-water",
value: String(maximumQueue),
hint: "bounded on every graph stage",
},
{
label: "Authority",
value: "OFF",
hint: "commands=false · actuation=false",
},
]}
conclusion={{
proved: "Канонический граф полностью обработал immutable RAVNOVES00 и сохранил уже принятые temporal/threat решения для каждого кадра. Runtime provenance от Worker 006 до LAB результата замкнут хэшами.",
notProved: "Не доказаны независимая полнота/точность детекции объектов, live realtime на машине, измеренная геометрия корпуса, collision safety, планирование движения и управление моторами.",
decision: "Считать M4.7 graph assembly завершённым и переходить к следующей лаборатории: независимому object-centric detection gate с визуальным разбором miss/duplicate/geometry ошибок.",
}}
/>
)}
/>
);
}
@@ -63,6 +63,13 @@ interface KnownWorkDefinition {
const rig = (rigLabel: string): string => rigLabel.trim() || "Сенсорный риг";
const KNOWN_WORKS: Readonly<Record<Exclude<LaboratoryWorkId, `session:${string}`>, KnownWorkDefinition>> = {
"m47-reference-graph-shadow": {
profileId: "rig-dual-evidence-virtual-corridor-v1",
profileName: (rigLabel) => `${rig(rigLabel)} RIGHT · Camera + LiDAR dual evidence`,
experimentId: "m47-reference-perception-graph-shadow",
experimentName: "RAVNOVES00 canonical reference graph",
variantName: "M4.7 · Worker 006 · lossless graph parity",
},
"m4-replay-threat": {
profileId: "rig-dual-evidence-virtual-corridor-v1",
profileName: (rigLabel) => `${rig(rigLabel)} RIGHT · Camera + LiDAR dual evidence`,
@@ -18,6 +18,7 @@ function mergeResults(
next: AdvancedLaboratoryResults,
): AdvancedLaboratoryResults {
return {
m47Graph: next.m47Graph ?? current.m47Graph,
m4Threat: next.m4Threat ?? current.m4Threat,
l3: next.l3 ?? current.l3,
l31: next.l31 ?? current.l31,
@@ -109,12 +110,15 @@ export function useAdvancedLaboratoryCatalog({
!isAdvancedLaboratoryWorkId(selectedWorkId)
|| advancedLaboratoryResultAvailable(selectedWorkId, results)
) return;
const indexedResultId = index.find((item) => item.workId === selectedWorkId)?.resultId;
if (selectedWorkId === "m47-reference-graph-shadow" && !indexedResultId) return;
const controller = new AbortController();
setLoadingWorkId(selectedWorkId);
setFailedWorkId(null);
setResultError(null);
void fetchAdvancedLaboratoryResult(selectedWorkId, {
signal: controller.signal,
resultId: indexedResultId,
}).then(async (next) => {
if (controller.signal.aborted) return;
setResults((current) => mergeResults(current, next));
@@ -128,7 +132,7 @@ export function useAdvancedLaboratoryCatalog({
if (!controller.signal.aborted) setLoadingWorkId(null);
});
return () => controller.abort();
}, [results, selectedWorkId]);
}, [index, results, selectedWorkId]);
return {
index,