Sync Doctor — Changelog
Esta página aún no está disponible en tu idioma.
All notable changes to this pack are recorded here.
The format follows Keep a Changelog and the pack follows Semantic Versioning.
The version below must always match the one declared in Editor/AssemblyInfo.cs — that is
the version the FOS Hub shows, and the one the Hub compares against the installed Core.
[1.2.1] — 2026-08-22
Section titled “[1.2.1] — 2026-08-22”- The manual is now delivered in German, Spanish and French as well as English. The audit window already spoke four languages; the documentation that explains its findings did not.
Nothing yet.
1.2.0 — 2026-08-21
Section titled “1.2.0 — 2026-08-21”- Several Udon behaviours on one GameObject that disagree on the sync mode. VRChat
applies a single mode per object, so the others inherit it whatever their own script
declares — a display set to
NoVariableSyncnext to an authority set toManualquietly degrades that authority, and the only sign is a discreet inspector warning. This is the cause behind “the stored mode contradicts the script”: without it you repair the stored mode, save, and it returns at the next recompile with nothing to explain why. Reported as an error when one of the behaviours carries synchronised state, and it names every behaviour involved along with its declared mode.
- A behaviour built on
FOSBehaviourwas reported as never serialising. The audit looked forRequestSerialization()by name, while the Core’sFOSSync()andFOSTakeOwnershipAndSync()call it on your behalf — so the recommended way of serialising in this line was flagged as the mistake of not serialising at all. Both now count, in that check and in the one watching for a serialisation requested fromStart(), which missed them for the same reason and stayed silent when it should have warned. - The Fix button appeared on findings it could not fix. It showed on any finding pointing at a component in the scene, while only one of them carries a mode to reapply — clicking it elsewhere would have written the default mode, breaking the very thing the button claims to repair. Only the contradictory sync mode offers it now.
[1.1.0] — 2026-08-21
Section titled “[1.1.0] — 2026-08-21”- A component whose stored sync mode contradicts the one its script declares. What runs is the stored value, and the two drift apart when a component is replaced or duplicated — while the inspector goes on showing the declared mode. Manual data stored as continuous goes over the ~200 byte cap and the behaviour stops synchronising entirely, with no message. It is the only finding the window can repair, on a Fix button.
1.0.0 — 2026-08-20
Section titled “1.0.0 — 2026-08-20”First release. Free. Requires FOS Essentials Core 1.1.0.
Audit window — FOS Essentials > FOS Sync Doctor > Audit
- Synchronised variables with no
OnDeserialization, the most common late-joiner bug. A field carrying[FieldChangeCallback]is not reported: that pattern already works. RequestSerialization()called fromStart(), which VRChat documents as not reaching players who join later.- Manual sync that never calls
RequestSerialization(), so nothing is ever sent. RequestSerialization()called with no ownership check nearby, where it silently does nothing for anyone who is not the owner.- Continuous sync carrying an array or a string, over the ~200 byte per-behaviour cap.
- No
[UdonBehaviourSyncMode]declared, reported as a note.
Scope mistakes — code written as if it ran on one machine
- A network event broadcast to every client whose body acts on the local player. The local player is a different one on each machine, so the action hits everybody — the teleport meant for one person that moves the whole instance.
OnPlayerTriggerEnterand the other player events used without checkingplayer.isLocal. They fire on every client, for every player entering.SendCustomNetworkEventtargeting a method whose name starts with an underscore, which VRChat refuses to run remotely. The call leaves and nothing happens.
Documentation
- Every finding carries a Documentation button opening the online guide directly at the section explaining that case.
Reliability
- Findings are split between certain — read from the compiled types — and probable, deduced from the source text because a method body cannot be inspected otherwise. The window tags the probable ones rather than presenting every finding as a verdict.
Scope
- The FOS packs and the SDK sample scripts are skipped by default; a toggle includes the FOS packs.
- Every finding links to its script.
- Interface translated into English, French, Spanish and German.
- Editor code only. No component, no prefab, no runtime cost, nothing added to the world.
The pack therefore ships without a
Runtimeassembly or aPrefabsfolder. - The audit reads scripts, plus the sync mode stored on the components of the open scene. Wiring stays outside what it can see: a correct behaviour pointed at the wrong object still looks fine to it.
