Development · 0.7.5.0.1
Roadmap to 1.0.0.0.0
0.7.5.0.1 — Prepared Fire Starters & Feather Sticks
Done- At a claimed Camp with a usable fuel pile, prepare exact Dry Sticks into Tinder Bundles (shavings) or Feather Sticks using an accessible knife and real AP. Source instance/ownership/moisture persist; no duplicated wood.
- Existing fire lay requires Tinder Bundle + Dry Sticks or Feather Sticks. Prepared fires persist selected kindling, with a modest ignition bonus for feather sticks. Heavy rain/wetness remain authoritative blockers.
- Migration 20261019163000_firecraft_prepared_kindling, required seeder 20261019163500_items_feather_sticks_v1. Template API 132 / V2 0.3.23.1; no reset. Live MariaDB acceptance pending. Next: 0.7.5.1.0 Laundry & Drying.
0.7.4.9.4 — Fire site cleanup
DoneThe Camp Fire interface now allows removal of extinguished sites; prepared lay dismantling removes the site rather than retaining an Out row.
0.7.4 branch completion candidate
Done- 0.7.4.7.0: returning-survivor summaries from persisted notifications; Campcraft Local Activity Outlook no longer breaks the V2 grid.
- 0.7.4.8.0: admin simulation inspector for pressure, generic migration/cursors, ecology, frost, clues.
- 0.7.4.9.0: cross-system regression suite, core/V2 packaging and handover. Branch code-complete candidate only; live acceptance is pending. This is not production sign-off.
- Limitations: no generic base raids, no offline death, frost presently covers installed Camp Water Butts, lack of an event notification means the reporter cannot infer that event, and dynamic migration still requires two-session MariaDB validation.
- V3 design remains deferred until feature-complete.
0.7.4.6.1 hotfix
DoneFixed the Campcraft SiteThreatAwarenessService namespace autowiring regression; no new gameplay milestone, schema migration, or Template API changes. Continue 0.7.4.7.0 after live acceptance.
Campcraft consolidation — 0.7.4.0.1
DoneCampcraft reorganised to match Safe House physical facilities; fish preparation and smoking together under Food & Cooking. The infected-response 0.7.4.1.0 milestone remains next.
0.7.4.0.0 - Environmental Signals (implemented; live acceptance pending)
Next- Camp Food Smoker smoke now creates bounded infected alertness and horde attention when an actual smoke batch runs in fresh suitable weather. No automatic encounter, no passive replay backlog, no schema change. See docs/ENVIRONMENTAL-SIGNALS.md.
- Next: dynamic infected response, perception/visibility and broader environmental signals.
0.7.3.9.0 — Camp Integration & Branch Sign-off Candidate (implemented; live QA pending)
Planned- Camp Operations summary projects the already-authorized fuel, water, maintenance, workstation and job state into core and V2 text/UI.
- Firewood Pile bootstrap construction now resolves Wood Scrap from eligible Camp physical sources, not just carried materials.
- Shared action permission, transaction and mutation ownership rules stay in their domain services. Placed oversized water-butt installation from 0.7.3.8.1 remains supported.
- Sign-off candidate, not production approval. Acceptance matrix and deferred features in docs/CAMP-INTEGRATION-SIGNOFF.md.
- No migrations, seeders or reset; Template API 129; matching theme 0.3.10.0.
- Next planned major gameplay scope remains to be chosen after real-installation QA. Deferred water freezing, equipment soiling, smoke-threat integration and extensive roof upgrades are not silently bundled here.
0.7.3.8.1 — Camp Water Butt Source Hotfix
Done- Catchment build now recognises an empty Water Butt in hands or deliberately placed as an owned Camp fixture/rain collector, without forcing an oversized container into ordinary storage.
- Conversion of placed Water Butt transfers the same physical item into the catchment and deletes the emptied placed-object row atomically; protects claim/world ownership, contents, condition and construction costs. Shared generic Camp crafting still does not consume installations.
- Matching V2 theme 0.3.9.1; Template API 128 unchanged. No migration/reset. Live MariaDB regression pending. See changelog/0.7.3.8.1-changelog.md.
0.7.3.7.0 — Shelter Improvements & Equipment Storage
Done- Build one Camp Sleeping Windbreak (4 Wood Scrap, 3 Dry Sticks, 1 Duct Tape, 4 AP) using materials in accessible Camp storage. Wind screening contributes a small, condition-scaled bonus to sleep only to the extent wind is not already blocked by a shelter; it never grants rain protection or superhuman insulation. Repair costs 2 Wood Scrap, 1 Dry Sticks, 2 AP and restores up to 35 condition points.
- Build one Covered Equipment Rack (5 Wood Scrap, 3 Dry Sticks, 4 AP) with 24 physical slots and a 30 kg cap. Store/retrieve individual, unequipped non-container equipment stacks by original item ID. Tools, clothing, weapons and utility gear are eligible; no nested containers or fixture dismantling. Tools in the rack are available to eligible local Camp recipes via the same authoritative CampSupplyService source list.
- Both appear in core and V2 Campcraft using compact physical-item rows. New template API 127 and Campcraft contract 19. Database schema already supports Site facilities; no migration or reset.
- Future: actual weather wear/damage, expanded work-area roofing, equipment soiling, and repair paths for damaged gear racks. See docs/CAMP-SHELTER-EQUIPMENT.md, ADR 0162, tests and release changelog.
0.7.3.8.0 - Seasonal and Environmental Consequences
Done- Implemented: bounded, persistent exposure cursors for eight outdoor facilities, based on real rainfall and fresh ambient temperature/wind; physically supplied maintenance/repair in Campcraft and visible condition.
- Deferred: full historical hour-by-hour storms, tank freezing/outlet blocking, equipment soil and wear, shelter roof upgrades, smoke-driven infected attraction and cross-system environmental balance; these require separate authoritative contracts.
- Do not simulate contamination or damage until there is persistent authoritative state and testable weather input.
0.7.3.9.0 - Camp Integration, Weather QA and Branch Sign-off (implemented; live QA pending)
Planned- Verify migrations on clean MariaDB, repeated visits and concurrent Camp actions, offline wear cap, cover advantage, environmental downtime, water/fuel/smoker consistency and responsive UI.
- Reconcile remaining environmental debt and balance the Camp systems before closing 0.7.3.
0.7.3.5.0 — Unified Camp Resources, Crafting & HTTPS
Done- Shared CampActionResources delegates to authoritative CampSupplyService and offers common material preflight/consumption, physical tool availability and tool-capability lookup by accessible item instances.
- Ordinary crafting recipes (excluding recipes requiring a proper Safe House Workbench) may be performed at a freshly position-verified, claimed Camp directly from accessible physical supplies. Recipe availability agrees with execution, and output still obeys the carried-capacity rules.
- Camp Workstation and Catchment builds use the shared material planner. Rainwater stays governed by the existing measured liquid and weather systems, not a new virtual resource.
- Public HTTP -> HTTPS 301 rewrite in public/.htaccess with documented reverse-proxy and local-development handling.
- No schema migration required. Core Template API 125; matching V2 0.3.6.0; live MariaDB transaction QA remains required.
- Subsequent implementation: 0.7.3.6.0 — Camp Sanitation & Washing. See its own roadmap entry for completed features, pending database acceptance, and the upcoming shelter milestone. Read docs/CAMP-UNIFIED-RESOURCES.md and ADR 0160.
0.7.3.4.0 — Off-grid Camp Water
Done- Build one persistent physical catchment per claimed Camp: original 200 L Water Butt, one Tarp, two Wood Scrap, one Duct Tape and four base AP.
- Actual bounded rainfall evaluated lazily with existing RainCollectionService; source quality remains untreated, water capacity exact, no duplication of item instances.
- Camp Water accordion, physical quantity status, decant and pour with current carried containers.
- No schema migration or new seeder. Template API 124; V2 theme 0.3.5.0. Live MariaDB and mobile acceptance still required.
- Deferred: freezing/ice at Camp outlets, dedicated filtration, irrigation and maintenance upgrades. See docs/CAMP-OFFGRID-WATER.md, ADR 0159 and tests/camp-water-check.php. Next: sanitation and washing 0.7.3.6.0.
0.7.3.6.0 - Camp Sanitation & Washing
Done- Built a Washing Station and Covered Latrine with physical locally available Camp materials, AP and authoritative ownership.
- Washing draws 2 L by default from the installed physical rainwater tank, uses existing hygiene/AP rules and cannot purify water.
- Latrine is persistent physical infrastructure, without fake illness reduction or repetitive toilet buttons. Clothing soil, wastewater and environmental disease exposure remain deferred pending domain support.
- No schema migration or world reset; Template API 126 / V2 0.3.7.0. See docs/CAMP-SANITATION.md, ADR 0161, tests/camp-sanitation-check.php.
- Next: 0.7.3.9.0 — Camp Integration & Branch Sign-off.
0.7.3.3.0 — Camp Food Preservation & Work Queue
Done1.0.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. Historical releases through the 0.6 branch use the existing four-part x.x.x.x numbering. From the 0.7 branch onward the roadmap uses five parts: major.branch.stream.section.revision. The final component is reserved for minor fixes/refinements to the current roadmap subsection without consuming another planned subsection number. For example, 0.7.0.14.0 is the Wandering Trader foundation section and 0.7.0.14.1 would be a small correction to that same section.
- Reuses existing food preservation recipes, knowledge checks, freshness, batches and output items; separate dedicated Camp food-safe rack and smoker; fixed physical starter fuel, no infinite processing supplies.
- Weather-gated progress is lazy and persistent in a new migration. Food drying halts in freezing/high-humidity conditions and when a workstation is unusable; stale weather halts both methods.
- First Camp Work Queue shows preservation batches and collect actions. Smoke-attracted zombies, comprehensive camp jobs aggregation and food hygiene/spoilage while processing are explicitly not yet implemented.
- Live MariaDB transactions (migration order, batch consumption, permission checks, concurrent collect, capacity rollback) and mobile/desktop browser appearance must be verified.
- Continuation: docs/CAMP-FOOD-PRESERVATION.md, ADR 0158, tests/camp-preservation-check.php; next milestone 0.7.3.4.0 off-grid Camp water.
0.0.1.0 - Core Kernel
Done- 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_admin authorization 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
Done- 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
Done- 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 /game pages.
- 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
Done- Shipped/verified Apache front-controller rewrite support and deployment diagnostics.
- Documented public/ DocumentRoot + AllowOverride All requirement for clean routes.
- No gameplay/database changes.
0.0.3.0 - Location & Discovery
Done- 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
Done- 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
Done- 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 /inventory proves 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
Done- 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
Done- 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 & Survey clears 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 /roadmap page generated from this document so repository and UI share one roadmap source.
0.0.5.2 - World Drop Constraint Hotfix
Done- Align the item_instances.holder_type CHECK 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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, Overheated and Hyperthermia thermal 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- Add real melee weapon durability: every strike wears the exact held physical item.
- Reuse definition durability plus instance condition_wear so 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- Release current_slot when 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
Done- 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
Done- 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 cleared as the permanent scavenging endpoint and treat old loot_units_remaining as 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
Done- 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
Done- 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
Done- 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
Done- Fix the shared progressive-action client so form controls named action cannot shadow the form target and turn AJAX request URLs into [object HTMLInputElement].
- Read literal form action and method attributes 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
Done- 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
Done- 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
Done- 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 /firecraft page 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- Fix the required Cooking item seeder so self-referencing result_definition_key foreign 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
Done- 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_food item 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
Done- 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
Done- 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
Done- 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
Done- 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_pan requirements 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
Done- 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
Done- 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
Done- Use one authoritative shelter/worksite placement-status check for both page rendering and worksite creation validation.
- Expose an explicit canStartWorksite view-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/index to contract v2 with no schema or seed-data changes.
0.2.8.3 - Shelter Quality, Degradation & Repair
Done- 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/index to contract v3 with condition/repair presentation fields.
0.2.8.4 - Bushcraft Weather Bootstrap Hotfix
Done- Defer Bushcraft Field Activity resolver construction until activity resolution so weather-aware shelter condition code cannot request WeatherProvider before 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
Done- 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_object ownership 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/index to contract v4.
0.2.8.6 - Site & Camp Foundation
Done- Add a reusable persistent Site parent for survivor-established places, with camp implemented now and safe_house reserved 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_areas so 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/index and sites/show contracts and a deterministic Camp list preview.
0.2.8.7 - Camp Infrastructure Membership
Done- Make an established, actively claimed Camp the required parent for new outdoor camp infrastructure.
- Add authoritative site_id and site_area_id membership to world_objects, world_fires and deliberately placed world_drops without 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
Done- 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
Done- 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 LocationCaptureService so 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
Done- 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/index contract v2. No migration, seeder or additional RESET is required.
0.2.8.11 - Lockboxes & Secure Storage
Done- 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/index contract v3.
0.2.8.12 - Shelter & Camp Utility Integration
Done- 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/index contract v4. No schema migration, required seeder or Development RESET is added.
0.2.8.13 - Admin Testing Toolkit
Done- 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/testing contract v1.
0.2.8.14 - Timed Activity/Admin Escape Hotfix
Done- 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
Done- 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/show v15, campcraft/index v5). No migration, required seeder or Development RESET.
0.2.9.0 - Small Game Hunting & Trapping
Done- 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 Tins hold 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/index contract 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
Done- 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
Done- 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
Done- Make lockbox is_locked literal 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
Done- Add physical reusable Tarp items and a /field-shelter surface 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/index v1. 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
Done- 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-v1 neighbouring-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/encounter v4. Add migration 20261007100000_infected_deepen_cell_threat; no required seeder or Development RESET is required.
0.3.0.1 - Infected HP Balance Hotfix
Done- 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/encounter v4 unchanged; no required seeder or Development RESET.
0.3.0.2 - Encounter Resolution & Remains
Done- 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/result v1. Add one migration and two required seeders; no Development RESET is required.
0.4.0.0 - Persistent World Foundation
Done- Add sparse world_cell_states so cells gain mutable state only when gameplay creates a persistent consequence.
- Extend copy-on-write location state, world_objects and world_drops with 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
Done- 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
Done- 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
Done- 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-v1 canonical 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)
Folded- 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
Done- 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
Done- 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
Done- 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_effects so 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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_fixtures and required seeder 20261008130500_sites_seed_household_fixtures_v1; no Development RESET.
0.5.0.6 - Bathroom, Washroom & Cleanliness
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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
Done- 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_id nullable and defensive ON DELETE SET NULL so 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
Done- 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
Done- 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
Done- 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
Done- Route Independent Power Site-coordinate reads through the established encrypted SiteRepository hydration 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
Done- Fix battery-state initialisation for already-installed battery component rows by using their authoritative item_instance_id instead of the direct-install id field shape.
- Prevent invalid foreign-key inserts into item_power_states while 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
Done- 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
DoneThe 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 /journal as 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
Done- 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
Done- 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 burning fires 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
Done- 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
Done- 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 /health treatment 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/index and medical/kit v1 plus inventory/index v25.
0.6.0.5 - Illness & Infection
Done- 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
Done- Connect the existing prepared Safe House Garden Plot and physical seed stock to plant -> water/tend -> persistent growth -> harvest -> eat/store/replant with remaining seed stock. The default plot has four useful crop beds, not a farming level.
- Ship the first seven crops: potatoes, carrots, onions, lettuce, beans, tomatoes and strawberries. Planting consumes physical seed quantity; harvested produce is ordinary physical food with normal carry, freshness and spoilage rules.
- Use Germinating, Growing, Maturing, Harvestable and Failed lifecycle states. Real rainfall, soil-water drawdown, weather-influenced evaporation, season, bounded current temperature/frost sampling and neglect alter growth/health/yield and can kill vulnerable crops.
- Reconcile crop state lazily from authoritative timestamps when the Garden becomes relevant; current point weather is not extrapolated across arbitrarily long offline periods. Failed crops persist until cleared. Deliberate seed saving is deferred in this milestone and implemented in 0.6.0.8.
0.6.0.7 - Medical Room
Done- 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
Done- Expand the physical Garden catalogue from seven to thirteen crops by adding beetroot, peas, cabbage, courgettes, pumpkins and sweetcorn, with ordinary seed stock, harvest items, freshness and plausible scavenging sources.
- Add deliberate crop-specific seed saving: some mature crops can reserve planting stock during harvest at reduced edible yield, while suitable crops can be left occupying a bed through an additional seed-maturation period. Saved seed is ordinary physical planting stock and is never duplicated automatically.
- Keep seed-maturing crops vulnerable to water, temperature and neglect, strengthen seasonal growth differences and make realised food/seed yield respond to accumulated stress as well as crop health, without adding farming levels.
0.6.0.9 - Expanded Crops Seeder Hotfix
Done- Correct the 0.6.0.8 expanded-harvest item seeder SQL placeholder/binding mismatch that could stop php bin/console migrate after the seed-saving migration was already applied.
- Keep the released 0.6.0.8 migration and seeder IDs immutable. Failed seeder execution remains transactional and pending, so affected installations can upgrade and rerun the normal migrate command without reset or manual database edits.
- No gameplay, schema or Template API change.
0.6.0.10 - Food Preservation & Garden Sustainability
Done- Add elapsed-time physical food-preservation batches for drying, smoking, pickling and salt-curing. Drying/smoking require dedicated Safe House Kitchen fixtures; recipes consume exact food/supplies and preserved outputs receive their own ordinary freshness profiles. Spoiled food cannot be restored by preservation.
- Add preserving jars, vinegar, coarse salt, preserved vegetable/small-game outputs and contextual scavenging sources. Dedicated equipment remains occupied until its active batch is collected. Powered refrigeration/freezing is deliberately deferred until a physical cold-storage holder can reconcile freshness against elapsed power supply rather than merely checking power at page load.
- Add persistent Garden Plot fertility/organic matter, crop-specific soil demand and soil stress. Repeated harvest/seed collection draws down the plot and poor fertility can reduce growth, health and realised yield without creating a farming level.
- Add one persistent Compost Bin per prepared Garden, physical organic-waste inputs, lazy maturation/turning, failed-crop residue recovery, physical Finished Compost and deliberate soil amendment. This closes the first grow -> eat/preserve -> compost -> restore soil self-sufficiency loop.
0.6.0.11 - Food Preservation Migration Hotfix
Done- Add ordered preflight migration 20261010149900_food_preservation_preflight_repair to create/validate the intended food-preservation schema before the immutable 0.6.0.10 preservation migration executes.
- Correct the effective preservation-process index to use started_by_survivor_id rather than nonexistent survivor_id, while leaving the released 0.6.0.10 migration unchanged.
- Support both partial 0.6.0.10 upgrade attempts and fresh upgrades from 0.6.0.9 with the normal php bin/console migrate command; no reset or manual table deletion is required.
0.6.0.12 - Garden Sustainability Seeder Hotfix
Done- Correct required seeder 20261010154000_farming_seed_sustainability_v1 to use the authoritative Common Nettles definition key nettle_bundle instead of nonexistent common_nettles.
- Add idempotent repair seeder 20261010154500_farming_repair_compostable_nettles_v1 so any legacy/custom compost profile is normalised to nettle_bundle.
- Preserve the normal upgrade path: affected installations rerun php bin/console migrate; no schema rollback, manual SQL or Development RESET is required.
0.6.0.13 - Workshop Tool Availability Hotfix
Done- Correct Food Smoker construction so a reusable Hammer may be survivor-carried or physically installed at the same active Safe House Workshop, matching ADR-0080 and existing Workshop-enabled construction rules.
- Apply the same correction to Compost Bin construction, which shared the carried-only regression.
- Keep consumable build materials survivor-carried and consumed normally; do not allow tools stored at another Safe House to satisfy the requirement.
- No schema, seeder or Template API change.
Later sanitation depth (not released; deferred)
Folded- 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.0 - Living World Entity Foundation
DoneThe branch uses 0.7.0.<section>.<revision>. The fifth component is for minor fixes to the current subsection. A new gameplay subsection increments the fourth component; a small correction to that subsection increments only the fifth.
- Branch purpose: 0.7 is the final large foundation branch before content-completion and online play. By its end, the Solo world should no longer feel like a collection of static systems waiting for the survivor: important infected can persist, hordes can move, the world can create local opportunities, missions can use real geography, and a non-pay-to-win economy has a concrete gameplay purpose.
- Add an authoritative persistent-world entity boundary for important infected, former-survivor infected in applicable online worlds, hordes and later living-world actors.
- Preserve the existing scalable hybrid infected simulation: ordinary infected pressure remains aggregate/cell based; only entities that matter are persisted individually.
- Give persistent entities one authoritative world/cell/location state, provenance, lifecycle state and last-reconciled time.
- Reconcile inactive areas lazily from elapsed time and world conditions rather than running a global per-zombie tick.
- Persist consequences, not possibilities: untouched areas should still require little or no mutable database state.
0.7.0.1.0 - Persistent Important Infected
Done- Promote selected infected from temporary encounters into authoritative persistent entities.
- Escaped persistent infected remain in the world instead of disappearing with the encounter.
- Support bounded local wandering, neighbouring-cell movement and reactions to meaningful noise without street-level continuous pathfinding.
- Killing a persistent infected resolves that exact entity; it must never be duplicated into another encounter.
- Project survivor-owned approximate last-seen observations to the map/list without exposing the actor's hidden current authoritative cell or creating zombie radar.
- 0.7.0.1.1 theme integration patch: bundled After We Fall 0.1.33 is reconciled to Template API 73, including themed last-seen markers plus infected encounter/result screens; core remains the authoritative template reference.
0.7.0.2.0 - Horde Foundation
Done- Represent hordes as aggregate entities with estimated population/pressure, current cell, movement state, attraction target and reconciliation time.
- Do not simulate every horde member individually; anonymous members remain part of the aggregate while individually important infected retain one authoritative identity and may join a horde through membership state.
- Keep player knowledge separate from server truth: survivor observations store only last-seen area, approximate population range/confidence and age; live current horde position/exact population remain server-authoritative.
- Treat hordes as hazards, not ordinary Solo combat encounters. A lone survivor does not attack an aggregate HP pool; later contact focuses on avoidance, escape, concealment, distraction and potentially unsurvivable deep overrun.
- Reserve organised direct horde battles for later online PvE/settlement defence. Future PvP may let players influence horde routes through risky world/noise actions, never a direct send horde command.
- Establish configurable influence/danger/overrun threat bands, lazy-reconciliation queries, persistent-infected membership hooks and admin/testing diagnostics without yet implementing migration/noise movement consequences.
- Migration: 20261011110000_hordes_create_foundation. Template API 74. Bundled After We Fall theme 0.1.34 remains compatible; player-facing horde map/observation presentation arrives with the next movement/consequence stage.
0.7.0.3.0 - Horde Movement, Noise Response & Consequences
Done- Reconcile horde migration lazily between cells.
- Let sustained/significant noise, fires, alarms, combat and other authoritative events influence movement where appropriate.
- Apply local consequences such as increased infected pressure, encounter danger and visible/audible observations.
- Allow Safe House activity to create understandable risk without introducing arbitrary scripted attacks.
0.7.0.4.0 - Former-Survivor Zombie Architecture
Done- Reuse the existing authoritative survivor alive -> dead transition and publish one SurvivorDied domain event only when a living survivor genuinely crosses to dead; repeated damage against an already-dead survivor cannot queue a second reanimation.
- Keep Solo unchanged. Only explicitly enabled future shared-world modes (pve and pvp) may queue former-survivor reanimation.
- Snapshot the authoritative death cell plus encrypted death coordinates into an idempotent reanimation record, with a configurable delay and a blocked state when no valid death position exists.
- Reconcile due reanimations lazily per world instead of running a global corpse heartbeat. A successful reanimation materialises exactly one former_survivor_infected world entity and one shared persistent-infected state row.
- Preserve one authoritative identity/location: the same former survivor uses the existing bounded persistent-infected wandering/noise response and may later join a horde through the existing membership boundary without being cloned.
- Preserve the survivor/death archive independently from the active infected lifecycle, and establish the non-power account lifetime statistic Zombies contributed to the world, incremented exactly once when a reanimation is successfully materialised.
- Defer exact carried-item transfer, killed remains and remains cleanup to 0.7.0.5.0 so this release does not duplicate or prematurely move possessions.
- Migration: 20261011120000_former_survivors_create_reanimation_foundation. Template API 76. Bundled After We Fall theme 0.1.36 remains compatible; this architecture-only milestone adds no new player-facing theme override.
0.7.0.4.1 - Former-Survivor MariaDB Migration Hotfix
Done- Preserve the released 0.7.0.4.0 migration unchanged and add 20261011115900_former_survivors_mariadb_preflight_repair immediately before it.
- Recover MariaDB upgrades that fail with error 1901 because world_entity_id was referenced by a CHECK while its foreign key uses ON DELETE SET NULL.
- Pre-create the intended former-survivor tables with MariaDB-safe lifecycle constraints so the immutable 0.7.0.4.0 CREATE TABLE IF NOT EXISTS statements become no-ops.
- Support the partial-DDL failure state where account_lifetime_statistics already exists; no manual rollback or Development RESET is required.
- Keep Template API 76 and all gameplay/former-survivor rules unchanged. Bundled After We Fall 0.1.37 is a compatibility-metadata update only.
0.7.0.4.2 - Inventory & Health QoL
Done- Make carried Medical Kits first-class specialist Inventory containers and retire the redundant standalone kit presentation by redirecting legacy kit links into Inventory.
- Add an inventory-wide Food & Water convenience view and alphabetise visible item lists without changing physical storage/ownership.
- Simplify Health to Injuries / Illnesses / Supplies; restrict Supplies to medical items and expose only server-authorised treatment actions.
- Show the survivor's normal condition meters/statuses on Health plus current-condition injury recovery and illness recovery/resolution estimates.
- Increase core and After We Fall desktop/mobile typography and spacing. Template API 77; Inventory contract v26; Medical contract v3; After We Fall 0.1.38.
- No migration, seeder or Development RESET.
0.7.0.4.3 - Medical Kit Carry/Drop QoL Hotfix
Done- Keep Medical Kits as ordinary physical items stored in Self/backpacks while simultaneously exposing their nested contents through quick-access Inventory container tabs.
- Allow empty or loaded Medical Kits to be dropped as one authoritative subtree and picked back up into eligible carried storage without requiring the kit to be wearable.
- Preserve child ownership/parent links across drop/pickup and correct outer-container weight accounting for supplies nested inside a Medical Kit.
- Expose direct Move kit / Drop kit controls from the Medical Kit container view.
- No migration, seeder or Development RESET; Template API remains 77.
0.7.0.5.0 - Persistent Remains & Physical Loot
Done- Transfer a dead online survivor's exact mortal item_instances onto their one authoritative former-survivor infected when reanimation succeeds; Solo remains outside this pipeline.
- Transfer those same item instances onto one persistent remains world object before the former-survivor/persistent infected is resolved. Generated generic infected loot remains a separate fallback only when no authoritative possessions exist.
- Preserve nested container identity: taking a loaded root container transfers the same container and all descendants together, never copies or flattens its contents.
- Finalize fully looted/empty remains immediately and use the existing remains TTL/cleanup path for abandoned loot. Cleanup retires the linked resolved Living World entity while historical death/reanimation data remains.
- Add admin ownership/lifecycle inspection and keep player remains projections knowledge-safe, with no hidden entity/source IDs exposed to themes.
- Add migration 20261011130000_infected_persistent_remains_physical_loot; no required seeder or Development RESET. Template API 78; After We Fall 0.1.40.
0.7.0.6.0 - Mission & Currency Foundation
Done- Add the general mission/archetype lifecycle rather than hard-coded one-off quests, with server-authoritative Offered, Accepted, Active, Completed, Rewarded, Expired, Failed and Abandoned state.
- Add survivor-owned Silver and account-owned Gold balances now, with separate append-only/idempotent ledgers matching their different mortality/account semantics.
- Mission completion is derived from authoritative game facts/actions; player routes can accept/abandon/claim but never submit missionComplete=true.
- Mission windows, lifecycle times and currency transactions use UTC as the universal authority clock.
- Mission rewards may award Silver; Gold remains account-level cosmetic/profile currency and is never a functional mission reward.
- Add /missions, shared balance presentation and Development Admin controls for controlled foundation testing.
- Add migrations 20261011140000_economy_currency_foundation and 20261011141000_missions_engine_foundation; no required seeder or Development RESET. Template API 79; After We Fall 0.1.41.
0.7.0.7.0 - Discoverable Opportunities
Done- Add first playable archetypes using systems that already exist: Visit Location, Survey Location, Search Location and Investigate Location. Authoritative Visit/Survey/Search actions advance matching accepted missions only after the normal game checks succeed.
- Successful searches can reveal deterministic found-note leads and area surveys can surface rumours. The resulting knowledge row belongs to that mortal survivor; it is not broadcast to every survivor/account.
- Target only survivor-known Identified+ locations in this slice, preserving the server knowledge boundary. Deeper POI/taxonomy/terrain/accessibility validation remains the purpose of 0.7.0.8.0.
- Add UTC timed supply-cache opportunities. At available_from, bounded world maintenance creates one world_event, one world_drop and real nested item instances. The physical cache is shared and first come, first served rather than cloned per player.
- Link supply-cache drop pickup back to the existing world-event lifecycle so taking the cache resolves the one shared consequence and other mission instances reconcile against the authoritative result.
- Persist direction/distance from the source of the lead, show it in text, and expose survivor-authorised MIS map markers without leaking hidden target state.
- Add migration 20261011150000_missions_discoverable_opportunities; no required seeder or Development RESET. Template API 80; After We Fall 0.1.42.
0.7.0.7.1 - V2 Theme & Remains Lifecycle Hotfix
Done- Bundles and reconciles the user-supplied After We Fall V2 theme to Template API 80 and the discoverable-opportunity/map target contract.
- Repairs infected-remains/world-object expiry so coarse world_objects.state remains active|removed while lifecycle_state carries expired, preventing MariaDB chk_world_object_state failures when remains become empty or expire.
- No migration or reset.
0.7.0.8.0 - Geographic Mission Validation
Done- Add a shared GeographicMissionValidator that validates only survivor-known candidate locations against configured distance, canonical/internal taxonomy, provider access/terrain tags and mutable world state before an opportunity can be created.
- Reject unknown/player-created procedural targets, private/no-access POIs, construction geometry, marine/surface-water geometry and objective/taxonomy combinations that do not make sense.
- Generated Search opportunities require a specific active scavenging loot table and reject locations whose finite manufactured stock is empty/depleted or whose current persistent consequence blocks searching.
- Supply caches use a stricter list of plausible land-based POI/internal taxonomy anchors rather than accepting every identified location.
- Persist a bounded target_radius_m and validation profile on the opportunity. Text/map presentation describes a target area while existing authoritative Visit/Survey/Search services continue to decide actual GPS/range/action success.
- Preserve the survivor knowledge boundary: geographic validation filters the already-authorised candidate list and never reaches around Discovery to reveal hidden POIs/entities.
- Add migration 20261011160000_missions_geographic_validation; no required seeder or Development RESET. Template API 81.
- Main release packages now contain core/default templates only; custom themes are independently maintained outside the repository release ZIP.
0.7.0.9.0 - NPC Jobs, Fetch & Delivery
Done- Add lightweight authoritative mission_npcs anchored only to survivor-known geographically validated locations; this is intentionally a job-contact layer, not full NPC life/AI simulation.
- Add discoverable NPC fetch jobs, initially configurable around 3 x Wood Scrap for 6 Silver. The survivor must carry qualifying physical item instances and those exact instances transfer to the NPC on handover before the mission completes.
- Add courier jobs with one exact Sealed Delivery Parcel issued only when the survivor accepts in person. The same item identity must still be survivor-carried at delivery; storage at a Safe House/drop/etc. therefore blocks completion until retrieval.
- Require normal authoritative location range/GPS accuracy to accept at the giver and hand over at the recipient. Direct POSTs cannot bypass the proximity rule.
- Add mission_item_requirements and append-only handoff audit rows. Container subtrees transfer together rather than orphaning/duplicating children.
- Add migration 20261011170000_missions_npc_jobs_fetch_delivery and required seeder 20261011171000_items_seed_mission_delivery_items_v1; no Development RESET. Template API 82 / missions/index contract v4.
- Core/default presentation remains the only bundled theme.
0.7.0.10.0 - Threat, Clear & Persistent-Entity Missions
Done- Adds exact mission_entity_targets bindings to active persistent important/former-survivor infected already known through survivor-owned sightings. No quest-only copies are spawned.
- Persistent Threat objectives bind one exact entity; Clear Threat objectives bind a bounded exact group last seen in the same area, so unrelated kills cannot satisfy the job.
- Player mission projection uses stored last-seen intelligence and a known geographic anchor only; the entity's current authoritative cell remains server/admin-only state.
- Offered jobs fail if their target resolves before acceptance. Accepted/active jobs reconcile exact authoritative resolution from combat or other Living World processes to avoid permanently broken missions.
- Former-survivor infected now participate consistently in persistent infected sightings/noise encounters. Hordes remain excluded because they are aggregate hazards, not normal killable entity pools.
- Adds migration 20261011180000_missions_threat_persistent_entities; no required seeder or Development RESET. Template API 83, missions/index v5, admin/game-inspector v15.
0.7.0.11.0 - Procedural Mission Opportunities
Done- Generate a restrained number of local opportunities from eligible geography and current world state.
- Consider distance, recent targets, archetype repetition, survivor condition, known danger and current discoveries.
- Suppress repetitive farming of the same place/objective and allow opportunities to expire naturally.
0.7.0.12.0 - Silver Economy, Pricing & Global Survivor Context
Done- Expand the Silver foundation introduced in 0.7.0.6.0 into the full gameplay economy: earning rates, controlled sinks, buying/selling rules, price bands and world scarcity inputs.
- Silver remains survivor-owned, mortal and mode-isolated, with every earning/spend/adjustment continuing through the established ledger.
- Silver may buy functional survival goods because it is earned entirely through gameplay.
- Tune mission rewards and trader prices together to avoid trivial inflation or grind-heavy scarcity.
- Expose a stable server-side global gameplay/template context (survivor HP/needs/AP/carry/currency/position/world/location) so shared theme components do not need controller-specific fetch workarounds.
0.7.0.13.0 - Gold Entitlements & Account Identity
Done- Expand the Gold balance/ledger foundation introduced in 0.7.0.6.0 into cosmetic entitlement ownership and profile identity.
- Gold survives survivor death and can never be dropped, stolen, looted, destroyed or transferred as gameplay state.
- Future builds may allow Gold to be purchased with real money; it remains strictly zero-gameplay-power.
- Add the entitlement boundary for cosmetics, profile presentation, badges, patches/titles and future supporter/subscriber identity.
- Support auditable grants, purchases, reversals/refunds and idempotent transaction references.
0.7.0.14.0 - Wandering Trader Foundation
Done- Add the Wandering Trader as a Living World event/entity rather than a permanent global shop button.
- The trader appears at a plausible nearby real/game location for a bounded visit and can later leave/move.
- The server decides when a survivor is allowed to know the trader's current location; hidden trader state is never sent and merely concealed by CSS.
- Keep the first trader implementation deliberately abstract/safe from full NPC combat simulation; hostile conditions may cause the trader to leave rather than requiring a complete NPC AI/HP system.
0.7.0.14.1 - Wandering Trader Signal Flare Hotfix
Done- Let an active trader periodically emit a visible signal flare through the existing world-event observation system.
- Survivors inside the flare visibility radius who already know the host POI gain a temporary exact FLR map/Nearby marker, without counting as a personal trader sighting.
- Expire the marker quickly and resolve it immediately on trader departure so it cannot become permanent live tracking.
- Keep broader rumours, approximate sightings and trader movement in 0.7.0.15.0.
0.7.0.15.0 - Trader World Events, Rumours & Movement
Done- Surface sightings through ordinary world-event/observation channels, including approximate rumours that never disclose the authoritative hidden host.
- Grade trader knowledge as approximate RMR rumours, temporary exact FLR signals and personal TRD last-seen sightings rather than one magical live marker.
- Reconcile trader relocation lazily by moving the same authoritative Living World entity/visit between plausible POIs; record exact movement history for admin/diagnostics only.
- Resolve old-stop transient intelligence on movement while keeping personal sightings as historical last-seen knowledge.
- Integrate map search areas/markers, Nearby World Events and Journal sightings while keeping equivalent text navigation available.
0.7.0.16.0 - Trader Stock, Buying & Selling
Done- Generate bounded, contextual trader stock rather than exposing every item in the database.
- Functional stock is purchased with Silver and may include ordinary food, water, medicine, tools, weapons, ammunition, seed and other survival supplies.
- Gameplay stock uses real item instances and finite stock; buying transfers ownership rather than duplicating items.
- Let the trader buy selected goods for Silver with demand/quantity controls so the system cannot become an infinite currency generator.
- Keep prices/data database-driven and inspector-visible for later balancing.
0.7.0.17.0 - Account Identity, Cosmetics, Badges & Patches
Done- Add persistent account entitlements for non-power identity/cosmetic content.
- Gold may buy cosmetics, profile presentation, decorative patches/titles and similar zero-gameplay-effect entitlements.
- Add account/profile badges for sources such as supporter/subscriber status and account longevity (for example Survivor for 5 years).
- Allow players to choose a limited set of featured badges/profile identity elements rather than displaying an unbounded wall of icons.
- Cosmetic entitlements survive death and cannot be stolen/looted/destroyed; they confer no hidden mechanical benefit.
- Leave broader gameplay achievements (for example First Shelter/First Potato) for a later dedicated achievement system, while keeping the account-identity/event architecture compatible with them.
0.7.0.17.1 - Trader Fresh GPS Contact Hotfix
Done- Refresh trader contact state from a genuine high-accuracy browser position instead of depending on stale stored survivor coordinates.
- Require a fresh position again at every Buy/Sell settlement before Silver or physical item ownership can change.
- Keep existing trader radius/GPS accuracy policy and Development Location override semantics unchanged.
- Implement the enhancement in shared core UI/server routes so normal independently maintained themes inherit it without a Template API bump.
0.7.0.18.0 - Mission Rewards & Economy Integration
Done- Connect mission/world-event rewards to Silver and appropriate physical rewards/information.
- Keep Gold outside ordinary functional mission progression except for explicitly non-power promotional/account grants if ever desired.
- Record reward provenance and prevent duplicate completion/payment.
0.7.0.18.1 - Mission Reward Seeder Hotfix
Done- Fix the mission reward-profile seeder to implement the mandatory Seeder::run() contract so migration/seed commands can bootstrap normally.
- Add regression coverage that loads configured seed providers and verifies every registered seeder is concrete and implements run().
- Keep the 0.7.0.18.0 schema, seed contents, Template API and gameplay behaviour unchanged.
0.7.0.19.0 - Economy & Reward Exploit Protection
Done- Add database-level/idempotent protection against duplicate mission rewards, duplicate purchases and replayed requests.
- Add sensible opportunity/reward cooldowns, duplicate-target suppression and auditable administrative adjustments.
- Add checks/telemetry for impossible travel or suspicious economy behaviour without treating client location as authoritative proof.
0.7.0.20.0 - Missions, Trader, Map & Journal Integration Contracts
Done- Add server-defined Available / Active-or-Claimable / History mission groupings without forcing a visual theme layout.
- Add one survivor-authorised navigationIntel projection for known mission targets, trader rumours, signal flares and personal last-seen trader sightings, including current distance/bearing and certainty semantics.
- Keep legacy missions, missionTargets, worldEvents and traderIntel variables for backwards-compatible independently maintained themes.
- Provide equivalent plain-text mission/trader navigation on the core Game page so map interaction remains optional.
- Extend the mortal Survivor Journal with authoritative mission lifecycle events and world-event observations already owned by that survivor, without exposing hidden live state.
- Expand Theme Inspector previews/contracts for available, active/claimable, history, rumour, flare and last-seen states. No schema migration, required seeder or Development RESET. Template API 92.
0.7.0.21.0 - External Auth Configuration & Gold Purchase Foundation
Done- Audit the already-implemented Google and Apple authorization-code adapters rather than duplicating them. Keep provider sub as the durable account identity key and keep provider secrets outside public/.
- Add admin-only readiness diagnostics for Google/Apple credentials, exact callback URIs and Apple private-key source without rendering secret values.
- Make session SameSite policy configurable and explicitly support Apple's cross-site form_post callback through SESSION_SECURE=true + SESSION_SAMESITE=None on the public HTTPS deployment.
- Add provider-neutral Bags of Gold Coins catalogue, purchase-order snapshots, immutable/deduplicated provider-event records and one-time fulfilment records. Seed packages inactive/unpriced so checkout cannot accidentally become live.
- Add a Gold purchase service that refuses unverified provider events and credits the existing account Gold ledger with deterministic idempotency. Browser wallet success remains non-authoritative.
- Preserve raw HTTP request bodies for future webhook-signature verification and document the full Google/Apple/Stripe setup path. Template API 93.
0.7.0.22.0 - Living World Observations
Done- Convert already-authoritative world changes into one survivor-perceivable observation projection without exposing hidden actors or server state.
- Add bounded audible-noise observations from recent NoiseEvents. Loud activity is represented as a coarse source area only; source refs and other-survivor identity are never projected. Local rain/wind can mask hearing range.
- Add nearby visible infected-remains clues. Daylight and current visibility influence whether remains can be seen; loot, former-owner identity and persistent-entity linkage remain hidden.
- Reuse current smoke, horde-threat, world/utility-event and trader knowledge rather than duplicating their authority. The normalized livingWorldObservations contract explicitly distinguishes current sensory observations from historical last-seen knowledge.
- Extend the mortal Journal with retained horde/persistent-infected sightings using only survivor-owned last-seen snapshots. Historical observations never update from current hidden entity position.
- Keep all specialist legacy arrays for independently maintained themes. No migration, required seeder or Development RESET. Template API 94.
0.7.0.23.0 - Living World, Mission & Economy Inspectors
Done- Add focused Admin Living World, Mission and Economy inspectors while retaining the broad/raw Game Inspector.
- Add append-only system_decision_traces operational evidence. Traces are never gameplay authority and are never exposed to ordinary player routes.
- Procedural mission refreshes persist bounded candidate rejection/selection summaries; configured reward profiles persist deterministic chance/cooldown/content decisions for future missions. Historical rejected candidates before this release are not guessed.
- Trader settlements snapshot exact pricing inputs (base/retail/buyback, condition, scarcity, demand and multiplier) and horde intent/movement records authoritative before/after reasons.
- Inspectors expose authoritative-vs-last-seen Living World state, mission lifecycle/rewards, Silver/Gold provenance, trader budgets/trades/signals, replay receipts, security telemetry and admin adjustments. Economy inspection also includes account entitlement history, provider linkage without encrypted identity payloads, and disabled Gold-purchase groundwork.
- Adds migration 20261011280000_system_decision_trace_foundation; no required seeder or Development RESET. Template API 95 with three new Admin contract-v1 surfaces.
0.7.0.24.0 - Foundation Consolidation & Gameplay Polish
Done- Reconcile the 0.7 gameplay foundation before live-only payment testing: persistent-entity identity, lazy movement, horde effects, remains ownership, missions, trader lifecycle/stock, economy, Journal/map knowledge filtering and external account login.
- Close configuration, template-contract, documentation and gameplay-consistency gaps found during local/dev testing.
- Exercise clean-install and upgrade migrations/seeders, mode isolation and abuse/idempotency paths that do not require a live payment provider.
0.7.0.25.0 - Verified Gold Checkout, Google Pay & Apple Pay (not released; deferred to 0.7.9.0.0)
Folded- Superseded as the immediate next milestone when the project entered BETA world-depth development after 0.7.0.24.0.
- The provider/payment groundwork remains present but disabled; verified live checkout moves to the dedicated 0.7.10.x.x payment phase.
0.7.0.26.0 - 0.7 Final Sign-off (not released; superseded by staged BETA sign-off)
Folded- The former immediate sign-off milestone is replaced by the deeper 0.7.1-0.7.8 BETA world-building sequence and the final 0.7.10 payment/hardening phase.
0.7.1.0.0 - Content Catalogue Audit & Population Framework
Done- Branch purpose: the project is now in BETA. Core mechanics are established; 0.7.1 turns the existing systems into a deep, interconnected survival world before payment work resumes.
- Establish the design rule that every physical item should have at least one meaningful use or transformation path and at least one legitimate acquisition/source path where applicable.
- Add content:audit tooling to expose dead-end and unreachable catalogue candidates before large content population. The initial audit is diagnostic rather than a hard zero-debt gate because existing catalogue debt is intentionally being worked down across 0.7.1.
- Add true exact-physical-item multi-ingredient Cooking slots with quantities, optional/substitution-ready choices, measured water, ordinary cookware/heat requirements and non-duplicating item consumption.
- Seed Rabbit & Root Stew as the first multi-item proof: rabbit meat + two potatoes + onion + 500ml water.
- Convert physical knowledge sources from instant-click learning to cumulative timed study with bounded study sessions and retained progress.
- Add Camp Cooking & One-Pot Meals and the exceptionally rare The Ultimate Guide to Survival. Completing the Ultimate Guide requires 48 hours of accumulated study and grants every active Knowledge entry explicitly marked book_learnable; it never reveals hidden world state, map fog, entities, loot or player positions.
- Add deterministic rare-loot eligibility gates independent of ordinary loot weights so exceptionally rare physical finds can remain genuinely exceptional.
- Knowledge remains survivor-scoped and dies with that survivor; books remain physical items and are not consumed by study.
- Template API 96 exposes study progress and multi-ingredient recipe slots to core/fallback templates.
0.7.1.1.0 - Food, Drink & Consumables Population
Done- Replace overly generic food/drink coverage with a broad plausible everyday catalogue: canned foods, dry staples, snacks, beverages, fresh perishables, ingredients and household consumables.
- Give items grounded mass, calories, hydration, perishability, packaging/container behaviour and contextual acquisition.
- Prefer meaningful differences over cosmetic duplicates: compact calorie density, water/fuel preparation cost, spoilage, bulk and storage life should matter.
0.7.1.2.0 - Cooking, Meals & Ingredient Recipes
Done- Expand one-pot meals, soups, stews, frying, roasting, boiling, porridge, broths and other practical preparations using the multi-ingredient framework.
- Add recipe substitutions/ingredient groups where the technique reasonably accepts alternatives, including future cultivated/wild equivalents such as onion/wild onion.
- Keep exact physical ingredient ownership, freshness, water provenance, cookware capability, heat and time authoritative.
0.7.1.3.0 - Farming, Gardening & Seed Depth
Done- Deepen the existing crop/seed system rather than replacing it: broaden useful crops, harvest chains, crop-specific yields, storage and seed-saving relationships.
- Ensure every crop has a reason to exist through nutrition, cooking, preservation, seasonality, resilience, seed value or trade use.
0.7.1.4.0 - Wild Food, Foraging & Plant Knowledge
Done- Expand UK-appropriate wild foods, useful plants, roots, berries, herbs, fungi and dangerous lookalikes by suitable habitat/season.
- Preserve knowledge-gated identification: an inexperienced survivor may see an unidentified specimen where a knowledgeable survivor can identify species and preparation risks.
- Add wild ingredients such as wild onion/garlic where geographically/ecologically appropriate and connect them to ordinary cooking recipes.
0.7.1.5.0 - Health, Illness & Treatment Depth
Done- Rebalance injury recovery so ordinary sprains, bruises and cuts resolve over believable gameplay windows rather than routinely lasting for months; fractures remain serious and slow-healing.
- Expose recommended care and suggested supplies for every active injury/illness even when the survivor does not currently own the required treatment.
- Make gastrointestinal illness cause-specific: bacterial, parasitic and toxin-mediated cases have different targeted treatment rules while oral rehydration remains supportive care for fluid loss.
- Add a craftable Improvised Splint for moderate/severe sprains and suspected fractures, plus finite antiparasitic medicine for diagnosed parasitic gastrointestinal illness.
- Let aging food create a bounded food-poisoning risk and preserve existing water-quality illness exposure without teaching that antibiotics are a universal gastrointestinal cure.
- Keep all recovery/treatment values as gameplay abstractions rather than clinical guidance.
0.7.1.6.0 - Bushcraft & Natural Materials
Done- Expand bark, fibres, reeds, resin, tinder, cordage, stakes, wood, bedding/insulation and other renewable natural materials.
- Add practical low-tech field recipes, tools and camp infrastructure rather than fantasy progression.
- Make outdoor knowledge, preparation and infrastructure a credible alternative to constant urban scavenging.
0.7.1.7.0 - Fishing, Trapping & Outdoor Subsistence
Done- Reuse authoritative environmental/water detection but distinguish collectable water from genuinely fishable habitat.
- Add active fishing, fish traps, crayfish traps, frogs/frog legs, squirrel poles and expanded passive trapping using persistent timed placement/check/reset semantics similar to existing snares.
- Add bait and local renewable-resource pressure so one pond/woodland cannot provide infinite food; suitable resources recover over time instead of magically refilling.
- Connect hunting by-products such as offal to bait so outdoor systems feed one another.
0.7.1.7.1 - Closed Injury Contamination Hotfix
Done- Treat contamination as an open-wound property rather than a generic injury property.
- Clear legacy contamination from bruises, sprains and closed/suspected fractures without resetting survivor state.
- Keep wound-infection risk and contamination recovery penalties restricted to open cuts.
- Advance Template API to 101 with medical/index v5 so themes can conditionally render contamination.
0.7.1.8.0 - Hunting, Carcass Processing & Animal Resources
Done- Build on existing Hunt Area rabbit/squirrel/pigeon mechanics with deeper carcass-processing stages and useful meat, offal, pelts, bones, feathers and limited fat where biologically appropriate.
- Field dressing/cleaning carcasses affects survivor cleanliness and can contaminate tools/clothing/work areas; washing and appropriate equipment reduce risk rather than eliminating it magically.
- Knowledge and suitable tools improve recovery/waste efficiency without creating superhuman yields.
- Animal waste must have a use/disposal consequence: cooking where safe, bait, compost where appropriate, burial/burning/decay, smell and possible attraction.
0.7.1.9.0 - Hide, Fur, Bone & Primitive Clothing
Done- Add pelt preparation, drying/curing/tanning and material-quality states.
- Add grounded uses such as crude rabbit-fur mittens, warm hat/lining, boot insulation, pouches, repair patches, bone needles/hooks and other small practical tools.
- Homemade gear should have believable trade-offs in durability, wet performance, bulk and dexterity so manufactured equipment remains valuable.
0.7.1.9.1 - Hide/Fur/Bone Seeder Recovery Hotfix
Done- Preserve the released 0.7.1.9.0 seeder/data bytes while recovering its dry_stick/dry_sticks ingredient-key typo through ordered append-only preflight and repair seeders.
0.7.1.9.2 - Hide/Fur/Bone Knowledge Seeder Recovery Hotfix
Done- Preserve the released hide/fur/bone Knowledge seeder while recovering its invalid dependency on a non-existent survival skill through ordered append-only preflight and repair seeders.
- Assign Hide Preparation to Hunting and Primitive Fur Sewing/Small Bone Working to Crafting after the immutable historical seeder completes.
- Keep Template API 102 and require no Development RESET.
- Support clean installs and interrupted upgrades without manual SQL or a Development RESET.
0.7.1.9.3 - Location-only GPS Refresh Hotfix
Done- Expose an explicit zero-AP real-GPS position update separate from area surveying.
- Updating position changes only authoritative survivor location/travel state; it must not query hidden POIs, reveal discoveries, advance discovery stages, generate survey opportunities or spend survey AP.
- Keep passive local-observation refreshes compatible with development-location overrides, while an explicit real-GPS update deliberately exits simulated-location mode.
- Re-render the map and nearby/location-sensitive projections from the newly accepted position so the player marker and distances stay aligned with server authority.
- Keep Template API 102 and require no migration, seeder or Development RESET.
0.7.1.10.0 - Preservation & Food Storage Depth
Done- Expand smoking, drying, salting, pickling, curing and storage across fish, game, vegetables, herbs and appropriate prepared foods.
- Connect surplus harvest/hunting/fishing to long-term camp survival without magical refrigeration or refill.
0.7.1.11.0 - Tools, Materials & Workshop Expansion
Done- Broaden hand/workshop tools, nails, screws, wire, blades, handles, fasteners, adhesives, scrap and repair materials.
- Add dismantling/salvage pathways so ordinary manufactured objects feed the material economy.
0.7.1.12.0 - Crafting, Repair & Material Economy
Done- Expand practical crafting, repair and conversion recipes using the richer natural/manufactured material catalogue.
- Continue the universal-utility rule: items should be usable, dismantlable, repairable, consumable, wearable, burnable, plantable, readable, tradeable or otherwise meaningfully interact with the world.
0.7.1.13.0 - Knowledge, Books & Survivor Learning Expansion
Done- Populate specialist physical manuals for foraging, mushrooms, farming, seed saving, preservation, butchery, trapping, fishing, bushcraft, first aid, electrical/mechanical repair, carpentry, sewing/leatherwork and camp cooking.
- Study remains cumulative and time-based; different books may teach overlapping Knowledge and remain physical/tradeable after study.
- Keep The Ultimate Guide to Survival the holy-grail reference: extraordinarily rare and exhaustive for book-learnable Knowledge, but never omniscient about the hidden world.
- Ship eight new specialist manuals and eleven new Knowledge entries, with deliberate overlap between fundamentals and specialist techniques.
- Make learned Knowledge immediately authoritative for deliberate seed saving plus selected Workshop crafting and exact-item repairs.
0.7.1.14.0 - Loot Ecology & POI Population
Done- Populate the enlarged catalogue contextually by POI and, where supported, room/area identity: kitchen, garage, bathroom, shed, garden centre, farm, workshop, pharmacy, shop and woodland should not feel interchangeable.
- More catalogue variety must not mean more total abundance; finite/depleting locations remain authoritative.
0.7.1.15.0 - Trader Stock, Value & Scarcity Reconciliation
Done- Reconcile pricing, buyback, trader specialisms and finite stock with the enlarged catalogue and renewable-vs-manufactured scarcity.
- Preserve Silver as mortal gameplay currency and the zero-power Gold boundary.
0.7.1.16.0 - World Content Audit & Balance Pass
Done- Run catalogue reachability/use-path audits, impossible-recipe checks, source/loot validation, item-fit checks and realistic mass/capacity reviews.
- Exercise outdoor-camp and urban-scavenging progression, renewable-resource pressure, food/water/fuel balance and clean install/upgrades.
- Do not force zero diagnostic findings by inventing meaningless uses; every resolved path must be a real gameplay interaction.
0.7.1.16.1 - Content Audit SQL Compatibility Hotfix
Done- Replace aggregate-alias HAVING comparisons in the crafting/salvage mass audit with derived-table filtering for MariaDB/MySQL compatibility.
- Preserve the existing 10% mass-gain threshold, output fields and read-only Admin/CLI audit behaviour.
- No migration, seeder, Template API change or Development RESET.
0.7.2.0.0 - Sustainable Scavenging & Accessibility
Done- Replace permanent location search exhaustion with a two-layer model: finite original stock plus a tightly bounded ambient common-find pool.
- Keep already-taken physical items gone; do not refill the original shop inventory. Ambient materialisation represents overlooked scraps, mundane supplies and later-emerging low-value finds.
- Convert the rolling 24-hour effort allowance from a hard lockout into soft survivor-specific pressure so local play remains possible for people who cannot regularly travel between many POIs.
- Preserve AP, GPS/range, noise, infected response, loose-item ceilings, survivor-specific reveal knowledge and exact physical ownership.
- Keep physical Knowledge books finite by excluding them from ambient materialisation, and allow otherwise-valid search missions to use ambient-only locations.
0.7.2.1.0 - Utility Simulation Depth
Done- Regional grid capacity now becomes a real usable household watt ceiling rather than a cosmetic percentage.
- Safe House appliance load requests resolve through mains, physical solar/battery or no supply according to the selected source policy and actual available wattage.
- Automatic policy falls back to independent power when degraded grid capacity cannot carry a requested load; mains-only and independent-only remain strict.
- Battery charge state, solar charge rate, current independent capacity and supply reasons are visible/explainable.
- Regional water pressure now projects an estimated domestic flow rate used by the same authoritative fixture/water state.
- Kitchen fixture presentation uses effective power authority rather than grid availability alone.
- No migration/seeder/RESET; Template API 110 and sites/show v26.
0.7.2.2.0 - Powered Cold Storage & Refrigeration
Done- Every prepared Safe House Kitchen includes one fixed Fridge / Freezer, backfilled for existing Kitchens and created automatically for new ones.
- Cold storage is additional purpose-built physical food storage, separate from generic Storage Room capacity; exact item ownership remains authoritative.
- Fridge and freezer compartments have independent slot/weight limits. Nested containers are intentionally rejected so cold-storage limits cannot be bypassed by hidden contents.
- Refrigeration slows perishable-food aging to 25% of ambient elapsed time while powered; freezing reduces it to 2%. Neither path resets or reverses existing age.
- The appliance requests a continuous average load through SafeHousePowerService, so mains/independent policy, solar, battery charge and grid capacity remain authoritative.
- Outages and deliberate shutdown consume bounded residual cold before food returns toward ambient aging: fridge cooling decays sooner, freezer thaw protection lasts longer. Reconciliation is lazy rather than per-second.
- Template API 111; sites/show v27. Migration 20261013130000_food_powered_cold_storage; no seeder or Development RESET.
0.7.2.3.0 - Domestic Water & Household Demand
Done- Turn projected mains pressure/flow into real household water demand for sinks, washing, sanitation, cooking and garden watering without creating an invented per-house municipal reservoir.
- Let stored/rainwater provide explicit alternate uses where appropriate while keeping drinking safety and treatment authoritative; toilet flushing now supports mains or physical rainwater.
- Record sparse actual household draws and show a nearby 24-hour usage/explainability view.
- Add audited Admin Safe House placement by exact latitude/longitude for a selected living survivor without weakening normal player claim rules.
- Template API 112; sites/show v28; admin/sites v1. Migration 20261013140000_sites_safe_house_water_demand; no seeder/reset.
0.7.2.4.0 - Weather Consequences & Exposure Depth
Done- Add one shared, stateless weather-impact projection over the normalized cached Weather state; keep all consequences lazy/server-authoritative with no global tick.
- Make rain/snow intensity, gust-aware wind, temperature, humidity and visibility materially affect exposed AP effort, survey/identify distance, foraging detection, hunting/fishing opportunity and shooting precision.
- Strengthen survivor/item wetness, passive drying and freezing-wet cold exposure while preserving existing shelter/fire mitigation and ordinary 100 HP rules.
- Snapshot weather-derived opportunity/precision modifiers when timed hunting/fishing begins so later resolution is deterministic from the authorised start conditions rather than whatever weather happens to exist at completion.
- Expose concise reasons and useful visibility/effort state to core templates; themes consume server-authored modifiers rather than recreating weather rules.
- No migration/seeder/RESET; Template API 113 with game/home v36, locations/show v26, foraging/index v5 and hunting/index v5.
0.7.2.5.0 - Darkness, Lighting & Night Work
Done- Add geography/date-aware daylight/civil twilight and combine ambient light, physical portable light, nearby fire and powered household lighting through one lazy server-authoritative projection.
- Make darkness affect survey/identification, location search, foraging and timed hunting/fishing while preserving server-authoritative hidden-knowledge boundaries.
- Add switchable Flashlights/Battery Lanterns, finite-burn Household Candles/Tea Lights and a reusable Pocket Lighter. Candles require ignition, burn through elapsed time, may be extinguished, and fail when exposed to rain or excessive wind.
- Give Safe Houses a household-light circuit that consumes real grid/solar/battery capacity through SafeHousePowerService.
- Migration 20261013160000_lighting_foundation; seeder 20261013161000_lighting_sources_v1; Template API 114. No Development RESET.
0.7.2.6.0 - Environmental Infrastructure Follow-through
Done- Add lazy frost-aware Safe House household plumbing and exterior Rainwater Tank state driven by real outdoor air temperature, with bounded current-weather extrapolation.
- Let survivors deliberately drain/isolate household plumbing before severe cold and re-pressurise it later; local plumbing can reduce regional mains availability but can never create service the region does not have.
- Freeze/thaw exterior rainwater progressively so partial ice remains usable while a sufficiently frozen tank blocks its outlet until thawed.
- Apply shelter rain, wind and thermal protection as separate exposure channels instead of collapsing every shelter into one aggregate environmental factor.
- Preserve sparse/lazy simulation and explain decisions in Safe House, Game and Inventory views. Burst-pipe damage remains deliberately deferred.
- Migration 20261013170000_sites_environmental_infrastructure; no seeder/reset; Template API 115 with sites/show v30, game/home v38 and inventory/index v29.
0.7.2.7.0 - Environmental Systems Validation & Follow-up
Done- Validate the combined environment stack at its boundaries rather than adding another decorative subsystem.
- Make claimed Safe Houses first-class shelter even when they were Admin-placed without a canonical POI, with a bounded interior envelope separate from the wider interaction/management radius.
- Use that same interior envelope for powered household-light reach so shelter and indoor lighting agree about whether the survivor is actually inside.
- Preserve finite portable-light runtime when inventory movement extinguishes/stows a source; stale active state now fails safe instead of burning a candle/torch for hours inside storage.
- No migration, seeder, Template API change or Development RESET.
0.7.2.7.1 - Direct Safe House Tap Drinking Hotfix
Done- Let nearby survivors drink directly from prepared Kitchen and Bathroom sink taps without first filling a portable container.
- Reuse household mains flow, local plumbing/frost state and regional water quality/treatment authority; direct drinking must not bypass unsafe-water illness exposure.
- Record direct drinks in the existing Safe House household-water usage ledger and expose a low-flow drinking profile.
- No migration/seeder/reset; Template API 116 with sites/show v31.
0.7.2.7.2 - Safe House Medical Storage & Workshop Tool Hotfix
Done- Allow Medical Room storage to accept valid medical supplies/kits directly from nested carried inventory without forcing the player to unpack them to a root inventory slot first.
- Make Facility Project reusable-tool authority include usable exact tools installed in the same Safe House Workshop, fixing Independent Power and other prepared-room projects that previously checked carried tools only.
- Audit Workshop exact-tool consumers so broken carried/installed tools cannot satisfy reusable-tool requirements.
- Preserve exact item ownership and locality: Workshop-installed tools remain one physical item at one Safe House and are never account-wide bonuses.
- No migration/seeder/reset and no Template API change; Template API remains 116.
0.7.2.7.3 - Safe House Kitchen & Theme V2 Usability Hotfix
Done- Correct Medical Room cabinet accounting so loaded medical kits consume their outer cabinet footprint while nested contents remain constrained by the kit and still count toward total room weight.
- Expose the existing authoritative small-game carcass processing flow directly from a nearby prepared Safe House Kitchen.
- Add common-knowledge cooker recipes for dressed rabbit, squirrel and pigeon meat while preserving learned multi-ingredient meals as higher-value cooking knowledge.
- Preserve survivor-specific identified-forage labels in Safe House cold storage instead of falling back to generic unidentified definitions.
- Make Admin Testing item grants searchable and group/sort active definitions by category then title.
- Begin maintaining After We Fall V2 in lockstep with core UI/contract changes while continuing to distribute it as a separate, zero-authority theme package.
- Required seeders 20261013190000_items_basic_small_game_cooking_v1 and 20261013190500_cooking_basic_small_game_v1; no migration/reset; Template API 117 with sites/show v32 and admin/testing v8.
0.7.2.8.0 - Survivor Notifications & Offline Catch-up
Done- Add a persistent survivor-scoped activity feed with unread/read state, severity, categories, source references and deduplication.
- Reconcile a bounded While You Were Away digest lazily on return rather than simulating every survivor continuously.
- Notify on meaningful timed completions including cooked food and completed Field Activities such as Safe House/facility building work.
- Keep notification knowledge server-authoritative: only consequences/events the survivor is allowed to know may be projected.
- Add Crafting-page category readiness counts so each section shows how many recipes/actions can be performed now; After We Fall V2 renders positive counts as green roundels.
- Migration 20261013200000_notifications_foundation; no required seeder/reset; Template API 118 with notifications/index v1 and items/crafting v9.
0.7.2.8.1 - Clean Install & Database Hardening
Done- Repair the historical empty-database Kitchen Knife / Makeshift Spear seeder-order dependency without editing released seeders or their data files.
- Add an earlier-sorting compatibility preflight that is a no-op on already-upgraded databases and is superseded naturally by the later canonical weapon catalogue on clean installs.
- Add a guarded empty-database integration check plus duplicate migration/seeder ID validation so clean-bootstrap regressions are caught before release.
- No schema migration/reset and no Template API change; Template API remains 118.
0.7.2.8.2 - Map Context & Regression Hotfix
Done- Adds server-authored Home mapActions for contextual Hunt Here, Day Camp and Make Camp availability; presentation never infers these permissions from hidden/client state.
- Fixes collected Kitchen cooking processes resurfacing when the same cookware is reused.
- Fixes 404 requested-path rendering and adds explicit /notifications route-registration regression coverage.
- Advances Template API 118 -> 119 (game/home v39) and exposes owned-Site interaction radius for presentation.
- Companion After We Fall V2 0.2.60 cleans the map toolbar, moves Rest beneath Survivor, adds the environmental strip and turns Nearby into a vertical accordion.
- No schema migration, required seeder or Development RESET.
0.7.2.8.3 - Trader Contact & Meal Balance Hotfix
Done- Rebalance cooked/preserved wild protein and bone broth so a substantial hunted/fished meal can cover roughly a day of baseline calorie demand instead of leaving the survivor below the Hungry threshold.
- Keep the existing 6,000 kcal multi-day reserve, hunger/starvation thresholds, weather modifiers and action calorie costs unchanged; this patch corrects food yields rather than weakening survival drain.
- Companion After We Fall V2 0.3.0.2 restores fresh geolocation capture on dynamically loaded Wandering Trader Buy/Sell forms and honours always-fresh / maximum-age location contracts in the unified AJAX runtime.
- Required seeder 20261013210000_items_wild_food_sustenance_balance_v1; no schema migration/reset; Template API remains 119.
0.7.2.8.4 - Full Nutrition Audit
Done- Audit all core edible/drink definitions rather than continuing targeted nutrition fixes.
- Reconcile complete meals, dense packaged foods, fresh produce hydration and preservation outputs against the ~2,000 kcal/day baseline while keeping the 6,000 kcal reserve and survival drain unchanged.
- Required seeder 20261013220000_items_full_nutrition_balance_v2; no schema migration/reset; Template API remains 119.
0.7.2.8.5 - Full Nutrition Audit Water-Model Hotfix
Done- Preserves the immutable 0.7.2.8.4 nutrition seeder while bridging its incorrect assumption that bottled_water is still an item-level consumable.
- Corrected audit models 234 item-level edible/drink definitions plus the authoritative water liquid substance, keeping 235 total audited consumption sources.
- Restores the canonical 50g bottled-water container after migration; hydration remains owned by liquid contents.
- No schema migration, Template API change or Development RESET.
0.7.2.8.6 - Full Nutrition Audit Water-Category Hotfix
Done- Completes the compatibility bridge for the immutable 0.7.2.8.4 nutrition audit on databases where modern bottled_water is already a container.
- Adds a second ordered preflight before the legacy audit to temporarily expose category=water, then a finaliser after the corrected water-model repair restores category=container and the canonical 50g physical bottle.
- Supports installs where the 0.7.2.8.5 preflight was already recorded before the legacy audit failed; no manual seeder-ledger edits are required.
- No schema migration, Template API change or Development RESET.
0.7.2.8.7 - Persistent Login Sessions
Done- Add revocable, rotating remembered-login tokens so returning players remain signed in across ordinary PHP-session expiry and browser restarts.
- Keep external Google/Apple identity authoritative; persistent login only restores an already-linked active internal account and never creates a password or bypasses provider identity proof.
- Store only hashed validator secrets server-side, rotate the validator and PHP session ID on restoration, expire tokens automatically, and revoke the current token on explicit logout.
- Default remember lifetime to 30 days with environment configuration; no template API or gameplay rule change.
0.7.2.8.12 - Cooking Ingredient FK Integrity
Done- Safe House Kitchen completion now tolerates historical cancelled/stopped cooking-process references to physical ingredients that were recovered and used again. Database FK detaches on item consumption while original_item_instance_id, ingredient slot, quantity, and timed process history remain.
- One migration only, no seeders, no reset, Template API 119. Live validation of previously blocked process 53 required after installation.
0.7.3.0.0 - Camp & Wilderness Infrastructure
DoneBranch scope approved 2026-10-10. Bring the same grounded survival depth to outdoor Camps that 0.7.2 brought to Safe Houses, without turning Camps into a Safe House reskin or granting abstract bonuses. Every completed system must use exact Site membership, physical materials, server-authorised actions, environmental constraints, bounded lazy simulation and mode isolation. No free resource replenishment or upgrade levels. | Planned version | Milestone | State | |---|---|---| | 0.7.3.0.0 | Camp fuel staging and one persistent physical firewood pile per Camp | Implemented in repository; awaiting live DB validation | | 0.7.3.0.3 | Grouped physical items and Camp fuel quantity controls | Implemented internally | | 0.7.3.0.4 | Shared atomic bulk transfers: inventory, Safe House storage and revealed loot | Implemented internally | | 0.7.3.0.5 | Inventory search, sorting, filters, state-aware groups | Implemented internally | | 0.7.3.1.0 | Camp wood preparation, local deadfall collection via finite forage pressure and wetness/weather seasoning | Implemented; awaiting live DB validation | | 0.7.3.2.0 | Outdoor preparation table, covered fuel drying rack, Campcraft accordion | Implemented; awaiting live DB validation | | 0.7.3.3.0 | Camp food drying/smoking, physical fuel, weather progress & Work Queue | Implemented; live DB validation pending | | 0.7.3.4.0 | Off-grid rainwater catchment and stored untreated water | Implemented; live DB validation pending | | 0.7.3.5.0 | Unified Camp local resources, crafting and HTTPS | Implemented; live DB validation pending | | 0.7.3.6.0 | Camp Washing Station, Latrine and physical rainwater washing | Implemented; live DB testing pending | | 0.7.3.7.0 | Camp sleeping windbreak, covered equipment rack and usable locally stored tools | Implemented; live database acceptance pending | | 0.7.3.8.0 | Site-scoped weather wear and physical Camp maintenance; live QA pending | Implemented | | 0.7.3.9.0 | Camp integration, environmental edge cases, branch sign-off | Implemented; live QA pending | | 0.7.3.9.0 | Camp branch integration, migration upgrades and BETA sign-off | Implemented; live QA pending | ### 0.7.3.0.0 — Camp Fuel Staging Foundation (implemented; live DB validation pending) ### 0.7.3.0.1 — Deployment Diagnostics & Installation Guide Hotfix (implemented) ### 0.7.3.0.2 — Live Smoke Suite Theme Compatibility (implemented) ### 0.7.3.0.3 — Grouped Inventory Presentation and Camp Fuel Quantities (implemented internally) ### 0.7.3.0.4 — Shared Physical Batch Moves (implemented internally) ### 0.7.3.0.5 — Inventory Discovery and Filtering (implemented internally)
- Build one Camp Firewood Pile for 2 carried Wood Scrap + 2 base AP. The facility is persistent, attached to this exact world_sites Camp and its main Site area, and remains after disband/death for later legitimate claimants. The existing site_facilities uniqueness prevents a second pile in one area. No new item magically appears.
- Stage/retrieve whole exact item-instance stacks of Dry Sticks, Wood Scrap and Tinder Bundle. Server transactions enforce claimed ownership, current-world context, fresh location through Campcraft, site membership, process locks, a 20 kg + 60 physical-slot pile limit and regular survivor carrying limits when retrieving.
- Existing item wetness remains on the physical stack; this release does not yet advance wood drying, chopping, weather deterioration, automatic camp fire refuelling or remote access. To use staged fuel in a Camp fire, retrieve it first. No unattended auto-feeding of fires.
- Core Campcraft + companion After We Fall V2 0.3.1.0 expose the new storage controls and Template API 120 / campcraft/index v12. No new migration or seeder is needed: the released Site and physical-item-holder schema already supports this new facility key. No Development RESET.
- docs/CAMP-FUEL.md is the executable-handover contract and future stage notes. Test installed builds with php tests/installed-check.php, php tests/camp-fuel-check.php, php tests/smoke.php; reserve php tests/release-check.php for fresh core-only release extracts, and follow the live acceptance checklist.
- Provide official, copyable core+V2 bsdtar install procedure in docs/DEPLOYMENT.md, with explicit archive root handling and no database reset.
- Add read-only tests/installed-check.php that supports real installed extra files/themes, checks the package manifest for missing required core files (not forbidden extra deployment files), validates module seeder wiring and checks template API compatibility.
- Strict tests/release-check.php remains intentionally reserved for clean core-only release staging, never a live installation with an installed V2 theme. No gameplay, schema, seeder or Template API changes. V2 0.3.1.0 remains compatible.
- This is a documentation/deployment-verification patch only. The 0.7.3.1.0 wood processing milestone remains next.
- Correct erroneous historical smoke assertions that rejected a separate V2 theme installed on the live server. The full smoke suite is suitable for installed applications and clean core staging alike.
- Preserve strong core-only package hygiene: tests/release-check.php still rejects bundled custom themes and extra files, and is exercised against fresh core-only extracted ZIPs.
- Check both installed and pristine scenarios before release. Update docs/DEPLOYMENT.md, README, docs/DEVELOPMENT.md and changelog for clear future-chat handover.
- No runtime gameplay, migrations, database or theme changes. Template API remains 120 and 0.7.3.1.0 remains next.
- Add ItemGroupService read-only state-aware groups; preserve source item public_ids, provenance and individual condition/wetness. Introduce numeric quantity and All/fit actions for Camp fuel pile. No weight/slot discount; no DB consolidation.
- Authoritative BatchTransferService with survivor/source/world locking and one transaction around existing checked item transfers. Extend to Safe House Storage, survivor container moves and personally revealed location loot; block unseen items and rollback mixed-capacity failures.
- Full-stack moves only: do not implicitly split a preexisting multi-unit stack; transfer only complete eligible physical item instances. Children and stateful objects remain individually handled.
- Inventory search, category and sorting controls, with grouped counts and weight; groups are state-aware and never merge provenance, wetness or damaged condition invisibly. Core/V2 and Theme Inspector previews updated.
0.7.3.1.0 - Wood Collection, Processing & Seasoning
Done- Retain existing finite, place-scoped Foraging as the sole initial collection mechanism; no new infinite Wood Scrap generator. Campcraft explains where wood comes from.
- At a claimed, nearby Camp with an active pile, serviceable carried Handsaw, and matching sufficiently dry Wood Scrap, prepare wood into Dry Sticks by changing each existing physical item definition in-place; original ID, world, holder, mass, wetness and condition persist. Debit fatigue-adjusted AP using the existing survivor AP service. Respect process-locks and camp authority.
- Uncovered firewood reconciles moisture lazily on view using hourly-or-larger elapsed periods, up to 48 hours at once, historical local rainfall and current weather as a *coarse proxy* for drying; freezing inhibits drying. Skip when weather data is stale/unavailable. Does not yet include roofing/covered woodpile or autonomous background timers.
- New DB-free inventory/wood regression checks and complete handover documentation. Schema/seeder unchanged; required live MariaDB transfer, player-position and weather tests are documented.
0.7.4.x - The Living World (implemented; live acceptance pending)
Planned- Environmental signals, infected attention and migration, threat observations, Camp/Safe House outlooks, wildlife recovery, Camp Water Butt frost and offline/admin reporting.
- Core 0.7.4.9.4 and matching V2 0.3.22.3 are the current branch handover baseline. Fire management and old-fire dismantling were repaired in the final hotfixes.
- The branch is code-complete, but live MariaDB concurrency, weather and mobile/desktop acceptance remain open. Continue V2; postpone V3 prototyping until feature completion.
0.7.5.x - Survivor Life (underway)
Planned- Refine clothing, hygiene, drying, equipment maintenance, rest, exposure and illness. Extend existing systems without adding repetitive chores.
0.7.6.x - Sustainable Living (proposed)
Planned- Deepen farming, soil and irrigation, food storage and preservation, renewable natural resources, off-grid power and long-term Camp/Safe House self-sufficiency.
0.7.7.x - Exploration & Discovery (proposed)
Planned- Improve location discovery, meaningful building exploration, access obstacles, travel and expedition preparation, context-appropriate scavenging, world events and Journal/map integration.
0.7.8.x - Long-Term Survival (proposed)
PlannedThese branch themes are provisional. Audit the existing repository before allocating sub-releases or implementing new mechanics. Preserve physical-item integrity, server-authoritative discovery, survivor mortality and complete world/mode isolation.
- Add meaningful survivor objectives, base progression, knowledge specialisation, rare but plausible discoveries, persistent projects, Solo settlement groundwork and long-term scarcity balancing.
0.7.10.0.0 - Verified Gold Checkout & Payments
Planned- Resume the provider/payment work only after the survival world has received its BETA depth passes.
- Implement server-authoritative Stripe-backed Gold checkout on the beta/live HTTPS environment, with Google Pay and Apple Pay where eligibility permits.
- Verify signed provider webhooks against preserved raw request bodies; fulfil Gold exactly once from verified provider events, never browser success callbacks.
- Add purchase history, cancellation/failure, refund/reversal handling and Admin diagnostics while preserving the absolute no-pay-to-win boundary.
0.7.10.1.0 - Payment Hardening & Live Verification
Planned- Exercise sandbox/live-domain wallet eligibility, replay/idempotency, refund/reversal and provider-failure paths using the real beta environment.
- Keep payments disabled unless production readiness checks pass.
0.7.10.9.0 - 0.7 BETA Sign-off
Planned- Freeze the complete 0.7 BETA line after world-depth and payment hardening.
- Re-run clean install/upgrade, mode-isolation, content integrity, security, knowledge-boundary and economy invariants before advancing the major roadmap.
0.8.0.0.0 - Reserved after 0.7 BETA sign-off
Planned- Major 0.8 scope is intentionally not committed yet. Decide it from BETA playtest evidence rather than forcing the previous content roadmap after that content was brought forward into 0.7.1.
0.9.0.0.0 - Online World/Mode Isolation Foundation
Planned- Branch purpose: consolidate the previously separate PvE and PvP plans into one online-world branch built on the signed-off Solo Beta. PvE is established first, PvP rules are layered onto a completely separate world/profile state, and the branch closes with production-beta hardening.
- Add completely separate PvE and PvP world/profile state alongside Solo.
- Characters, inventories, Safe Houses, economy, discoveries, deaths and world consequences never cross modes.
- Account-level non-power identity/entitlements may remain shared where explicitly designed, without transferring gameplay state.
0.9.0.1.0 - PvE Presence & Shared World Consequences
Planned- Add online presence/cooperative interaction on shared PvE geography.
- Activate persistent former-survivor zombies/player-created world history in PvE.
- Preserve server-authoritative discovery/knowledge boundaries and scalable lazy simulation.
0.9.0.2.0 - Friends, Messaging & Radios
Planned- Add account-level friends/contact relationships carrying no gameplay state between modes.
- Add world/mode-isolated direct text messaging.
- Support physical walkie-talkies/radios for in-world text communication where possession, power, range/frequency and world context are authoritative inputs; voice chat remains out of scope.
0.9.0.3.0 - PvE Trade, Groups & Settlements Foundation
Planned- Add controlled player trade foundations, cooperative groups/settlements and appropriate knowledge sharing.
- Cooperative/group missions may build on 0.7 without becoming mandatory progression.
0.9.0.4.0 - PvP World Rules
Planned- Enable the completely separate PvP world/profile state.
- Resolve engagement, targeting, range, offline/safe-state, death and looting rules explicitly.
- Keep communications/location knowledge isolated from PvE/Solo.
0.9.0.5.0 - PvP Abuse, Spoofing & Anti-Griefing Controls
Planned- Harden movement/location spoofing defences, combat abuse controls, rate limits, audit trails and anti-griefing boundaries.
- Prefer server-authoritative validation and explainable rules rather than client trust.
0.9.0.6.0 - Online Economy & Concurrency Hardening
Planned- Stress-test finite item ownership, trade, trader stock, rewards, account entitlements and simultaneous actions for duplication/race conditions.
- Profile indexes/caches and introduce hot-state caching only where demonstrated necessary.
0.9.0.7.0 - Production Security, Reliability & Recovery
Planned- Perform OAuth/session/privacy review, rate limiting, provider outage handling, backup/restore tests and operational audit coverage.
- Exercise migration upgrades and failure recovery under production-like conditions.
0.9.0.8.0 - Accessibility, Browser/Mobile & Theme Readiness
Planned- Run accessibility, mobile/browser compatibility and text-only parity checks.
- Freeze/audit template contracts, catalogue all player/admin pages and awkward states, verify deterministic preview data and Theme Inspector coverage, and remove temporary development-UI assumptions.
0.9.0.9.0 - Production Beta Sign-off
Planned- Freeze major feature growth and focus on reliability, balance, security and exploit resistance.
- Sign off Solo/PvE/PvP world isolation and online persistence before integrating/finalising the production visual theme for 1.0.
Deferred post-launch bushcraft depth
PlannedAdditional 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
PlannedAfter 1.0.0.0.0, the five-part scheme continues. The 1.0.x.x.x line revisits and deepens systems already shipped before launch (for example 1.0.5.0.0 revisiting equipment/carrying/loot). 1.1.0.0.0 and later branch lines are reserved for genuinely new feature families. The fifth component remains the minor-fix/revision slot for the active subsection.
1.0.0.0.0 - Persistent Apocalypse
PlannedA 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.
0.7.2.8.8 — Power Charging & Global Notifications
Done### 0.7.2.8.9 — Cooking Station Lifecycle Hotfix (implemented) ### 0.7.2.8.10 — Kitchen Cookware Recovery Hotfix (implemented) ### 0.7.2.8.11 — Kitchen Cooking Progress Reliability (implemented) ### 0.7.2.8.16 — Everyday Cooking Ingredient Coverage (implemented; live DB validation pending) Audited the existing pantry ingredients, connected 24 orphaned food inputs to 15 physical multi-ingredient recipes with 15 perishable edible outputs, and added a database-backed food:audit command to surface future content gaps. No changes to already-running cooking processes, world inventories, migrations, or V2 theme contract.
- Installable 300 W mains AC battery charger, efficiency/capacity-limited battery charging and reserve-for-appliance behaviour.
- Improved power capacity diagnostics (battery energy vs discharge rating).
- Authenticated survivor-specific live notification feed and poller, including lazy Cooking completion resolution regardless of current page.
- Known limits: not an electrical circuit scheduler; outage replay still samples the current grid/weather state rather than a recorded minute-by-minute history. No gameplay authority transferred to the browser.
- 144 migrations / 190 required seeders; no reset; V2 0.3.0.4 matched theme; Template API 119.
- Bind physical cooker collection to the latest timed process using the cookware; old job actions cannot collect a newer station. Interrupted cooking keeps recoverable ingredients accessible in a separate Kitchen disclosure. No migration, seeder, or reset.
- Recover physically staged cookware and contents independent of cooker power or cooking-setup errors; log setup failures and preserve exact item ownership.
- Decouple existing cooking process displays from recipe/power setup; preserve last committed state and report individual process evaluation failures safely.
0.7.3.1.1 — Accessible Camp Supplies (implemented; live MariaDB validation pending)
Planned- Physical materials from carried inventory, an active Camp Firewood Pile, serviceable Camp facilities, the survivor’s completed hidden cache and the survivor’s completed unlocked Camp lockboxes can be used directly for Camp Firelays, ignition and fire refuelling. The actual existing item IDs and counted match contents are consumed/worn atomically with AP.
- A serviceable Handsaw left in accessible Camp storage works for wood preparation; no equipment swap or round-trip through Inventory required. Core and V2 templates explain this.
- Exact claim, world, Camp site, proximity and physical holder rules remain enforced at action time. Field fires, foreign camps, locked boxes, other survivors' caches, broken equipment and work-locked items remain excluded.
- CampSupplyService provides a shared, site-bound resource abstraction for future building/workstation modules. Other Camp construction/crafting services remain carried-only unless explicitly integrated; do not represent this patch as a universal switch across every gameplay module.
- No schema/seed changes; Template API 121. Next major milestone remains 0.7.3.2.0 (Outdoor Workstations / Covered Drying Areas).
0.7.3.2.0 — Outdoor Work Areas & Campcraft Accordion (implemented; live DB acceptance pending)
Planned- Adds one physical Outdoor Preparation Table and one Covered Drying Rack per claimed Camp using existing Site facilities. Two kinds cannot duplicate themselves: the Site facility key is unique per Site area.
- Builds use accessible real Wood Scrap and Dry Sticks through CampSupplyService, with transactionally spent AP and no item cloning. Table: 4 Wood Scrap + 2 Dry Sticks + 4 base AP; rack: 4 Wood Scrap + 3 Dry Sticks + 5 base AP.
- Table accepts installed supported tools, including Handsaw and Hammer; Camp-local tool queries can use them without equipping them. Rack stores dry_sticks, wood_scrap and tinder_bundle with 16 kg/40-slot limits, blocks rainfall and inherits bounded 48-hour weather-driven drying. Existing Firewood Pile remains uncovered and unchanged.
- V2 Campcraft systems become a wide, single-open accordion at desktop and mobile widths; status and inspector remain usable. Every original section, route and inspector target is preserved. Core template remains plain functional HTML.
- No food preservation, automatic crafting, universal tool consumption, item identity changes, schema migrations, or reset. Template API 122, V2 theme 0.3.3.0; follow-up is 0.7.3.3.0.
0.7.4.0.1 Campcraft alignment
PlannedCamp kitchen now groups carried catch preparation with cooking and food preservation, reusing Hunting’s transactional processor. Template API 130 adds catchPreparation; no database migration or reset. Details: docs/CAMPCRAFT-ALIGNMENT.md. ### 0.7.4.x Living World progress
- 0.7.4.1.0: bounded encounter response to repeated local audible activity.
- 0.7.4.2.0: conditional, qualitative survivor threat signs and mortal Journal snapshots.
- 0.7.4.3.0: bounded neighbouring-cell generic pressure migration, subject to migration/concurrency acceptance.
0.7.4.x Living World beta milestones
Planned- 0.7.4.4.0: survivor-owned Camp/Safe House local activity outlook and actual fortification coverage — code complete, live QA pending.
- 0.7.4.5.0: seasonal, hemisphere-aware wildlife and aquatic pressure recovery with delayed replenishment after harvesting — code complete, live QA pending. Plant foraging already uses season/stock constraints.
- 0.7.4.6.0: migration-backed frost/thaw access status on installed Camp Water Butts, physical volume/quality conserved — code complete, cold-weather/live MariaDB QA pending.
- Next 0.7.4.7.0: persisted offline/return reporting; 0.7.4.8.0: admin simulation inspectors; 0.7.4.9.0: integration and branch sign-off.
0.7.5.0.0 — Clothing Soiling Foundation (implemented; live QA pending)
PlannedPersistent physical garment soiling independent of wetness, damage and hygiene; small bounded outdoor exposure source; separate core/V2 condition displays. Migration, no reset. docs/SURVIVOR-LIFE-CLOTHING-SOILING.md.
0.7.9.x — UI, UX & Visual Design (planned)
PlannedMobile-first V3 theme and cross-device UX overhaul after feature branches 0.7.5–0.7.8. V2 remains maintained until then; complete core fallback and map/text parity remain mandatory.
0.7.10.x — Payments & Final BETA Sign-off (planned)
PlannedMoves verified Gold checkout, provider hardening and final sign-off from the previous 0.7.9 phase. Absolute no-pay-to-win.