Skip to content

v4.1.4

Choose a tag to compare

@github-actions github-actions released this 06 Oct 17:43
· 1530 commits to main since this release
517b754

"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()
    and App.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, marked off in 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.beforeSave and Engine.onLoad replace the player's rewriting of
    store.save and engine.load (the music's phase goes through them); the pause menu undoes what it set up through
    one list of cleanups. waitUntil wakes on the state change that satisfies it, a quarter of a second at most
    behind. Dead code: three copies of EngineOptions, two duplicated module headers, two copies of esc and sleep.
    knip runs in npm run quality for dead files, dependencies and duplicates (esbuild listed 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.ts builds and reads every key of
    GameState.seen (a topic, a listener, a choice, a signal) and the room-scoped keys of props and actors, where
    ten sites spelled them by hand and parsed them with indexOf('.'); 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 four onces 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