Serialized action definitions used to build the logic's actions map.
The logic of the owning actor — this actor's own logic when the data is
an actor's, the owning actor's logic when it is an item's, or null.
The owning document's id.
Whether the current user owns the document (edit permission).
The document kind (its actor or item type id).
OptionallastGeneric run record (issue #579) — a map of actionName → the world
time (seconds) that action last performed on this document, stamped at the
action chokepoint for actions flagged recordsLastRun. The past-tense
mirror of scheduledActions: "when did X last happen here?" for any
action, without a bespoke field, and it survives after a schedule ends. For
an event-driven trigger (no computable next fire) it is the only meaningful
temporal fact.
The logic instance built from this data.
The owning document's name.
The Foundry document (actor or item) this data belongs to, or null.
OptionalscheduledPersisted recurring/deferred schedules for this document (issue #588) —
each entry defers actionName to anchor + interval. The generic store
that replaces the retired bespoke last*Date anchors; a recurring effect's
finalize() re-arms these into the event queue on every preparation. Only
documents whose data model extends the base SohlDataModel (actors, items,
combatants) carry it — hence optional here. See
https://kb.heroiclands.org/dev/reference/event-queue/.
Short identity code for this document.
The owning document's type (its actor or item kind).
The owning document's globally-unique id, treated as an opaque
identity token: pass it through (e.g. into chat-card data) and resolve it
back to logic via fvttLogicFromUuid / fvttLogicFromUuidSync — never fromUuid
it to a Foundry document inside the logic layer.
The Foundry-free data contract for a SoHL token — the sohl.core.logic.SohlLogicData port specialized for
SohlTokenDocument.Tokens are not typed documents (no
systemDataModel), so unlike actors, items, and combatants this port is not implemented by aSohlDataModel;SohlTokenDocument.logicbuilds a transient adapter over the live token instead. The token carries no persisted SoHL state — opposed tests live in chat-card JSON, never on the token.