Commit graph

567 commits

Author SHA1 Message Date
Joe
ca2a938902 Enhance audit documentation and address critical Ref property issues
- Updated the audit guide to clarify the workflow and prerequisites for conducting a production-grade sync feature audit.
- Introduced a new plan file detailing fixes for critical issues identified in the two-way sync audit, including missing instance maps and stale paths after renames.
- Enhanced `ServeSession.lua` to correctly pass the instance map in patch updates, ensuring accurate handling of unresolved Ref properties.
- Implemented various fixes in `change_processor.rs` and `rojo_ref.rs` to address critical bugs related to Ref path handling and instance renaming.
- Added tests to verify the correct behavior of Ref properties and ensure robustness against edge cases.

These changes improve the reliability of the synchronization system and enhance the clarity of the audit process.
2026-02-14 12:53:28 -06:00
Joe
8f0df692d3 Enhance InstanceMap and ChangeBatcher for unresolved Ref properties
- Added `onInstanceInserted` callback to `InstanceMap` to notify when new instances are tracked, allowing `ChangeBatcher` to resolve pending unresolved Ref properties.
- Updated `createPatchSet` and `encodePatchUpdate` to support handling unresolved Ref properties, deferring their resolution until the target instance is available.
- Implemented logic in `ChangeBatcher` to manage pending unresolved Ref properties and re-queue them when the target instance is inserted.
- Introduced new tests to verify behavior with ambiguous paths and ensure stability when handling duplicate-named siblings.

These changes improve the handling of Ref properties in the system, enhancing synchronization reliability and robustness.
2026-02-14 12:18:58 -06:00
Joe
4070b48308 Add audit documentation and enhance two-way sync handling
- Introduced a comprehensive audit guide for the production-grade sync feature, detailing the evaluation criteria for round-trip identity and code quality.
- Added a new plan for auditing the two-way sync Ref property feature, outlining specific tasks and expected behaviors.
- Updated `ServeSession.lua` to include the instance map in patch updates, ensuring accurate property encoding.
- Enhanced `encodeInstance.lua` to prevent encoding Ref properties during instance addition, delegating this to the patch update process.
- Implemented regression tests to highlight known limitations in Ref handling, ensuring better coverage and identification of existing bugs.

These changes improve the clarity of the sync feature's audit process and strengthen the handling of Ref properties in the system.
2026-02-14 12:08:12 -06:00
Joe
c181172460 Refactor test cases and improve snapshot handling
- Simplified the formatting of function calls in `encodePatchUpdate.spec.lua` for better readability.
- Added multiple new snapshot files to enhance end-to-end testing for reference path changes, including scenarios for adding, removing, and handling nonexistent attributes.
- Updated test cases in `apply.rs`, `compute.rs`, and `api.rs` to ensure consistent handling of reference properties and improve clarity in property updates.

These changes enhance the maintainability of the test suite and improve the robustness of snapshot testing.
2026-02-14 11:36:48 -06:00
Joe
bbd9c0e0fa test fixtures 2026-02-14 11:04:28 -06:00
Joe
bf65d8bfa8 initial work 2026-02-14 10:56:25 -06:00
Joe
4c6de0d174 8.2.0
- Fix tree drift from echo suppression eating VFS events for new instances
- Add periodic tree reconciliation for lost OS watcher events
- Add /api/validate-tree endpoint and WatcherCriticalError channel
- VFS staleness tests, chaos fuzzer, and tree freshness assertions
- Update protocol version to 6

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 02:29:46 -06:00
Joe
8462c06b82 Enhance VFS initialization and error handling
- Introduced a new method `new_default_with_errors` in the VFS implementation to create a VFS instance with a critical error receiver for monitoring watcher health.
- Updated the `ServeSession` constructor to accept an optional critical error receiver, allowing for better error management during session initialization.
- Adjusted various calls to `ServeSession::new` across the codebase to accommodate the new parameter, ensuring consistent error handling.
- Improved logging in the API context and serve session files for better clarity during server operations.

These changes enhance the robustness of the VFS and session management, providing better tools for error detection and handling.
2026-02-11 20:13:02 -06:00
Joe
316d7ea70e Update logging levels in Rojo plugin and enhance test plans
- Promoted sync-related logging from Debug/Trace to Info level across multiple files, ensuring visibility of changes in the Studio output console.
- Added a new plan for expanding the connected mode test suite to cover multi-step scenarios and round-trip identity verification.
- Introduced a plan to fix stale tree desynchronization by implementing a validation mechanism on plugin connection.
- Created a plan to bump sync logging to Info level, detailing todos for various components in the plugin.

This update improves the clarity of logs and enhances testing coverage for connected mode scenarios.
2026-02-11 17:10:35 -06:00
Joe
737b3782dd 8.1.0
- Overhaul filename handling with slugify for robust round-trip fidelity
- Refactor syncback instance processing, metadata, and deduplication logic
- Add option to forget prior info for place in reminder notification
- Improve sourcemap path handling with pathdiff
- Use rbx_cookie for Roblox auth cookie retrieval
- Add VS Code extension build steps to CI and release workflows
- Update rbx-dom and vscode-rojo submodules

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 02:10:23 -06:00
boatbomber
095e78dff2 Add option to forget prior info for place in reminder notif (#1215) 2026-02-10 21:43:29 -06:00
Joe
2ff5c3936c Implement fixes and enhancements from audit pass 2
- Introduced a new plan addressing critical bugs, correctness issues, and refactors identified during the audit, including improvements to metadata handling and slugification logic.
- Replaced inline removal logic in `handle_api_write` with a new `remove_instance_at_path` method to ensure correct deletion of instances.
- Updated pre-seeding logic in `dir.rs` and `project.rs` to derive deduplication keys from actual filesystem paths instead of slugified names.
- Enhanced rename handling in `change_processor.rs` to prevent collisions by deduplicating names against existing siblings.
- Added tests for various scenarios, including handling of forbidden characters and ensuring correct deduplication behavior.
- Refactored child iteration in `dir.rs` and `project.rs` to sort children alphabetically for deterministic deduplication ordering.
2026-02-10 21:35:26 -06:00
Joe
181a003ad2 Improves sourcemap path handling with pathdiff 2026-02-09 23:31:44 -06:00
Joe
6f4a279254 Enhance session management in App:startSession
- Added a check to end any existing session before starting a new one to prevent overlapping sessions, particularly in one-shot mode.
- Implemented a safety timeout for one-shot sync to force disconnect if the session does not end within 30 seconds.
2026-02-09 23:09:55 -06:00
Joe
cec2c9f26e 8.0.3
- Bump toolchain deps: selene 0.30.0, stylua 2.3.1
- Add luau and luau-lsp to rokit.toml

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 18:29:41 -06:00
Joe
5f2d30d75a 8.0.2
- Update vscode-rojo extension submodule
- Bump dependencies (fs-err, json5, ryu, unicode-ident, zmij)
- Remove self-referencing atlas entry from rokit.toml

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 17:39:11 -06:00
Joe
ae25a27633 Bump version to 8.0.1
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 16:33:30 -06:00
Joe
9b832c4637 Complete implementation of Git-style change metadata and diff utilities
- Finalized the `ChangeMetadata` module to compute structured change metadata, replacing inline calculations in `PatchTree`.
- Introduced `DiffUtil` for accurate line difference calculations using the Myers algorithm, ensuring consistency with Git's behavior.
- Updated `DomLabel` to display git-style change indicators, including added and removed line counts, with hover tooltips for detailed information.
- Comprehensive tests for `DiffUtil` have been added to validate functionality across various scenarios.
- Removed the obsolete `WhitespaceUtil` as its functionality is now integrated into the new modules.
2026-02-08 16:12:40 -06:00
Joe
dd57bad374 Refactor subtree highlight management in DomLabel and PatchVisualizer components
- Simplified the handling of subtree highlights by replacing the previous state management with a binding approach.
- Updated the SelectionOption component to derive hover effects directly from the new binding.
- Removed unnecessary props related to subtree highlighting from SelectionRadio, streamlining the component structure.
2026-02-07 19:15:53 -06:00
Joe
76d4e6aff0 Refactor subtree highlight handling in PatchVisualizer and DomLabel components
- Replaced subtreeHighlightBinding with subtreeHighlightInfo for improved clarity and functionality.
- Updated transparency logic in SelectionOption to utilize the new subtree highlight structure.
- Adjusted state management in PatchVisualizer to accommodate the new highlight callback mechanism.
2026-02-07 18:48:41 -06:00
Joe
7a40839f91 Fix internal reference in ServeSession to reflect Atlas sync operation 2026-02-07 14:14:43 -06:00
Joe
3cb9e16889 Update Atlas to version 8.0.0
- Bumped version from 7.7.0-rc.2 to 8.0.0 across all relevant files.
- Updated repository links to reflect the new UserGeneratedLLC branding.
- Enhanced CHANGELOG with new features and fixes for the 8.0.0 release.
- Updated plugin version and internal references to align with the new branding.
- Modified dependencies in Cargo files to use the latest version of Atlas.
2026-02-07 13:52:45 -06:00
Joe
50b9e18514 Refactor and rebrand Rojo to Atlas
- Renamed the project from Rojo to Atlas, updating all relevant files, scripts, and documentation to reflect the new branding.
- Bumped version to 7.7.0-rc.2 and updated protocol version from 5 to 6.
- Modified installation scripts and CI workflows to use the new binary name and paths.
- Adjusted plugin settings and internal identifiers to prevent conflicts with the original Rojo.
- Enhanced session management and API response handling to support the new server fork identifier.
- Updated project templates and README files to guide users on using Atlas.
2026-02-07 13:21:52 -06:00
Joe
0e263789b0 Enhance session management and UI state handling
- Added checks to handle session disconnections during confirmation in ServeSession, preventing further actions on a disconnected session.
- Updated App:startSession to manage UI state in one-shot sync mode, ensuring a loading state is displayed instead of a connected page.
- Implemented safety measures in App:endSession to reset UI state if the session reference is cleared, addressing potential race conditions.
2026-02-07 12:41:13 -06:00
Joe
edfe15a143 Add vscode-rojo submodule and update schemas for Atlas rebranding
- Added the vscode-rojo submodule to the project, linking to the UserGeneratedLLC repository.
- Created a new plan for syncing vscode-rojo schemas, detailing updates to project, meta, and model schemas to align with the Rojo fork and rebrand as "Atlas".
- Enhanced the Theme and DomLabel components to support subtree highlighting, improving user interaction in the PatchVisualizer.
- Updated the PatchVisualizer to manage subtree highlight state and ancestor IDs for better visual feedback during selection.
2026-02-07 11:56:14 -06:00
Joe
1ad54fb0c4 Enhance CI pipeline documentation for Rojo and rbx-dom
- Updated the `/ci` command documentation to include detailed steps for running the CI pipeline for both Rojo and rbx-dom.
- Added specific instructions for auto-fixing formatting, linting, building, and testing within the rbx-dom submodule.
- Improved reporting structure to summarize results for both Rojo and rbx-dom, ensuring clarity on formatting, linting, and test outcomes.
2026-02-06 22:36:50 -06:00
Joe
4f3e66bec9 Add tests for PatchSet and ServeSession functionality
- Introduced comprehensive tests for the `PatchSet` module, covering methods such as `hasRemoves`, `hasAdditions`, `hasUpdates`, and various ID and instance checks.
- Added a new test suite for `ServeSession`, focusing on WebSocket message handling and confirmation behavior, ensuring correct merging and application of patches.
- Implemented edge case tests in `ChangeBatcher` to verify data integrity during rapid changes and instance removals.
- Enhanced `applyPatch` tests to handle scenarios involving missing instances and ignored class names, ensuring robust patch application logic.
2026-02-06 22:23:14 -06:00
Joe
da320e36eb Enhance ancestry node handling in PatchTree
- Added logic to create a placeholder node when an ancestor object is missing from both instanceMap and patch.added, allowing the ancestry chain to maintain integrity during rapid changes.
- Improved logging to provide context when a placeholder node is created, enhancing debugging capabilities.
2026-02-04 14:42:34 -06:00
Joe
69f35c1c05 Enhance PatchVisualizer component for improved height management
- Updated `DomLabel` to synchronize element height immediately when parent re-renders, preventing incorrect positioning by the VirtualScroller.
- Refactored `PatchVisualizer` to store height bindings by node ID, ensuring persistent bindings across re-renders and eliminating visual glitches for expanded rows.
- Implemented cleanup logic for unused node height bindings, optimizing memory usage and performance.
2026-02-02 18:25:49 -06:00
Joe
d99e918e55 Enhance TextInput and ConfirmingPage layout
- Added textXAlignment property to TextInput for customizable text alignment.
- Updated ConfirmingPage to set textXAlignment to Left and adjusted size and position of the TextInput, improving layout and user experience.
2026-02-02 17:55:12 -06:00
Joe
e124d8a227 Enhance TextInput and filtering functionality in ConfirmingPage
- Added support for onChanged event in TextInput to handle real-time text updates.
- Updated ConfirmingPage to utilize onChanged for filter input, improving user interaction.
- Refactored wildcard matching function in PatchVisualizer to support case-insensitive substring matching, enhancing filtering capabilities.
2026-02-02 17:51:52 -06:00
Joe
c092bb975c Add filter functionality to PatchVisualizer and ConfirmingPage
- Implemented a case-insensitive wildcard matching function in PatchVisualizer to filter visible nodes based on user input.
- Enhanced the ConfirmingPage to include a TextInput for filtering, allowing users to search for specific nodes in the PatchVisualizer.
- Updated the rendering logic to display appropriate messages based on the filter state, improving user experience and clarity.
2026-02-02 15:34:08 -06:00
Joe
09a0f95d53 Refactor stress test files to enhance clarity and performance
- Removed unnecessary references to LargeTreeGenerator in multiple stress test files, streamlining the code.
- Simplified loop iterations by replacing index variables with underscores for unused values, improving readability.
- Updated the diff logic in the reify and diff tests to eliminate unused patch variables, enhancing performance and clarity.
- Ensured consistent formatting across stress test files for better maintainability.
2026-02-01 22:14:59 -06:00
Joe
d513ab16c0 Refactor stress test files for improved readability and functionality
- Simplified the reify stress test by consolidating the reifyInstance call into a single line for better clarity.
- Added a cleanup function in the stressPatterns test to manage knownIds, ensuring that IDs of destroyed instances are removed.
- Enhanced the logic for adding, removing, and updating instances in the stressPatterns test to verify the existence of parent and child instances before operations, improving test robustness.
- Reformatted code in LargeTreeGenerator and MockApiContext for consistency and readability.
2026-02-01 22:10:18 -06:00
Joe
01110fc916 Complete comprehensive plugin tests and add new stress test files
- Marked all todos in the comprehensive_plugin_tests plan as completed, indicating that all planned tests have been implemented.
- Introduced new stress test files for InstanceMap, PatchSet, and encoding functionalities, covering various scenarios including large batch operations, conflict resolution, and deep/wide hierarchies.
- Enhanced the testing framework to ensure thorough validation of plugin functionalities and edge cases.
2026-02-01 22:05:27 -06:00
Joe
bb423312aa Refine testing philosophy and success criteria in comprehensive_plugin_tests plan
- Updated the testing philosophy to emphasize investigation of failing tests, clarifying that failures may indicate either code bugs or invalid tests.
- Revised success criteria to focus on analyzing failing tests rather than skipping them, ensuring a thorough understanding of test outcomes.
- Enhanced documentation on failure triage and anti-patterns to avoid, promoting a more robust approach to quality assurance in testing.
2026-02-01 21:13:52 -06:00
Joe
76e4bc4f25 Add Int64 conversion functions to EncodedValue.lua and enhance script middleware selection in project.rs
- Implemented int64FromPod and int64ToPod functions for converting between Lua numbers and msgpack Int64 representation, addressing precision concerns for large integers.
- Updated the middleware_for_script function to determine the correct script directory based on the RunContext property, improving middleware selection for Script instances.
- Adjusted syncback logic to utilize the new middleware selection for Scripts, ensuring accurate handling of different script types during project synchronization.
2026-02-01 20:51:13 -06:00
Joe
0eb135ee15 Enhance service visibility configuration in snapshot tests
- Added `ignoreHiddenServices: true` and a comprehensive list of `visibleServices` to multiple snapshot test files to improve service visibility management during testing.
- Refactored logging in the `diff.lua` file to streamline the trace output for hidden services, enhancing clarity in the sync process.
2026-02-01 18:28:31 -06:00
Joe
b368eb2401 Add CI pipeline documentation and enhance syncback architecture
- Introduced a new CI pipeline documentation file outlining steps for auto-fixing formatting, running linters, building, and testing.
- Documented the Rojo syncback architecture, detailing improvements to prevent duplicate file creation and format mismatches.
- Updated syncback logic to ensure existing instances are updated instead of creating duplicates, enhancing project file management.
- Added tests for encoding instances and handling nested children to improve reliability in syncback operations.
2026-02-01 18:18:31 -06:00
Joe
edc09741bf Update plugin references from Rojo to Atlas
- Changed all instances of "Rojo" to "Atlas" in error messages, UI titles, and connection actions for consistent branding.
- Updated the sound player widget and patch history recording to reflect the new name.
- Enhanced logging in the hydration process to provide better diagnostics for missing virtual instances.
2026-02-01 11:57:00 -06:00
Joe
9ab1369444 Update asset IDs and improve header component styling
- Changed asset IDs for the logo and plugin button to new values for updated branding.
- Updated the header component to use a fixed white color for the logo and adjusted its size for better visibility.
- Modified the fullscreen notification component to reflect the same logo styling changes.
- Updated the brand color in the theme for a consistent visual identity.
2026-02-01 11:51:49 -06:00
Joe
60518c2ad6 Update asset IDs for logo and plugin button in Assets.lua
- Changed the asset ID for the logo to a new value for updated branding.
- Updated the plugin button asset ID to reflect the latest design changes.
2026-02-01 11:21:01 -06:00
Joe
5197ca720d Refactor comment formatting in DomLabel component
- Cleaned up comment formatting in the DomLabel component for improved readability and consistency.
- Ensured that the button remains active for input events, maintaining user interaction functionality.
2026-02-01 10:52:45 -06:00
Joe
df70dc1ff4 Refactor transparency logic and improve button interaction in PatchVisualizer
- Simplified transparency handling in the SelectionOption component to enhance hover effects for parent-only and normal nodes.
- Updated the DomLabel component to ensure the button is active for input events, improving user interaction.
- Cleaned up comments for clarity and maintainability.
2026-02-01 10:42:02 -06:00
Joe
b2ce199a37 Update dependencies and improve build script
- Updated `embed-resource` version in `Cargo.toml` and `Cargo.lock` to 3.0.6 for enhanced functionality.
- Upgraded several dependencies including `dirs`, `dirs-sys`, `float-cmp`, and `hashbrown` to their latest versions for better performance and security.
- Modified the build script to handle resource compilation more gracefully by using `embed_resource::NONE`.
2026-02-01 10:24:47 -06:00
Joe
a8752b6b8d Refactor DomLabel and SelectionOption components for improved readability
- Simplified conditional logic for caret visibility in the SelectionOption component.
- Enhanced the rendering logic in the ConfirmingPage to improve clarity and maintainability.
- Updated the Abort button rendering to use a more concise syntax for conditional display.
2026-02-01 10:10:38 -06:00
Joe
af65056c44 Update default settings and enhance ConfirmingPage logic
- Changed default settings to enable two-way and one-shot sync, disable notifications and sync fallback, and adjust confirmation behavior.
- Improved ConfirmingPage to conditionally display the Abort button and update the Accept button text based on the presence of changes in the patch tree.
- Updated logging level in SyncbackStats to warn for better visibility on debug logging hints.
2026-02-01 10:06:34 -06:00
Joe
6ed96f1f7e Enhance SelectionOption component with hover state and caret visibility logic
- Refactored the `SelectionOption` to be a Roact component that tracks hover state.
- Added logic to determine caret visibility based on node properties (parent-only, has children, and selection state).
- Updated background and text transparency based on hover state for improved UX.
- Adjusted event handling for mouse enter, mouse leave, and click actions to accommodate new behavior.
- Modified `SelectionRadio` to pass necessary props to `SelectionOption` for consistent behavior.
2026-02-01 09:51:48 -06:00
Joe
0e5e809894 UX update 2026-02-01 07:58:06 -06:00
Joe
3e6a50ce4b syncback 2026-01-31 13:22:29 -06:00