Development Roadmap
The complete repository roadmap and release history, rendered from the current docs/ROADMAP.md in 0.6.0.4.
Roadmap to 1.0.0.0
1.0.0.0 is the first feature-rich real-world release: a credible persistent survival game rather than a technical prototype. Each milestone should remain playable and may receive patch/revision releases before the next milestone.
0.0.1.0 - Core Kernel (implemented)
- Custom PHP 8.3+ modular application kernel, selective Composer infrastructure dependencies and no full-stack framework/ORM.
- Module registry, routing, configuration, logging, domain events, sessions/security primitives and theme/core template fallback.
- Migration-first DBAL infrastructure and initial account/identity/consent schema.
- Initial
accounts.is_adminauthorization boundary, system status, CLI and Theme Inspector shell. - No gameplay loop yet; this release exists to make 0.1.0.0 production-shaped rather than disposable.
0.0.1.1 - PHP 8.3 Baseline Hotfix (implemented)
- Official minimum runtime changed from PHP 8.4.1 to PHP 8.3.0.
- PHPUnit development dependency moved from 13.x to 12.x for PHP 8.3 compatibility.
- Runtime health checks, documentation and release metadata updated consistently.
- No gameplay or database schema changes.
0.0.2.0 - Account, Solo World & Survivor Foundation (implemented)
- Real account onboarding path with non-unique Player Name and separate game-news consent.
- Provider identity boundary for Google/Apple plus an explicitly gated development-only identity for local testing; no password storage.
- Authenticated session rotation, logout and CSRF-protected onboarding forms.
- Persistent per-account Solo world.
- Mortal survivor persistence with the 100 HP invariant and one current-survivor slot per account/world.
- Plain player-facing
/login, onboarding, survivor creation and/gamepages. - Production Google/Apple OAuth/OIDC handshakes remain an adapter task and must use real token/state/nonce validation.
0.0.2.1 - Apache Routing Hotfix (implemented)
- Shipped/verified Apache front-controller rewrite support and deployment diagnostics.
- Documented
public/DocumentRoot +AllowOverride Allrequirement for clean routes. - No gameplay/database changes.
0.0.3.0 - Location & Discovery (implemented)
- Lazy timestamp-derived Action Point regeneration; no cron dependency.
- Explicit Survey Area AP cost and first player-facing action economy.
- Browser geolocation submission with encrypted latest meaningful survivor position.
- Versioned coarse geographic cells and cell-scoped POI provider caching.
- Provider-independent POI contract with initial Overpass/OpenStreetMap development adapter.
- Normalized game-owned location taxonomy and canonical POI persistence.
- Survivor-specific Observed/Identified discovery records.
- Nearby discoveries text list and discovered-only MapLibre map markers.
- Development-only manual coordinate entry for insecure LAN testing; production remains geolocation/HTTPS oriented.
0.0.3.1 - Discovery Field-Test Hotfix (implemented)
- Nearby list/map filter persisted knowledge to the survivor's current local radius instead of showing distant historical discoveries.
- Survey cap applies to new discoveries per action; known POIs no longer consume the reveal allowance.
- Dense-area selection adds lightweight taxonomy diversity while remaining proximity-led.
- Browser-reported geolocation accuracy is surfaced for development/gameplay diagnostics.
- MapLibre popup colours are explicitly themed for the dark core UI.
- No database schema changes.
0.0.4.0 - Location Interaction, Scavenging & Inventory (implemented)
- Known discoveries open dedicated interaction pages.
- Search actions request a fresh geolocation fix and validate server-side range/accuracy.
- Quick, Standard and Thorough searches spend configurable AP.
- Per-world POI depletion is sparse/copy-on-write and finite.
- Contextual searches reveal authoritative physical item instances.
- Loot remains at the location until explicitly taken; taking transfers the exact instance into survivor inventory.
- Plain
/inventoryproves the ownership path. - No zombies/noise/consumption yet; this release isolates the persistence and transaction spine first.
0.0.5.0 - Equipment, Carrying & Database-Driven Loot (implemented)
- Move item definitions and contextual loot composition out of runtime PHP into database tables installed by required seeders.
- Preserve all existing item instances/ownership while changing only their metadata source.
- Add physical item weight, bulk/slot size, equipment positions and container capacity.
- Add base survivor storage plus worn clothing/backpack storage.
- Add equip/unequip actions and left/right hand resolution for hand-held items.
- Reject loot acquisition that exceeds available slots or hard overloaded carry weight.
- Derive encumbrance from carried weight and reduce effective maximum AP rather than altering real-world walking speed.
- Keep item use/consumption for the next survival slice.
0.0.5.1 - Development Location & Persistent Drops (implemented)
- Add a persistent development-location override for remote-area testing without exposing the feature in production.
- Development Survey/Search and location-sensitive inventory actions use the simulated position until explicitly cleared.
- Choosing
Use Current Location & Surveyclears the development override before acquiring real GPS. - Add Drop and Pick Up ownership transfers so physical item instances can persist in the world.
- Dropped containers retain contained item instances; meaningful containers persist longer than loose items.
- Add lazy expiry cleanup so abandoned loose world drops do not accumulate forever.
- Add a website
/roadmappage generated from this document so repository and UI share one roadmap source.
0.0.5.2 - World Drop Constraint Hotfix (implemented)
- Align the
item_instances.holder_typeCHECK constraint with persistent world-drop ownership. - Fix MariaDB error 4025 when dropping an inventory item.
- Preserve all existing item-instance identities and ownership data.
0.0.5.3 - Migration Registration Hotfix (implemented)
- Register the world-drop holder-type migration with the Items module so MigrationManager can discover and execute it.
- Add a release guard that fails when a migration file exists on disk but is not registered by its owning module.
0.0.5.4 - Local Observation Polish (implemented)
- Move nearby dropped items out of Inventory and into the main local-area view under Stuff on the floor.
- Treat open world drops as dynamic local observations: no Survey AP and no scavenging Search are required to notice them.
- Refresh local awareness with a one-shot GPS update on normal game-page entry, without spending AP or revealing POIs; development-location override suppresses real GPS.
- Keep visibility server-authoritative and scoped to the survivor's current/effective nearby position.
- Allow pickup directly from the local-area view while retaining fresh GPS/development-override validation.
- Keep Inventory focused on carried/equipped possessions.
0.0.5.5 - Location Context & Indoor Drops (implemented)
- Record the canonical UID of the last location the survivor explicitly entered while in interaction range.
- Keep latest encrypted GPS position and last-known canonical place as separate concepts.
- Associate world drops with a location when dropping from Inventory while still physically within that place's interaction range.
- Show indoor drops on the location page without requiring Survey or Search; keep them out of street-level local observations.
- Preserve server-authoritative visibility, fresh-position validation and exact item-instance ownership transfer.
0.0.6.0 - Consumables & Basic Survival (implemented)
- Add hydration, calorie balance and a reusable multi-status foundation.
- Add Drink, Eat and basic Use actions driven by database item effects.
- Preserve containers/results where appropriate, such as drinking water leaving an empty bottle.
- Add basic medical use such as bandaging and first status interactions.
- Derive need progression lazily from elapsed time where practical rather than requiring cron ticks.
- Acceptance target: find water -> take it -> drink it -> hydration changes -> physical item consequences persist.
0.0.7.0 - Weather, Exposure & Clothing (implemented)
- Add real-weather provider abstraction and internal
WeatherState, with coarse-cell caching that never refreshes the external provider more often than hourly. - Use stale cached observations when the provider is temporarily unavailable.
- Temperature, feels-like temperature, precipitation and wind feed lazy exposure simulation.
- Clothing definitions gain database-driven insulation, water resistance, wind resistance and breathability.
- Add
Wet,Cold,Freezing,Hypothermia,Hot,OverheatedandHyperthermiathermal states. - Heat and low-breathability clothing increase hydration use; wetness reduces effective insulation.
- Unequipped clothing remains a physical item, keeps pocket contents, and is placed into valid storage or a free hand when possible.
- Acceptance target: real conditions plus clothing can push the survivor toward cold/heat stress and materially alter hydration pressure.
0.0.7.1 - Manual Storage Movement (implemented)
- Add explicit Move-to storage actions for carried items.
- Allow valid movement into worn clothing pockets, equipped backpacks and base carried storage.
- Revalidate slot and container-weight capacity server-side at move time.
- Preserve item identity and nested contents while ensuring stored containers do not create active nested capacity.
0.0.7.2 - Physical Item Fit (implemented)
- Add database-driven item size tiers and per-container maximum item size.
- Keep physical fit independent from slot usage and carried weight.
- Prevent pocket containers from accepting implausible items such as Wood Scrap merely because they have spare slots.
- Prefer backpacks/general carried storage over clothing pockets for automatic pickup while keeping manual pocket placement available for suitable items.
- Apply the same fit validation to pickup, manual movement and unequip/storage placement.
0.0.8.0 - Noise & Infected Encounters (implemented)
- Add sparse cell-level infected pressure without persisting every generic zombie.
- Search NoiseEvents combine with local pressure to trigger temporary aggregate encounters.
- Keep hidden pressure server-side while exposing development-only diagnostics for balancing.
- Add an active encounter/evasion flow while deliberately deferring combat and injury to 0.0.9.0.
- Acceptance target: a noisy Thorough Search in infected territory can cause a genuine zombie encounter.
0.0.8.1 - Development Interaction Range Bypass (implemented)
- active development-location overrides may bypass ordinary proximity/accuracy gates for complete remote testing;
- production and real-GPS rules are unchanged.
0.0.8.2 - Encounter Locking (implemented)
- unresolved infected encounters now lock the survivor into encounter-valid actions server-side;
- browser navigation or direct POSTs cannot bypass the encounter.
0.0.8.3 - Roadmap Rendering Hotfix (implemented)
- the site roadmap parser now renders milestone patch notes as separate plain-text entries instead of leaking raw Markdown emphasis into the page.
0.0.9.0 - Basic Combat, Injury, Death & Sleep (implemented)
- Added grounded round-based melee combat sufficient to prove the architecture without finalising PvP combat.
- Fixed 100 HP survivors now take infected combat damage; Bleeding can coexist with other statuses and existing Bandages can treat it.
- Held melee-capable items use database-driven damage values; unarmed fallback and treatment paths are supported. Weapon durability remains a later refinement.
- Death archives the survivor with a cause, applies a short configurable cooldown and creates a genuinely new survivor in the same account-owned Solo world.
- Fatigue/exhaustion and real-time Sleep are implemented; sleep quality uses shelter plus database-driven Blanket/Bedroll/Sleeping Bag gear, and hydration/calories continue over elapsed time. An Improvised Bedroll has a database-driven craft recipe.
- Solo deaths do not create former-survivor zombies.
- Acceptance target: fight -> injury/treatment or 0 HP death -> archive -> genuinely new survivor in the same persistent world.
0.0.9.1 - Contextual Blanket Loot (implemented)
- Broaden Blanket loot to plausible hospital, shelter, retail and hotel/accommodation contexts.
- Add hotel/accommodation taxonomy support without hardcoding individual real-world brands.
- Keep contextual loot database-driven through additive required seed data.
0.1.0.0 - Playable Foundation (implemented)
- Consolidate and field-test the complete vertical slice from account/survivor through discovery, scavenging, survival, weather, infected encounters, combat and death.
- Complete production Google and Apple authentication adapters with authorization-code exchange, state/nonce/token validation, Google PKCE and signed Apple client-secret exchange; no local password storage.
- Keep provider identity separate from internal Account identity and keep non-unique player names.
- Preserve explicit/revocable communication consent and private provider/contact data handling.
- Tune AP, loot, carrying, survival and encounter balance from real-device testing.
- Add first geography-constrained apocalypse World Discoveries such as abandoned homes, vehicles/camps/caches where placement is plausible.
- Add conservative geography-anchored apocalypse discoveries: Abandoned Homes only from residential-building anchors, Wrecked Vehicles from parking anchors, and Camps/Caches from park or woodland context.
- Broaden database-driven improvised melee weapons and contextual weapon loot; expose the selected sleep gear and expected sleep quality before/while sleeping.
- Improve Admin/Game inspectors and template preview states for the implemented gameplay systems.
- Verify clean install, upgrade migrations/seeders, mobile browser behaviour, provider outages and documentation continuity.
- Acceptance target: fresh server -> survivor -> real Survey -> approach/search POI -> finite item instance -> carry/equip/use -> weather/survival consequence -> infected encounter -> injury/death -> new survivor while world consequences remain.
0.1.0.1 - Development Location Map & Stabilization (implemented)
- Add an admin-only full world map coordinate picker for the existing development location override, with pan/zoom, click/tap placement and draggable pin.
- Keep the tool development-only (
APP_ENV=development+ALLOW_DEV_LOCATION=true) and reuse existing session-authoritative simulated location semantics. - Keep the coordinate picker free of hidden game-state data; it is not a POI/infected/player world browser.
- Prevent Theme Inspector fake preview controls from submitting placeholder CSRF tokens to live gameplay endpoints.
- No database schema or required seed-data changes.
0.1.0.2 - Inventory Interaction Stabilization (implemented)
- Allow hand-held wearable equipment such as backpacks to move directly to its worn slot without a floor-drop workaround.
- Atomically swap a hand-held replacement with an occupied worn slot, preserving both items and all nested contents.
- Distinguish Worn, Held and Stored/Carried inventory presentation.
- Allow individual items to be retrieved from dropped containers without first picking up the entire container.
- Transfer full nested item descendant trees when containers move between survivor and world-drop ownership.
- No database schema or required seed-data changes.
0.2.0.0 - Survival & Crafting (implemented)
- Expanded hydration/calorie simulation, fatigue and stamina/AP relationships.
- Wetness, temperature, wind/exposure and shelter effects.
- Clothing layers, insulation, waterproofing, durability and condition.
- Rest/sleep, bleeding, wounds and illness foundations.
- Multiple interacting statuses and explanation/inspection tooling.
- Dedicated Crafting menu with database-driven recipes, physical ingredients, reusable tool requirements, AP costs and result condition.
- Initial improvised craft set: Improvised Bedroll, Nailed Plank, Broken Bottle, Wrapped Glass Shiv and Makeshift Spear.
- Contextual scavenging sources for Nails and Glass Bottles; crafted weapons remain ordinary physical item instances governed by inventory, condition and melee rules.
0.2.1.0 - Survival & Crafting Update (implemented)
- Add real melee weapon durability: every strike wears the exact held physical item.
- Reuse definition
durabilityplus instancecondition_wearso clothing and weapons share one condition model. - Broken melee items remain physical at 0% condition, are automatically unequipped and cannot be equipped again.
- Tune fragile glass to fail quickly while timber, tools and steel weapons progressively last longer.
- Expand recipes with Wooden Club, Reinforced Club, Scrap Shiv, Improvised Bandages and Insulated Bedroll.
- Add the first recipe upgrade path (Wooden Club -> Reinforced Club) while preserving reusable-tool requirements.
- Expose result durability/estimated strikes on Crafting and advance Template API to 10.
0.2.1.1 - Clothing Wear & Repair (implemented)
- Extend the shared durability/condition model to clothing damage from exploration and infected attacks.
- Prefer outer layers as combat-damage targets while allowing inner layers to be damaged when exposed.
- Add Cloth Scrap, Thread and Sewing Needle plus a server-authoritative sewing repair action.
- Repairs consume cloth/thread and AP, retain the needle, restore condition and remain within ordinary physical item ownership.
- Add textile salvage from Blankets and contextual sewing-supply loot.
- Advance Crafting to Template API 11 / contract v3.
0.2.2.0 - Skills & Knowledge Foundation (implemented)
- Add survivor-scoped practical disciplines without character levels or 1-99 skill ladders.
- Establish five broad competencies: Untrained, Familiar, Practised, Skilled and Expert.
- Separate practical competency from specific Knowledge entries such as techniques, identification, recipes and medical understanding.
- Add initial disciplines: Scavenging, First Aid, Crafting, Foraging, Firecraft, Sheltercraft, Cooking, Trapping, Archery, Farming, Mechanics, Electrical, Construction and Hunting.
- Give each new/current survivor one deterministic modest pre-apocalypse background familiarity plus one matching knowledge entry; no background changes HP or grants combat power.
- Add anti-grind practice saturation: repeating the identical practice source on the same day rapidly loses learning value and eventually awards none.
- Existing successful scavenging, crafting, clothing repair and first-aid treatment can develop the relevant practical skill without automatically teaching unrelated knowledge.
- Add
/skills, a compact Survivor-page skill summary, Theme Inspector preview and admin diagnostics. - Keep all skills/knowledge mortal and mode-local by storing them against the survivor.
0.2.3.0 - Environment, Seasons & Foraging (implemented)
- Introduce server-owned habitat/environment classification for natural resource actions.
- Model seasonality from geographic location and date rather than assuming northern-hemisphere calendar seasons globally.
- Build resource availability curves that can later incorporate latitude, climate profile and recent weather.
- Add Forage Area actions for appropriate natural environments, with seasonal food, tinder, fibre, plant and fungi resources.
- Keep practical Foraging separate from identification Knowledge; skill helps search efficiency but never creates resources or magically identifies species.
- Add local forage pressure/depletion and natural recovery without infinite rapid respawns.
0.2.3.1 - Foraging Identification & Specimens (implemented)
- Add survivor-specific identification records for exact harvested specimens so hidden species identity never becomes globally known through item transfer.
- Add an Inventory Examine action for unidentified berries, plants and fungi.
- Allow knowledge learned after harvesting to identify an existing specimen without replacing/duplicating the physical item.
- Let identified specimens expose their appropriate survivor-facing name and usable effects while remaining generic to survivors who have not identified them.
- Keep species identification separate from cooking, treatment and preparation Knowledge.
- Pinned for later design: survivor internal thoughts/commentary should be an event/message system referencing authoritative survivor/action/entity UIDs rather than flavour text embedded directly into mechanics. This is not implemented in 0.2.3.1.
0.2.3.2 - Knowledge Sources & Plant Guides (implemented)
- Add reusable physical Knowledge sources, beginning with books/field guides carried through the ordinary item system.
- Studying a source costs AP only when it has Knowledge the survivor has not yet learned; the source itself is retained.
- Seed Pocket Guide to Common British Wild Plants, teaching Blackberry, Common Nettle, Plantain and Yarrow identification without improving practical Foraging skill.
- Keep knowledge survivor-scoped and mortal: another survivor must study the same physical book independently.
- Let newly learned identification Knowledge immediately support re-examining specimens already carried by that survivor.
- Establish a generic source-to-Knowledge mapping for later first-aid manuals, mechanics books, bushcraft guides and teaching/event sources.
0.2.3.3 - Ecological & Geographic Localisation (implemented)
- Replace the hard-coded European scope check with reusable data-driven location scopes that can represent ecological or cultural regions without treating political borders as nature.
- Natural forage eligibility now resolves in layers: geographic/ecological scope -> climate profile -> habitat -> local seasonal curve -> depletion/recovery.
- Add climate eligibility metadata to forage resources so a species can be excluded even when a broad coordinate scope overlaps the location.
- Keep the first European species set region-limited; worldwide locations receive only resources explicitly eligible there rather than inheriting a British/European plant catalogue.
- Add generic geographic scope support to contextual loot, allowing human-created items such as regional field guides to appear only where appropriate. Existing physical items remain ordinary items and can still be carried elsewhere.
- Retain Pocket Guide to Common British Wild Plants as a regional guide, localise its normal loot to Britain/Ireland, and add a globally eligible Basic Foraging Handbook that teaches general principles rather than local species identification.
- Seed coarse future regional scopes only as localisation foundations; do not pretend the initial content catalogue models every ecosystem on Earth.
0.2.4.0 - UI & Interaction Foundation (implemented)
- Introduce a readable responsive core presentation that keeps information explicit/testable without attempting a finished theme or SPA.
- Add shared toast notifications with separate GAME, SURVIVOR, SYSTEM, DEV and DEV NOTE channels plus success/info/warning/danger tones.
- Add a progressive-enhancement action contract: ordinary POST/redirect remains valid, while JavaScript-capable clients can receive structured action JSON and refresh authoritative server-rendered HTML without a full page reload.
- Add shared busy/error handling and one reusable geolocation flow for location-sensitive actions instead of per-page JavaScript.
- Progressively enhance Inventory actions, specimen examination, Knowledge study, consumables, Crafting/repair, location search/loot/world-item pickup and Forage Area.
- Keep encounter/sleep/other stateful flows server-first where a full navigation remains clearer; future releases can opt into the same action contract deliberately rather than automatically.
- Keep survivor internal-thought persistence separate from the UI layer: the SURVIVOR channel is presentation infrastructure now, while durable/event-backed thought generation remains a later domain feature.
- Advance Template API to 16 so custom themes are explicitly prompted to review the new interaction/message component conventions. No migration or seeder is required.
0.2.4.1 - Survivor Creation Hotfix (implemented)
- Restore the survivor-creation controller action accidentally dropped during refactoring.
- Add release validation that registered survivor creation routes still resolve to a real handler.
0.2.4.2 - Death Slot Release Hotfix (implemented)
- Release
current_slotwhen a survivor dies so the next survivor can occupy the current-life slot after cooldown. - Repair stale dead rows created by earlier versions while retaining historical survivor archives.
0.2.4.3 - Survivor Loot Knowledge Hotfix (implemented)
- Separate physical location loot from survivor knowledge of exact revealed items.
- At the time of this hotfix, keep the then-current finite depletion model while preventing replacement survivors from inheriting a predecessor's revealed-loot list. Permanent exhaustion is superseded by 0.2.5.0.
- Make later searches discover still-present but unknown physical loot before resolving additional search opportunity; 0.2.5.0 later replaces finite unresolved potential with renewable pressure-based opportunity.
- Require survivor-specific reveal authority when taking location loot; item UIDs alone never grant access.
- Replace ordinary world search-count/depletion presentation with survivor-specific search history; retain authoritative state only in explicitly development-only diagnostics.
0.2.5.0 - Renewable Scavenging & Development Reset (implemented)
- Replace permanent finite manufactured-loot exhaustion with renewable abstract search opportunity while keeping exact physical item instances authoritative and non-duplicating.
- Limit each survivor/location to a rolling 24-hour search-effort budget; Quick/Standard/Thorough consume 1/2/3 effort units by default.
- Build survivor-specific diminishing returns from recent repeated searching. The same survivor gradually shifts toward common/low-value finds, while death naturally resets that personal familiarity because search history is mortal.
- Retain a smaller capped world/location pressure so deliberate death is not a perfect economic reset, while ensuring a fresh survivor can still make worthwhile finds in a repeatedly visited neighbourhood.
- Add data-driven loot quality tiers and pressure-adjusted weighted selection rather than hard-coding item names in runtime search logic.
- Reveal already-existing hidden physical loot before materialising new overlooked items. Keep a configurable loose-item ceiling so renewable searching cannot accumulate unbounded location-held rows.
- Retire
clearedas the permanent scavenging endpoint and treat oldloot_units_remainingas legacy compatibility data rather than the live search budget. - Add a development-only Admin RESET GAME DATA control that clears survivors and mutable world/gameplay state while preserving accounts, static seed data, canonical locations and external-provider caches such as weather and POI query data.
- Keep exact pressure values development-only; normal player UI receives qualitative scavenging condition.
0.2.5.1 - Explicit Forage Pickup (implemented)
- Separate finding natural material from taking it into inventory.
- Materialise forage results as survivor-revealed physical items at the location; never auto-insert successful finds into carried storage.
- Let survivors Take wanted finds explicitly, with carry-capacity checks performed at pickup time.
- Let unidentified specimens be Examined in place before deciding whether to carry them.
- Preserve hidden authoritative species identity and survivor-specific identification Knowledge while the specimen remains in the world.
- Keep untaken finds as physical world state rather than silently deleting them or returning them to the natural resource pool.
0.2.5.2 - Forage Pickup Route Hotfix (implemented)
- Route Foraging-result Take through the canonical location-loot pickup endpoint used by ordinary revealed physical items.
- Remove the core-template dependency on the duplicate forage-specific pickup URL that could surface as an AJAX 404.
- Keep forage finds survivor-revealed, physical and capacity-checked exactly as in 0.2.5.1.
- Add release regression coverage requiring the Foraging template to use the standard location-loot Take route.
0.2.5.3 - Forage Action Routing Hotfix (implemented)
- Move core Foraging-result Take and Examine controls to shallow
/forage/find/*POST endpoints carrying location/item UIDs in the request body. - Retain older deep forage routes for compatibility, but do not require core AJAX interaction to depend on deep dynamic URLs.
- Keep physical-item authority unchanged: survivor reveal, range, exact item UID and capacity checks still gate pickup.
- Return structured JSON for async stale/unknown-location failures instead of surfacing an HTML 404 as an unreadable generic toast.
- Add an actual router-match regression check for the new action paths, not only a template string assertion.
0.2.5.4 - AJAX Form Action Collision Hotfix (implemented)
- Fix the shared progressive-action client so form controls named
actioncannot shadow the form target and turn AJAX request URLs into[object HTMLInputElement]. - Read literal form
actionandmethodattributes instead of collision-prone DOM named properties. - Keep the 0.2.5.3 shallow forage Take/Examine routes and all server-authoritative reveal, range, capacity and item-ownership checks unchanged.
- Add release coverage for this browser-side failure mode.
0.2.6.0 - Water & Containers (implemented)
- Make carried fluids physical and capacity-limited rather than treating water only as an abstract need refill.
- Build a generic contents/container foundation rather than a special-case bottle system: capacity, current contents, transfer/fill/empty and server-authoritative ownership must be reusable by pots, buckets, fuel cans, jars and later storage vessels.
- Introduce substance state/quality such as source, quantity, potable/uncertain/unsafe status and treatment history, with the database retaining reality while the survivor/client receives only legitimately known state.
- Add lightweight provenance timestamps/metadata for meaningful transformations such as collection and treatment without logging every trivial item event.
- Connect the first collection opportunities to discovered marked drinking-water points, springs and water taps; leave explicit hooks for rain collection, wells, streams and later purification.
- Count liquid mass in carry/container limits, retain physical vessels after drinking, and preserve heat-safe/provenance hooks for the staged 0.2.7.4 boiling and later cooking work.
- Keep unsafe-water illness consequences deferred until the disease/medicine system can model them properly rather than adding a one-click arbitrary sickness roll.
0.2.6.1 - Surface Water & Container Realism (implemented)
- Recognise inland surface freshwater from mapped lakes, ponds, reservoirs, rivers, streams and canals while explicitly rejecting sea/ocean/salt/tidal water as ordinary drinking-water sources.
- Resolve shoreline/way geometry near the survivor rather than requiring the centre of a large lake or river feature to fall inside interaction range.
- Give vessels stable physical identities and make existing Glass Bottles reusable liquid containers.
- Distinguish closable bottles from open pans/buckets; filled open vessels must be hand-carried and can spill during meaningful travel.
- Allow partial/max-safe filling so large containers do not require enough free carrying capacity for their entire nominal volume.
- Split Drop / discard (ordinary expiring world drop) from Place (persistent fixture).
- Let exposed placed open vessels collect rainfall lazily from real weather history using opening/catchment area, without continuous per-minute simulation.
- Advance Template API to 19 and close the initial Water & Containers module before Firecraft extends treatment/boiling.
0.2.7.0 - Firecraft Foundation (implemented)
- Add authoritative world fires with one position/cell, creator, state, intensity, aggregate fuel reserve and lazy elapsed-time evaluation.
- Split fire creation into physical Build Fire Lay and Light actions: building consumes Tinder Bundle + Dry Sticks; lighting consumes a Match.
- Add data-driven combustible and ignition profiles instead of hard-coding material behaviour into controllers.
- Support Burning -> Hot Embers -> Extinguished lifecycle, plus manual extinguishing and refuelling with Dry Sticks or Wood Scrap.
- Consume exact carried physical quantities transactionally, spend AP, award modest Firecraft practice and emit ordinary noise hooks for the existing infected-pressure system.
- Prevent overlapping prepared/active fires at the same spot and require fresh server-validated location for world-fire interactions.
- Add a dedicated text-first
/firecraftpage plus a nearby-fire summary on the main game page. - Keep ignition deterministic in this foundation release; weather, material wetness and alternative ignition methods are intentionally staged next.
0.2.7.1 - Weather, Wet Fuel & Ignition Difficulty (implemented)
- Add sparse per-instance moisture state for combustible materials and expose meaningful wet/dry condition rather than a generic hidden penalty.
- Let real rain/exposure wet unsheltered hand-carried tinder/fuel while protected inventory avoids direct rain; committed prepared fire lays retain and continue evaluating their own moisture.
- Add weather-sensitive ignition difficulty using precipitation, wind, material moisture and ignition method, including valid failed attempts that consume effort/tools.
- Firecraft competency improves execution but cannot make physically impossible soaked fuel or extreme weather viable.
- Add a reusable Ferro Rod ignition method using ordinary item condition/wear rather than a separate charge system, with contextual loot entries.
- Let adverse rain/wind affect active-fire fuel use/intensity lazily and make wet refuelling less effective.
- Explain failed/impossible ignition through inspectable reasons and fix nearby-fire distance loss during lazy state evaluation.
0.2.7.2 - QoL & Fatigue AP Tuning (implemented)
- Make action effort respond to the existing fatigue thresholds: below 55% fatigue uses base AP costs, Tired (55-<80%) scales from +10% to +30%, and Exhausted (80-100%) scales from +35% to +70%.
- Round fatigue-adjusted costs upward to whole AP, recalculate authoritatively when an action is submitted, and apply the actual AP spent to survival activity costs.
- Keep domain/data AP values as base costs while showing current effective costs before Survey, Search, Forage, Firecraft, Crafting/Repair, Study, Water collection, Combat/Evade and related actions.
- Move Survey Area and Nearby Locations near the top of the Game screen so spatial decisions do not require scrolling through every survival panel first.
- Standardise signed-in primary navigation to a stable Game -> Inventory -> Firecraft -> Crafting -> Skills -> Account -> Roadmap -> Status order, preserving the current page in place and using a simple current-page treatment.
- Keep encounter/sleep lock screens deliberately minimal because ordinary navigation away remains server-blocked there.
- Advance Template API to 22. No database schema change or required seeder is introduced by this QoL release.
0.2.7.3 - Heat, Warmth & Drying (implemented)
- Feed nearby fire heat into the existing Exposure/Thermal calculation instead of creating an unrelated Warm buff.
- Scale useful heat by fire intensity and distance and allow excessive heat to contribute to overheating.
- Accelerate survivor drying near suitable fires.
- Establish reusable heat/drying context hooks for deliberately drying wet equipment/materials later without magically drying protected inventory.
0.2.7.4 - Timed Processes & Boiling (implemented)
- Add a reusable authoritative timed-process foundation for transformations tied to exact physical subjects, locations and heat sources.
- Require heat-safe cookware and sufficient real elapsed heat exposure for boiling.
- Transform the liquid already inside the exact Cooking Pan rather than spawning a replacement clean-water item.
- Preserve volume, provenance, treatment history and survivor-specific water knowledge.
- Prevent/cancel invalid movement of process subjects while an active process depends on them.
0.2.7.5 - Cooking (implemented)
- Reuse authoritative timed transformations for food preparation rather than introducing a separate timer/controller per cooking verb.
- Make Firecraft the field-work hub for both boiling and cooking: carried cookware/ingredients can be atomically staged beside an exact nearby fire while the underlying item/world ownership remains authoritative.
- Add the first data-driven recipes: Canned Beans -> Heated Beans and Common Nettles -> Cooked Nettles, both using a Cooking Pan and real elapsed useful fire heat.
- Add Canned Beans to suitable scavenging contexts and preserve a physical Empty Food Tin result rather than making packaging disappear from the world.
- Keep Foraging specimen identity separate from Cooking: cooking nettles ends the raw specimen identity before the item becomes Cooked Nettles.
- Add sparse temporary physical item warmth. Freshly cooked food and freshly boiled water can be Warm for a bounded period; consuming them while cold only eases existing thermal stress and never invents calories, hydration, HP or a positive heat buff.
- Let warm-water state follow an unmixed transfer into an empty container, while mixing with existing contents clears the simple warmth state rather than pretending to solve heat mixing precisely.
- Add collect/cancel flow for fire-side stations so completed or interrupted cookware remains physically beside the fire until the survivor returns and collects it.
- Fix carried/held liquid presentation so survivor-known source and treatment such as Boiled remain visible after cookware is picked up.
- Advance Template API to 25 with Firecraft cooking-station/recipe contracts and warm inventory presentation.
0.2.7.6 - Cooking Seeder FK Hotfix (implemented)
- Fix the required Cooking item seeder so self-referencing
result_definition_keyforeign keys are applied only after every cooking item definition exists. - Keep the failed 0.2.7.5 seeder transactional and retry-safe: affected installations can update and rerun the normal migration/seeder command without manual SQL cleanup.
- Add regression/release checks for the two-pass item-definition seeding rule.
- No gameplay, migration or Template API changes; the remainder of the staged Firecraft/Cooking roadmap moves forward by one patch number.
0.2.7.7 - Cooking Eligibility & Legacy Food Compatibility Hotfix (implemented)
- Fix Cooking ingredient eligibility so survivor-identified forage uses the survivor-authorized effective item identity rather than the hidden/raw generic specimen definition. Unidentified specimens remain ineligible and their true species is not leaked.
- Apply the same authority-aware identity check when the cooking POST is committed, not only while rendering the Firecraft recipe list.
- Add Canned Food -> Heated Canned Food as a compatibility recipe for the existing long-life
canned_fooditem instead of requiring every pre-existing tin to magically be Canned Beans. - Preserve the physical Empty Food Tin result for both cold and heated generic canned food.
- No migration or Template API change; add required compatibility seeders and regression/release checks.
0.2.7.8 - Firecraft Water & Cooking Workflow (implemented)
- Make Firecraft the practical water-work station: choose an empty carried Cooking Pan, an accessible water source and an exact nearby burning fire without manually filling/placing the pan first.
- Allow carried water containers, nearby deliberately placed reservoirs such as Plastic Buckets, and sufficiently known nearby fixed/natural water sources to supply measured water.
- Keep the convenience server-authoritative: stage the exact pan, move/collect the exact water volume, preserve liquid provenance/treatment/knowledge and create the timed process atomically.
- Extend data-driven Cooking recipes with measured water requirements and add Nettle Soup (Common Nettles + 250ml water per unit + Cooking Pan).
- Preserve incorporated liquid origin/treatment on prepared food for later illness/contamination reasoning; boiling/cooking does not magically erase broader contamination.
- Present empty pans as heat-safe cookware rather than ordinary drink containers while retaining their real liquid capacity underneath.
- Advance Template API to 26.
0.2.7.9 - Nested Cookware Boiling Hotfix (implemented)
- Fix Firecraft boiling eligibility so any Cooking Pan owned by the survivor counts as carried cookware even when nested inside a Backpack or other carried container.
- Use the same ownership rule for empty-pan discovery, carried filled cookware and the authoritative transactional re-fetch.
- Preserve normal physical staging beside the selected fire; this is an accessibility/ownership-query correction, not remote cookware use.
- No migration, required seeder or Template API change.
0.2.7.10 - Food Freshness & Spoilage (implemented)
- Add definition-level perishability profiles and sparse physical-instance freshness anchors.
- Evaluate Fresh -> Aging -> Spoiled lazily from elapsed time rather than minute-by-minute cron work.
- Make Blackberries and prepared/opened cooked foods perishable while sealed canned/dry shelf-stable foods remain long-lived.
- Let cooking establish a new exact-item freshness anchor when preparation completes.
- Block ordinary consumption of spoiled food while keeping Aging food edible; do not add arbitrary food-poisoning dice until illness/medicine can model the consequence properly.
- Retire standalone Cook Common Nettles from the active catalogue; Nettle Soup remains the intended nettle-food path.
- Advance Template API to 27 with inventory/location freshness presentation.
0.2.7.11 - Recipe Knowledge, Cooking Workflow & Integration Hardening (implemented)
- Add survivor-specific recipe knowledge modes: common, discoverable and learned. Learned recipe Knowledge is mortal and remains separate from practical Cooking competency.
- Teach Nettle Soup through the existing Pocket Guide to Common British Wild Plants; heating canned food remains common survival knowledge.
- Turn Firecraft into a readiness/work-station view: show only meals the survivor legitimately knows and can make now instead of listing the whole recipe catalogue.
- Replace runtime exact-
cooking_panrequirements with data-driven cookware capabilities and optional minimum liquid capacity; add item-definition ingredient tags for future fish/vegetable/wild-food recipe selectors. - Keep boiling drinking water as a first-class common survival process using capability-qualified cookware and existing authoritative Water rules.
- Add completed-meal Collect & Eat and post-boil Fill Container / Drink / Collect Cookware actions, preserving exact item/liquid state and server-side proximity/ownership validation.
- Reorganise Firecraft as Fire -> Ready to Cook -> Boil Water -> Active Processes -> Ready to Collect, with expanded deterministic preview/regression coverage.
- Close the 0.2.7.x Firecraft/Cooking foundation. Bulk forage/fish/recipe population, preservation, fireplaces and other adjacent content remain later work.
0.2.8.0 - Bushcraft Shelter Foundation (implemented)
- Add sparse persistent world objects for constructed infrastructure without replacing portable item ownership.
- Add reusable survivor-bound timed field activities: one deliberate task at a time, server UTC authority, movement/incompatible action lock, browser-independent progress and Stop Early with partial results.
- Add exact shelter worksites with local bulk structural/covering/insulation stockpiles; gathered material belongs to that worksite rather than the backpack.
- Add habitat-aware gathering and sparse world/cell resource depletion/recovery so natural material cannot be extracted infinitely.
- Add data-driven shelter designs/stages. Implement the common-knowledge Debris Shelter as Prepare Site -> Build Frame -> Add Weather Covering -> Add Insulation/Bedding -> Finish Shelter.
- Persist unfinished structures and committed material. Do not delete partial construction when work stops early.
- Let sufficiently covered shelter stages become exact Sleep targets with capacity and server-authoritative rain/wind/thermal protection.
- Add survivor-scoped shelter claims. Another living survivor's recently used shelter reports This shelter looks like it is still in use. without exposing identity and cannot be casually claimed or slept in. Death or prolonged abandonment releases the claim; the physical shelter remains.
- Seed Lean-to and Snow Quinzhee as inactive future designs to prove the architecture is not Debris-Shelter-specific.
- Advance Template API to 29 with a Bushcraft core template and deterministic preview.
0.2.8.1 - Shelter Field-Work Lock Hotfix (implemented)
- Make active Field Activities use a Sleep-style hard request lock instead of allowing ordinary GET navigation while only blocking mutations.
- Render active gathering/construction as a minimal progress screen with no normal gameplay navigation; the only gameplay choice is Stop Early while server time continues authoritatively.
- Hide the Start a Shelter Worksite block when the current position already contains a shelter/worksite within the same authoritative placement-clearance rule used by creation validation.
- Keep Template API 29; no schema or seed-data change is required.
0.2.8.2 - Shelter Placement UI Consistency Hotfix (implemented)
- Use one authoritative shelter/worksite placement-status check for both page rendering and worksite creation validation.
- Expose an explicit
canStartWorksiteview-model flag; when the current spot is occupied, omit the entire Start a Shelter Worksite panel rather than merely rejecting its button after submission. - Treat incomplete worksites and completed shelters identically for duplicate-placement visibility.
- Remove the unrelated fresh-position persistence workaround from the hotfix.
- Keep Template API 29; advance
bushcraft/indexto contract v2 with no schema or seed-data changes.
0.2.8.3 - Shelter Quality, Degradation & Repair (implemented)
- Add separate frame, weather-covering and insulation condition to constructed shelters; only components that physically exist can degrade.
- Evaluate condition lazily from elapsed UTC time with bounded recent real-weather pressure so current storms do not get projected over an entire unobserved history.
- Let degraded condition reduce effective rain/wind/thermal protection and make critically degraded shelters temporarily unsuitable for sleep until repaired.
- Add timed Field Activity repairs for frame, covering and insulation. Repairs consume one matching local stockpile unit, retain proportional progress if stopped early and award modest Sheltercraft practice.
- Preserve surplus worksite materials for future repair rather than deleting them.
- Keep Template API 29 and advance
bushcraft/indexto contract v3 with condition/repair presentation fields.
0.2.8.4 - Bushcraft Weather Bootstrap Hotfix (implemented)
- Defer Bushcraft Field Activity resolver construction until activity resolution so weather-aware shelter condition code cannot request
WeatherProviderbefore Weather module registration completes. - Preserve the existing module/migration ordering rather than moving historical module migrations merely to satisfy runtime dependency construction.
- Add regression coverage proving Bushcraft module registration does not resolve the weather-aware activity resolver during bootstrap.
- No migration, seeder or Template API change.
0.2.8.5 - Caches (implemented)
- Add persistent Simple Hidden Cache world objects with timed construction and retained partial progress.
- Add finite ordinary cache storage with slot, weight and item-size limits using exact physical item ownership rather than copied inventory.
- Extend item holders with reusable
world_objectownership for persistent infrastructure. - Add survivor-specific cache discovery records and server-side concealment filtering so undiscovered caches are never sent to other survivors.
- Add fresh-position cache placement/proximity checks and future discovery/hostile-access hooks.
- Keep Template API 29 and advance
bushcraft/indexto contract v4.
0.2.8.6 - Site & Camp Foundation (implemented)
- Add a reusable persistent Site parent for survivor-established places, with
campimplemented now andsafe_housereserved on the same schema/domain boundary for later permanent-base work. - Allow one survivor to claim multiple Camps/Safe Houses; never model a single account-wide home base.
- Add exact encrypted geographic anchors, configurable interaction radii and extensible
site_areasso later Safe Houses can contain rooms/areas without inventing a second infrastructure hierarchy. - Establish Camps through the generic timed Field Activity system with AP/fatigue costs, Sleep-style hard locking, browser-independent elapsed time and Stop Early.
- Validate Camp establishment against fresh position accuracy, current identified outdoor-location range, natural habitat eligibility and nearby-site separation.
- Add global Camps and Safe Houses pages. All claimed sites can be viewed remotely; physical management is explicitly marked nearby-only. Safe House claiming remains intentionally inactive in this foundation.
- Represent established Camps as player-created canonical Locations and feed them into ordinary server-authoritative Survey/Discovery. Other survivors receive only legitimately discovered Player Camp / Abandoned Camp knowledge, never claimant identity.
- Death lazily releases the mortal survivor's Site claims while the persistent Site remains vacant. A deliberate Disband relinquishes the claim remotely without teleporting or deleting future physical infrastructure.
- Keep Firecraft, Bushcraft, shelters and caches unchanged/standalone in this release. Camp membership/infrastructure migration is deliberately deferred to 0.2.8.7 so the parent model can be tested independently.
- Advance Template API to 30 with
sites/indexandsites/showcontracts and a deterministic Camp list preview.
0.2.8.7 - Camp Infrastructure Membership (implemented)
- Make an established, actively claimed Camp the required parent for new outdoor camp infrastructure.
- Add authoritative
site_idandsite_area_idmembership toworld_objects,world_firesand deliberately placedworld_dropswithout inferring ownership from proximity after creation. - Attach new shelter worksites and caches to the Camp/main area that contains the survivor's fresh authoritative position.
- Require fire preparation inside one of the survivor's claimed Camps and persist the fire beneath that Site/area.
- Require deliberately placed fixtures such as buckets/pots to be placed inside a claimed Camp; ordinary Drop remains an ordinary expiring world drop and is not silently upgraded into Site infrastructure.
- Make temporary cooking/boiling stations staged beside a fire inherit that fire's Site/area membership.
- Keep the existing Firecraft and Bushcraft menus/routes for this release so the parent-membership change can be tested independently from the Campcraft UI relocation.
- This is a deliberate development-save-breaking boundary. RESET is required after installing 0.2.8.7; no retrofit/backfill of standalone pre-Camp test infrastructure is provided.
- Template API remains 30 because existing template contracts are unchanged.
0.2.8.8 - Campcraft Interface (implemented)
- Add the local Campcraft management page for a nearby claimed Camp.
- Present Site-bound shelter, fire, storage, placed fixtures and construction from the Camp parent rather than assembling a camp by proximity guesses.
- Allow shelter/cache/fire creation from Campcraft while keeping Firecraft/Bushcraft as temporary fallback navigation during testing.
- Keep distant Camps view-only; physical Site management remains proximity-authoritative.
0.2.8.9 - Camp Location Context Hotfix (implemented)
- Make the main Nearby Locations table and map route a survivor's own actively claimed Camp/Safe House to its private Site-management URL while other survivors continue to receive the generic public Location URL.
- Prevent player-created Site Location wrappers from overwriting the survivor's last ordinary environmental Location context.
- Persist fresh GPS obtained by Camp establishment through the normal
LocationCaptureServiceso the rest of gameplay sees the same authoritative position. - Resolve Camp establishment from the nearest identified natural discovery around that fresh position instead of whichever Location page happened to be visited last.
- Persist the Camp's establishment habitat into canonical Site-Location metadata and use that stable habitat for Campcraft shelter eligibility, with a compatibility fallback for Camps created in 0.2.8.8.
- Keep Template API 31; no schema migration, seeder or additional RESET is required.
0.2.8.10 - Campcraft Consolidation (implemented)
- Player-facing fire management, cooking, boiling, shelter work, caches and Camp item handling are consolidated beneath the exact selected Campcraft context while Firecraft/Cooking/Water/Sheltercraft remain domain boundaries.
- Firecraft and Bushcraft are removed from primary navigation; their GET pages redirect to Camps after Campcraft parity.
- Ordinary Camp Drop / Discard is visible as temporary expiring ground state; explicit Place at Camp remains persistent fixture infrastructure.
- Cooking/boiling actions and process collection validate the exact Camp membership of their persisted heat source.
- Death/disband/vacancy release claims without deleting or transferring Site-bound physical infrastructure.
- Template API advances to 32 /
campcraft/indexcontract v2. No migration, seeder or additional RESET is required.
0.2.8.11 - Lockboxes & Secure Storage (implemented)
- Add physical visible secure storage beneath the exact Site/Campcraft parent while keeping hidden caches a separate concealment concept.
- Build the first Improvised Lockbox through timed Field Work from consumed materials plus a reusable tool; partial installation remains physical when stopped early.
- Store contents as the same authoritative item-instance trees used by Inventory/Caches, with finite slot/weight/size capacity and no duplication shortcuts.
- Completed boxes start locked. Mortal survivor ownership, explicit access-grant persistence and unlocked physical access provide groundwork for later trusted/PvE/PvP rules without implementing hostile bypass yet.
- Death/disband/vacancy never delete, transfer, inherit or automatically unlock the physical box or contents.
- Upgrade shelter worksites with overall percentage, a stage timeline, exact next-stage material/labour/AP requirements and explicit missing-material feedback.
- Add migration + required lockbox-definition seeder; no Development RESET is required. Advance Template API to 33 /
campcraft/indexcontract v3.
0.2.8.12 - Shelter & Camp Utility Integration (implemented)
- Add an exact-Site Camp Survival Status model so Campcraft reports protection, fire warmth/drying, weather, survivor wetness/thermal state and sleep outlook from the selected Camp rather than borrowing nearby infrastructure from another Site.
- Keep persisted Exposure/Thermal simulation based on physical proximity to any legitimately nearby shelter/heat, while Campcraft attributes only the selected Camp's completed shelter and active fire as that Site's own utilities.
- Let current exact-Camp fire warmth contribute a bounded bonus to the sleep-quality estimate/start calculation without becoming a permanent Warm buff or making an incomplete shelter sleepable.
- Integrate placed liquid fixtures into Campcraft: drink, decant into carried containers, pour carried water into the fixture, or empty it while leaving the vessel physically placed.
- Let suitable placed open vessels switch explicitly between exposed for rain collection and under Camp shelter. Covering advances the rain cursor first; exposing resets the evaluation cursor so covered time can never retroactively create rainwater.
- Keep liquid source/safety/treatment knowledge survivor-scoped in Campcraft rather than exposing hidden authoritative water state through fixture view models.
- Advance Template API to 34 /
campcraft/indexcontract v4. No schema migration, required seeder or Development RESET is added.
0.2.8.13 - Admin Testing Toolkit (implemented)
- Add a development-only, administrator-only survivor testing page for repetitive gameplay QA.
- Select any living survivor, inspect inventory/Camps/current activity/encounter, grant or remove items, edit HP/AP/survival reserves, move the stored test position, force/clear infected encounters and accelerate the current Field Activity to 30 seconds or immediate completion.
- Keep item grants capacity-aware and keep death/timer completion on their existing domain pathways rather than creating parallel test-only gameplay models.
- Persist an audit record for every testing mutation. Add one migration for the audit table; no required seeder or Development RESET is needed.
- Advance Template API to 35 with
admin/testingcontract v1.
0.2.8.14 - Timed Activity/Admin Escape Hotfix (implemented)
- Fix the Campcraft-consolidation redirect loop where active shelter/cache/lockbox Field Activities still redirected through the retired Bushcraft GET page.
- Keep Camps/Campcraft as the canonical locked-work destination and allow development admin routes through Field Activity/Sleep locks so the Testing Toolkit can recover active test states.
- Keep Template API at 35; no migration, required seeder or Development RESET.
0.2.8.15 - Camp/Bushcraft Integration & Hardening (implemented)
- Make abandoned/vacant Camps reclaimable from a fresh authoritative position inside the exact Site without transferring or duplicating child storage/item ownership.
- Limit each Camp to one active hidden cache and one active lockbox, with concurrency-safe enforcement under the Camp Site row lock.
- Fix placed-water shelter-cover authority and require a completed serviceable shelter near the exact fixture.
- Expose exact-object proximity for shelter/cache/lockbox actions, strengthen disband warnings, reconcile dead-owner claim state on relevant reads and retire legacy standalone Bushcraft/Firecraft/Cache mutation routes.
- Harden integrated Campcraft regression coverage and advance Template API to 36 (
locations/showv15,campcraft/indexv5). No migration, required seeder or Development RESET.
0.2.9.0 - Small Game Hunting & Trapping (implemented)
- Add sparse, lazily recovered wildlife pressure per world/geographic cell rather than simulating individual animals continuously.
- Add timed Hunt Small Game field activities using the first hunting weapon, a
.177 Air Rifle, with 15/30/60 minute choices, real pellet consumption only when shots are taken, weapon condition wear and infected-attracting noise. - Add habitat-weighted rabbit, squirrel and pigeon outcomes. Successful hunts produce physical carcass item instances; failed/no-opportunity hunts still affect local pressure appropriately.
- Add persistent Wire Snares for rabbit trapping with set/check/collect/reset/remove lifecycle and exact physical proximity checks.
- Add knife-based field dressing from carcass to raw meat plus physical offal/pelt by-products. Carcasses, raw meat and cooked small game use the existing lazy perishability system.
- Add craftable Cooking Spit cookware and exact-spit roast recipes integrated with the existing exact Camp fire/timed Cooking workflow; real fire heat remains authoritative for cooking progress.
- Add a reusable counted-content container model. Matchboxes hold 50 individual matches and
.177 Pellet Tinshold 30 pellets; contents have weight, are consumed individually and may be transferred between compatible physical containers. - Make hunting equipment obtainable through plausible scavenging contexts rather than requiring Admin Testing grants.
- Advance Template API to 37 with
hunting/indexcontract v1. Add two migrations and required hunting/scavenging seed data; no Development RESET is required. - Deliberately defer bows, arrows, cordage, primitive weapons/tools and advanced bushcraft crafting breadth until post-launch.
0.2.9.1 - Hunting/Cooking Hotfix (implemented)
- Fix the default wildlife-pressure fatal on first access to a previously untouched hunting cell.
- Prevent active Cooking processes from being decorated/presented as Boiling merely because both workflows use cookware as their subject item.
- Keep cookware reserved while another timed process owns it, without offering a second Boiling start action.
- No migration, required seeder, Development RESET or Template API change.
0.2.9.2 - Hunting Activity & Carried Load Hotfix (implemented)
- Render an active hunt as the same kind of locked, minimal activity surface used by Sleep and Camp field work.
- Derive encumbrance from carried/stowed/held load while excluding ordinary worn/equipped gear shell mass. Contents inside worn storage and hand-held items still count; unequipped/stowed gear counts again.
- Keep storage-slot limits, per-container contents-weight limits and all item world mass unchanged.
- No migration, required seeder, Development RESET or Template API change.
0.2.9.3 - Lockbox & Shelter Limits Hotfix (implemented)
- Make lockbox
is_lockedliteral physical state: locked boxes expose no deposit/withdraw workflow to anybody, including their owner, until explicitly unlocked. - Keep owner-only lock/unlock control for the current foundation; future online work may add keys, trusted lock operation and hostile bypass separately.
- Enforce one active shelter/worksite per Camp after locking the authoritative Site row, matching the existing one-cache/one-lockbox concurrency model.
- Hide second-shelter creation controls/probes once the Camp already owns a shelter/worksite.
- Keep post-completion material gathering and present those materials as a shelter reserve for repairs and future upgrades.
- No migration, required seeder or Development RESET; Template API remains 37.
0.2.9.4 - Temporary Tarp Shelter (implemented)
- Add physical reusable Tarp items and a
/field-sheltersurface for portable emergency shelter outside Camp infrastructure. - Pitching is a 5-minute / 1 base AP Field Activity; the exact tarp item is transferred into the world object and returned with retained condition when recovered.
- Integrate strong rain cover, moderate wind cover and minimal thermal insulation into existing exposure/Sleep context.
- Allow a Site-less Firecraft fire to be prepared at a bounded safe offset beside an owned pitched tarp, preserving normal ignition, fuel, weather, heat, drying and noise rules.
- Lazily deteriorate deployed tarp condition from elapsed time/weather and keep temporary shelters separate from the one constructed shelter/worksite per Camp rule.
- Advance Template API to 38 with
field-shelter/indexv1. Add one migration and required Tarp seed/scavenging data; no Development RESET is required. - Keep advanced tarp configurations, cordage, fire/spark damage and primitive bushcraft breadth deferred until post-launch.
0.3.0.0 - Infected (implemented)
- Deepen sparse cell simulation into deterministic baseline population pressure plus mutable current pressure and decaying local alertness.
- Spread action noise into neighbouring cells at reduced strength so repeated local activity can raise short-term danger without continuously simulating generic zombies.
- Let generic infected kills modestly deplete current cell pressure and recover it lazily toward baseline over time.
- Scale temporary encounter size from effective local threat and noise while retaining aggregate generic encounters rather than per-zombie persistence.
- Replace guaranteed evasion with authoritative Break Contact outcomes affected by numbers, carried load, fatigue, Bleeding/Wounded state, engagement and AP; failed attempts may inflict the same injury/clothing consequences as combat.
- Reuse one infected-attack consequence service for fight retaliation and failed escape, and make fight/escape actions themselves create local noise.
- Add reusable
grid-v1neighbouring-cell adjacency as a foundation for later persistent infected movement and hordes without introducing those entities early. - Keep ordinary survivors capped at 100 HP; no level/MMO health scaling is introduced.
- Advance Template API to 39 with
infected/encounterv4. Add migration20261007100000_infected_deepen_cell_threat; no required seeder or Development RESET is required.
0.3.0.1 - Infected HP Balance Hotfix (implemented)
- Replace the fixed 30 HP generic infected target with an individual 10-15 HP roll.
- Roll a fresh 10-15 HP value when the next infected in an aggregate multi-infected encounter becomes the current target.
- Clamp already-active legacy encounter targets to a maximum of 15 HP through migration
20261007110000_infected_balance_hit_points. - Keep Template API 39 /
infected/encounterv4 unchanged; no required seeder or Development RESET.
0.3.0.2 - Encounter Resolution & Remains (implemented)
- Add a dedicated post-encounter resolution screen for defeated and escaped infected encounters.
- Persist defeated-body count and create one sparse exact-position physical remains world object when generic infected are defeated.
- Make remains search an AP-costed, modest-noise action that materialises data-driven mundane physical item instances only when searched.
- Keep looting consistent with ordinary inventory interaction: list discovered items with individual Take actions and no Take All shortcut.
- Preserve the future former-survivor rule: those remains must expose actual authoritative possessions rather than generated generic loot.
- Correct Ferro Rod durability from 80 to 5000 while retaining the ordinary condition model and existing instance condition.
- Advance Template API to 40 with
infected/resultv1. Add one migration and two required seeders; no Development RESET is required.
0.4.0.0 - Persistent World Foundation (implemented)
- Add sparse
world_cell_statesso cells gain mutable state only when gameplay creates a persistent consequence. - Extend copy-on-write location state,
world_objectsandworld_dropswith shared lifecycle, cleanup and revision metadata while keeping each owning domain authoritative. - Add lightweight physical-item creation provenance without turning ordinary item mutation into heavyweight event sourcing.
- Make generic infected remains and ordinary/placed world drops the first lifecycle reference users.
- Expose persistent-cell/location/object/drop/provenance state through Admin Game Inspector.
- Reaffirm PHP 8.3.0+ as the current runtime baseline under ADR-0015.
0.4.0.1 - Discovery Lifecycles & World Events (implemented)
- Give generated world discoveries explicit observed/active/depleted/expired/cleaned lifecycle rules where appropriate.
- Add safe lazy cleanup/decay for eligible discovery/world-event consequences using the 0.4.0.0 lifecycle metadata.
- Deepen meaningful resource/item transformation history only where it improves spoilage, treatment, ownership, remains or admin explanation.
- Keep procedural discoveries anchored to plausible real geography rather than inventing impossible permanent structures.
- Introduce the first reusable world-event framework and prove it with a bounded non-destructive event type.
0.4.0.2 - Persistent Resource Consequences & Cleanup (implemented)
- Extend shared lifecycle/cleanup policy into additional finite resource consequences only where the owning domain already has meaningful depletion or decay semantics.
- Consolidate lazy cleanup evaluation for eligible remains, drops, events and discovery consequences without converting persistent fixtures/structures into disposable clutter.
- Improve admin explanation of why a resource/object is depleted, recoverable, expired or retained.
- Keep additional world-event types deferred until their geography, lifecycle and gameplay effects can be bounded and tested without leaking hidden state.
0.4.0.3 - Richer Procedural Discoveries & Meaningful World Events (implemented)
- Expand bounded world events to Scattered Debris, Recent Disturbance, Fresh Animal Sign and Abandoned Supplies while retaining one-active-event-per-cell sparsity and survivor-observation privacy.
- Make Abandoned Supplies a real physical world drop/item with provenance and first-come-first-served ownership transfer rather than a reward payload.
- Let survivor-observed Fresh Animal Sign provide a bounded small-game hunt opportunity modifier only when the hunt is started while the sign is active.
- Add event resolution metadata and world-drop linkage so physical consequences and event lifecycle stay coherent.
- Enrich deterministic generated-discovery names/context from real anchor tags while preserving stable
worldgen-v1canonical identity. - Extend Game Inspector and template contracts for event effects, hunting context and operations diagnostics.
0.4.0.4 - Persistent Environment & Location Consequences (not released; folded into 0.4.0.5)
- This was a planning label only. Its persistent-location-state foundation was combined with the recovery/clearing work below at the user's direction; no 0.4.0.4 package or migration was released.
0.4.0.5 - Persistent Location Consequences, Recovery & Clearing (implemented)
- Add sparse, source-linked persistent location consequences independent from temporary world-event lifetime.
- Let expired Scattered Debris deterministically leave a persistent debris obstruction at its real anchor location.
- Block ordinary scavenging while an active obstruction makes useful access unavailable.
- Allow a nearby survivor to clear debris for fatigue-adjusted AP while producing infected-attracting noise.
- Retain resolved consequence rows as world history and establish explicit manual/natural recovery modes for future consequence types.
- Extend Game Inspector and template contracts for consequence/recovery diagnostics.
0.4.0.6 - Broader World Event Set (implemented)
- Expand the sparse event pool with context-gated Storm Damage, Signs of Infected Activity and Signs of Earlier Scavenging.
- Keep the overall event opportunity bounded while filtering type weights by taxonomy, recent cached weather, infected threat and persistent finite-stock state.
- Reuse the existing persistent debris-obstruction consequence for Storm Damage aftermath rather than creating a parallel damage model.
- Preserve survivor-knowledge safety by exposing qualitative signs rather than hidden actor positions or exact threat values.
0.4.0.7 - Persistent Environmental Effects (implemented)
- Preserve Storm Damage's established debris-obstruction outcome while adding a non-blocking Waterlogged Access fallback with explicit natural recovery.
- Make waterlogging raise search effort/noise only while the persistent consequence is active.
- Add Water-domain
world_water_source_effectsso Storm Damage can temporarily mark real natural springs/surface water as storm-runoff affected without inventing sources or permanently mutating base source definitions. - Keep environmental aftermath lazy, source-linked, explainable and independently recoverable after the temporary event expires.
0.4.0.8 - Discovery Depth (implemented)
- Area Survey produces survivor-specific Observed/Identified knowledge; a deliberate nearby detailed survey advances Identified locations to Surveyed.
- Search, location foraging, natural-water collection and other detailed local actions require Surveyed-or-better server-side knowledge.
- Gameplay payloads use a survivor-authorised knowledge projection so Observed POI identity and pre-Surveyed condition/resource/environment/consequence details are not sent to templates.
- Discovery transitions now retain revision/reason/milestone timestamps and auditable history. Explored/Cleared remain reserved until an owning domain has a meaningful transition rather than becoming click-grind.
0.4.0.9 - Persistent World Polish & Consolidation (implemented)
- Bound lazy maintenance per lifecycle category so long-idle worlds drain backlog over multiple ordinary requests rather than creating an unbounded request spike.
- Add targeted expiry/cleanup indexes and deadline-safe natural location consequences so overdue recovery stops affecting gameplay before lazy history resolution.
- Add maintenance backlog/invariant diagnostics to the Game Inspector.
- Complete the focused 0.4 balance/QA pass without changing the established sparse event frequency, environmental aftermath defaults or finite/renewable resource split.
0.5.0.0 - Groundwork (implemented)
- Consolidate natural-area Forage into the ordinary Location action surface instead of sending the survivor to a separate result page.
- Keep searched loot, forage finds and ground/fixture items visually distinct while preserving one authoritative physical-item/reveal model.
- Add a survivor-facing Foraged tab that is selected automatically after a successful forage action and disappears when no forage finds remain.
- Preserve old Foraging routes/templates as compatibility surfaces; no database migration or reset is required.
0.5.0.1 - Permanent Safe Houses (implemented)
- Surveyed Abandoned Homes can be secured through timed, proximity-authoritative claiming without replacing or resetting their canonical Location/world history.
- Safe Houses reuse the persistent Site/area lifecycle, with mortal claims, abandonment/reclaim and no claimant identity in discovery payloads.
- Add generic level-free Site facilities. Bedroom is first, creating one dedicated sleeping space and using the existing Survival sleep authority.
- Safe House death/abandonment leaves the building, rooms and facilities persistent for later discovery/reclaim.
0.5.0.2 - Safe House Storage (implemented)
- Add a dedicated Storage Room and level-free Storage facility with explicit physical slot, supported-weight and item-size capacity.
- Store exact item instances under the persistent facility and move nested item trees atomically; depositing/withdrawing never duplicates possessions.
- Require current Safe House claim plus fresh nearby position for physical transfers, while remote views withhold live storage contents.
- Preserve stored contents through survivor death, abandonment and reclaim; a later claimant only takes an item when that exact instance is withdrawn.
- Reuse normal carry-capacity/fit rules on retrieval and existing open-liquid-vessel stowage rules on deposit.
0.5.0.3 - Timed Safe House Preparation (implemented)
- Move Bedroom and Storage Room preparation onto the shared authoritative Field Activity system instead of instant facility creation.
- Default Bedroom preparation to 10 minutes and Storage Room preparation to 15 minutes, with existing fatigue-adjusted AP and Stop Early semantics.
- Create rooms/facilities only when timed work completes successfully; early stopping leaves no partial room/facility state in this release.
- Keep basic Bedroom/Storage preparation material-free for now while carrying an explicit material-requirement boundary in facility work plans for later builds.
- Add optional preparation-duration configuration without a schema migration or Development RESET.
0.5.0.4 - Navigation & Facility Projects (implemented)
- Keep every currently claimed Camp and Safe House known to the current survivor on the Game map and in a text-first Your Persistent Sites list regardless of the ordinary nearby-discovery radius. Exact coordinates are emitted only for that survivor's own current claims; distance affects physical management, not remembered navigation.
- Use distinct Camp and Safe House game markers and fit the map to the survivor plus owned Sites so a distant base remains practically findable without leaking unrelated hidden POIs.
- Replace one-shot future Safe House construction with persistent Facility Projects that separate project identity, required work, AP commitment, physical material stockpiles and reusable tool requirements.
- Preserve partial work when a facility task is stopped early. Resuming works only the remaining authoritative duration rather than discarding completed labour.
- Commit exact physical item instances to
holder_type=site_project; stackable materials may be split only for the exact quantity committed, containers/liquid-content items are rejected, and incorporated materials are consumed only when construction completes. - Required tools are checked as carried capabilities and are not consumed merely because construction uses them. Bedroom and Storage Room clearing remain intentionally material-free, while later Kitchen, Workshop, water and fortification projects can declare real requirements without another construction rewrite.
- Add migration
20261008120000_sites_safe_house_facility_projects; no required seeder or Development RESET.
0.5.0.5 - Kitchen & Household Fixtures (implemented)
- Add a managed Kitchen through the existing persistent Facility Project boundary. The initial Kitchen is a room clear-out rather than an artificial upgrade tier and defaults to 20 minutes / 2 base AP with no invented material cost.
- Preserve existing household infrastructure as persistent building fixtures. The first fixtures are an 18 L Kitchen Sink, Electric Cooker and Electrical Outlets.
- Model useful liquid-holding room fixtures as exact physical item instances attached to the Site facility. The Kitchen sink can hold/transfer real water without becoming survivor inventory; the same boundary is intended for future Bathroom/Washroom sinks, baths/tubs and other large fixed containers.
- Let currently working mains water fill the fixed sink, carried containers and measured recipe water. Treat the early mains supply as known-safe/treated until regional utility quality/reliability becomes authoritative in 0.5.0.7.
- Let the electric cooker participate in the existing timed Cooking pipeline while grid electricity is currently available. Recipe knowledge, cookware, ingredients, water measurement and AP remain authoritative; there are no Kitchen levels or abstract cooking bonuses.
- Correct and deepen owned-Site navigation: current claimed Camps/Safe Houses remain in the server-authorised map dataset independent of discovery distance, individual Site pages show exact coordinates, Show on Map focuses the main Game map on that owned Site, and a small non-interactive MapLibre preview reuses the configured raster tiles.
- Add migration
20261008130000_sites_safe_house_kitchen_fixturesand required seeder20261008130500_sites_seed_household_fixtures_v1; no Development RESET.
0.5.0.6 - Bathroom, Washroom & Cleanliness (implemented)
- Add a Bathroom/Washroom Safe House room and a survivor Cleanliness condition/bar without turning hygiene into constant click-heavy micromanagement.
- Allow washing through appropriate working bathroom fixtures, sinks, buckets/containers, suitable streams/rivers and collected rainwater.
- Keep water quantity/quality physical and authoritative; washing consumes an appropriate amount of real water where a free-flowing source is unavailable.
- Let soap/cleaning supplies improve washing efficiency later, and establish cleanliness as an input to later wound-contamination and illness risk in 0.6.
- A toilet may exist as a building fixture, but personal toilet-needs simulation remains deferred.
0.5.0.7 - Regional Water & Electricity (implemented)
- Add world-owned regional mains-water and electricity-grid state rather than per-house magic switches.
- Support utility states such as operational, intermittent, degraded and outage; water additionally tracks pressure and quality/potability uncertainty.
- Start early-apocalypse infrastructure generally functioning, then allow reliability to deteriorate over world time with outages lasting hours, days or weeks and occasional restoration.
- Make Safe House fixtures query the authoritative regional service state at their location. A broken regional supply disables the service without pretending the tap/cooker fixture itself vanished.
- Keep Solo, PvE and PvP utility state completely isolated per world.
- Materialise regional state sparsely only when queried and advance bounded service windows lazily; untouched utility regions need no mutable state.
- Pause existing electric-cooker heat progress while regional grid power is unavailable, and preserve water already stored in fixed Safe House containers through mains outages.
- Withhold live regional utility state from remote Safe House views; current service details require nearby survivor authority.
0.5.0.8 - Utility World Events (implemented)
- Connect regional utilities to the existing World Event framework so outages/restorations are visible consequences rather than hidden background flags.
- Support events/notices such as local power outage, rolling blackout, power restored, water-supply interruption, low pressure, boil-water advisory and contamination concern.
- World-event effects must update/query actual utility simulation state; event text must never claim an outage that gameplay ignores.
- Keep geography bounded so neighbouring regions can have different service conditions without simulating every individual property.
0.5.0.9 - Rainwater Collection (implemented)
- Add exterior/roof rainwater systems composed from physical catchment, gutter/downpipe or tarp routing and real barrels/tanks/containers.
- Use real weather/rainfall as the collection input and cap collected volume by actual connected container capacity.
- Do not mark collected rainwater automatically potable; existing treatment/boiling/filtering rules remain authoritative for drinking.
- Allow stored rainwater to support cooking, washing, crop watering and later sanitation as well as drinking after suitable treatment.
- Implement the first collector as a resumable material-backed exterior Facility Project whose exact committed 200 L Water Butt becomes the persistent tank; require a Tarp catchment, construction materials and a reusable Hammer.
- Keep remote views from disclosing live tank contents and evaluate real rainfall lazily only when authorised nearby gameplay needs the collector.
0.5.0.10 - Water Butt Carry & Admin Hotfix (implemented)
- Keep the 200 L Water Butt out of current survivor backpacks/carried storage by giving the loose barrel a physically oversized carried-storage footprint while preserving Safe House Storage compatibility.
- Require any Water Butt containing liquid to remain in a survivor hand or be placed/installed.
- Let ordinary Location/World Drop pickup fall back to a valid hand slot when an equippable bulky item cannot enter storage.
- Ensure the development Admin Testing Toolkit can grant the Water Butt directly into a free hand without bypassing carried-weight or hand-occupancy authority.
- Let Facility Projects commit a required material directly from a survivor hand so bulky project materials never need an impossible intermediate backpack placement.
0.5.0.11 - Temporary Shelter Tarp Lifecycle Hotfix (implemented)
- Release the exact Tarp item reference when a Temporary Shelter is taken down or cancelled, while preserving the removed shelter/world-object history.
- Make historical
temporary_shelters.tarp_item_instance_idnullable and defensiveON DELETE SET NULLso a returned Tarp can later be consumed, discarded or incorporated into another physical system without a stale foreign-key lock. - Clear existing removed-shelter Tarp references during migration so already-started Rainwater Collection projects recover without a reset or replacement material.
- Reject Facility Project material deposits if an exact item is genuinely still attached to a live Temporary Shelter, and guard project completion against invalid live shelter references.
0.5.0.12 - Gardens (implemented)
- Add a persistent exterior Garden Plot beneath the Safe House Site/area/facility hierarchy without facility levels. Preparing soil is resumable timed labour using carried Garden Tools rather than an abstract upgrade purchase.
- Create a real 4 m² plot with bounded soil-water state. Real rainfall is evaluated lazily at the Safe House coordinates and updates that persistent moisture reserve.
- Permit nearby garden watering from functioning regional mains, the installed physical Rainwater Tank or carried water containers; manual watering consumes exact source water and AP.
- Add physical seed stock for carrots, onions, lettuce, beans, tomatoes, strawberries and seed potatoes, available through plausible scavenging contexts and normal Admin Testing grants.
- Establish the persistent plot, seed and water boundaries needed by the full 0.6 crop lifecycle while deliberately deferring planting/growth/harvesting until 0.6.0.0 so no half-grown crop state is stranded across the branch boundary.
- Keep real weather, temperature and season available as authoritative future crop inputs rather than cosmetic flavour.
0.5.0.13 - Workshop (implemented)
- Add an interior Workshop built from real construction materials and a physical work surface/workbench.
- Make installed/available tools determine repair and crafting capability; a Workshop becomes more useful because it contains useful equipment, never because it gained a level.
- Use the persistent Facility Project system for resumable material-backed construction.
- Establish Workshop hooks for later equipment repair, infrastructure maintenance and advanced self-sufficiency.
0.5.0.14 - Independent Power (implemented)
- Add a knowledge-gated physical photovoltaic installation with exact hand-carried solar panels, charge controller, inverter and individually persistent batteries of different Wh capacities.
- Calculate solar generation from panel rating/condition, local daylight and real cloud/precipitation. Night yields zero solar output; poor weather reduces charging.
- Store authoritative battery energy in Wh and expose percentage as a derived presentation value. Exact batteries preserve their own charge when installed or removed.
- Add Safe House source policy for mains-first backup, mains-only and independent solar/battery operation while keeping regional grid truth in Utilities.
- Make the electric cooker a real action load: Cooking progresses only for supplied seconds and independent operation consumes stored energy when solar cannot meet demand.
- Reconcile passive charging lazily rather than continuously simulating every Safe House. Installed infrastructure persists across death/abandonment; the survivor knowledge required to build/modify it does not.
- Keep the supply boundary extensible for later generators/fuel, lighting, refrigeration, radios, pumps, powered Workshop tools and security loads without adding a hidden Safe House power level.
0.5.0.15 - Independent Power Carry & Coordinate Hotfix (implemented)
- Route Independent Power Site-coordinate reads through the established encrypted
SiteRepositoryhydration boundary, fixing the post-construction Safe House crash without adding plaintext geography columns. - Raise the default hard overloaded carry-acquisition ceiling to 30 kg while retaining the 15 kg comfortable threshold and existing severe-encumbrance penalties.
- Preserve all 0.5.0.14 power schema, battery Wh, component ownership and Template API contracts; no reset, migration or seeder is required.
0.5.0.16 - Independent Power Battery-State Hotfix (implemented)
- Fix battery-state initialisation for already-installed battery component rows by using their authoritative
item_instance_idinstead of the direct-installidfield shape. - Prevent invalid foreign-key inserts into
item_power_stateswhile preserving exact physical battery ownership and stored Wh. - Preserve the 0.5.0.15 coordinate/carry hotfix, Independent Power schema and Template API; no migration, seeder or Development RESET is required.
0.5.0.17 - Security & Fortification (implemented)
- Model Safe House security as physical installations over abstract access zones such as entrances, windows and perimeter rather than a Fortress level.
- Build barricades/reinforcement from real timber, metal, fasteners and labour; installations have condition and require physical repair materials after damage.
- Allow infected pressure/noise-driven attacks to damage and eventually breach appropriate defences. Security buys warning, resistance and time rather than absolute immunity.
- Keep alarms/tripwires and similar warning installations compatible with the same physical facility/fixture model.
- PvP player breaching remains a later PvP-only extension with explicit tools/time/noise, persistent damage, exact item transfer and carefully designed offline protection; it must never leak into Solo/PvE.
0.6.0.0 - Health Pressure & Survivor Journal (implemented)
The 0.6 branch now opens by making neglected survival needs physically consequential and by giving each mortal survivor a durable, knowledge-safe record of the world they personally learned.
- Add staged Thirsty -> Dehydrated and Hungry -> Starving need presentation without turning HP into a hunger/thirst bar.
- Track continuous severe dehydration and starvation windows lazily with persisted onset/cursor/remainder state. Severe need only begins damaging HP after configurable grace periods; ordinary survivors remain capped at 100 HP and can eventually die at 0 HP if critical needs remain untreated.
- Reconcile survival deterioration before gameplay requests so a survivor who dies from elapsed-time deprivation cannot continue acting through a stale pre-damage request object.
- Add
/journalas a survivor-specific knowledge surface. Group personally discovered locations by survivor-authorised game taxonomy and show discovery stage/timestamps without recording or revealing what loot was inside them. - Add a recent discovery-milestone log backed by the existing auditable discovery history. Observed-but-unidentified places remain
Unknown location; the journal never receives hidden POI truth merely to conceal it in presentation. - Keep the journal read-model extensible for later health, combat, construction, farming and communication entries while preserving mortal survivor knowledge.
0.6.0.1 - Safe House Living & External Carry (implemented)
- Let Blankets, Bedrolls and Sleeping Bags be deliberately placed in a Safe House Bedroom so exact physical sleep gear can remain there instead of occupying carried inventory between sleeps.
- Give established Camps a basic physical sleeping area: installed bedding can remain at the Camp; with none available the survivor sleeps on bare ground.
- Let a Camp commit an exact physical Tarp as an overhead sleeping-area canopy without removing the existing standalone Temporary Tarp Shelter workflow. Installed tarps cannot simultaneously exist in survivor inventory.
- Track item-instance wetness for exposed Camp bedding. Real rainfall can make uncovered bedding wet during lazy reconciliation and wet bedding provides less sleep-quality benefit; protected/indoor bedding dries gradually.
- Snapshot the actual sleep gear condition/wetness used when sleep starts so the locked sleeping surface remains explanatory and deterministic.
- Add exactly two equipped-Backpack exterior attachment points for appropriate long hand-weapons such as a baseball bat, spear or rifle. Exterior attachments remain real carried weight and do not consume internal backpack storage slots/weight allowance.
- Preserve exact item ownership through moving, equipping and world-drop flows; prevent removing a Backpack while exterior items are still attached.
0.6.0.2 - Campfire Smoke & Raised Camp Bed (implemented)
- Give established Camps one persistent Raised Camp Bed fixture built from 6 Wood Scrap + 2 Nails with a reusable Hammer and 4 base AP; existing bedding at that Camp automatically benefits without moving or duplicating the item.
- Separate sleeping platform, bedding and overhead cover: bare ground remains valid, the raised frame gives a modest condition-adjusted platform bonus, and bedding/Tarp protection continue to contribute independently.
- Give active
burningfires a transient smoke signal while authoritative fuel/state says they are actually burning; prepared fires, embers and extinguished fires do not expose smoke. - Surface authorised smoke observations on both the surveyed map and a plain-text Game-page list, with visibility affected by distance, fire intensity, daylight, precipitation, wind and current weather visibility.
- Keep the server authoritative over whether the survivor may know the signal. Remote smoke projections use approximate coordinates and contain no hidden fire/Site/player identity for the client to conceal.
- Preserve a mode-aware world boundary so later PvE/PvP smoke can become a meaningful risk without leaking player information between Solo, PvE and PvP worlds.
0.6.0.3 - Camp Comfort, Ground Insulation & Drying (implemented)
- Add one persistent Improvised Ground Mat Camp fixture built from 6 Dry Sticks + 1 Duct Tape and 2 base AP; it contributes explicit ground insulation independently of the Raised Camp Bed and bedding.
- Weather Raised Camp Beds and Ground Mats lazily from elapsed time, with installed tarp cover slowing exposure. Broken fixtures remain present but stop contributing until repaired with physical materials/AP.
- Repair a Raised Camp Bed with 1 Wood Scrap + 1 Nails plus a reusable Hammer; repair an Improvised Ground Mat with 3 Dry Sticks.
- Dry installed Camp bedding from current temperature, humidity and airflow, with bounded active-fire heat accelerating drying only while the authoritative heat window remains valid. Tarp condition controls partial outdoor rain protection rather than granting perfect permanent dryness.
- Persist wetness on exact worn wettable clothing item instances during exposure reconciliation so changing/removing the garment preserves its real physical wet state.
- Derive a descriptive Camp sleep-comfort label from the real shelter/platform/ground-insulation/bedding/fire/condition inputs; do not introduce an abstract Camp level or upgrade tier.
0.6.0.4 - Medical Supplies & Wound Treatment (implemented)
- Persist explicit cuts, bruises, sprains and suspected fractures with body region, severity, bleeding, contamination, pain, treatment and healing state; derive Wounded/Bleeding/Pain summaries from those authoritative injury records.
- Apply bounded lazy blood loss from uncontrolled bleeding and elapsed natural healing influenced by treatment, hydration, calories, fatigue, thermal condition, cleanliness and contamination while retaining the ordinary 100 HP maximum.
- Add
/healthtreatment actions for pressure, wound cleaning, dressing, limb tourniquet use, cold packs, sprain support, fracture splinting and temporary pain relief using real carried supplies/AP. - Convert First Aid Kits into refillable physical containers and add First Aid Pouches/Trauma Kits. One-time packed contents materialise as ordinary child item instances and can be reorganised without magical capacity or supply regeneration.
- Add sterile dressings, wipes/wash, medical tape, elastic/triangular bandages, splints, cold packs, tourniquets, gloves and plausible medical loot. Seed Antibiotic Tablets and Oral Rehydration Salts as physical 0.6.0.5 groundwork without generic cure actions.
- Retire the legacy one-click Bandage status cure in favour of injury-aware wound treatment. Advance Template API to 67 with
medical/indexandmedical/kitv1 plusinventory/indexv25.
0.6.0.5 - Illness & Infection
- Establish the extensible illness framework for fever, wound infection, gastrointestinal/unsafe-water illness and other bounded conditions.
- Allow vomiting/diarrhoea and similar symptoms to feed back into hydration/nutrition where appropriate.
- Support multiple simultaneous conditions such as Wounded, Infected Wound, Feverish, Dehydrated and Exhausted without turning HP into a hunger/illness meter.
0.6.0.6 - Farming Foundation
- Connect the existing Safe House Garden Plot/physical seed stock to prepare plot -> plant physical seeds -> water/tend -> persistent growth -> harvest -> eat/store/replant.
- Start with a compact useful crop catalogue such as potatoes, carrots, onions, lettuce, beans, tomatoes and strawberries.
- Use growth stages such as Germinating, Growing, Maturing and Harvestable; rainfall, drought, temperature, frost, season and neglect can alter growth/yield or kill vulnerable crops.
- Evaluate long-running crop state lazily from authoritative timestamps/weather history where practical rather than continuously simulating every plant. Harvests become ordinary physical food items with normal freshness/spoilage.
0.6.0.7 - Medical Room
- Add a Safe House Medical Room whose usefulness comes from actual treatment bed/cot, clean work surface, water, storage, supplies and later equipment.
- Use cleanliness and available resources to support safer treatment without granting a magical passive healing multiplier simply because the room exists.
- Keep medical storage and treatment actions server-authoritative and physical.
0.6.0.8 - Expanded Crops & Seed Saving
- Broaden crop variety and crop-specific harvest behaviour after the initial farming loop is stable.
- Let suitable crops return usable seed or be deliberately left to mature for seed production where that is meaningful.
- Deepen seasonal differences, crop failure and variable yield without adding farming levels.
0.6.0.9 - Food Preservation
- Add practical preservation such as drying, smoking, preserving jars and salting where appropriate.
- Allow refrigeration/freezing only when functioning power and suitable equipment exist.
- Tie preservation directly into physical food freshness/spoilage instead of granting generic shelf-life bonuses.
0.6.0.10 - Compost, Soil & Garden Sustainability
- Add compost/organic-waste use, soil condition and fertiliser where they create meaningful long-term decisions.
- Let repeated growing and preparation affect garden reliability/yield without becoming a numeric farming-level grind.
- Connect renewable garden inputs to the wider Safe House resource loop.
Later sanitation depth
- Treat sanitation primarily as Safe House infrastructure/condition rather than requiring a survivor to click Use Toilet every few hours.
- Allow functioning mains water to refill toilet cisterns normally; during an outage a toilet may be manually flushed with a real bucket/container of water.
- Let washing facilities, available water and waste management influence sanitation and later illness/contamination risk.
- Keep detailed bodily-needs micromanagement deferred unless it proves genuinely fun after launch.
0.7.0.0 - Living World, Missions and Rewards
- Persistent important infected and former-survivor zombies in applicable online worlds.
- Exactly one authoritative former-survivor location; local wandering, noise response, cell movement and horde membership.
- Horde aggregate migration and lazy simulation.
- Former-survivor remains/loot lifecycle and account legacy statistic:
Zombies contributed to the world. - Generalised mission system using mission archetypes such as Fetch, Visit Area, Survey, Search, Deliver and Clear/Investigate where appropriate.
- Missions are generated per player/survivor from eligible nearby geography and world state.
- Mission targets must pass placement/accessibility validation: never blindly place objectives in water, inaccessible terrain or implausible locations.
- Area missions can use a safe target radius rather than requiring an exact point.
- Small gameplay-earned premium/account currency rewards may be awarded by controlled missions, achievements/events or similar systems.
- Earned premium currency must be deliberately modest and rate-limited; purchasing currency may be more convenient but must never unlock gameplay power unavailable through play.
0.8.0.0 - Online PvE
- Completely separate PvE world/profile state.
- Player presence and cooperative interaction.
- Add an account-level friends/contact relationship that carries no gameplay state between modes, plus world/mode-isolated direct text messaging.
- Support physical walkie-talkies/radios for in-world text communication where appropriate; radio possession, power, range/frequency and world context are authoritative gameplay inputs, while voice chat remains out of scope.
- Shared world consequences, trade foundations, groups/settlements and appropriate knowledge sharing.
- PvE former-survivor zombies and player-created world history.
- Cooperative/group missions can be explored without making missions mandatory progression.
0.9.0.0 - PvP and Production Beta
- Completely separate PvP world/profile state.
- Keep PvP messages/radio presence and any discoverable communication consequences isolated from PvE/Solo state; a global friend relationship must never transfer location, inventory or world knowledge.
- Resolve engagement, targeting, offline/safe-state, range and looting rules.
- Anti-griefing, movement/location spoofing defences and abuse controls.
- Security/privacy review, OAuth/session hardening, rate limiting and audit coverage.
- Database/index/cache profiling, concurrency tests, provider outage handling and backup/restore testing.
- Accessibility, mobile/browser compatibility, migration upgrade tests and economy/reward abuse testing.
- Freeze major feature growth and focus on reliability, balance and exploit resistance.
- Run a dedicated theme-readiness pass before sign-off: freeze/audit template contracts, catalogue every player/admin page and awkward state, verify deterministic preview data, accessibility/text-only fallbacks and Theme Inspector coverage, and remove temporary development-UI assumptions.
- Sign off the 0.9 foundation before integrating the production visual concept/theme package.
Deferred post-launch bushcraft depth
Additional shelter designs, learned advanced bushcraft designs, material substitution, cordage/tool capability requirements and related construction flexibility are deliberately deferred until after 1.0. The basic shelter/Camp loop is sufficient for the launch foundation; pre-launch work should favour integration, infected/world depth and production readiness over broadening shelter recipes.
Post-1.0 versioning
After 1.0.0.0, the 1.0.x.x line revisits and deepens systems already shipped before launch (for example 1.0.5.0 revisiting equipment/carrying/loot). 1.1.0.0 and later minor lines are reserved for genuinely new feature families. Hotfix/revision releases continue to use the fourth component.
1.0.0.0 - Persistent Apocalypse
A deployable, feature-rich first public game in which a player can authenticate with Google/Apple, choose a non-unique player name, create a mortal survivor, explore real geography, discover both real POIs and plausible apocalypse discoveries, survive real weather, scavenge finite resources, fight/avoid infected, build shelter, develop renewable survival, undertake optional local missions, earn modest account currency through play, die and leave persistent consequences.
1.0 development also integrates the signed-off production visual theme/concept package onto the stable template contracts established by 0.9. Core plain templates remain shipped as the functional fallback/testing surface; the production theme overrides them without moving gameplay authority or domain logic into presentation files. Responsive/mobile layouts, navigation, game-owned icons/assets and all preview/edge states must be wired and verified before 1.0 sign-off.
Solo, PvE and PvP remain isolated. Online worlds support persistent former survivors and hordes. Core principles remain unchanged: 100 HP, no levels, no stat inflation, no pay-to-win, server-authoritative valuable actions, and no cross-mode gameplay state.