Repository navigation
fix-live: live production fixes for 54 (viewer AI refusal, ghost peers, guest auto-admit notice, report seams) - #448
Merged
Merged
Conversation
…reated
Viewers' creations stay local and their edits are dropped by every receiver, so
executeAiTool answered { created } for work nobody else would see (test flight T1).
Scene-changing tools now return a view-only refusal; list_scene and local
simulation playback still work.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sts Connection error - ICE held 'disconnected' past 5 s closes the conn ourselves, so a peer that died without closing its channel goes through the reconnect window instead of staying a ghost (test flight T5). - A redial answered 'peer-unavailable' is not toasted; three answers in a row end the window at once. The id is read from the end of the message (the old regex answered 'Could'). - Peer-level webrtc/disconnected noise right after a leave, drop or redial is logged, not toasted. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…etting shows on Connect - Every auto-admitted peer gives the host a toast AND a notification-history entry that keeps its buttons until answered: Remove (session-local door: roster row dropped, link closed, re-dials refused while the tab is open) and the provider's Turn off (test flight T14: a remembered 'Allow guests' admitted silently). - authProvider.admitNotice(peerId, cloudMeta) supplies the line + switch-off; cloudApi.setConnectBadge puts e.g. 'Public · guests join' on the Connect pill. - OPEN-CORE.md documents both seams. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A connected pill collapses to its chip, which is exactly when a host forgets a remembered 'guests join' setting; the badge was gated off there. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tems)
cloudApi.setPeerMenuItems([{id, label, run(peerId, {name})}]) appends up to 8
entries under Mute voice when a peer is right-clicked in Users; the cloud
plugin's 'Report…' rides it. Inert with no plugin.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… the host Plans review #5 (roadmap 49 follow-up): the last three get* requests off the cloudHooks ALWAYS_ALLOWED floor, so a cloud viewer's Explorer never filled in and a shared texture or big material preset stayed missing. Requests only; their replies stay gateable. A unit test now walks every get* the dispatcher answers; gettransport, getgame, getkitentities and getpatch are still off the floor and listed there for a separate look. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…physics The Add menu stamps standard primitives dynamic (mass 1), so a scene an AI built from boxes fell apart the moment Play started a sim (test flight T8). create_objects now writes static through setPhysicsFor (replicated, undoable) unless an object asks physics: 'dynamic' or a mass; the schema and set_physics description say so. The Add-menu default is unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…{keep})
showToast(message, actions, { keep: true }) (and cloudApi.toast) leaves the
buttons on the notification-history entry until one is pressed — the role offer
sat there as 'Accept?' with nothing to click. Plain action toasts are unchanged.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… 295) The plugin-items spread read muteMenu inside a closure, which svelte-check flagged; typing the $state fixes that and four older errors on the same menu. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…session Plans review #6 (R22 round 36 'known and left'): a localOnly deletion row carries the file's name, folder path and thumbnail, and the deleted log replicates whole. outboundManifest now withholds localOnly rows (both branches), and the merge keeps OUR localOnly rows when a peer's newer document wins, so the bin is not stranded; applyRemoteManifest compares without them so an otherwise-identical document still installs quietly under the sender's stamp. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… server' Measured on two Chromium peers with one renderer crashed: the server answers a dial to a vanished id only when the offer expires (~5 s), so three answers could not land inside the 15.5 s reconnect window and the crashed peer stayed ~27 s. A link WE closed for ICE silence (grace now 4 s) needs one answer; a channel that closed by itself still needs three. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… seen at ~9 s) ICE's own 'disconnected' took ~15 s after a peer's renderer crashed (and the base never pruned that peer at all: 90 s probe). getStats every 2 s: when consent requests keep going out and no response arrives for 7 s, the link is closed as silent, which runs the reconnect window. Crash probe on a local slot: pruned in 17.7 s when the host redials, 27.2 s when it is the higher id (the B5 window). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
F-1 viewer AI refusal + editor counterfactual; F-4 static by default, replicated, a dynamic one falls in a sim while the static one stays; the capability floor (viewer getproject/getasset answered, a mutation still gated); a private deletion never reaches the host and survives its newer manifest; F-5 badge, toast, history buttons, Turn off, Remove + re-dial refused; F-2 Accept from the bell; F-3 graceful leave and a crashed renderer (CDP Page.crash); the Users peer-menu plugin item. Local slot: ALL PASS. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
In main via 60-int: released in v1.44.0 (#476). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lane fix-live (roadmap 55 "Fixes for 54" + plans-review additions; owner yes 2026-10-24). Merges into the 60 union.
What changes
created(read-only tools such aslist_scene/control_simulationstill work).disconnected4 s closes; a getStats watch closes a link whose consent checks go unanswered 7 s; a redial answered "peer-unavailable" is not toasted; leave/drop-time WebRTC noise is logged, not toasted ("Connection error" no longer shows on a normal leave). Fixes the unavailable-id regex that matched "Could".authProvider.admitNoticeandcloudApi.setConnectBadge("Public · guests join", also on the connected chip).cloudApi.setPeerMenuItems(plugin entries in the Users peer menu); typed mute menu.getproject/getasset/getmatpresetjoinALWAYS_ALLOWED(viewers' Explorer fills in; replies stay gateable).create_objectsis static unless the request asks for physics (physics: 'dynamic'or amass); the Add menu default is unchanged.showToast(msg, actions, {keep: true})/cloudApi.toastkeep the buttons on the Notifications entry (role offers stay answerable).outboundManifest; a merge keeps our localOnly rows when a peer's newer document wins.Verification
npm run buildrc 0 on the tip; svelte-check 297/39 (baseline 299 — improved, not--updated here, int may ratchet).tests/e2e/fix-live.test.cjs(2–3 peers, every fix): ALL PASS. Crash probe A/B: base never pruned a crashed peer (still in Users at 90 s); this branch prunes in 17.7–21.7 s when the host has the lower id, 27–31.5 s when higher (the remainder is the B5 reconnect window).scene-rooms-matrixon the union base before merging.Cloud counterpart: theprototype-app/cloud
fix-live(reports for rooms / peers, plugin UI). It is inert on an engine without these seams, and this branch is inert without the plugin.🤖 Generated with Claude Code