Prayer, engagement and adoption are ONE props-table plugin (simple-map.instances.json), but an embed could not
name a row: a host copied the row's props into its own page, and the copies drifted.
- library/elements/presetConfig.js: presetTables() reads a plugin's *.instances.json + *.meta.json (bundled,
no fetch); resolvePreset() builds exactly the config the build bakes into the preset page
({ profile, the meta.json config minus the reserved keys, the mobile flags, the row's props }), with the
host's own profile-config laid over it, so a page sets only what is page-specific (locale, assetsBase,
provider / tk).
- ProfileLoader takes an `instance` attribute (or profile-config.instance). An unknown name shows an error line,
never a blank map; no instance leaves today's config untouched.
- defineMapElement takes the plugin's tables (presets); the simple map passes its own.
- check:instance-attr (gates:pre; self-test in gates:post): every preset row of every plugin resolves to exactly
its built preset page's config (11 rows); an unknown name is an error; the host's keys win; the meta config and
mobile flags merge as the build merges them; the simple map is wired. Poisons: the meta config dropped, the
mobile flags dropped, the row overriding the host, the entry not wired.