Repository navigation
v4.1.4
"Honest Engine" (LOG #100): the plan's third release; nothing in the content or the commands, everything in how the
engine ends, fails and keeps time. The first release merged by pull request under the ruleset of 4.1.3.
Changes
- The engine's honesty (4.1.4, the plan's third release; nothing in the content or the commands).
Engine.destroy()
andApp.destroy(): the script loops stop, whoever waits is released, the listeners the player put on the window
and the document end with it (AbortController), the frame loop and the fps meter stop, the palette cache gives
its blob URLs back, the audio's document listeners go, the world link stops.Engine.onError(error, where): a
script that throws is stopped, markedoffin the save and said (4.1.1 logged it and left the save calling it
alive), a custom command that changed more than it declared is said there too, an unknown minigame throws (the
validator refuses it anyway). Time comes from the injected clock alone:started, a trace entry, a session's date;
saveEnvelope(game, state, now).Engine.beforeSaveandEngine.onLoadreplace the player's rewriting of
store.saveandengine.load(the music's phase goes through them); the pause menu undoes what it set up through
one list of cleanups.waitUntilwakes on the state change that satisfies it, a quarter of a second at most
behind. Dead code: three copies ofEngineOptions, two duplicated module headers, two copies ofescandsleep.
knipruns innpm run qualityfor dead files, dependencies and duplicates (esbuildlisted as the dependency it
is; the unused-exports rule stays off: 216 exports to judge, a chantier of its own); the Biome configuration
migrated to its current shape. - One place for the state's keys, English placeholders.
core/keys.tsbuilds and reads every key of
GameState.seen(a topic, a listener, a choice, a signal) and the room-scoped keys ofpropsandactors, where
ten sites spelled them by hand and parsed them withindexOf('.'); nothing in a save changes. The placeholders of
a fallback, kind or give line are{item},{target}and{name};{objet},{cible}and{nom}stay as their
4.0 names, so every game keeps working (docs/en/CONTENT_GUIDE.md, which also says what the fouronces are).
Manual passes (D12: reported, not blocking)
7 of 10 done.
| Pass | Status | Who, when | Device, OS, browser, versions | What failed |
|---|---|---|---|---|
| 1 | a script that throws stays "running" in the save and dies in silence | stopped, scripts[id].off, said through onError (tests/engine-honesty.test.ts) |
||
| 2 | a destroyed engine or player keeps a loop, a listener, a frame or a blob URL | Engine.destroy, App.destroy; built and destroyed twenty times with no listener left (tests/dom/app-destroy.test.ts) |
||
| 3 | the time in a state, a trace or a session comes from anything but the clock | two new games under one clock are identical (tests/engine-honesty.test.ts, tests/critical-session.test.ts) |
||
| 4 | the player reaches its goals by replacing the engine's methods | beforeSave and onLoad, tested; app.ts patches nothing |
||
| 5 | a key of the state is spelled in more than one place | core/keys.ts, the ten sites through it, a 4.0 save byte-identical (tests/keys.test.ts, the golden saves) |
||
| 6 | a dead file or dependency can stay unnoticed | knip in npm run quality |
||
| Pass | Status | Who, when | Device, OS, browser, versions | What failed |
The seven field passes (docs/en/FIELD.md) |
not done | |||
| The 88 surviving mutants of the reality set, the 216 unused exports knip lists | not done | |||
Signed tag (git tag -s) |
not done |