diff --git a/apps/control-station/test/devicePluginContracts.test.mjs b/apps/control-station/test/devicePluginContracts.test.mjs
index 62f1e0e..9bc283f 100644
--- a/apps/control-station/test/devicePluginContracts.test.mjs
+++ b/apps/control-station/test/devicePluginContracts.test.mjs
@@ -1877,7 +1877,7 @@ test("observed SCANNING recovery is a successful STOP-only connection outcome",
);
assert.match(
acquisitionSource,
- /physicalStopInFlight\s*\? "Останавливаем устройство…"/,
+ /physicalStopInFlight\s*\? "Остановка устройства…"/,
);
assert.match(
acquisitionSource,
diff --git a/apps/control-station/test/k1ActiveStreamRecovery.test.mjs b/apps/control-station/test/k1ActiveStreamRecovery.test.mjs
index 2a08c54..5901ffb 100644
--- a/apps/control-station/test/k1ActiveStreamRecovery.test.mjs
+++ b/apps/control-station/test/k1ActiveStreamRecovery.test.mjs
@@ -700,7 +700,7 @@ test("spatial force-finish pending owns the surface without a second action", ()
}),
{ pendingAction: "force-finish" },
);
- assert.match(markup, /Завершаем локальный приём/);
+ assert.match(markup, /Завершение локального приёма/);
assert.match(markup, /data-recovery-state="force-finishing"/);
assert.match(markup, /Команда STOP устройству не отправляется/);
assert.equal(buttonsWithText(markup, "Прервать соединение").length, 0);
@@ -836,7 +836,7 @@ test("force-finishing shows one local-only pending owner and no second action",
camera_recovery: "inactive",
});
const markup = renderPipeline(state, { pendingAction: "force-finish" });
- assert.match(markup, /Завершаем локальный приём/);
+ assert.match(markup, /Завершение локального приёма/);
assert.match(markup, /Команда STOP устройству не отправляется/);
assert.match(markup, /class="nodedc-activity-indicator/);
assert.equal(buttonsWithText(markup, "Прервать соединение").length, 0);
diff --git a/apps/control-station/test/k1SupervisorPresentation.test.mjs b/apps/control-station/test/k1SupervisorPresentation.test.mjs
index ece5d88..959e705 100644
--- a/apps/control-station/test/k1SupervisorPresentation.test.mjs
+++ b/apps/control-station/test/k1SupervisorPresentation.test.mjs
@@ -3433,8 +3433,8 @@ test("physical STOP is fail-closed and both acquisition surfaces fall back to lo
activateAutomaticSpatialSource() {},
},
));
- assert.match(localCleanupPendingMarkup, /Завершаем локальный приём…/);
- assert.doesNotMatch(localCleanupPendingMarkup, /Останавливаем устройство…/);
+ assert.match(localCleanupPendingMarkup, /Завершение локального приёма…/);
+ assert.doesNotMatch(localCleanupPendingMarkup, /Остановка устройства…/);
const physicalStopPendingMarkup = renderToStaticMarkup(createElement(
K1AcquisitionPipeline,
@@ -3450,8 +3450,8 @@ test("physical STOP is fail-closed and both acquisition surfaces fall back to lo
activateAutomaticSpatialSource() {},
},
));
- assert.match(physicalStopPendingMarkup, /Останавливаем устройство…/);
- assert.doesNotMatch(physicalStopPendingMarkup, /Завершаем локальный приём…/);
+ assert.match(physicalStopPendingMarkup, /Остановка устройства…/);
+ assert.doesNotMatch(physicalStopPendingMarkup, /Завершение локального приёма…/);
const terminalDeniedState = structuredClone(state);
terminalDeniedState.phase = "error";
@@ -3534,7 +3534,7 @@ test("physical STOP is fail-closed and both acquisition surfaces fall back to lo
));
assert.match(terminalInFlightMarkup, /ВОССТАНОВЛЕНИЕ · КОМАНДА ОТПРАВЛЕНА/);
assert.match(terminalInFlightMarkup, /Команда остановки устройства уже отправлена/);
- assert.match(terminalInFlightMarkup, /Останавливаем устройство…/);
+ assert.match(terminalInFlightMarkup, /Остановка устройства…/);
assert.doesNotMatch(
terminalInFlightMarkup,
/требуется явный STOP|Нажмите «Остановить сканирование»/,
@@ -3848,7 +3848,7 @@ for (const pendingAction of ["connect", "verify"]) {
assert.match(markup, /Настройка сети…/);
} else {
assert.match(markup, /
Сеть<\/h3>/);
- assert.match(markup, /Проверяем подключение без изменения сети…/);
+ assert.match(markup, /Проверка подключения без изменения сети…/);
assert.match(markup, /02<\/span>/);
}
assertCanonicalConnectionCopy(markup);
@@ -5232,7 +5232,7 @@ test("an unresolved physical command has one explicit server-bound read-only rec
}, { publicSearch: false });
const pendingReconnect = buttonMarkupWithText(
pendingMarkup,
- "Переподключаемся…",
+ "Переподключение…",
);
assert.equal(pendingReconnect.length, 1);
assert.match(pendingReconnect[0], /disabled/);
@@ -5457,7 +5457,7 @@ test("unavailable physical replacement stays CAS-protected behind the simple new
}, { publicSearch: false });
const bothPendingReconnect = buttonMarkupWithText(
bothPendingMarkup,
- "Переподключаемся…",
+ "Переподключение…",
);
assert.equal(bothPendingReconnect.length, 1);
assert.match(bothPendingReconnect[0], /disabled/);
@@ -5676,7 +5676,7 @@ test("an explicit network action keeps one disabled Step-2 form with an in-place
assert.match(markup, /Устройство выбрано/);
assert.match(markup, /XGR-A46BE7/);
assert.match(markup, /02<\/span>/);
- assert.match(markup, /Применяем настройки…/);
+ assert.match(markup, /Применение настроек…/);
assert.match(markup, /FIELD-NET/);
assert.match(markup, /Пароль передан/);
assert.doesNotMatch(markup, /secret/);
@@ -6204,7 +6204,7 @@ test("read-only reconnect keeps its card and loader across a transient projectio
const pendingMarkup = renderToStaticMarkup(tree);
const pendingReconnect = buttonMarkupWithText(
pendingMarkup,
- "Переподключаемся…",
+ "Переподключение…",
);
assert.equal(pendingReconnect.length, 1);
assert.match(pendingReconnect[0], /disabled/);
@@ -6845,7 +6845,7 @@ test("applied-network recovery spends the old intent and admits only explicit se
/onClick=\{\(\) => void repeatDeviceScan\(\{\s*appliedRecoveryEscape: true/,
);
assert.match(source, /Начать новый поиск Bluetooth/);
- assert.match(source, /Подтверждаем управляющее подключение/);
+ assert.match(source, /Подтверждение управляющего подключения/);
assert.match(source, /BLE-команда не повторяется/);
assert.match(
source,
@@ -6886,7 +6886,7 @@ test("applied-network recovery spends the old intent and admits only explicit se
controller: provisioningController(settlingState),
desiredMode: "bridge",
});
- assert.match(settlingMarkup, /Подтверждаем управляющее подключение/);
+ assert.match(settlingMarkup, /Подтверждение управляющего подключения/);
assert.match(settlingMarkup, /BLE-команда не повторяется/);
assert.doesNotMatch(settlingMarkup, /Сеть (?:готова|настроена)|Сетевые настройки уже применены/);
assert.equal(
diff --git a/plugins/xgrids-k1/frontend/src/activeStreamRecovery.ts b/plugins/xgrids-k1/frontend/src/activeStreamRecovery.ts
index e56c7a3..a0e86f0 100644
--- a/plugins/xgrids-k1/frontend/src/activeStreamRecovery.ts
+++ b/plugins/xgrids-k1/frontend/src/activeStreamRecovery.ts
@@ -212,7 +212,7 @@ export function activeStreamRecoveryPresentation(
title: "Восстанавливаем соединение",
statusLabel: "Восстановление связи",
tone: "neutral",
- detail: "Проверяем прежний активный контур только для чтения. START, STOP и настройки сети не отправляются.",
+ detail: "Проверка прежнего активного контура только для чтения. START, STOP и настройки сети не отправляются.",
progressLabel: recoveryProgressLabel(recovery),
showSpinner: true,
forceFinishAvailable: activeStreamForceFinishAuthority(state) !== null,
diff --git a/plugins/xgrids-k1/frontend/src/components/ActiveStreamRecoverySurface.tsx b/plugins/xgrids-k1/frontend/src/components/ActiveStreamRecoverySurface.tsx
index 846a39c..16f1d95 100644
--- a/plugins/xgrids-k1/frontend/src/components/ActiveStreamRecoverySurface.tsx
+++ b/plugins/xgrids-k1/frontend/src/components/ActiveStreamRecoverySurface.tsx
@@ -38,14 +38,14 @@ function surfaceCopy({
? "СВЯЗЬ · ЛОКАЛЬНОЕ ЗАВЕРШЕНИЕ"
: presentation?.eyebrow ?? "СВЯЗЬ · АКТИВНЫЙ ПРИЁМ",
title: forceFinishing
- ? "Завершаем локальный приём"
+ ? "Завершение локального приёма"
: presentation?.title ?? "Восстанавливаем соединение",
statusLabel: forceFinishing
? "Локальное завершение"
: presentation?.statusLabel ?? "Восстановление связи",
detail: forceFinishing
? "Закрываем только локальный приём и сохранение. Команда STOP устройству не отправляется."
- : presentation?.detail ?? "Проверяем состояние активного приёма.",
+ : presentation?.detail ?? "Проверка состояния активного приёма.",
showSpinner: forceFinishing || presentation?.showSpinner === true,
forceFinishAvailable:
!forceFinishing && presentation?.forceFinishAvailable === true,
diff --git a/plugins/xgrids-k1/frontend/src/components/K1AcquisitionPipeline.tsx b/plugins/xgrids-k1/frontend/src/components/K1AcquisitionPipeline.tsx
index a6469dc..3a8ee86 100644
--- a/plugins/xgrids-k1/frontend/src/components/K1AcquisitionPipeline.tsx
+++ b/plugins/xgrids-k1/frontend/src/components/K1AcquisitionPipeline.tsx
@@ -372,7 +372,7 @@ export function K1AcquisitionPipeline({
{terminalPhysicalStopPending ? "ВОССТАНОВЛЕНИЕ · КОМАНДА ОТПРАВЛЕНА" : recoveredPhysicalStop ? "ВОССТАНОВЛЕНИЕ · ОСТАНОВКА" : terminalLocalRecovery ? "ВОССТАНОВЛЕНИЕ · ЛОКАЛЬНЫЙ КОНТУР" : terminalReadOnlyRecovery ? "ВОССТАНОВЛЕНИЕ · ТОЛЬКО ЧТЕНИЕ" : recoveredActiveSession ? "СВЯЗЬ ВОССТАНОВЛЕНА · АКТИВНЫЙ ПРИЁМ" : effectiveSessionIntent === "live" ? "ШАГИ 04–05 · ПРОЕКТ И ПРИЁМ" : "СЛУЖЕБНЫЙ РЕЖИМ"}
-
{terminalPhysicalStopPending ? "Ожидаем подтверждение устройства" : recoveredPhysicalStop ? "Сканирование продолжается" : terminalLocalRecovery ? "Завершите локальный приём" : terminalReadOnlyRecovery ? "Ожидайте подтверждённое состояние" : recoveredActiveSession ? "Связь восстановлена · приём продолжается" : effectiveSessionIntent === "live" ? "Назовите проект и запустите приём" : "Повторите запись"}
+ {terminalPhysicalStopPending ? "Ожидание подтверждения устройства" : recoveredPhysicalStop ? "Сканирование продолжается" : terminalLocalRecovery ? "Завершите локальный приём" : terminalReadOnlyRecovery ? "Ожидайте подтверждённое состояние" : recoveredActiveSession ? "Связь восстановлена · приём продолжается" : effectiveSessionIntent === "live" ? "Назовите проект и запустите приём" : "Повторите запись"}
{sourceLabel}
@@ -495,12 +495,12 @@ export function K1AcquisitionPipeline({
? controlPhase === "connecting"
? "Синхронизация…"
: controlPhase === "workspace-requested"
- ? "Входим в рабочее пространство…"
+ ? "Переход в рабочее пространство…"
: controlPhase === "project-requested"
- ? "Готовим проект и локальный приём…"
+ ? "Подготовка проекта и локального приёма…"
: controlPhase === "start-requested" || controlPhase === "initializing"
- ? "Запускаем приём…"
- : "Подготавливаем проект и локальный приём…"
+ ? "Запуск приёма…"
+ : "Подготовка проекта и локального приёма…"
: finalStartTarget
? "Запустить приём"
: preparedCanonicalLaunch
@@ -550,7 +550,7 @@ export function K1AcquisitionPipeline({
} disabled={isBusy || sessionLocked || replayPath.trim().length === 0} onClick={() => void submitReplay()}>
- {pendingAction === "replay" ? "Запускаем повтор…" : "Запустить повтор записи"}
+ {pendingAction === "replay" ? "Запуск повтора…" : "Запустить повтор записи"}
)}
@@ -591,9 +591,9 @@ export function K1AcquisitionPipeline({
}}
>
{physicalStopInFlight
- ? "Останавливаем устройство…"
+ ? "Остановка устройства…"
: pendingAction === "stop"
- ? physicalStopPresented ? "Останавливаем устройство…" : state?.source_mode === "replay" ? "Останавливаем повтор…" : "Завершаем локальный приём…"
+ ? physicalStopPresented ? "Остановка устройства…" : state?.source_mode === "replay" ? "Остановка повтора…" : "Завершение локального приёма…"
: physicalStopPresented ? recoveredPhysicalStop ? "Остановить сканирование" : "Остановить устройство и запись" : state?.source_mode === "replay" ? "Остановить повтор" : preparedAcquisition ? "Завершить подготовленный приём" : "Завершить локальный приём"}
) : null}
diff --git a/plugins/xgrids-k1/frontend/src/components/K1ProvisioningPipeline.tsx b/plugins/xgrids-k1/frontend/src/components/K1ProvisioningPipeline.tsx
index 98a4ffd..7d2eb22 100644
--- a/plugins/xgrids-k1/frontend/src/components/K1ProvisioningPipeline.tsx
+++ b/plugins/xgrids-k1/frontend/src/components/K1ProvisioningPipeline.tsx
@@ -2953,8 +2953,8 @@ export function K1ProvisioningPipeline({
});
};
const attemptButtonLabel = connectionAttemptPresentation?.localPhase === "submitting"
- ? "Применяем настройки…"
- : "Подтверждаем подключение…";
+ ? "Применение настроек…"
+ : "Подтверждение подключения…";
const applyAction = connectionAttemptSettling ? (
{modeCopy.stepTitle}
{connectionAttemptSettling
- ? "Ожидаем подтверждение подключения"
+ ? "Ожидание подтверждения подключения"
: connectionAttemptFailed
? "Подключение не подтверждено"
: "Готово к продолжению"}
@@ -3099,7 +3099,7 @@ export function K1ProvisioningPipeline({
onClick={() => void verifyConnectionRecoveryTarget()}
>
{connectionReconnectPending
- ? "Переподключаемся…"
+ ? "Переподключение…"
: "Переподключиться"}
) : null}
@@ -3139,7 +3139,7 @@ export function K1ProvisioningPipeline({
/>
{modeResetInFlight ? (
- Завершаем прежнюю локальную границу. Новый поиск не начнётся автоматически.
+ Завершение прежней локальной границы. Новый поиск не начнётся автоматически.
) : null}
{activeScenarioReset ? (
@@ -3163,15 +3163,15 @@ export function K1ProvisioningPipeline({
? "Устройство выбрано"
: presentedPhysicalRecoveryRequired
? verificationActionPending
- ? "Переподключаемся…"
+ ? "Переподключение…"
: "Нужно выбрать действие"
: networkRecoveryRequired
? appliedControlSettlementPending
- ? "Подтверждаем управление"
+ ? "Подтверждение управления"
: "Управление не подтверждено · выбор заблокирован"
: presentedConnectionRecoveryRequired
? connectionReconnectPending
- ? "Переподключаемся…"
+ ? "Переподключение…"
: connectionRecoveryTarget
? "Нужна проверка"
: "Нужен новый поиск"
@@ -3261,7 +3261,7 @@ export function K1ProvisioningPipeline({
onClick={() => void verifyPhysicalRecovery()}
>
{physicalReconnectPending
- ? "Переподключаемся…"
+ ? "Переподключение…"
: "Переподключиться"}
) : null}
@@ -3430,15 +3430,15 @@ export function K1ProvisioningPipeline({
status={
connectionAttemptSettling
? connectionAttemptPresentation?.localPhase === "submitting"
- ? "Применяем настройки…"
- : "Подтверждаем подключение…"
+ ? "Применение настроек…"
+ : "Подтверждение подключения…"
: connectionAttemptFailed && !networkRecoveryRequired
? "Подключение не подтверждено"
: verificationActionPending
? "Проверка…"
: networkRecoveryRequired
? appliedControlSettlementPending
- ? "Подтверждаем управление"
+ ? "Подтверждение управления"
: "Управление не подтверждено"
: networkActionPending
? "Настройка…"
@@ -3474,7 +3474,7 @@ export function K1ProvisioningPipeline({
aria-busy="true"
>
- Проверяем подключение без изменения сети…
+ Проверка подключения без изменения сети…
) : networkRecoveryRequired && appliedControlSettlementPending ? (
-
Подтверждаем управляющее подключение
+
Подтверждение управляющего подключения
BLE-команда не повторяется. Дождитесь результата одной
сервисной проверки состояния без изменений.
diff --git a/plugins/xgrids-k1/frontend/src/components/K1SpatialControls.tsx b/plugins/xgrids-k1/frontend/src/components/K1SpatialControls.tsx
index 1816580..9edaffe 100644
--- a/plugins/xgrids-k1/frontend/src/components/K1SpatialControls.tsx
+++ b/plugins/xgrids-k1/frontend/src/components/K1SpatialControls.tsx
@@ -71,7 +71,7 @@ export function k1SpatialPhasePresentation(
const presentations: Record = {
preparing: {
label: "Подготовка локального приёма",
- detail: "Проверяем контур и создаём сессию записи.",
+ detail: "Проверка контура и создание сессии записи.",
busy: true,
},
prepared: {
@@ -114,14 +114,14 @@ export function k1SpatialPhasePresentation(
busy: true,
},
stopping: {
- label: softwareCommanded ? "Останавливаем K1 и запись" : "Останавливаем локальный приём",
+ label: softwareCommanded ? "Остановка K1 и записи" : "Остановка локального приёма",
detail: softwareCommanded
? "Команда отправлена; ожидаем подтверждённое состояние устройства."
: "Физическое состояние K1 остаётся неизвестным.",
busy: true,
},
finalizing: {
- label: "Сохраняем локальную запись",
+ label: "Сохранение локальной записи",
detail: "Не закрывайте Mission Core до завершения финализации.",
busy: true,
},
@@ -247,7 +247,7 @@ export function K1SpatialControlsView({
? "Связь с потоком K1 потеряна"
: dataPlaneState === "stalled"
? "Поток K1 нестабилен"
- : "Ожидаем подтверждённый поток K1",
+ : "Ожидание подтверждённого потока K1",
detail: !controlAuthoritative
? "Состояние acquisition сохранено как последнее известное; команды устройству не отправляются."
: "Управляющая сессия подтверждена, но живые данные пока не получили авторитетный статус.",
@@ -318,11 +318,11 @@ export function K1SpatialControlsView({
>
{physicalStopInFlight
- ? "Останавливаем устройство…"
+ ? "Остановка устройства…"
: pendingAction === "stop"
- ? terminalPhysicalStopRequired ? "Останавливаем K1…" : softwareCommanded ? "Останавливаем устройство…" : "Останавливаем приём…"
+ ? terminalPhysicalStopRequired ? "Остановка K1…" : softwareCommanded ? "Остановка устройства…" : "Остановка приёма…"
: stopping
- ? acquisition.state === "finalizing" ? "Сохраняем запись…" : "Остановка выполняется…"
+ ? acquisition.state === "finalizing" ? "Сохранение записи…" : "Остановка выполняется…"
: terminalPhysicalStopRequired ? "Остановить K1" : "Остановить устройство и запись"}
@@ -336,7 +336,7 @@ export function K1SpatialControlsView({
>
{pendingAction === "stop"
- ? "Завершаем локальный приём…"
+ ? "Завершение локального приёма…"
: "Завершить локальный приём"}