@groundsgg/motd through its public package. Grounds is one host of the
same standalone library, not a required service or a separate editor model.
Separate the three boundaries
Use compatible published package versions and committed lockfiles. Do not vendor
an unversioned local library build into a consumer. Keep older runtime fallback
formats only as an explicit adapter compatibility boundary.
Persist intent, not a preview
StoreServerListDocument through the consuming API. Client version, row/menu
presentation, region, example count, ping, and toolbar placement are UI context.
Changing them must not save live values into the document or increment its
server configuration version.
The Portal’s example-player setting is a presentation value, not a claim of
live network presence. Only replace labeled examples after wiring an authorized
data source for the selected environment.
Use network-wide data
For a global count, supply authoritative presence across all proxies. For a regional view, define region membership and unknown-region handling explicitly. Keep environment boundaries, deduplication, freshness, and failure semantics in the provider; the library does not infer them or perform network polling. Test at least two proxies and a remote player. Include unavailable/stale data, permission denial, region changes, and isolated Stage/Production settings. Do not silently use local proxy counts when the global source is unavailable.Maintenance inheritance
Your adapter must distinguish an inherited field from an explicit reset. For example, choosing automatic version mode, removing an icon, or unhiding players can be deliberate overrides even though they resemble defaults. Keep this application intent in an adapter envelope or JSON-only extensions, not a new mandatory Grounds field in the npm core. If you enrich editor changes withmapChange, keep metadata in the same history transaction so Undo followed
by Save restores the intended inheritance.
