feat(observatory): add portable calculation profiles

This commit is contained in:
DCCONSTRUCTIONS
2026-08-31 15:42:56 +03:00
parent d1b75efcea
commit 9beb534108
75 changed files with 24419 additions and 348 deletions
@@ -150,6 +150,11 @@ function mutationErrorMessage(error: unknown): string {
: "Не удалось изменить лабораторный результат в Обсерватории.";
}
function evidenceResultSubtitle(evidence: ObservatoryEvidence): string {
const profileName = evidence.lab.calculationProfile?.displayName;
return profileName ? `${evidence.label} · ${profileName}` : evidence.label;
}
export function ObservatoryWorkspace({
definition,
}: {
@@ -214,7 +219,7 @@ export function ObservatoryWorkspace({
? "Готовый результат"
: setup.origin === "portable-definition"
? setup.executor.state === "ready"
? "Запись совместима · Worker установлен, запуск закрыт"
? "Запись совместима · Worker готов к проверке"
: "Запись совместима · Worker не установлен"
: "Совместимый архивный сетап"
: "Несовместим с выбранной сессией",
@@ -512,8 +517,8 @@ export function ObservatoryWorkspace({
>
{setupController.selectedSetup.compatibility.compatible
? setupController.selectedSetup.executor.state === "not-installed"
? "Worker LAB V1 не установлен"
: "Запуск LAB V1 недоступен"
? "Worker-профиль не установлен"
: "Запуск профиля недоступен"
: "Запись несовместима"}
</StatusBadge>
) : null}
@@ -521,7 +526,18 @@ export function ObservatoryWorkspace({
<Button
size="compact"
variant="primary"
onClick={() => { void recordedJobsController.submit(); }}
onClick={() => {
void recordedJobsController.submit(
setupController.selectedSetup?.origin === "portable-definition"
&& runPreflight?.definitionSha256
&& runPreflight.checkSha256
? {
definitionSha256: runPreflight.definitionSha256,
checkSha256: runPreflight.checkSha256,
}
: null,
);
}}
>
Рассчитать
</Button>
@@ -631,7 +647,7 @@ export function ObservatoryWorkspace({
</span>
<div className="observatory-evidence-card__copy">
<strong>{evidence.lab.labId}</strong>
<span>{evidence.label}</span>
<span>{evidenceResultSubtitle(evidence)}</span>
<small>
{evidence.lab.resultKind} · {formatTimestamp(evidence.publishedAtUtc)}
</small>