v0.4.1
Patch Changes
-
39e2ae8: Exclude local symbol members from reflected object types so signals-core model lifecycle symbols do not appear as remote facade properties.
-
6040145: Fix re-watch staleness, harden method dispatch, and expose nested model facades.
Reflection.watch()now sends a catch-up delta when a client (re)joins a signal subscription that another client kept alive. Previously the re-watching client stayed stale until the signal next changed — permanently, if it never changed again.RPCmethod dispatch rejects underscore-prefixed path segments,constructor/prototype/__proto__, and methods inherited fromObject.prototype, so wire calls can only reach the intentionally exposed graph.- Proxy facades now define nested reflected models as real properties (e.g.
task.vcsis the nested model's facade) instead of dropping them and returning a method proxy. - Call rejections now preserve application error properties: own enumerable props on a thrown error (e.g. a machine-readable
code) ride the error frame and are restored onto the client-side rejection. getInstanceIdrejects model ids containing#or:— both are wire-format delimiters, and such ids previously corrupted call frames silently.- Added a
preparescript so git-pinned installs build automatically. The tsdown config is now plain.mjsso that build never asks Node to type-strip a.tsfile — package managers prepare git deps undernode_modulespaths, where Node refuses type stripping (ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING).