State ownership
The saved schema-1 document contains MOTD text/alignment, version rules, an
optional icon, player-count rules, hover rules, and JSON-only application
extensions. A server name or example ping value belongs to the client context,
not the server-supplied Java status description.
Core and adapters
The Node-safe core does not import React, access a DOM, ping a server, or depend on the Portal. The editor and viewer share layout and server-entry rendering; editor tools surround that entry rather than changing native row geometry.Text and source fidelity
Text nodes have stable IDs. Styled groups retain formatting boundaries; explicitfalse decorations override inherited styles. Glyph layout tracks source
positions independently from visual wrapping and resolved placeholder text.
Unchanged same-format serialization can return original source bytes. After an
edit, serialization produces equivalent structured content while retaining
protected raw subtrees. Unsupported conversions require explicit reduction and
diagnostics; they must not silently flatten unknown data.
Protected components
Unknown MiniMessage constructs and JSON component metadata remain protected atoms. A bounded, inert display projection can show known literal descendants, colors, and decorations. It does not execute click/hover actions, HTML, commands, or context-dependent translation/selector/NBT semantics. If a JSON component array begins with a protected component, later entries can inherit unknown metadata from it. Keep that complete dependency boundary as one atom and use source editing for its dependent entries. Surrounding components remain inline editable. Older saved trees that already lost this boundary need the original JSON reimported; the missing source structure cannot be inferred.Protected-first array preservation was corrected after package 0.3.0 in
library PRs #101 and #103. Check the package changelog and your installed
version. Source preservation does not certify arbitrary native component
rendering.
Derived status values
Resolve displayed count rules before player placeholders. A hidden player field does not make its underlying count rules meaningless: useevaluatePlayerCounts
when you need the values independently of native field visibility.
Use authoritative network-wide input for global counts. Do not substitute the
current proxy’s local count. Your host owns environment selection, permissions,
freshness, failure handling, and explicitly labeled example values.
Transactions and context updates
Document edits, source Apply, and image Apply are history transactions. Source, import, and image dialogs stage drafts until Apply; cancellation does not save them. External document replacement invalidates stale drafts. Context changes, toolbar placement, and labels do not become MOTD edits.mapChange lets an application add JSON-only intent to extensions inside the
same validation/history transaction. Undo and redo restore that intent together
with text; application-specific envelope fields stay outside the universal core.
The inline MOTD surface limits new input to two measured visual lines. Source
imports retain overlong content with diagnostics. Explicit layout export can
materialize wrapping and alignment, but refuses to split a protected component
or an unresolved token.
