68 lines
5.8 KiB
Markdown
Executable File
68 lines
5.8 KiB
Markdown
Executable File
# M2 implementation and verification — The Last Hearth
|
||
|
||
Updated: 2026-11-02. Scope: first-night gameplay implementation and technical
|
||
verification. This document does **not** claim unfamiliar-player acceptance, M1
|
||
human acceptance, community-location approval or production readiness. See the
|
||
[roadmap](roadmap.md), [M1 evidence](m1-verification.md), [architecture](architecture.md)
|
||
and [launch checklist](launch-features.md).
|
||
|
||
## M2 implementation present
|
||
|
||
| Area | Implemented behavior | Boundary |
|
||
| --- | --- | --- |
|
||
| Safe arrival and home | Bounded emergence and safe-surface checks reject unloaded/liquid/hazard/occupied/claimed/recently lethal locations. `/sethome` requires a safe point in the owner's claim. `/home` revalidates the saved point before trying a safe world spawn or a 64-node bounded rescan. | No automatic geolocation. The old persistent play world is not used by tests. |
|
||
| Death | Inventory, food, water and wetness persist; respawn recovers at a verified safe point with only stamina and warmth limited. | No item-recovery corpse or final player-approved death policy. |
|
||
| Fire and light | Cold fuel needs a reusable firestarter; fuel is not self-igniting. Craftable torch supports nighttime activity. | No uncontrolled fire spread, lamps or light-quality playtest. |
|
||
| Cooking and water | Six-second cooking and four-second boiling reserve their fuel charge at queue time. Absolute deadlines continue during server absence, fuel can expire, and completed output remains until safe collection. | Offline player needs remain paused. No crops, spoilage or generalized offline simulation. |
|
||
| Rest | A placed bedroll inside a claim requires five still seconds under sheltered, ventilated cover. Movement, damage, unsafe cover or permission changes interrupt; completion adds modest warmth and has a 30-second cooldown. | Does not advance or pause the shared world clock; environmental shelter remains M1's four-ray approximation until M3. |
|
||
| Discovery | `/recipes`, the recipe-index button and guide page provide paginated plain-text search across recipes/ingredients plus process durations and sources. | Existing recipes and the progression ceiling remain intentionally small; tester-led balance is still required. |
|
||
| Persistence | Save schema 1 now validates the `homes` world-storage map; hearth job metadata is validated/reconciled on timer/load and output completion is idempotent. | Engine node metadata is not an envelope-schema transaction or crash-durable database. |
|
||
| Map starts | `test:seeds` creates fresh real-engine worlds for eight fixed map seeds and checks required resources plus a dry, supported safe-arrival surface in the same bounds as fallback spawn. | This is deterministic fixture coverage, not exhaustive world-generation proof or human assessment of start quality. |
|
||
|
||
## Automated verification on the current Windows host
|
||
|
||
- **M2 historical contract:** Node.js 24.22.0; stock Luanti 5.18.0; game 0.3.0-m2; save schema 1. M3 release supersedes it.
|
||
- **Engine integration:** `scripts/run.mjs test` passed. The pinned real engine compiled
|
||
39 Lua files, ran 16 isolated suites totaling **254 checks**, and passed registry,
|
||
recipes, terrain/resources/enclosure, and native gravity/collision/animation smoke.
|
||
The native smoke explicitly does not prove rendered animation, audible playback,
|
||
movement feel or a client playtest.
|
||
- **Node tooling/assets:** 30 named tests passed across `tests/tooling.test.mjs` and
|
||
`tests/assets.test.mjs`. Optional full codec decode/regeneration was not run;
|
||
Ogg framing/CRC/hash checks did run. Windows did not grant file-symlink privilege;
|
||
directory-junction protection was exercised.
|
||
- **Multi-seed:** `scripts/run.mjs test:seeds` passed on eight fresh worlds for seeds
|
||
731104, 19027, 2026, 987654321, 271828, 314159, 42 and 8675309. Every world had
|
||
all required starting-resource types and a dry, supported safe-arrival surface;
|
||
the smallest checked fallback area had 229 such surfaces (seed 42). The aggregate
|
||
`LAST_HEARTH_SEED_TEST_PASS` marker was emitted. Seed 42 initially exposed that the
|
||
±32-node fallback bound had no dry arrival; arrival/emergence checks and the fixture
|
||
were aligned and widened to ±64, after which all seeds passed.
|
||
- No separate Lua interpreter, clean-machine run, Linux/macOS native run or test of
|
||
the persistent play world is claimed. The exact M1 human gate remains open.
|
||
|
||
## Manual M2 acceptance still required
|
||
|
||
1. Use a disposable local `HEARTH_HOME`; never use a fixture in the preserved play
|
||
world. Test both first-night summer and winter fixtures, without revealing recipe
|
||
answers to the tester.
|
||
2. Ask five unfamiliar testers to attempt 30–60 minutes without coaching. Observe
|
||
whether each can identify local resources, craft a useful tool, ignite a hearth,
|
||
produce food and clean water, make a usable shelter/bedroll, and recover from an
|
||
unsafe spawn or death.
|
||
3. Record time-to-goal, failed/dead-end recipes, fuel/output loss, nighttime visibility,
|
||
recovery fairness and actionable feedback. Do not collect location/account data.
|
||
4. Capture exact game/engine/fixture, seed, host/device, controls and reproducible
|
||
defects. Do not present synthetic 45°N/0°E fixture runs as community-location
|
||
approval or climate balance.
|
||
5. The user/operator must explicitly choose and configure community coordinates
|
||
before shared climate staging. M1 voluntary repeat-play and real-client
|
||
performance/network evaluation also remain outstanding.
|
||
|
||
## Disposition
|
||
|
||
M2 gameplay implementation is in place and the available automated integration and
|
||
Node test gates passed at its release. M3 has since been implemented; M2 is still
|
||
**not human-accepted** until the unfamiliar-tester and operator gates above are evidenced.
|
||
No claim is made that M2 completes the launch checklist or authorizes production.
|