Skip to content

feat(remoting): add observable members - #760

Open
Quenty wants to merge 2 commits into
mainfrom
feat/remoting-observables
Open

feat(remoting): add observable members#760
Quenty wants to merge 2 commits into
mainfrom
feat/remoting-observables

Conversation

@Quenty

@Quenty Quenty commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Remoting members can now carry an observable stream instead of a single value: the server binds a factory with BindObservable and the client subscribes with Observe, and the stream stays alive until the client unsubscribes, the source ends, the player leaves, or the remoting is destroyed. Each observable member reserves one extra remote event, which carries subscribe and unsubscribe up and emissions down.

This also fixes two lifetime bugs found while building it. Remote instances are now parented only after their handler is attached, so nothing watching for one to appear can catch it existing but not yet listening. The three promise methods now register their maid before attaching Finally, which stops them stranding one maid entry per fire and per invoke for the lifetime of the remoting.

Quenty added 2 commits July 27, 2026 17:15
Adds BindObservable on the server and Observe on the client, so a member can
carry a live stream instead of a single value. The server factory runs once per
subscription and the stream is torn down when the client unsubscribes, when the
source ends, when the player leaves, or when the remoting is destroyed. Each
observable member reserves one extra remote event, which carries subscribe and
unsubscribe up and emissions down.

Fixes two lifetime bugs found while building it. Remote instances are now
parented only after their handler is attached, so a listener watching for one to
appear can never catch it existing but not yet listening. PromiseFireServer,
PromiseInvokeServer and PromiseInvokeClient now register their maid before
attaching Finally; these promises settle synchronously once the remote exists,
so the old order let Finally fire against nothing and stranded one maid entry
per fire and per invoke for the lifetime of the remoting.

Claude-Session: https://claude.ai/code/session_01BJmghas6c44BmqTJ39QPDD
A missing workspace symlink makes a service Init throw inside the loader.
ServiceBag keeps going, so the bag comes up half-registered and a later
GetService fails a binder, leaving one realm's tie with no implementation. It
reads as a package bug and survives a clean checkout, because node_modules is
untracked. Also notes that --script-text is truncated at the first newline on
Windows while still reporting success.

Claude-Session: https://claude.ai/code/session_01BJmghas6c44BmqTJ39QPDD
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown

Test Results

Package Status Try it
@quenty/remoting ✅ Passed (133/133) (1.3s) Open | Play
@quenty/chatproviderservice ✅ Passed (3/3) (1.4s) Open | Play
@quenty/clipcharacters ✅ Passed (1/1) (918ms) Open | Play
@quenty/cmdrservice ✅ Passed (762ms) Open | Play
@quenty/gameconfig ✅ Passed (12/12) (1.6s) Open | Play
@quenty/gameproductservice ✅ Passed (80/80) (2.0s) Open | Play
@quenty/saveslot ✅ Passed (180/180) (8.9s) Open | Play
@quenty/secrets ✅ Passed (2/2) (1.1s) Open | Play
@quenty/settings ✅ Passed (14/14) (1.5s) Open | Play
@quenty/settings-inputkeymap ✅ Passed (1/1) (1.4s) Open | Play
@quenty/deathreport ✅ Passed (4/4) (935ms) Open | Play
@quenty/ik ✅ Passed (3/3) (1.0s) Open | Play
@quenty/permissionprovider ✅ Passed (68/68) (1.6s) Open | Play
@quenty/ragdoll ✅ Passed (8/8) (1.6s) Open | Play
@quenty/resetservice ✅ Passed (17/17) (1.3s) Open | Play
@quenty/roblox-api-dump ✅ Passed (32/33) (1.2s) Open | Play
@quenty/rogue-properties ✅ Passed (153/153) (2.4s) Open | Play
@quenty/rogue-humanoid ✅ Passed (1.3s) Open | Play
@quenty/soundgroup ✅ Passed (4/4) (1.0s) Open | Play
@quenty/streamingutils ✅ Passed (6/6) (1.1s) Open | Play
@quenty/teleportserviceutils ✅ Passed (139/139) (6.1s) Open | Play

21 tested, 21 passed, 0 failed in 57.2s · View logs

Deploy Results

Package Status Try it
@quenty/integration ✅ Deployed (v146) (2.0s) Open | Play

1 deployed, 1 passed, 0 failed in 2.7s · View logs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant