feat(progression): json stores on a real filesystem (slice 8)
new progression.adapters project, no engine reference. Stores take a directory path; Godot resolves user:// with GlobalizePath and passes it in, which is what makes them testable at all - originally I'd written this slice off as untestable. version lives in a file envelope, not the snapshot, so the domain only knows the current shape. A newer-build save reports Corrupt with a reason instead of masquerading as "no save" and getting overwritten. atomic write via temp + rename. One file per aggregate: saving a run leaves the profile file byte-identical, asserted. guard rail fixed - it was matching prose in doc comments, now anchored to using-directives plus a project.assets.json check. 63 tests.
This commit is contained in:
10
progression.adapters/SaveEnvelope.cs
Normal file
10
progression.adapters/SaveEnvelope.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace Mr.BrickAdventures.Progression.Adapters;
|
||||
|
||||
/// <summary>
|
||||
/// What actually goes in a save file: a version alongside the snapshot.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The version lives here rather than in the snapshot record so the domain only ever knows the
|
||||
/// current shape. Migration is entirely this layer's problem.
|
||||
/// </remarks>
|
||||
internal sealed record SaveEnvelope<T>(int Version, T Data);
|
||||
Reference in New Issue
Block a user