You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+10-1Lines changed: 10 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,10 +2,14 @@
2
2
3
3
All notable changes to BluePLM will be documented in this file.
4
4
5
-
## [3.11.1] - 2026-01-23
5
+
## [3.12.0] - 2026-01-23
6
6
7
7
### Added
8
8
-**Type generation script**: New `npm run gen:types` command that loads `SUPABASE_ACCESS_TOKEN` from `.env` file and regenerates TypeScript types from the live database
9
+
-**SolidWorks service versioning**: The SolidWorks service now reports its version, and the app checks for compatibility. Version mismatch warnings appear in the Service tab when the service is outdated or incompatible, with clear instructions to rebuild
10
+
-**Metadata preservation when copying**: Copying files now preserves part number, description, and revision from the source file. Metadata is copied from pending local edits if present, otherwise from synced server data
11
+
-**Checkout protection for destructive operations**: Files checked out by other users are now protected from delete, move, and rename operations. Commands show clear error messages indicating which files are locked and by whom. Context menu items appear disabled with "(locked)" indicator when selection includes files checked out by others. Drag-and-drop moves show "not allowed" cursor for locked files
12
+
-**Document Manager-only mode**: The SolidWorks service can now run without a full SolidWorks installation. Users with just the Document Manager API license key can read/write file properties, extract BOMs, get configurations, read references, and extract previews. A new "Feature Availability" collapsible section in the Service tab shows which features work in each mode. Operations requiring full SolidWorks (exports, mass properties, Pack and Go, etc.) now return clear error messages with `SW_NOT_INSTALLED` error code instead of failing silently
9
13
10
14
### Fixed
11
15
-**Delete from server keeps file read-only**: Fixed issue where deleting a checked-in file from the server while keeping the local copy would leave the file read-only. Local-only files are now correctly made writable after the server deletion
@@ -16,6 +20,11 @@ All notable changes to BluePLM will be documented in this file.
16
20
17
21
### Changed
18
22
-**Removed type workarounds**: Cleaned up `as any` type casts for `folders` table, `move_file` RPC, and `create_default_workflow` RPC now that types are regenerated
23
+
-**Bulk delete performance overhaul**: Large file deletions no longer use optimistic UI updates. Files now remain visible with spinners during the deletion process, and both the file tree and main browser update together when the operation completes. This prevents visual inconsistencies where files would disappear then reappear if deletion failed
24
+
-**Folder move reliability**: Moving folders now releases Document Manager file handles before the operation, cancels any queued thumbnail extractions, and checks for ongoing file operations (downloads, syncs) before proceeding. Previously, moves could fail with EPERM errors when files inside the folder were being processed
25
+
-**Rename/move error handling**: Rename and move operations now detect locked files and identify the blocking process (e.g., "Cannot rename: file is in use by SLDWORKS.exe"). Operations retry up to 3 times with backoff before failing
26
+
-**Folder copy accuracy**: Copying folders now accurately reports the total number of files copied (not just the folder count) and shows proper progress. Nested files inside copied folders are immediately visible in the UI without requiring a refresh
27
+
-**Multi-machine folder sync**: When another user moves a folder, the app now batches all file location updates into a single render instead of processing each file individually. This prevents UI freezes when large folders are moved by teammates
19
28
20
29
### Removed
21
30
-**Speculative parent assembly warning**: Removed the warning toast "Some files may have parent assemblies still checked out" that appeared when checking in parts or assemblies. This warning was overly aggressive and triggered false positives - it would warn even when the checked-out assemblies had nothing to do with the files being checked in
@@ -177,9 +174,6 @@ function loadExtensionsFromDisk(): void {
177
174
installedAt,
178
175
})
179
176
180
-
// #region agent log
181
-
fetch('http://127.0.0.1:7242/ingest/54b4ff62-a662-4a7e-94d3-5e04211d678b',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({location:'extensionHost.ts:loadExtensionsFromDisk:registered',message:'Registered extension from disk',data:{dirName:dir.name,manifestId:manifest.id,version:manifest.version,name:manifest.name},timestamp:Date.now(),sessionId:'debug-session',hypothesisId:'H1'})}).catch(()=>{});
182
-
// #endregion
183
177
184
178
deps?.log(`Loaded extension from disk: ${manifest.id} v${manifest.version}`)
185
179
@@ -801,9 +795,6 @@ export function registerExtensionHostHandlers(
801
795
thrownewError('Store API returned unsuccessful response')
802
796
}
803
797
804
-
// #region agent log
805
-
fetch('http://127.0.0.1:7242/ingest/54b4ff62-a662-4a7e-94d3-5e04211d678b',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({location:'extensionHost.ts:fetch-store:raw',message:'Raw store API response',data:{count:result.data.length,firstExt:result.data[0]},timestamp:Date.now(),sessionId:'debug-session',hypothesisId:'H2'})}).catch(()=>{});
806
-
// #endregion
807
798
808
799
// Transform to StoreExtensionInfo format
809
800
constextensions=result.data.map(ext=>({
@@ -1005,9 +996,6 @@ export function registerExtensionHostHandlers(
1005
996
// downloadId: database UUID for download URL
1006
997
// manifestId: optional expected manifest ID (publisher.slug + name) for validation
0 commit comments