Repository: mit-ll-responsible-ai/hydra-zen

Issue:
Don't make any configs frozen by default
Apparently this causes config merge issues: https://github.com/mit-ll-responsible-ai/hydra-zen/discussions/438

Discussion:

Patch:
diff --git a/docs/source/changes.rst b/docs/source/changes.rst
index b78326f0..bc98b949 100644
--- a/docs/source/changes.rst
+++ b/docs/source/changes.rst
@@ -8,28 +8,36 @@ Changelog
 This is a record of all past hydra-zen releases and what went into them, in reverse 
 chronological order. All previous releases should still be available on pip.
 
---------------------------
-Documentation - 2023-03-11
---------------------------
-
-The following parts of the documentation underwent significant revisions:
-
-- `The landing page <https://github.com/mit-ll-responsible-ai/hydra-zen>`_ now has a "hydra-zen at at glance" subsection.
-- The docs for `~hydra_zen.ZenStore` were revamped.
-
 .. _v0.11.0:
 
 ---------------------
 0.11.0rc - 2023-04-09
 ---------------------
-This release drops support for hydra-core 1.1 and for omegaconf 2.1; this enables hydra-zen to remove a lot of complex compatibility logic and to improve the behavior
-of :func:`~hydra_zen.zen`.
 
+.. note:: This is documentation for an unreleased version of hydra-zen. You can try out this pre-release version using `pip install --pre hydra-zen`
+
+This release drops support for hydra-core 1.1 and for omegaconf 2.1; this enabled the 
+removal of a lot of complex compatibility logic from hydra-zen's source code, and to 
+improve the behavior of :func:`~hydra_zen.zen`.
+
+Bug Fixes
+---------
+- Configs produced by `~hydra_zen.just` will no longer cause a `ReadonlyConfigError` during Hydra's config-composition process. See :pull:`459`
 
 Compatibility-Breaking Changes
 ------------------------------
 - The auto-instantiation behavior of :class:`~hydra_zen.wrapper.Zen` and :func:`~hydra_zen.zen` have been updated so that nested dataclasses (nested within lists, dicts, and other dataclasses) will no longer be returned as omegaconf configs (see :pull:`448`).
 - hydra-core 1.2.0 and omegaconf 2.2.1 are now the minimum supported versions.
+- :func:`~hydra_zen.just` not longer returns a frozen dataclass (see :pull:`459`).
+
+--------------------------
+Documentation - 2023-03-11
+--------------------------
+
+The following parts of the documentation underwent significant revisions:
+
+- `The landing page <https://github.com/mit-ll-responsible-ai/hydra-zen>`_ now has a "hydra-zen at at glance" subsection.
+- The docs for `~hydra_zen.ZenStore` were revamped.
 
 
 .. _v0.10.0:
diff --git a/src/hydra_zen/structured_configs/_implementations.py b/src/hydra_zen/structured_configs/_implementations.py
index c4fa41bc..01c86425 100644
--- a/src/hydra_zen/structured_configs/_implementations.py
+++ b/src/hydra_zen/structured_configs/_implementations.py
@@ -485,7 +485,7 @@ def hydrated_dataclass(
     return wrapper
 
 
-@dataclass(frozen=True)
+@dataclass(unsafe_hash=True)
 class Just:
     """Just[T] is a config that returns T when instantiated."""
 


Test patch:
diff --git a/tests/test_launch/test_merge_compat.py b/tests/test_launch/test_merge_compat.py
new file mode 100644
index 00000000..1c3737f4
--- /dev/null
+++ b/tests/test_launch/test_merge_compat.py
@@ -0,0 +1,52 @@
+# Copyright (c) 2023 Massachusetts Institute of Technology
+# SPDX-License-Identifier: MIT
+
+import pytest
+from omegaconf import DictConfig
+
+from hydra_zen import ZenStore, builds, launch, make_config, to_yaml, zen
+
+
+def relu():
+    ...
+
+
+def selu():
+    ...
+
+
+class Model:
+    def __init__(self, activation_fn=relu):
+        ...
+
+
+def app(zen_cfg: DictConfig, model: Model) -> None:
+    print(to_yaml(zen_cfg, resolve=True))
+
+
+@pytest.mark.usefixtures("cleandir")
+@pytest.mark.usefixtures("clean_store")
+def test_merge_prevented_by_frozen_regression():
+    # https://github.com/mit-ll-responsible-ai/hydra-zen/issues/449
+
+    store = ZenStore()
+    Config = builds(
+        app,
+        populate_full_signature=True,
+        hydra_defaults=[
+            "_self_",
+            {"model": "Model"},
+            {"experiment": "selu"},
+        ],
+    )
+
+    experiment_store = store(group="experiment", package="_global_")
+    experiment_store(
+        make_config(
+            hydra_defaults=["_self_"], model=dict(activation_fn=selu), bases=(Config,)
+        ),
+        name="selu",
+    )
+    store(Model, group="model")
+    store.add_to_hydra_store()
+    launch(Config, zen(app), version_base="1.2")