Lots of content
This commit is contained in:
Executable
+150
@@ -0,0 +1,150 @@
|
||||
# M0 final technical verification
|
||||
|
||||
Local verification date: **2026-11-01**; retained run timestamps cross into
|
||||
**2026-11-02 UTC**. **Point-in-time M0 record:** M0 was complete against its
|
||||
Windows technical exit gates; M1 had not started at this verification. M1 source
|
||||
and later verification are recorded separately in [m1-verification.md](m1-verification.md).
|
||||
This M0 evidence is not user/operator approval,
|
||||
production authorization, clean-machine certification or a performance report.
|
||||
See [decisions and ledger](m0-decisions.md#verification-and-acceptance-ledger)
|
||||
and [roadmap](roadmap.md).
|
||||
|
||||
## Environment and evidence handling
|
||||
|
||||
- Existing Windows development host; absolute Node.js **v24.22.0** executable,
|
||||
Node built-ins only; separately installed official Luanti **5.18.0** selected
|
||||
by explicit absolute `HEARTH_ENGINE`. The launcher verifies reported version,
|
||||
not distribution authenticity. Game **0.1.0-m0**, save schema **1**.
|
||||
- Final verification uses the M0-era uncommitted working tree, identified below
|
||||
by exact package digests, not an invented clean commit/revision.
|
||||
- Fresh check/smoke and GUI runs use distinct disposable `HEARTH_HOME` roots
|
||||
outside the repository. No original world was opened by this final pass.
|
||||
- Absolute Node invokes bounded subprocesses through `execFileSync`; tooling
|
||||
deadline 180 seconds, combined engine deadline 240 seconds, package builds
|
||||
90 seconds each, verification 30 seconds. Both test output streams are retained
|
||||
in complete external logs, not inferred from a truncated terminal preview.
|
||||
- Evidence root: `%TEMP%/hearth-m0-final-VB7xU2`; tooling, engine, package and GUI
|
||||
logs remain there. `%TEMP%/hearth-m0-final-latest.json` records run metadata.
|
||||
These are local evidence locations, not public/downloadable artifacts.
|
||||
- Only README and the three M0/roadmap documentation files are changed by this
|
||||
pass. No gameplay, scripts, fixtures or default dist export is edited.
|
||||
- Final validation: every captured non-documentation input hash remained
|
||||
unchanged; all four documents were confirmed saved and their local file links
|
||||
resolved. Editor diagnostics reported no errors. Repository-wide
|
||||
`git -c core.whitespace=cr-at-eol diff --check` completed successfully with
|
||||
empty output (the setting accommodates Windows CRLF without rewriting files).
|
||||
|
||||
## Current automated and package results
|
||||
|
||||
Commands below identify existing entry points; every invocation used the
|
||||
absolute Node executable, not an assumed PATH runtime.
|
||||
|
||||
| Entry point / observation | Actual result |
|
||||
| --- | --- |
|
||||
| `--test tests/tooling.test.mjs` | **17 passed, 0 failed, 0 skipped**; 17 named tests, not an empty-file pass. |
|
||||
| `scripts/run.mjs test` | **PASS**; check, smoke and overall test markers, verified package-load markers and zero exits. No separate `HEARTH_LUA` interpreter was used. |
|
||||
| Engine compilation | **24 Lua files** compiled; compilation is not counted as unit execution. |
|
||||
| Isolated content suite | **19** checks. |
|
||||
| Schema suite | **24** checks. |
|
||||
| Runtime scheduler safety suite | **10** checks. |
|
||||
| Player lifecycle safety suite | **16** checks. |
|
||||
| Persistence suite | **23** checks. |
|
||||
| Model suite | **11** checks. |
|
||||
| Clock suite | **20** checks. |
|
||||
| Integrated unit total | **123 checks across seven suites**; live-engine registry/crafting/terrain/resources/enclosure smoke also passed. |
|
||||
| `scripts/run.mjs package <new-external-destination>` twice; `verify <fresh-package>` | **PASS**, identical exact manifests; **57 payload files / 62 inventory entries** (manifest itself excluded). |
|
||||
|
||||
The 17 tooling tests include repeatable assets/manifests, existing-output refusal,
|
||||
atomic build cleanup, missing/extra/tampered file and empty-directory rejection,
|
||||
binary backup/restore, offline locks and SQLite sidecars, prelaunch snapshots,
|
||||
unmanaged-world refusal, links/junctions/traversal, portable path selection,
|
||||
exact engine version checks, first-session/summer/winter/production guards and
|
||||
CLI backup/restore/package verification. Integrated suites additionally cover
|
||||
legacy/invalid/future schema behavior and runtime/player safety.
|
||||
|
||||
### Exact fresh package identity
|
||||
|
||||
The stale default dist export was neither trusted nor overwritten. Two entirely
|
||||
new temporary destinations were built and verified. SHA-256 values:
|
||||
|
||||
| Definition | Digest |
|
||||
| --- | --- |
|
||||
| Complete manifest file bytes | `cfd0efdc6e21d99c9f861575a65222bb52838fad38f4d61a5dd77ca034438bc9` |
|
||||
| Compact `JSON.stringify(manifest)`; launcher package-load marker | `167682853c55cda4a5b5e960ec5e2cf0ef0c2f69b604fdf28e8020efbb3e009d` |
|
||||
| Pretty-printed `manifest.entries` plus final LF; recovery-style inventory digest | `c5979ccbbaf3f2e245073927d43a44316ad2ca4f04b782658f1bbeb8219436f8` |
|
||||
|
||||
These are different digest definitions, not contradictory checksums. The package
|
||||
is a game directory, not an archive, engine bundle or installer. It excludes
|
||||
worlds, launcher scripts and the full test suite. Documentation-only edits do not
|
||||
affect its payload inventory.
|
||||
|
||||
## Current GUI verification
|
||||
|
||||
`scripts/run.mjs play` used a fresh disposable external home and explicit engine,
|
||||
not the user's original world. The launcher repackaged the current inputs; its
|
||||
required package-load marker matched the **exact compact manifest digest above**.
|
||||
Thus GUI evidence covers identical verified payload bytes, not a direct launch
|
||||
of an exported directory containing no launcher tooling.
|
||||
|
||||
The log records client join, client leave and server shutdown. An external,
|
||||
bounded process called `CloseMainWindow` only after join output; the launcher
|
||||
exited successfully and its owned embedded game copy was removed. No sleep or
|
||||
gameplay/script modification was used. This is a startup/save/shutdown check,
|
||||
not a movement, fun, long-session or performance playtest.
|
||||
|
||||
Earlier launcher-agent evidence separately records **two** GUI launches of a
|
||||
disposable persistent-style world: metadata stayed byte-exact, a sentinel was
|
||||
retained, two prelaunch snapshots were retained and embedded copies were cleaned.
|
||||
That is earlier regression evidence, not two additional launches claimed here.
|
||||
|
||||
## Retained recovery evidence
|
||||
|
||||
The newest sanitized report was read from the external runtime backups area;
|
||||
recovery was **not rerun against the original world** during this final pass.
|
||||
Report identity: timestamp **2026-11-02T01:43:35.559Z**, token
|
||||
`fa103b35-9f98-45e5-b429-2ecb6f38c29c`; publication mtime
|
||||
**2026-11-02T01:43:56.319Z**. It is a sibling report outside the immutable snapshot.
|
||||
Only sanitized summary fields were exposed; no source paths, raw records,
|
||||
coordinates, credentials or player identities are reproduced here.
|
||||
|
||||
| Retained fact | Report result |
|
||||
| --- | --- |
|
||||
| Engine / public readiness | 5.18.0 / `publicReady: false`. |
|
||||
| Source preservation | `sourceUnchanged: true`; nine source files. This is the earlier runner's inventory comparison, not a new source inspection. |
|
||||
| Snapshot integrity | `backupVerified: true`; immutable legacy backup bytes verified. |
|
||||
| Restores / engine shutdowns | **2 byte-exact restores**, **2 successful engine shutdowns**, no clients. |
|
||||
| Assertions | **79 seed + 81 restart = 160**. |
|
||||
| Existing / legacy records | **2 existing keys, 2 legacy keys**; migrated records preserved. |
|
||||
| Existing source claims | **0**. No assertion that nonempty source claim ownership was preserved. |
|
||||
| Additional fixture evidence | Saved spawn, protection checks, synthetic player adapter, node metadata/inventory and absolute fire expiry verified. |
|
||||
|
||||
That report identifies **57 package files** and recovery-style package inventory
|
||||
SHA-256 `a8c1c4e1459f37ed49ca882d6b7aa68a6ddc1e2bfd0ad66c7c534b6566163ed1`.
|
||||
It **differs from the fresh final inventory digest**. The report therefore proves
|
||||
the earlier recovery run only; it is not relabeled as recovery of the final
|
||||
export. Current final code is covered by the fresh 123 integrated checks,
|
||||
17 tooling tests and GUI/package evidence above. No unsupported claim of byte
|
||||
identity between earlier and final gameplay inputs is made.
|
||||
|
||||
Because the source had zero claims, claim-owner integration/protection evidence
|
||||
comes from regression fixtures and mocked coverage, not preservation of actual
|
||||
source claims. Synthetic player-adapter and node fixtures are not a live-client
|
||||
recovery rehearsal. Neither this report nor current tests promise transactional
|
||||
metadata writes or crash durability. Private backup custody/ACLs, encryption,
|
||||
retention, capacity and an eventual operator-controlled cutover remain separate.
|
||||
|
||||
## Scope closed at M0; work retained for later milestones
|
||||
|
||||
- **Windows:** current native automated and GUI verification passed on the
|
||||
existing development host. No clean checkout on a new machine was tested.
|
||||
- **Linux/macOS:** portable path selection has unit coverage only; native
|
||||
execution remains unverified. No broader support certification is claimed.
|
||||
- **M1:** not started. Hardware/network figures remain provisional review
|
||||
targets, not measured/accepted budgets. No FPS, p95, multiplayer load or
|
||||
latency measurements were taken. Measure and review them in M1.
|
||||
- **Before M2:** the user/operator must approve community coordinates before
|
||||
climate staging. Synthetic fixtures do not choose that location and the
|
||||
decision is not a blocker to completed M0 technical work.
|
||||
- **Approval and release:** no user sign-off is fabricated. Browser parity,
|
||||
production hardening, full F17–F19 launch acceptance and clean-machine
|
||||
certification are not implied by M0 completion.
|
||||
Reference in New Issue
Block a user