Defaults and inheritance
Choose where values come from and how local settings replace or suppress them.
Choose whether a default is copied or followed live
Contrast a creation-time default with a current inherited value.
Order the levels in a settings hierarchy
Resolve the nearest explicit value using a declared hierarchy.
Distinguish “inherit” from “explicitly off”
Use a mode field so false cannot be mistaken for absence.
Resolve inheritance separately for each setting
Keep each property’s source explicit instead of replacing a whole settings record.
Reject a circular parent chain before resolving inherited values
Specify a valid hierarchy rather than leaving value resolution without an endpoint.