From 193fa568476b26f90ef77a5b99b0e135343a4c34 Mon Sep 17 00:00:00 2001 From: Jacob Dubin Date: Sun, 17 May 2026 13:47:44 -0500 Subject: [PATCH] Clarify update backup restore rehydration proof --- OpenJibo/docs/development-plan.md | 2 +- OpenJibo/docs/feature-backlog.md | 2 +- OpenJibo/docs/release-1.0.19-plan.md | 1 + .../Protocol/JiboCloudProtocolServiceTests.cs | 10 ++++++++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/OpenJibo/docs/development-plan.md b/OpenJibo/docs/development-plan.md index c9beb51..e69679a 100644 --- a/OpenJibo/docs/development-plan.md +++ b/OpenJibo/docs/development-plan.md @@ -194,7 +194,7 @@ These are not blockers for calling `1.0.18` complete unless the live test shows - local `whisper.cpp` STT remains a discovery seam, not production ASR - media upload/body handling is not binary-safe enough for final gallery originals and thumbnails - state persistence is local JSON, not Azure SQL / Blob Storage -- update, backup, and restore are not end-to-end proven, and the `jibo test 22` / Test 26 / Test 27 / Test 28 sluggishness appears tied to robot-local backup status/load, startup reconnect state, or previously unsuppressed end-of-skill surprises; Test 31 also captured a legacy `Backup_20170222.List` startup query, which reinforces that the local backup/status path is real even before a user asks for backup +- update, backup, and restore are now end-to-end proven at the persistence-rehydration level, and the `jibo test 22` / Test 26 / Test 27 / Test 28 sluggishness appears tied to robot-local backup status/load, startup reconnect state, or previously unsuppressed end-of-skill surprises; Test 31 also captured a legacy `Backup_20170222.List` startup query, which reinforces that the local backup/status path is real even before a user asks for backup - Tests 27 and 28 showed backup/surprise behavior without corresponding `Backup_*` HTTP traffic; Test 28 isolated the unsuppressed `@be/surprises` lifecycle handoff after Nimbus - deployed-build verification needs to prove that synthetic OpenJibo websocket events are gone from the hosted artifact, not just from source - news content is synthetic; `jibo test 23` proved the path but not live provider-backed headlines diff --git a/OpenJibo/docs/feature-backlog.md b/OpenJibo/docs/feature-backlog.md index afdf90f..e3793e3 100644 --- a/OpenJibo/docs/feature-backlog.md +++ b/OpenJibo/docs/feature-backlog.md @@ -891,7 +891,7 @@ For `1.0.19`: - store contracts are now tightened around account/loop/device/person scoping, revision tracking, and explicit load/save boundaries - the backend seam is now selectable, with file-backed local persistence as default and an Azure Blob Storage slot wired for future deployment when a storage account connection string is available - next implementation pass should supply the real Azure Storage connection string / deployment wiring and validate the live round-trip in the storage account smoke test -10. Update, backup, and restore proof - implemented (update creation and backup creation now survive persisted reloads; restore proof uses the same persisted state rehydration path) +10. Update, backup, and restore proof - implemented (update creation and backup creation now survive persisted reloads; restore is the persisted-state rehydration proof path, not a new cloud API) 11. STT upgrade and noise screening 12. Hosted capture/storage plan / indexing for group testing 13. Binary-safe media storage / sync to cloud drive: OneDrive, Google Drive, Box, etc. diff --git a/OpenJibo/docs/release-1.0.19-plan.md b/OpenJibo/docs/release-1.0.19-plan.md index 872c86c..e49587e 100644 --- a/OpenJibo/docs/release-1.0.19-plan.md +++ b/OpenJibo/docs/release-1.0.19-plan.md @@ -71,6 +71,7 @@ The goal is to port these in small batches, capture the source-backed phrasing w ### 2. Reliability And Device Proof - complete update/backup/restore proof path with captures and operator docs +- the restore proof is the persisted-state rehydration path; do not scope it into a new hosted restore API until we have real device evidence - continue alarm/gallery/yes-no cleanup from `1.0.18` evidence where regressions are still open - improve short-turn STT reliability and low-signal screening diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/Protocol/JiboCloudProtocolServiceTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/Protocol/JiboCloudProtocolServiceTests.cs index f954297..bf13706 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/Protocol/JiboCloudProtocolServiceTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/Protocol/JiboCloudProtocolServiceTests.cs @@ -174,7 +174,12 @@ public sealed class JiboCloudProtocolServiceTests BodyText = """{"name":"manual-backup"}""" }); + var firstStore = new InMemoryCloudStateStore(persistencePath); + var firstInfo = firstStore.GetPersistenceStateInfo(); + var secondService = new JiboCloudProtocolService(new InMemoryCloudStateStore(persistencePath)); + var secondStore = new InMemoryCloudStateStore(persistencePath); + var secondInfo = secondStore.GetPersistenceStateInfo(); var updates = await secondService.DispatchAsync(new ProtocolEnvelope { @@ -197,6 +202,11 @@ public sealed class JiboCloudProtocolServiceTests using var updatesPayload = JsonDocument.Parse(updates.BodyText); using var backupsPayload = JsonDocument.Parse(backups.BodyText); + Assert.Equal(firstInfo.Revision, secondInfo.Revision); + Assert.Equal("1", firstInfo.SchemaVersion); + Assert.Equal("1", secondInfo.SchemaVersion); + Assert.NotNull(secondInfo.LastLoadedUtc); + Assert.NotNull(secondInfo.LastSavedUtc); Assert.NotEmpty(updatesPayload.RootElement.EnumerateArray()); Assert.Contains(updatesPayload.RootElement.EnumerateArray(), item => item.GetProperty("changes").GetString() == "Restore proof"); Assert.NotEmpty(backupsPayload.RootElement.EnumerateArray());