From c742a172da3d42164fe548be1fa3c7247cd3ca4d Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 19 May 2026 16:15:35 -0700 Subject: [PATCH] Prepare roadmap for 0.2 homesteading --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 54 +++++++++++++ Docs/CodebaseReadinessReview.md | 72 +++++++++++++++++ ...verify_0_1_completion_and_0_2_readiness.py | 78 +++++++++++++++++++ .../AgrarianMvpFrontendWidget.cpp | 5 -- 4 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 Docs/CodebaseReadinessReview.md create mode 100644 Scripts/verify_0_1_completion_and_0_2_readiness.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index 62f6864..f14f0fa 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -898,22 +898,41 @@ Target deliverable: A small group can join a server, spawn into one biome, gathe Goal: Transition from temporary survival into lasting settlement and land stewardship. +Engineering posture for 0.2: + +- Start with durable, server-authoritative systems instead of one-off MVP + shortcuts. +- Add schema/version fields to every new persistent record. +- Prefer data assets for claim, crop, animal, storage, structure, economy, and + knowledge definitions. +- Keep each new system covered by focused verifiers and grouped milestone + checks. +- Replace visible placeholders with realistic, production-survivable assets in + the same order players encounter them. + ## 0.2.A Land And Claiming - [ ] Design land claim philosophy. +- [ ] Define claim data schema with claim ID, owner, bounds, tile anchor, permissions, upkeep state, decay state, and schema version. +- [ ] Define server-authoritative claim validation rules for placement, overlap, terrain suitability, water/road access, and abuse prevention. - [ ] Define claim size limits. - [ ] Define claim cost or effort. - [ ] Implement claim marker. - [ ] Implement claim ownership. - [ ] Implement claim permissions. +- [ ] Add claim debug/admin inspection commands. - [ ] Add claim UI. - [ ] Add claim persistence. +- [ ] Add claim save/load/restart verifier. - [ ] Add claim conflict rules. - [ ] Add abandoned claim decay rules. +- [ ] Add claim handoff rules for household/family inheritance later. ## 0.2.B Farming - [ ] Design soil model. +- [ ] Define crop data asset schema for species, seed item, planting season, soil needs, moisture range, temperature range, growth stages, harvest products, failure risks, and knowledge hooks. +- [ ] Define tile biome/climate inputs that farming reads from rainfall, temperature, season, elevation, soil, and drainage metadata. - [ ] Add basic soil quality. - [ ] Add moisture. - [ ] Add crop data assets. @@ -929,10 +948,14 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add seed selection and plant breeding foundation concepts. - [ ] Add crop disease, pest pressure, and weed management knowledge hooks. - [ ] Add weather and seasonal planning effects on planting and yield reliability. +- [ ] Add first crop visual states that read as believable seedlings, growing plants, mature crops, and failed crops. +- [ ] Add crop save/load/restart verifier. ## 0.2.C Domestication - [ ] Choose first domestic animal. +- [ ] Define animal data asset schema for species, temperament, diet, water needs, shelter needs, products, reproduction window, disease risks, and knowledge hooks. +- [ ] Define containment and ownership records before adding breeding. - [ ] Add taming concept. - [ ] Add feeding. - [ ] Add containment. @@ -944,9 +967,12 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add animal handling knowledge for approach, containment, stress, feeding, hydration, shelter, and humane care. - [ ] Add livestock reproduction knowledge for breeding windows, gestation, offspring care, genetic traits, and recordkeeping. - [ ] Add animal disease, sanitation, quarantine, parasite, and nutrition knowledge hooks. +- [ ] Add first believable domestic animal visual proxy or asset so animal systems are not represented by generic shapes. +- [ ] Add animal save/load/restart verifier. ## 0.2.D Storage And Preservation +- [ ] Define storage data schema for container ID, owner/claim, slots, weight/volume limits, permissions, spoilage environment, and schema version. - [ ] Add storage containers. - [ ] Add container permissions. - [ ] Add spoilage timer. @@ -956,9 +982,12 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add storage UI. - [ ] Add food preservation knowledge for drying, smoking, salting, fermenting, canning later, cold storage, spoilage, pests, and contamination risk. - [ ] Add material storage knowledge for moisture, rot, rust, pests, fire risk, and inventory rotation. +- [ ] Add storage save/load/restart verifier. +- [ ] Add storage visual differentiation for baskets, crates, racks, caches, and protected containers. ## 0.2.E Permanent Structures +- [ ] Define structure piece data asset schema for material, footprint, snap points, structural role, health, weather protection, fire risk, repair cost, and decay rules. - [ ] Expand building pieces. - [ ] Add foundation. - [ ] Add walls. @@ -970,9 +999,12 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add decay rules. - [ ] Add permissions. - [ ] Add persistence optimizations. +- [ ] Replace primitive shelter proxy pieces with more believable material-driven meshes. +- [ ] Add structure save/load/restart and damage/repair verifier. ## 0.2.F Simple Economy +- [ ] Define transaction record schema with participants, claim/settlement context, offered items, accepted items, timestamp, and audit ID. - [ ] Add barter container. - [ ] Add simple trade UI. - [ ] Add ownership transfer. @@ -981,15 +1013,18 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add transaction logging. - [ ] Add early business knowledge for bookkeeping, inventory, profit/loss, fair trade, basic credit, risk, and customer trust. - [ ] Add simple workshop/business ownership rules for homestead-scale production. +- [ ] Add anti-duplication and rollback rules for multiplayer trade. ## 0.2.G Homesteading Knowledge Progression +- [ ] Convert the 0.1.R knowledge foundation into first data records for homesteading topics. - [ ] Define early profession paths: farmer, herder, carpenter, mason, cook, medic, hunter, fisher, trapper, trader, and scout. - [ ] Add learning-by-doing bonuses for routine homestead work without letting repetition replace core understanding. - [ ] Add simple manuals, oral tips, and settlement notes as discoverable teaching objects. - [ ] Add household teaching rules for passing practical knowledge to family or trusted settlement members. - [ ] Define how poor knowledge creates believable outcomes: spoiled food, sick animals, failed crops, weak structures, wasted materials, and avoidable injury. - [ ] Define how good knowledge improves resilience without making nature instant or effortless. +- [ ] Add grouped verifier coverage for knowledge topics, prerequisites, practice actions, and persistence readiness. ## 0.2.H Household Task And Helper Foundations @@ -1000,6 +1035,25 @@ Goal: Transition from temporary survival into lasting settlement and land stewar - [ ] Add simple helper work reports so players can see what was gathered, consumed, protected, repaired, or failed while they were away. - [ ] Add guardrails so helpers cannot create resources from nothing, bypass crafting costs, ignore carry limits, or operate outside reachable storage and terrain. +## 0.2.I 0.1 Hardening And Technical Debt + +- [ ] Split `AgrarianEditorAutomationLibrary.cpp` into focused automation helpers for gameplay loop, persistence, terrain import, visual QA, and setup tasks. +- [ ] Create a grouped verifier runner for milestone categories instead of relying on many one-off script calls. +- [ ] Move Ground Zero, startup, map, and automation constants toward data assets, config, or tile metadata. +- [ ] Separate admin/dev console command authority and audit paths from normal player controller gameplay paths. +- [ ] Add deprecation warnings for remaining MVP placeholder/proxy systems that must be replaced before public testing. +- [ ] Add a coding standards checklist for replication, persistence, save schema changes, data assets, and visual placeholder removal. + +## 0.2.J Homesteading Visual And Biome Realism Pass + +- [ ] Replace tan/flat terrain presentation with realistic coastal scrub terrain materials driven by tile metadata. +- [ ] Add first production-survivable grass, shrub, brush, and tree assets for Ground Zero. +- [ ] Add foliage density and sightline rules that match real-world biome expectations without hiding gameplay readability. +- [ ] Replace highest-impact primitive resource shapes with recognizable wood, stone, fiber, edible plant, and water visuals. +- [ ] Improve character presentation beyond mannequin/proxy while keeping male/female selection stable. +- [ ] Add optional cinematic rendering tier validation while preserving a credible non-ray-traced default. +- [ ] Add investor visual QA screenshots for terrain, foliage, water, character, fire, shelter, and wildlife. + --- # Version 0.3 - Social Civilization Systems diff --git a/Docs/CodebaseReadinessReview.md b/Docs/CodebaseReadinessReview.md new file mode 100644 index 0000000..d0bfc29 --- /dev/null +++ b/Docs/CodebaseReadinessReview.md @@ -0,0 +1,72 @@ +# Codebase Readiness Review + +Date: 2026-05-19 + +Scope: source code, build scripts, verification scripts, config files, and the +roadmap after completion of `0.1.R`. + +## 0.1 Completion Check + +All `0.1.A` through `0.1.R` roadmap checkboxes are complete. The remaining +unchecked roadmap items before `Version 0.2` are North Star and philosophy +statements, not incomplete `0.1` implementation tasks. + +## Current Strengths + +- Core gameplay systems are separated into recognizable Unreal classes: + character, controller, game state, survival, inventory, crafting, building, + persistence, weather, resource nodes, wildlife, shelter, campfire, water, UI, + and automation. +- Server-authoritative paths are already present for core multiplayer actions + such as crafting, item use/drop/splitting, travel, save/load, respawn, fire, + resource depletion, wildlife state, world actors, and weather state. +- Persistence has a central subsystem and explicit world actor/resource/player + capture paths, which is the right base for 0.2 homesteading. +- The project now has broad verifier coverage for roadmap promises and MVP + guardrails. This is useful for preventing accidental regression while the team + moves into larger systems. +- The Windows build pipeline, package script, visual QA gate, and Linux server + target are established enough to keep milestone work shippable. + +## Cleanup Findings + +- `AgrarianEditorAutomationLibrary.cpp` is doing too much. It contains map + import, gameplay smoke tests, persistence tests, and setup helpers in one + large file. It should be split by responsibility before 0.2 adds claiming, + farming, storage, and household tests. +- The MVP frontend is still implemented as runtime-created widget trees. This + has been effective for fast iteration, but 0.2 should move toward reusable + UMG widgets, shared styling, and a cleaner input/navigation model. +- Placeholder/proxy meshes are intentionally still present for resources, + shelters, campfires, water, wildlife, and characters. 0.2 should replace the + highest-impact placeholders with durable realistic assets while preserving + data-driven class behavior. +- Several systems use hard-coded Ground Zero, MVP, and automation constants. + These are acceptable for 0.1 but should move toward data assets, config, or + tile metadata as 0.2 introduces claims, crops, animals, storage, and + homestead state. +- Admin/dev console commands currently share runtime controller paths. Before + broader testing, privileged commands need a clearer authority, role, and + audit boundary so tester tools do not become gameplay exploits. +- Verifier scripts are useful but numerous. 0.2 should add a grouped verifier + runner so milestone verification is one command with explicit categories. + +## Low-Risk Cleanup Applied + +- Removed duplicate `SavingAndQuit` branch logic from the MVP frontend continue + flow. Behavior is unchanged, but the control path is now easier to read. + +## 0.2 Engineering Priorities + +- Keep land claims, farming, storage, household tasks, and future economy state + server-authoritative from the first implementation pass. +- Add schema/version fields when introducing new persistent records. +- Use data assets for claim rules, crop definitions, animal definitions, + storage container definitions, and early profession/knowledge topics. +- Create focused automation helpers by domain instead of expanding the current + monolithic editor automation file. +- Replace placeholder visuals in the order investors and testers notice them: + terrain material, grasses/shrubs/trees, water, character bodies/clothing, + resource objects, fire/smoke, shelter pieces, and wildlife. +- Keep ray tracing optional. The default non-ray-traced path must remain the + baseline for demo readability and remote testing. diff --git a/Scripts/verify_0_1_completion_and_0_2_readiness.py b/Scripts/verify_0_1_completion_and_0_2_readiness.py new file mode 100644 index 0000000..acf92a2 --- /dev/null +++ b/Scripts/verify_0_1_completion_and_0_2_readiness.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +"""Verify 0.1 is complete and 0.2 readiness notes are present.""" + +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" +REVIEW = ROOT / "Docs" / "CodebaseReadinessReview.md" + +REQUIRED_ROADMAP_SNIPPETS = [ + "# Version 0.2 - Persistent Homesteading", + "Engineering posture for 0.2:", + "Define claim data schema with claim ID", + "Define crop data asset schema", + "Define animal data asset schema", + "Define storage data schema", + "Define structure piece data asset schema", + "Define transaction record schema", + "Convert the 0.1.R knowledge foundation into first data records", + "## 0.2.I 0.1 Hardening And Technical Debt", + "Split `AgrarianEditorAutomationLibrary.cpp`", + "Create a grouped verifier runner", + "Separate admin/dev console command authority", + "## 0.2.J Homesteading Visual And Biome Realism Pass", + "Replace tan/flat terrain presentation", + "Add investor visual QA screenshots", +] + +REQUIRED_REVIEW_SNIPPETS = [ + "# Codebase Readiness Review", + "All `0.1.A` through `0.1.R` roadmap checkboxes are complete.", + "AgrarianEditorAutomationLibrary.cpp` is doing too much", + "Low-Risk Cleanup Applied", + "Removed duplicate `SavingAndQuit` branch logic", + "0.2 Engineering Priorities", +] + + +def get_0_1_text(roadmap: str) -> str: + start = roadmap.find("## 0.1.A ") + end = roadmap.find("# Version 0.2") + if start == -1 or end == -1 or end <= start: + raise SystemExit("FAILED: could not isolate 0.1 roadmap section") + return roadmap[start:end] + + +def main() -> None: + roadmap = ROADMAP.read_text(encoding="utf-8") + review = REVIEW.read_text(encoding="utf-8") + + failures: list[str] = [] + + section_0_1 = get_0_1_text(roadmap) + unchecked_0_1 = [ + line.strip() + for line in section_0_1.splitlines() + if line.strip().startswith("- [ ]") + ] + if unchecked_0_1: + failures.append("0.1 has unchecked items: " + "; ".join(unchecked_0_1[:5])) + + for snippet in REQUIRED_ROADMAP_SNIPPETS: + if snippet not in roadmap: + failures.append(f"roadmap missing {snippet!r}") + + for snippet in REQUIRED_REVIEW_SNIPPETS: + if snippet not in review: + failures.append(f"readiness review missing {snippet!r}") + + if failures: + raise SystemExit("FAILED: " + "; ".join(failures)) + + print("OK: 0.1 completion and 0.2 readiness are documented.") + + +if __name__ == "__main__": + main() diff --git a/Source/AgrarianGame/AgrarianMvpFrontendWidget.cpp b/Source/AgrarianGame/AgrarianMvpFrontendWidget.cpp index 0a62d28..389bca6 100644 --- a/Source/AgrarianGame/AgrarianMvpFrontendWidget.cpp +++ b/Source/AgrarianGame/AgrarianMvpFrontendWidget.cpp @@ -211,11 +211,6 @@ void UAgrarianMvpFrontendWidget::ContinueFromActiveScreen() CompleteFrontendFlow(); return; } - - if (ActiveScreen == EAgrarianMvpFrontendScreen::SavingAndQuit) - { - return; - } } void UAgrarianMvpFrontendWidget::ReturnFromActiveScreen()