Understand Clojure with-meta functionality https://github.com/clojure/clojure/blob/b4ea0f824b2eea039dfc06b796ed601e35cbeab6/src/clj/clojure/core.clj#L213
Then work through Phel issue phel-lang/phel-lang#3311, consider what solution is Clojure-aligned.
gpt-6-astra:
The Clojure-aligned solution is option 2 plus a scoped version of option 3: separate metadata inspection, immutable metadata replacement, and mutable reference metadata. Make every withMeta() non-mutating—but do not make every metadata-bearing object support it.