chore(k1): checkpoint connection recovery work

This commit is contained in:
DCCONSTRUCTIONS
2026-08-21 08:12:22 +03:00
parent a3138f3d71
commit c7843a3c7e
22 changed files with 969 additions and 293 deletions
@@ -145,6 +145,12 @@ export type AcquisitionPreparationDraft = Omit<
export interface CanonicalLivePreparationRequest {
acquisition: AcquisitionPreparationDraft;
physicalAcceptance: OperatorPresenceConfirmation;
}
function runtimeTimezoneName(): string {
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
return typeof timezone === "string" && timezone.trim() ? timezone : "UTC";
}
export interface ProvisioningSubmitResult {
@@ -677,7 +683,7 @@ export function connectionVerificationFailureMessage(
"connection-verify-exact-uuid-scan-timeout":
"Mission Core не получил объявление точного сохранённого CoreBluetooth UUID в отведённое окно. Команды K1 не отправлялись; это не является выводом о состоянии устройства.",
"connection-verify-address-unavailable":
"K1 ответил, но не сообщил адрес в общей сети. Bridge пока не подключён; настройки устройства не менялись.",
"K1 ответил по Bluetooth, но не подключён к сохранённой общей сети. Старый Bridge использовать нельзя; подключите K1 к общей сети заново — настройки устройства не менялись.",
"connection-verify-target-not-distinguishable-from-baseline":
"K1 ответил, но приложение не смогло подтвердить, что прежние настройки сети были применены. Автоматического повтора и новой записи не было.",
"connection-verify-route-mismatch":
@@ -1732,6 +1738,27 @@ export function useXgridsK1Runtime(enabled: boolean) {
}
continue;
}
if (nextState.application_control_session?.inspection_only === true) {
nextState = await awaitWhileIntentCurrent(
assertOperatorIntentCurrent,
() => xgridsK1Api.openApplicationControlSession({
...request.physicalAcceptance,
timezone_name: runtimeTimezoneName(),
expected_snapshot_runtime_id: actionSnapshotRuntimeId,
}),
);
acceptState(nextState);
assertOperatorIntentCurrent();
nextState = await awaitWhileIntentCurrent(
assertOperatorIntentCurrent,
() => waitForControlPhase(
"connection-ready",
acceptState,
assertOperatorIntentCurrent,
),
);
continue;
}
nextState = await awaitWhileIntentCurrent(
assertOperatorIntentCurrent,
() => {