Date: 2026-02-12
Accepted
A full eager merge of all inheritance outcomes for every active modset is expensive in browser CPU and memory. At the same time, the Guide must preserve mod order semantics and produce game-like final objects.
We use a lazy inheritance resolution model.
- Startup builds a single ordered raw dataset: base first, then active mods in URL order.
- Object identity lookup uses the final definition at each key, preserving override precedence.
- Full inheritance resolution happens on demand when an object is requested.
- Resolved objects are cached for the page lifetime.
This ADR covers object resolution for rendered data. Origin/provenance reporting is a separate concern (see ADR-004), even though both follow the same mod order and inheritance semantics.
The resolver is defensive against malformed inheritance (for example cycles or missing parents) to avoid crashes and keep navigation usable.
- faster initial load than eager full flattening;
- better memory profile for typical browsing sessions;
- supports arbitrary active mod combinations without precomputed bundles.
- first access to some objects can be slower than subsequent accesses;
- inheritance semantics are more complex than simple eager merge;
- parity with upstream behavior must be re-validated as data patterns evolve.