Skip to content

Back to Releases

ivue@2.2.1 — field fixes: order-correct method binding, $ means stable identity

View on GitHub ↗Released July 27, 2026

Same-day fixes from field evidence against 2.2.0, reported by the first production consumer.

Fixed

  • Static method binding was order-dependent. The bound function was installed as an own named property on the receiving class, so a parent-first read planted a parent-bound method where every descendant's chain lookup would find it — subclass overrides of this-dispatched members were silently ignored depending on read order. Methods now cache their bound function under a per-receiver symbol own-property (the same discipline as $-caches): each class binds itself on its own first read, in any order. Extending the wrapped Class is now safe by construction.
  • ReactiveClass<C> preserves static members. The type was a bare construct signature, so every static member vanished from Reactive()'s return type — and from the Static(Reactive($Class)) composition. It is now a mapped intersection: statics typecheck, construction still yields ReactiveInstance. Types only — zero runtime change.

Changed

  • $-cached values are no longer frozen. Field evidence showed the shallow freeze forbade the one mutation shape it could see (plain-object writes — crashing a real app's boot) while allowing every collection mutation (Map.set and kin) — partial protection that misleads. The contract is now stated plainly: the $ prefix promises stable identity per receiver, nothing more; whether the cached value is immutable config or a deliberately mutable memo table is the author's design.
  • Composition is documented and tested: a class needing instance reactivity and static $-caches publishes Class = Static(Reactive($Class)) — both contracts verified to hold through the composed class. $ semantics are granted by the transform, on both the instance and static sides.

Measured

188 tests at 100% coverage on every metric, including both read orders of the binding fix. Core entry 1,112 B gzipped, ivue/extras 493 B.

Released under the MIT License.