diff --git a/apps/control-station/src/core/laboratory/e40CaseReview.ts b/apps/control-station/src/core/laboratory/e40CaseReview.ts index 9889b6a..3308fd6 100644 --- a/apps/control-station/src/core/laboratory/e40CaseReview.ts +++ b/apps/control-station/src/core/laboratory/e40CaseReview.ts @@ -50,6 +50,11 @@ export interface E40CaseCatalog { access: "read-only"; } +/** + * Immutable v1 storage vocabulary. Product UI interprets these legacy values + * only as support/challenge of the E37 engineering label; neither value + * establishes physical ground truth or authorizes an operational model. + */ export type E40OperatorVerdict = "confirmed-error" | "rejected-error"; export interface E40OperatorDecision { diff --git a/apps/control-station/src/workspaces/laboratory/AdvancedLaboratoryResult.tsx b/apps/control-station/src/workspaces/laboratory/AdvancedLaboratoryResult.tsx index db94f79..0264e3e 100644 --- a/apps/control-station/src/workspaces/laboratory/AdvancedLaboratoryResult.tsx +++ b/apps/control-station/src/workspaces/laboratory/AdvancedLaboratoryResult.tsx @@ -40,7 +40,10 @@ export function advancedLaboratoryWorkOptions( { id: "e37-ravnoves-acceptance", label: "LAB E37 · RAVNOVES00 acceptance R0" }, { id: "e38-perception-baseline", label: "LAB E38 · perception quality R1" }, { id: "e39-perception-refinement", label: "LAB E39 · perception refinement R1" }, - { id: "e40-perception-product-gate", label: "LAB E40 · leakage-resistant product gate" }, + { + id: "e40-perception-product-gate", + label: "LAB E40 · historical visible engineering evaluation", + }, ]; return options.filter(({ id }) => available.has(id)); } diff --git a/apps/control-station/src/workspaces/laboratory/E40CaseReview.tsx b/apps/control-station/src/workspaces/laboratory/E40CaseReview.tsx index 8995fdd..eb8a5c6 100644 --- a/apps/control-station/src/workspaces/laboratory/E40CaseReview.tsx +++ b/apps/control-station/src/workspaces/laboratory/E40CaseReview.tsx @@ -112,33 +112,39 @@ function reviewPrompt( if (item.reference.presence === "object-present") { return { - question: `${subject} относится к отдельному видимому объекту?`, + question: ( + `${subject} подтверждает инженерную метку E37 «объект присутствует»?` + ), evidence, confirm: ( - "Да — объект виден; эталон верен, расхождение E40 подтверждается." + "Да — наблюдение поддерживает инженерную метку E37." ), reject: ( - "Нет — это фон или часть среды; предполагаемая ошибка отклоняется." + "Нет — метка E37 оспорена и требует отдельной ревизии." ), }; } if (item.reference.presence === "background-or-noise") { return { - question: `${subject} является фоном или шумом, а не объектом?`, + question: ( + `${subject} подтверждает инженерную метку E37 «фон или шум»?` + ), evidence, confirm: ( - "Да — это фон или шум; эталон верен, расхождение E40 подтверждается." + "Да — наблюдение поддерживает инженерную метку E37." ), reject: ( - "Нет — отдельный объект есть; предполагаемая ошибка отклоняется." + "Нет — метка E37 оспорена и требует отдельной ревизии." ), }; } return { - question: "Проверяемый эталон точнее описывает кадр, чем решение E40?", + question: ( + "Наблюдение поддерживает инженерную метку E37 для этого расхождения?" + ), evidence, - confirm: "Да — эталон верен, расхождение E40 подтверждается.", - reject: "Нет — эталон спорен, предполагаемая ошибка отклоняется.", + confirm: "Да — наблюдение поддерживает инженерную метку E37.", + reject: "Нет — метка E37 оспорена и требует отдельной ревизии.", }; } @@ -174,7 +180,7 @@ export function E40CaseReview({ resultId }: { resultId: string }) { || nextReview.reviewedItemCount > nextCatalog.total ) { throw new Error( - "Операторская проверка E40 не совпадает с каталогом ошибок.", + "Операторская проверка E40 не совпадает с каталогом расхождений.", ); } setCatalog(nextCatalog); @@ -335,7 +341,7 @@ export function E40CaseReview({ resultId }: { resultId: string }) { ) : error || !detail || !selectedCase ? (