The VFS only sets up file watches via read() and read_dir(), not
metadata(). When git filtering caused snapshot_from_vfs to return
early for $path directories, read_dir was never called, so no file
watch was established. This meant file modifications never generated
VFS events and were silently ignored until the server was restarted.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two issues prevented --git-since from working correctly during live sync:
1. Server: File changes weren't detected because git-filtered project nodes
had empty relevant_paths, so the change processor couldn't map VFS events
back to tree instances. Fixed by registering $path directories and the
project folder in relevant_paths even when filtered.
2. Plugin: When a previously-filtered file was first acknowledged, it appeared
as an ADD patch. The plugin created a new instance instead of adopting the
existing one in Studio, causing duplicates. Fixed by checking for untracked
children with matching Name+ClassName before calling Instance.new.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add new GitFilter struct for tracking files changed since a Git reference
- Only sync changed (added/deleted/modified) files to Roblox Studio
- Files remain acknowledged once synced, even if content is reverted
- Add enhanced logging for debugging sync issues
- Force acknowledge project structure to prevent 'Cannot sync a model as a place' errors
Replaces `serde_json` parsing with `jsonc-parser` throughout the
codebase, enabling support for **comments** and **trailing commas** in
all JSON files including `.project.json`, `.model.json`, and
`.meta.json` files.
MSRV bumps from `1.83.0` to `1.88.0` in order to
use the jsonc_parser dependency.