Commit graph

673 commits

Author SHA1 Message Date
Joe
4564ea242f Enhance syncback functionality with sourcemap generation
- Introduced a new function `write_sourcemap_from_syncback` to generate sourcemaps directly from in-memory data, improving performance by eliminating the need for file reads during sourcemap creation.
- Updated the `syncback_loop` to return a `SyncbackResult` struct, encapsulating filesystem operations and instance paths for better post-processing.
- Modified the `SyncbackCommand` to utilize the new sourcemap generation method, allowing for parallel execution of file writes and sourcemap creation.

These changes streamline the syncback process and enhance the efficiency of sourcemap generation.
2026-02-15 15:11:37 -06:00
Joe
484b190464 Refactor ServeSession to support oneshot sessions
- Updated the ServeSession struct to allow for optional ChangeProcessor and related fields, enabling lightweight oneshot sessions that do not require live filesystem monitoring.
- Modified the new and new_oneshot methods to initialize sessions accordingly, improving flexibility for commands that only need a snapshot of the tree.
- Adjusted related CLI commands to utilize the new oneshot session functionality, enhancing performance for operations like plugin installation and syncback.

These changes streamline session management and improve the efficiency of operations that do not require continuous updates.
2026-02-15 14:43:19 -06:00
Joe
431b1fb5a5 Remove gitconfig template and implement git configuration directly in InitCommand
- Deleted the gitconfig.txt template file from the project templates.
- Updated the InitCommand to set git configuration options directly using the `git config` command, enhancing the initialization process by eliminating the need for a separate configuration file.

These changes streamline the git initialization process and improve the overall setup experience.
2026-02-15 14:23:39 -06:00
Joe
d05ad92c84 Enhance path handling in ChangeProcessor and snapshot_project
- Canonicalized the project_root in ChangeProcessor to ensure consistent path comparisons on Windows, addressing issues with the \\?\ prefix.
- Updated snapshot_project to push canonicalized paths to relevant_paths, improving path accuracy in project snapshots.

These changes enhance the reliability of path handling in the project and improve overall consistency in file operations.
2026-02-15 02:54:07 -06:00
Joe
3bf5951b75 Add .gitignore for logs and skip directory WRITE events on Windows
- Created a new .gitignore file to exclude .txt files in the logs directory.
- Updated the `ChangeProcessor` to skip directory-level WRITE events on Windows, preventing stale data issues in the VFS cache and ensuring correct patch generation.

These changes enhance the handling of file events and improve the organization of log files.
2026-02-14 18:23:11 -06:00
Joe
e617e8fcda Enhance audit documentation and improve Ref property handling
- Added a detailed section in the audit documentation outlining the sync system layout for both CLI syncback and two-way sync pipelines, including file mappings and processing steps.
- Updated `init.meta.json5` to include the `Rojo_Ref_PrimaryPart` attribute for better reference tracking.
- Improved the `ChangeProcessor` to populate the `RefPathIndex` from existing meta/model files at startup, ensuring accurate handling of pre-existing `Rojo_Ref_*` attributes during renames.
- Refactored the `remove_file` method in `RefPathIndex` to `remove_all_for_file`, enhancing the re-indexing process after attribute removals.
- Added tests to verify the correct behavior of the `RefPathIndex` and ensure robustness against edge cases.

These changes improve the clarity of the audit process and enhance the reliability of reference path management in the synchronization system.
2026-02-14 15:55:24 -06:00
Joe
075cca4c96 Add audit plan for Ref property fixes and enhance CI test execution
- Introduced a new audit plan detailing fixes for four issues identified in the second audit of two-way sync Ref properties, including stale comments, slugified name mismatches, immediate ID assignments, and performance optimizations.
- Updated CI scripts to run Rust tests with increased parallelism by specifying `--test-threads=16`, improving test execution efficiency.
- Enhanced error handling in `update_ref_paths_in_file` to provide clearer context on failures during file reading and JSON parsing.

These changes improve the documentation for Ref property audits and optimize the CI testing process.
2026-02-14 13:52:59 -06:00
Joe
faa12dc573 Implement RefPathIndex for efficient handling of Rojo_Ref_* attributes
- Introduced the `RefPathIndex` structure to map `Rojo_Ref_*` attribute values to their corresponding meta/model file paths, enabling O(affected_files) lookups during instance renaming.
- Updated `ChangeProcessor`, `ServeSession`, and `ApiService` to utilize the new index for managing reference paths, improving performance and reliability during rename operations.
- Enhanced the `update_ref_paths_after_rename` function to leverage the index for efficient file updates, reducing the need for full tree scans.
- Added comprehensive tests for `RefPathIndex` to ensure correct functionality and robustness against edge cases.

These changes significantly enhance the efficiency of reference path management in the synchronization system.
2026-02-14 13:28:29 -06:00
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
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
2e49763b69 Update snapshot files and enhance VFS event handling
- Updated snapshot files to reflect changes in IDs for consistency across connected mode tests.
- Improved VFS event processing in ChangeProcessor to handle multiple events more efficiently, ensuring consistent message structure across platforms.
- Added merging functionality for patch sets to consolidate changes from various VFS events, enhancing synchronization reliability.

These changes improve the accuracy of test snapshots and optimize VFS event management.
2026-02-12 02:13:58 -06:00
Joe
b1789a37be Refactor VFS event handling in ChangeProcessor
- Removed redundant logic for draining and discarding stale VFS events after reconciliation, streamlining the event processing flow.
- Simplified the handling of queued VFS events to improve performance and reduce potential backlog issues.

These changes enhance the efficiency of the ChangeProcessor by optimizing VFS event management.
2026-02-12 01:44:39 -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
ec7f91017b Refactor API file handling and improve echo suppression documentation
- Updated the `write_init_meta_json` method to include a new parameter for better control over initialization behavior.
- Removed unnecessary calls to `suppress_path` and `suppress_path_remove` in various sections to streamline file handling.
- Revised comments in the `two_way_sync` tests to clarify the behavior of echo suppression during API interactions, ensuring accurate expectations for VFS event handling.

These changes enhance the clarity and efficiency of the API service and improve the documentation for testing echo suppression.
2026-02-11 19:08:26 -06:00
Joe
e2f515d8eb Update dependencies and enhance VFS staleness testing
- Updated several dependencies in Cargo.lock, including `clap`, `env_logger`, and `rand`, to their latest versions for improved functionality and security.
- Introduced a new API endpoint `/api/validate-tree` for checking tree freshness without applying corrections, enhancing the validation process.
- Added a `TreeFreshnessReport` struct to encapsulate the results of the tree freshness check, providing detailed insights into discrepancies.
- Completed multiple todos in the VFS staleness test plan, ensuring comprehensive coverage for various scenarios and improving the robustness of the testing framework.

These changes enhance the project's dependency management and testing capabilities, ensuring better alignment with the latest implementation standards.
2026-02-11 18:50:43 -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
2cc1726975 Add git configuration and update gitignore for project template
- Introduced a new gitconfig.txt file with core settings for Git.
- Updated gitignore.txt to include entries for IDEs, environment files, and atlas executable.
- Modified init.rs to handle the new gitconfig file during project initialization.
2026-02-11 16:09:28 -06:00
Joe
f037ec3b7c Refactor filename handling in ApiService to streamline slugification logic
- Updated the mapping of entries to directly return lowercase slugified names, improving clarity and efficiency.
- Enhanced test stability by adding a conditional ignore for flaky tests on macOS related to rapid rename and write operations.
2026-02-11 02:06:07 -06:00
Joe
bb266789c0 Add audit plan for slugify branch pass 3 and implement critical fixes
- Introduced a comprehensive audit plan for the slugify branch, detailing findings from a holistic review of 110 files, including 1 critical bug and 2 correctness issues.
- Completed todos addressing model JSON renaming, syncback updates, and test enhancements for roundtrip fidelity.
- Added tests for reserved names and ensured correct handling of slugified instances, preserving compound extensions in model files.
- Refactored change processing logic to correctly manage the `name` field in model files, enhancing metadata handling and ensuring compliance with round-trip identity standards.
2026-02-11 01:31:09 -06:00
Joe
434a3c458a Refactor CI documentation and improve change processing logic
- Updated CI documentation to enforce running the full suite without skipping the rbx-dom section, clarifying the execution steps.
- Refactored `change_processor.rs` for improved readability by enhancing formatting and structure in name deduplication logic.
- Cleaned up imports in `project.rs` and improved formatting in `file_names.rs` to enhance code clarity and maintainability.
- Adjusted test assertions in `two_way_sync.rs` for better readability and consistency in checking file existence after renaming operations.
2026-02-10 21:44: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
baf05dcb3d Update slugify branch audit plan and implement fixes for identified issues
- Marked all todos in the slugify branch audit plan as completed, confirming the successful verification of core invariants and sync processes.
- Introduced a new plan to address critical bugs, correctness issues, and refactors identified during the audit, including enhancements to metadata handling and slugification logic.
- Added tests to ensure proper handling of filenames with forbidden characters and deduplication of instances with colliding names.
- Refactored metadata operations to improve clarity and maintainability, consolidating logic for reading and writing the `name` field in `.meta.json5` files.
2026-02-10 20:18:33 -06:00
Joe
917949edc6 Add bare_slug_from_filename method for improved filename processing
- Introduced a new method `bare_slug_from_filename` to extract the bare slug from filenames by stripping known extensions and script suffixes, enhancing slugification accuracy.
- Updated comments to clarify the logic behind slug extraction, ensuring better understanding of the filename processing flow.
- Refactored existing code to utilize the new method for improved readability and maintainability in slug deduplication during directory processing.
2026-02-10 19:15:58 -06:00
Joe
085e1ab3f5 Refactor change processing and metadata handling for improved clarity
- Removed the `dedup_against_dir` method from `JobThreadContext`, simplifying the slug deduplication logic during file operations.
- Streamlined the slugification process by directly assigning the slugified name without intermediate variables, enhancing readability.
- Consolidated metadata path handling in `ApiService`, improving code organization and reducing redundancy in path construction.
- Updated comments for better understanding of the changes made to slugification and metadata processing.
2026-02-10 19:04:47 -06:00
Joe
7d47fe73f6 Enhance slug deduplication and metadata handling in syncback process
- Introduced a new method `dedup_against_dir` to deduplicate slugified names against existing entries in a parent directory, improving collision handling during file operations.
- Updated the `syncback_added_instance` method to utilize sibling slug sets, ensuring new instances do not overwrite existing files or directories.
- Refactored `strip_middleware_extension` to be publicly accessible for broader use in deduplication logic.
- Improved comments and code organization for better clarity in the slugification and deduplication processes.
2026-02-10 18:09:53 -06:00
Joe
f38c1f1311 Refactor metadata name handling for improved clarity
- Updated comments in `json_model.rs` and `meta_file.rs` to clarify the logic for storing the real name of instances when the filesystem name differs due to slugification or deduplication.
- Simplified the conditions under which the real name is preserved, ensuring better readability and understanding of the code's intent.
2026-02-10 17:34:12 -06:00
Joe
5a5e1a0c77 Enhance error handling in metadata file operations
- Added calls to `unsuppress_path` in various error handling scenarios within the `JobThreadContext` to ensure paths are correctly managed when file operations fail.
- Improved logging for failed write and serialization attempts, providing clearer feedback on issues encountered during metadata file processing.
2026-02-10 17:10:45 -06:00
Joe
f496bee347 Refactor CI pipeline scripts and documentation
- Consolidated CI pipeline steps into PowerShell and Bash scripts for improved usability and consistency.
- Updated documentation in `ci.md` to clarify the execution process and options for skipping the rbx-dom section.
- Enhanced error handling and reporting in the scripts to provide clearer feedback on CI step results.
- Streamlined formatting and linting processes for both Rojo and rbx-dom, ensuring a more efficient CI workflow.
2026-02-10 16:46:26 -06:00
Joe
9688224cb4 Enhance slugification process and deduplication logic
- Updated the `slugify_name` function to strip trailing spaces and dots before checking for Windows reserved names, ensuring correct handling of inputs like "CON.".
- Added tests to validate the new slugification behavior, particularly for Windows reserved names with trailing characters.
- Refactored `syncback_dir_no_meta` to pre-seed `taken_names` from old children's slugified instance names, improving deduplication against existing siblings regardless of iteration order.
2026-02-10 04:10:00 -06:00
Joe
41264a5ac0 Implement removal of name field from .meta.json5 files
- Added a new method `remove_meta_name_field` to handle the removal of the `name` field from metadata files when renaming from a slugified name to a clean name.
- If the metadata file becomes empty after the removal, it is deleted entirely.
- Updated relevant sections in `JobThreadContext` to call this method when a clean name is detected, ensuring stale metadata is cleared appropriately.
2026-02-10 03:57:24 -06:00
Joe
cc2eb2b66d Refactor syncback instance processing for improved efficiency
- Consolidated repetitive calls to `syncback_instance_to_path_with_stats` into a new method `process_children_incremental` for better code organization and readability.
- Streamlined the handling of sibling slug computation by removing redundant logic, enhancing maintainability in `api.rs`.
- Updated function signatures to reflect changes in return types and improve clarity in the syncback process.
2026-02-10 03:46:08 -06:00
Joe
7a090b104f Refactor syncback instance handling for improved readability
- Consolidated function calls in `syncback_instance_to_path_with_stats` across multiple files for better clarity and maintainability.
- Streamlined the formatting of function arguments to enhance code readability in `api.rs`, `file_names.rs`, and `project.rs`.
- Updated tests to reflect changes in function call structure while ensuring existing functionality remains intact.
2026-02-10 03:34:08 -06:00
Joe
560fce1352 Implement fix for stem-level deduplication in file handling
- Introduced a migration plan to address the deduplication issue where bare slugs were compared against full filenames, leading to undetected file-format collisions.
- Updated `name_for_inst` to return a deduplication key alongside the filename and metadata flag, ensuring callers use the bare slug for collision detection.
- Replaced disk-based seeding of `taken_names` with tree-based slugified names to maintain consistency and avoid extension mismatches.
- Refactored relevant modules including `dir.rs`, `project.rs`, and `api.rs` to utilize the new deduplication logic.
- Updated tests to validate the new deduplication behavior and ensure correct handling of file-format instances.
2026-02-10 03:32:17 -06:00
Joe
126c8e66a4 Update vscode-rojo submodule reference and complete migration plan for path encoding
- Updated the vscode-rojo submodule to the latest commit.
- Marked all phases of the path encoding migration plan as completed, transitioning to a slugify and deduplication approach.
- Updated documentation to reflect changes in filename handling and metadata management.
2026-02-10 03:14:18 -06:00
Joe
f093260029 Refactor instance path retrieval in snapshot.rs
- Replaced the manual path construction logic in inst_path with a call to dom.full_path_of for improved efficiency and readability.
2026-02-10 00:38:49 -06:00
Joe
64d21dc6d6 Update submodule reference and refactor match statements for improved clarity
- Updated the rbx-dom submodule to the latest commit.
- Refactored match statements in resolution.rs, sourcemap.rs, project.rs, and api.rs to dereference names directly for better readability.
2026-02-10 00:33:47 -06:00
Joe
181a003ad2 Improves sourcemap path handling with pathdiff 2026-02-09 23:31:44 -06:00
Joe
80b8331008 Refactor property comparison in compute_property_patches
- Replaced direct comparison of snapshot and instance property values with a call to variant_eq for improved type safety and correctness in patch computation.
2026-02-09 23:12:13 -06:00
Joe
431a8b3073 Update vscode-rojo submodule and add new rokit.toml configuration
- Updated the subproject commit reference for vscode-rojo.
- Introduced a new rokit.toml file with dependencies for atlas, selene, and stylua.
- Refactored upload asset logging for improved readability.
2026-02-09 22:45:22 -06:00
Joe
2803c2d73a Add .env to .gitignore and update dependencies
- Added .env file to .gitignore to prevent environment secrets from being tracked.
- Updated Cargo.lock to include new dependencies: mime, mime_guess, and unicase.
- Modified Cargo.toml to enable multipart feature for reqwest.
- Introduced a new PowerShell script for building and publishing the Rojo plugin.
- Removed deprecated auth_cookie.rs file and adjusted upload command for new upload methods.
2026-02-09 22:20:33 -06:00
Joe
0b1e8c89dc Refactor upload command to use rbx_cookie for Roblox auth cookie retrieval
- Updated the cookie retrieval logic to use rbx_cookie::get_value instead of get_auth_cookie.
- Enhanced error message to guide users on logging into Roblox Studio or passing a cookie via --cookie.
2026-02-09 21:28:56 -06:00
Joe
7172ae2d09 Enhance syncback functionality to manage .gitkeep files
- Updated the syncback loop to skip hidden files/directories, with an exception for .gitkeep, which is necessary for directory management.
- Added comprehensive tests to ensure proper cleanup of stale .gitkeep files in various scenarios, including non-empty directories and init-style projects.
2026-02-08 16:23:41 -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
2892d989f8 Add cookie header support for Roblox API requests in CloneCommand and StudioCommand
- Introduced a cookie header to the API requests in both `fetch_experience_name` and `get_universe_id` functions, allowing for authenticated requests to the Roblox API.
- Updated the request handling to conditionally include the cookie if available, enhancing the functionality of the commands when interacting with the API.
2026-02-06 23:00:39 -06:00
Joe
8dc050895a Enhance experience name sanitization in CloneCommand
- Updated the `sanitize_name` function to remove noise words, specifically "testing", from experience names.
- Added unit tests to verify the removal of "testing" in various input scenarios, ensuring consistent sanitization of folder names.
2026-02-06 22:52:31 -06:00
Joe
113b8b8dfe Improve logging in CloneCommand and InitCommand during git operations
- Added informational logging for staging and committing changes in both `CloneCommand` and `InitCommand`, enhancing visibility into the git process during project initialization and cloning.
2026-02-06 22:46:54 -06:00