Changelog

0.2.0 — cloud, Editor tooling and verification#

Added#

  • Cloud without lock-in. ICloudTransport is an opaque put/get/list/delete seam, so the package ships no vendor SDK, no account and no credential. TransportCloudSaveProvider adds keys, metadata, size ceilings and precondition discipline; CloudSaveSyncService adds synchronisation, conflict policies, conflict-copy preservation and an offline queue; FakeCloudTransport makes all of it testable with no network.
  • Conflict resolution by generation, never by clock. Two devices whose clocks disagree still agree about which save is newer. The losing copy is written through the same verified transfer path into a *_conflict_<rev> slot before anything is replaced, which makes every automatic decision reversible.
  • Editor tooling that configures and checks. A guided Setup page with three presets, eleven sections that explain the consequence of each choice, a Validation page with two depths (package, dependencies, platform, identity scan and a real write/read/delete), a Platform page that renders the support matrix with evidence, and Samples & code, which generates a snippet from your configuration.
  • Verification, including a defect it found. Fuzz and deterministic corruption tests, culture-independence tests that impose hostile cultures and inspect the bytes written, measured performance, and a probe that runs the whole pipeline inside a built IL2CPP player.
  • Documentation, samples and packaging. Twenty-one documents, four importable samples with their own READMEs, third-party notices and a package that passes its own export checks.

Fixed#

  • Timestamps were written using the current culture. Found by running the pipeline in a built player: a save written on a device using dd-MM-yyyy could be silently reinterpreted elsewhere, or fail to load. Now written in round-trip, culture-independent form and covered by tests that fail without the fix.

Compatibility#

  • No save-format change: every file written by 0.1.0 remains readable.
  • Configuration is additive; no setting was renamed or removed.
  • The settings asset is upgrade-safe in both directions.

0.1.0 — the framework#

Added#

  • Options, diagnostics and the result model — failures as values with stable codes.
  • The document model and the serializer abstraction.
  • Local storage with atomic writes, backup, quarantine and recovery.
  • The save container, slots and metadata.
  • Versioning and migration, registered as code.
  • The operation coordinator: one write at a time, cancellation, supersession.
  • Persistent object identity, with project-wide validation.
  • Autosave and checkpoints.
  • Security: integrity (CRC32/SHA-256/HMAC-SHA256), authenticated encryption and bounded compression.
  • Editor tooling: configuration report, smoke test, identity inspector and validation.

How the framework was built#

PhaseScopeState
0Project inspection and architecture proposalDone
1Package foundation: options, diagnostics, results, versioning, identifiers, Unity adapters, composition rootDone
2Data document model, serializer abstractionDone
3Local storage, atomic writes, backup and recoveryDone
4Save envelope, slots and metadataDone
5Versioning and migrationDone
6Operation coordinator, cancellation, concurrencyDone
7Persistent object identityDone
8Autosave and checkpointsDone
9Security, integrity, encryption, compressionDone
10Cloud abstraction, sync state, conflict resolutionDone
11Editor tooling: configuration report, smoke test, identity inspector, validationDone
12Fuzz, failure injection, performance measurement, IL2CPP verificationDone
13Documentation, samples, packaging, third-party noticesDone

Compatibility promises#

SurfacePromise
Save file formatAn older file is always readable: the container records its format version and the reader accepts every version it has ever written.
ConfigurationRemoving or renaming a setting is a breaking change and is called out here. New settings arrive with defaults that match the previous behaviour.
Public APIAdditive by default. A breaking change is a major version bump naming the affected types.
Settings assetA newer package opens an older asset; an older package leaves a newer asset alone rather than guessing at a layout it does not understand.
Schema versionsYours, not ours. The framework version recorded in a save never forces a migration.

Next#

  • What's new — the same history, in prose.
  • Migration — migrating your own save format.
  • Roadmap — what is planned, and what is deliberately not.