Live vs settled
The engine holds the live value. Monad holds the last commit. Show both. They are not the same number.
While a partition is live, Monad still answers reads of those slots. It answers with the last committed value. The node answers with the live one. Both are correct. They are not the same number.
await interlude.read("scoreOf", [user]); // the node: live, ahead of the chain
await interlude.readSettled("scoreOf", [user]); // Monad: the last committed value
const status = await interlude.status();
status.pendingDiffs.length;
status.committedBatches;Show both
A user who sees only the live number has to trust you that it will settle. A user who sees only the settled number thinks the last ten actions did not happen. The honest UI is the live value, with the settled one next to it, and a sense of how many diffs are still pending.
status() also names the app, the validator and the pinned base block. That is the fastest way to check the node is serving the app your frontend thinks it is, before you debug a grant that was signed for someone else.
Forcing a commit
The node publishes on an interval. interlude.commit() publishes now. Useful in tests, and in a demo where you want the settled number to catch up before the next sentence. A hosted node that set INTERLUDE_COMMIT_TOKEN needs commitToken on the client or the call is refused. Local interlude dev does not set one.
