Add world management and save hardening - #22
Conversation
PR Review: #22 — Add world management and save hardening📋 SummaryNo linked issues ("Closes #N" etc.) are referenced in the PR description, so there are no issue requirements to verify beyond the ROADMAP items — the PR checks off "World management UI" and updates two adjacent persistence items, and the implementation does match those claims (rename/duplicate/backup in This PR adds world-library management (rename, duplicate, timestamped backup), a configurable autosave interval with retry-on-failure, versioned gameplay-state migration, and several save-hardening measures (id traversal rejection, creation-over-existing guard, player Y-bounds validation, weather transition persistence). The code is careful, consistently styled, well-commented, and expands three headless verifiers ( 📌 Review Metadata
🔴 Critical Issues (Must Fix - Blocks Merge)None identified.
|
| Principle | Score | Notes |
|---|---|---|
| Single Responsibility | 8 | Management operations (rename/duplicate/backup) live in WorldStorage, UI flow in PlayPanel, state migration in Main; each layer keeps its existing duty |
| Open/Closed | 7 | Autosave row added purely through the data-driven row definition; storage gained new static operations without modifying existing callers |
| Liskov Substitution | 8 | No inheritance changes; WorldStorage static/instance contract stays coherent for all call sites |
| Interface Segregation | 8 | Player↔Main still signals-only; PlayPanel preserved its existing signal names/args (create_requested, load_requested) |
| Dependency Inversion | 7 | Main/UI still depend on the WorldStorage/GameConfig concretes directly (pre-existing pattern); constants are properly centralized in GameConfig |
| Average | 7.6 |
🎯 Final Assessment
Overall Confidence Score: 78%
Confidence Breakdown:
- Code Quality: 88% (idiomatic, typed, well-commented, follows the repo's UI/storage conventions)
- Completeness: 90% (all PR claims implemented; ROADMAP updated accurately)
- Risk Level: 72% (no worker/determinism/mesher risk; the two mediums are a documented blast-radius tradeoff and a reachable edge-case position rejection)
- Verification: 70% (verifiers listed as run in the PR and the new assertions match the code as read, but the engine is not available on this runner —
redot --editor --headless --path . --quit,tools/world_storage_verify.gd,tools/ui_flow_verify.gd,tools/weather_verify.gd, andtools/player_target_verify.tscnshould be green before merge; residual risk is around the in-game corrupt-region/autosave path, which only a live run exercises)
Merge Readiness:
- All critical issues resolved (none found)
- SOLID average score >= 6.0 (7.6)
- Overall confidence >= 60% (78%)
- No security concerns (id traversal, overwrite, and path handling are hardened and verifier-covered)
- No unresolved worker-thread, determinism, or data-loss risk (two medium data-loss-adjacent tradeoffs remain: session-wide save blocking on one corrupt region, and ceiling-height position rejection)
Verdict:
MERGE WITH FIXES — Solid, verifier-covered feature work; address the corrupt-region save-blocking blast radius and the y-bound position rejection (or explicitly accept both as documented tradeoffs) before merge.
Machine Readable Verdict
{
"reviewed_sha": "3ec932e040e24516cc9aede99990d22a78ebfdaa",
"critical_issues": 0,
"high_priority_issues": 0,
"medium_priority_issues": 2,
"overall_confidence_score": 78,
"recommendation": "MERGE WITH FIXES"
}|
Addressed the automated review in
Re-ran the editor parse check plus world storage, UI flow, and player target verifiers locally. |
PR Review: #22 — Add world management and save hardening (re-review after
|
| Principle | Score | Notes |
|---|---|---|
| Single Responsibility | 8 | Management operations stay in WorldStorage, UI flow in PlayPanel, migration/autosave policy in Main; the fix kept boundaries intact |
| Open/Closed | 7 | Autosave row added via the data-driven row table; storage gained static management ops and an activate flag without breaking existing create_world callers |
| Liskov Substitution | 8 | No inheritance changes; WorldStorage contract stays coherent, and stage_chunk_edits' new refusal semantics are internal (still void) |
| Interface Segregation | 8 | Player↔Main still signals-only; PlayPanel preserved create_requested/load_requested; rename modal follows the repo modal contract (ui_cancel, focus-on-open, focus-restore) |
| Dependency Inversion | 7 | Main/UI depend on WorldStorage/GameConfig concretes (pre-existing pattern); constants properly centralized in GameConfig/WorldStorage |
| Average | 7.6 |
🎯 Final Assessment
Overall Confidence Score: 88%
Confidence Breakdown:
- Code Quality: 90% (idiomatic typed GDScript, careful validation paths, defense-in-depth id checks at every storage entry point)
- Completeness: 95% (all five review findings fixed with matching verifier assertions; PR and ROADMAP claims match the code)
- Risk Level: 85% (no worker/mesher/water/worldgen changes; remaining risk is the documented corrupt-region tradeoff, now bounded to a single region)
- Verification: 82% (the fix commit's files are covered by the author's re-run set — parse check,
world_storage_verify,ui_flow_verify,player_target_verify;weather_verifyran against commit 1 whose weather code commit 2 does not touch. The engine binary is unavailable on this runner, so these were not independently executed here — residual risk around live corrupt-region/autosave behavior remains a live-run concern, not a blocker)
Merge Readiness:
- All critical issues resolved
- SOLID average score >= 6.0 (7.6)
- Overall confidence >= 60% (88%)
- No security concerns (traversal ids rejected at
create_world/open_world/_read_world_for_management; creation-over-existing guarded;.tmpexcluded from copies; verifier-covered) - No unresolved worker-thread, determinism, or data-loss risk
Verdict:
MERGE — All five previously reported issues are fixed with verifier coverage, and the only remaining finding is a low-priority in-game visibility gap for an already-documented tradeoff.
Machine Readable Verdict
{
"reviewed_sha": "12f93023a3ec05770dc80bfd8b8486f24275539f",
"critical_issues": 0,
"high_priority_issues": 0,
"medium_priority_issues": 0,
"overall_confidence_score": 88,
"recommendation": "MERGE"
}|
Closed the remaining optional visibility finding in |
|
I have everything I need. The new commit is verified against the full files, the previously fixed items are all confirmed at HEAD, and I've checked the surrounding invariants (eviction does not clear PR Review: #22 — Add world management and save hardening (re-review after
|
| Principle | Score | Notes |
|---|---|---|
| Single Responsibility | 8 | WorldStorage owns the unreadable-region ledger and a read-only accessor; Main owns when/how to surface it to the player |
| Open/Closed | 7 | New query method added without modifying existing callers; autosave row added purely through the data-driven row table |
| Liskov Substitution | 8 | No inheritance changes; WorldStorage contract stays coherent across instance and static use |
| Interface Segregation | 8 | Player↔Main still signals-only; PlayPanel preserved create_requested/load_requested; rename modal follows the modal contract (ui_cancel routing at ui/play_panel.gd:128-133, focus-on-open/focus-restore at :560,570) |
| Dependency Inversion | 7 | Main/UI depend on the WorldStorage/GameConfig concretes (pre-existing pattern); constants centralized |
| Average | 7.6 |
🎯 Final Assessment
Overall Confidence Score: 90%
Confidence Breakdown:
- Code Quality: 90% (typed, idiomatic, minimal-surface fix; the dedup flag placement correctly exploits the eviction lifecycle)
- Completeness: 96% (all six findings across two review rounds addressed with verifier coverage where feasible)
- Risk Level: 87% (no worker/mesher/water/worldgen changes; the corrupt-region tradeoff is bounded, documented in ROADMAP, and now player-visible in the default configuration)
- Verification: 83% (author re-ran the parse check and
world_storage_verifyfor this commit, and the new assertion matches the code as read;main.gdchanges are a toast plus a bool flag with low blast radius. The engine is unavailable on this runner, so these were not independently executed — residual risk is live-run behavior of the corrupt-region path only)
Merge Readiness:
- All critical issues resolved
- SOLID average score >= 6.0 (7.6)
- Overall confidence >= 60% (90%)
- No security concerns (traversal ids rejected at every storage entry point; creation-over-existing guarded;
.tmpexcluded from copies; verifier-covered) - No unresolved worker-thread, determinism, or data-loss risk
Verdict:
MERGE — Every finding from both prior reviews is fixed with verifier coverage; the only new observation is a minor visibility gap for the non-default Autosave Off setting.
Machine Readable Verdict
{
"reviewed_sha": "13fa59ce67c6f58d324f730e06c240d180ba16e1",
"critical_issues": 0,
"high_priority_issues": 0,
"medium_priority_issues": 0,
"overall_confidence_score": 90,
"recommendation": "MERGE"
}


Summary
Verification
redot --editor --headless --path . --quitredot --headless --path . --script res://tools/world_storage_verify.gdredot --headless --path . --script res://tools/ui_flow_verify.gdredot --headless --path . --script res://tools/weather_verify.gdredot --headless --path . --script res://tools/frame_pacing_verify.gdredot --headless --path . res://tools/player_target_verify.tscn