Awesome Reviewers

When adding or changing public API surface, favor explicit, well-documented parameters over hidden **kwargs popping, and evolve signatures in a way that keeps existing behavior working.

Example of safe evolution with deprecation:

def from_file(self, filename, loads, silent=False):
    """Update config from a file loaded via `loads`."""
    ...
    return self.from_mapping(obj)

def from_json(self, filename, silent=False):
    """Deprecated: use from_file(filename, json.loads) instead."""
    warnings.warn(
        "'from_json' is deprecated and will be removed in 2.0. Use 'from_file' instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    return self.from_file(filename, json.loads, silent=silent)

This keeps the public API stable for existing users while enabling richer, more flexible functionality going forward.