Publishing & Deployment Issues May 24, 2026

Steam Cloud Sync Overwrites Local Fest Demo Save After Enabling Cloud Mid-Cycle - How to Fix

Fix Steam Cloud overwriting local fest demo saves after enabling Cloud mid-cycle. save_path_map.json, conflict policy, Cloud on/off matrix, FAQ parity, and steam_cloud_sync_receipt_v1.json gates.

By GamineAI Team

Steam Cloud Sync Overwrites Local Fest Demo Save After Enabling Cloud Mid-Cycle - How to Fix

Problem: Your fest demo FAQ says local saves only, but you enabled Steam Cloud in Steamworks after the first playtest wave. Players who grinded hours on build N launch build N+1 and find level one again—the client synced an older remote file over a newer local save.

Who is affected now: Teams that refreshed the save and cloud sync resource in May 2026 and flipped Cloud on for convenience without a conflict policy, schema version, or FAQ update. The failure spikes after a mid-cycle patch—not on first install—when remote blobs from playtest or an old filename still live in Steam Cloud.

Fastest safe fix: Document canonical local paths in save_path_map.json → list exact Cloud filenames in Steamworks (match on-disk names) → choose local-first or newest-wins policy → wipe remote on save_schema_version bump → run Cloud on/off matrix on two accounts → file steam_cloud_sync_receipt_v1.json → align store FAQ with Settings UI.

Direct answer

Steam Cloud is not a backup of your local folder—it is a separate file set keyed by App ID. When Cloud turns on mid-cycle, the client may download a stale remote that wins over local depending on timestamps, your conflict handler, and whether playtest and fest builds used different filenames. Fix Steamworks file list + schema version + conflict policy + FAQ together; apologizing in Discord does not restore player trust.

Why this issue spikes in June 2026

  1. Save/cloud resource refresh — Teams learned local paths first, then enabled Cloud without remote hygiene.
  2. Playtest → fest_public promotion — Same App ID, different depots; remote files from playtest still sync.
  3. FAQ still says offline — Cloud icon appears; players blame “broken demo.”
  4. October fest locksCloud saves parity checklist expects proof tables before creative freeze.
  5. Branch isolation gapsPlaytest isolation playbook covers depots, not Cloud file namespaces.

Pair with mismatched save slot labels case study when UI slot numbers disagree with disk paths.

Symptoms and search phrases

  • Progress fine until patch Tuesday; reset after update.
  • Steam Cloud sync icon on demo that FAQ calls local only.
  • Playtest account save appears on fest_public (or reverse).
  • Two machines: newer machine loses to older remote.
  • save_slot_2.sav local exists; Cloud still serves demo_save_v1.dat.
  • Developers enabled Cloud on playtest branch config only—fest inherits.
  • Players cite “Steam ate my save” in fest reviews.

Root causes (check in order)

  1. Cloud enabled without Steamworks file list parity — wrong names → client creates empty remote that wins.
  2. Stale remote from playtest — older timestamp overwrites newer fest local.
  3. No save_schema_version — patches cannot force remote wipe.
  4. Conflict resolution favors remote — default SDK/sample behavior.
  5. Different save basename per build — looks like new game; Cloud serves old file.
  6. Cloud on App ID, demo claims local-only — trust failure even when technically “working.”
  7. Tested single machine — never ran two-account sync matrix.

Beginner path (first hour)

Prerequisites: Steamworks app access, fest demo installed from fest_demo branch, two test Steam accounts.

  1. Open Steamworks → Steam Cloud → note enabled toggle and file list.
  2. On PC, find local save from save path map pattern—document path in save_path_map.json.
  3. Account A: play 15 minutes, save, quit.
  4. Account B: install same build—confirm no cross-account bleed (expected).
  5. Same account, second PC (or VM): install—if Cloud on, observe whether remote matches local.
  6. If reset reproduces → continue Fastest safe fix path.

Common mistake: Testing Cloud only in editor with Steam API stub—validate installed Steam build.

Fastest safe fix path

Step 1 — Lock canonical local path in save_path_map.json

{
  "schema": "save_path_map_v1",
  "engine": "your_engine",
  "company": "YourStudio",
  "game": "FestDemo2026",
  "slots": [
    {
      "slot_id": "demo_progress",
      "local_relative_path": "save/demo_progress_v3.sav",
      "steam_cloud_filename": "demo_progress_v3.sav",
      "save_schema_version": 3
    }
  ],
  "cloud_policy": {
    "enabled": true,
    "conflict_resolution": "local_first_newest_timestamp",
    "remote_wipe_on_schema_bump": true
  }
}

Rule: steam_cloud_filename must match Steamworks Cloud entry byte-for-byte.

Outbound: Steamworks — Steam Cloud, ISteamRemoteStorage.

Step 2 — Steamworks Cloud file list audit

Check Pass
Each synced file listed in Steamworks Yes
Names match save_path_map.json Yes
Quota sufficient for max save size Yes
Cloud disabled for fest if FAQ says local-only Yes (either disable OR fix FAQ)

If FAQ promises local only for fest scope → disable Cloud for demo period per cloud saves parity checklist.

Step 3 — Schema bump + remote wipe on patch

When save format changes:

// Unity / C# — pseudo pattern on first launch after patch
const int CurrentSchema = 3;
if (PlayerPrefs.GetInt("save_schema", 0) < CurrentSchema) {
    // Optional: prompt "Save format updated; cloud reset required."
    SteamRemoteStorage.FileDelete("demo_progress_v3.sav"); // each listed file
    // or wipe all cloud files for app during controlled migration window
    PlayerPrefs.SetInt("save_schema", CurrentSchema);
}

Ship player-facing patch note when wipe is destructive. For fest demos, prefer bump + wipe remote over silent overwrite.

Step 4 — Conflict policy (local-first example)

Policy When to use
Local-first, newest timestamp Fest demos after mid-cycle Cloud enable
Newest-wins with UI prompt Full game with account investment
Cloud disabled FAQ says local-only; simplest fest path
Remote wipe on schema bump Every breaking save patch

Document chosen policy in steam_cloud_sync_receipt_v1.json—do not leave implicit.

Step 5 — Cloud on/off test matrix

Config Account Machine Expected
Cloud OFF A 1 Local save only
Cloud ON A 1 then 2 Newer local wins or prompt
Cloud ON A playtest remote stale 1 Wipe remote before fest
Cloud ON B 1 No A progress

Log results in receipt matrix[] rows.

Step 6 — steam_cloud_sync_receipt_v1.json

{
  "schema": "steam_cloud_sync_receipt_v1",
  "build_id": "fest-demo-2026-05-24",
  "branch": "fest_demo",
  "cloud_enabled": true,
  "conflict_resolution": "local_first_newest_timestamp",
  "save_schema_version": 3,
  "remote_wipe_on_schema_bump": true,
  "faq_claim": "local_and_cloud_disclosed",
  "gates": {
    "cloud_file_list_parity": "pass",
    "two_machine_matrix": "pass",
    "playtest_remote_cleared": "pass"
  },
  "promotion_allowed": true
}

Add BUILD_RECEIPT column:

Column Value
steam_cloud pass
cloud_conflict_policy local_first_newest_timestamp
save_schema_version 3

Working dev path (proof table)

Check Artifact Pass signal
Local path save_path_map.json Matches packaged build probe
Cloud names Steamworks file list Byte match
FAQ FAQ parity No local-only lie
Playtest isolation Isolation playbook Separate remote namespace or wipe
Patch migration Release notes + schema bump Remote wiped or merged
Receipt steam_cloud_sync_receipt_v1.json All gates pass

Verification checklist

  • [ ] save_path_map.json lists every Cloud file with save_schema_version.
  • [ ] Steamworks Cloud toggle matches FAQ promises.
  • [ ] Two-machine matrix pass logged in receipt.
  • [ ] Playtest-era remote blobs cleared before fest week.
  • [ ] Patch with schema bump does not silently favor stale remote.
  • [ ] Wednesday smoke includes steam_cloud column.
  • [ ] Store page does not claim cross-device sync unless proven.

Prevention

  1. Decide Cloud on/off for fest before first public upload—not mid-fest casually.
  2. Add remote wipe to every breaking save migration checklist.
  3. Keep playtest and fest save basenames separate if sharing one App ID.
  4. Bookmark 20 save and cloud services resource for backend options after local path is stable.
  5. Pair with GameMaker / GDevelop path helps when Cloud syncs the wrong file not just old timestamps.

Troubleshooting

Symptom Fix
Reset only after patch Schema bump without remote wipe
Cloud icon but FAQ local-only Disable Cloud or rewrite FAQ
Playtest progress on fest Wipe remote; separate filenames
Newer PC loses local-first policy + delete stale remote
Empty save after enable Cloud filename mismatch in Steamworks
Works for dev, not players Dev account remote differs—test fresh accounts

FAQ

Should fest demos use Steam Cloud at all?
Only if FAQ and hour-one behavior prove it—otherwise disable for fest scope per cloud parity checklist.

Is this the same as wrong AppData path?
Different class—GameMaker save path help fixes where local writes; this help fixes remote winning over local.

Do I need custom conflict UI?
Fest demos can use schema bump + remote wipe; full games should prompt.

What about Epic / console cloud?
Same discipline—document policy in receipt; this help is Steam-first.

Can I recover player saves?
If remote was newer incorrectly, recovery is rare—communicate wipe and offer one-time compensation policy in patch notes.

Related links

Align Cloud toggles, filenames, and FAQ before the next fest patch—not after review bombs cite lost saves.