Version History

Track updates, new features, and download previous versions

v2.2.719

August 6, 2026
3DTrax Pro v2.2.719 RELEASE NOTES — 2026-08-06
===============================================================================
- Fixed: Smart set generator in bulk mode was creating duplicate design records
  in File Scanner. When creating templates with multiple sizes (e.g., 2 styles
  × 3 sizes), child pieces are now added with combined sizes (e.g., "2, 3, 4")
  instead of creating separate records per size, reducing duplicates from 6 to 2.
- Fixed: Reports screen comparison period dates were off by one day due to
  timezone issues. When selecting "07/01/2025 to 07/31/2025" as comparison
  period, it now correctly shows "Jul 1 - Jul 31" instead of "Jun 30 - Jul 30".
- Improved: Reports screen now shows dollar differences alongside percentages
  in revenue comparisons (e.g., "+$1,234.56 (15.2%)"), making year-over-year
  changes much clearer at a glance.
- Fixed: Windows app would randomly hang for up to 60 seconds during normal
  navigation. Root cause: the background design-folder scanner fires many
  concurrent file system calls, which saturated Node's default 4-thread I/O
  pool on Windows (slower per-file due to Dropbox/antivirus overhead),
  starving every other file operation in the app. Increased the thread pool
  size so scanning no longer blocks the rest of the app.
- Fixed: Subscription status was being re-checked against the server on every
  single screen navigation instead of being cached, causing a noticeable delay
  on every page load (especially on Windows). Subscription status is now
  cached for 5 minutes and reused across navigations instead of re-fetching.
- Fixed/Simplified: File Scanner's "Rescan" button only re-matched designs
  against the last scan's in-memory file list, so it silently missed new,
  renamed, or removed files — you had to know to click "Full" instead.
  Combined into a single "Scan Files" button that always checks the folder
  for changes, so results are correct every time.
- Fixed: Print Queue's "Clear Plate" sometimes required clicking multiple
  times to actually take effect. A concurrency guard was silently no-opping
  (with a false "Plate cleared" success message) if a previous clear was
  still finishing in the background, instead of waiting for it. Clear Plate
  now waits for the real operation to complete before confirming.
===============================================================================

v2.2.718

July 31, 2026
3DTrax Pro v2.2.718 RELEASE NOTES — 2026-07-31
===============================================================================
- Fixed: Reconnecting a Gmail account in Settings now preserves the order and
  shipping email subject configurations instead of clearing them.
- Fixed: Orders screen on Windows was slow to respond to button clicks due to
  excessive file scanning. Shop profile is now cached on mount instead of being
  loaded from localStorage hundreds of times per render, dramatically improving
  Windows performance.
===============================================================================

v2.2.717

July 22, 2026
3DTrax Pro v2.2.717 RELEASE NOTES — 2026-07-22
===============================================================================

## Set Templates & File Scanner Improvements

- Fixed: When applying a set template to an order, child pieces were created with
  the template's hardcoded piece size instead of the parent order item's size.
  Child pieces now inherit the parent size so a 3" order stays 3" for all pieces.
- Improved: When importing orders from Gmail, design records are now created only
  for styles marked as "Include in File Scanner" in Shop Profile, preventing
  unwanted styles from being added to the File Scanner database.
===============================================================================

v2.2.716

July 18, 2026
3DTrax Pro v2.2.716 RELEASE NOTES — 2026-07-18
===============================================================================

## Windows — Order Import, Performance & Gmail Sync Clarity

- Fixed: New orders were not importing on Windows because the Orders page used
  the legacy single-account Gmail path. It now uses the same multi-account,
  workspace-aware force-sync path as Settings → Gmail, so workspace-scoped
  Gmail accounts work on both macOS and Windows.
- Fixed: Reduced filesystem watcher overhead on Windows by ignoring common
  temporary and cloud-sync files (Thumbs.db, desktop.ini, *.tmp, etc.) and
  suppressing permission-error stalls in large watched folders.
- Fixed: Removed the redundant global Orders/Shipping query fields from
  Settings → Gmail. Gmail search subjects are now configured per account in the
  Gmail Accounts section, which is the single source of truth used by sync.
- Fixed (diagnostics): Removed the Windows-only `disable-features: VizDisplayCompositor`
  flag that was forcing all UI compositing onto the main thread, causing the app
  to feel increasingly sluggish on Windows. The in-window zoom management remains
  in place for high-DPI displays.
- Added: Performance timing diagnostics for installed Windows builds. Timing
  data is written to `%APPDATA%\3DTrax\performance.log` so we can identify which
  operation becomes slow during a session without needing DevTools.

================================================================================

v2.2.715

July 16, 2026
3DTrax Pro v2.2.715 RELEASE NOTES — 2026-07-16
===============================================================================

## Print Queue — AMS RFID Refresh

- Fixed: Refreshing an AMS slot now sends the selected tray's RFID re-read
  command before requesting its updated AMS state
- Fixed: AMS refresh waits for a populated tray response instead of accepting
  an empty partial MQTT status report
- Fixed: Refresh supports both tray identifiers and response-array positions,
  preventing valid slots from incorrectly reporting no live data

================================================================================

v2.2.714

July 16, 2026
3DTrax Pro v2.2.714 RELEASE NOTES — 2026-07-16
===============================================================================

## Print Queue — Plate Preview & Filament Color Indicator

- Fixed: Plate previews now always refresh from disk instead of showing stale 
  cached versions from Firestore
- Fixed: Filament color dots now persist across page interactions (no longer 
  disappear when Firestore snapshots fire)
- New: Filament color indicator dots on queue thumbnails show the actual used 
  filament color extracted from slice_info.config metadata
- Fixed: "Extract Previews" button now works correctly — extracts fresh previews
  and filament colors for all queued 3MF jobs, clears local caches so dots 
  appear immediately
- Improved: Only filaments with used_for_object="true" are shown (ignores 
  unused filament slots defined in the file)

## Set Manager — Create Set Wizard

- Fixed: "Creating templates" screen no longer hangs indefinitely — added 
  per-iteration error handling so one failed save doesn't abort the batch
- Fixed: Wizard now shows Step 3 with style/size checkboxes so you can select 
  exactly which combinations to create (instead of always creating all combos)
- Fixed: Summary text and button now dynamically reflect the actual number of 
  templates that will be created based on your selections
- Fixed: Hardcoded "6 templates (2 styles × 3 sizes)" text replaced with 
  dynamic counts

## Windows Performance & File Watchers

- Improved: Windows now uses native folder-change events instead of recursive
  polling for File Scanner and Batch Slicer watchers
- Improved: Removed Windows background fingerprint scans that could cause UI
  freezes when watching large Dropbox or OneDrive folders

## Settings — Stencil Folder

- Fixed: Stencil folder paths are now saved per device and no longer sync
  between workstations through Firebase

## Etsy Order Sync

- Fixed: Etsy "Order confirmation" emails with order numbers in parentheses
  are now recognized and imported correctly

## Print Queue — Performance & Filaments

- Improved: Coalesced Firestore queue updates and throttled 3MF preview work
  so large queues stay responsive
- Improved: AMS data is refreshed directly from the selected printer before
  validating a job for sending
- New: Each AMS slot has its own live refresh control in the AMS manager
- Improved: Filament color dots moved from plate thumbnails into a dedicated
  Filaments column, sized to fit four colors cleanly

================================================================================

v2.2.713

July 8, 2026
3DTrax Pro v2.2.713 RELEASE NOTES — 2026-07-08
===============================================================================

## Print Queue — Plate Preview & Filament Color Indicator

- Fixed: Plate previews now always refresh from disk instead of showing stale 
  cached versions from Firestore
- Fixed: Filament color dots now persist across page interactions (no longer 
  disappear when Firestore snapshots fire)
- New: Filament color indicator dots on queue thumbnails show the actual used 
  filament color extracted from slice_info.config metadata
- Fixed: "Extract Previews" button now works correctly — extracts fresh previews
  and filament colors for all queued 3MF jobs, clears local caches so dots 
  appear immediately
- Improved: Only filaments with used_for_object="true" are shown (ignores 
  unused filament slots defined in the file)

## Set Manager — Create Set Wizard

- Fixed: "Creating templates" screen no longer hangs indefinitely — added 
  per-iteration error handling so one failed save doesn't abort the batch
- Fixed: Wizard now shows Step 3 with style/size checkboxes so you can select 
  exactly which combinations to create (instead of always creating all combos)
- Fixed: Summary text and button now dynamically reflect the actual number of 
  templates that will be created based on your selections
- Fixed: Hardcoded "6 templates (2 styles × 3 sizes)" text replaced with 
  dynamic counts

================================================================================

v2.2.712

July 3, 2026
3DTrax Pro v2.2.712 RELEASE NOTES — 2026-07-03
===============================================================================
Minor bug fixes

================================================================================

v2.2.711

July 3, 2026
3DTrax Pro v2.2.711 RELEASE NOTES — 2026-07-01
================================================================================

FILE SCANNER: MATCHING FIX FOR SINGLE-TOKEN DESIGN NAMES
----------------------------------------------------------
[File Scanner — Files Not Found for Designs Like "K-Pop_MIRA"]
- Fixed: Files were not being matched to designs whose name is a single token
  (e.g. "K-Pop_MIRA"). The file parser always extracted the first two filename
  tokens as the product key, so for a file like
  "K-pop_MIRA Cutter With_stamp 2 Inch.3mf" it read "k-pop_mira cutter" as the
  key and "with_stamp" as the style — never matching the 1-token design name
- Fix: When matching, if the design's product key has fewer tokens than the file
  parser assumed, the style alias is re-derived starting from the design's actual
  token count, so "cutter with_stamp" is correctly extracted as the full style
- Affects all file types (AI, DXF, F3D, STL, 3MF, PDF, PNG) for any design
  whose name is a single hyphenated or underscored word

FILE SCANNER: AUTO-CREATE MISSING STYLE RECORDS AFTER SCAN
-----------------------------------------------------------
[File Scanner — "Cutter Only" and Other Styles Not Appearing for Existing Designs]
- Fixed: After a scan, designs that existed in Firebase with only one style
  (e.g. "Cutter with Stamp") would never get sibling style records created
  (e.g. "Cutter Only"), even when files for that style were found on disk
- Root cause: the auto-creation logic only ran reactively when new Gmail orders
  arrived, with no backfill path for existing designs
- Fix: After every scan, any design name that had at least one file found is
  checked against all configured shop styles. Missing style records are created
  automatically (fire-and-forget) with the same sizes as the sibling record
- A toast notification confirms how many missing records were added
- Scoped to designs with files found only — does not create empty records for
  designs with no files on disk

ORDERS SCREEN: PERFORMANCE & FREEZE FIXES
------------------------------------------
[Orders Screen — Slow Reload & Occasional UI Freeze]
- Fixed: The entire orders array was being serialized to JSON and written to
  localStorage synchronously on every Firestore snapshot update (badge clicks,
  status changes, real-time sync). With 1000+ orders this was a 5-20 MB
  synchronous write that blocked the main thread. Now debounced to 2 seconds
- Fixed: autoSplitOrderItems (Set Template matching) was awaited inside the
  onSnapshot callback on every single update — including routine badge ticks —
  causing an async Firestore fetch + Promise.all over all orders × items to run
  on every change. Now skipped entirely when no new order doc IDs are detected
- Fixed: loadFileStatuses parsed a large JSON blob (1451+ designs) synchronously
  on mount, blocking initial render. Now deferred via setTimeout(0) so the UI
  paints before the heavy parse runs. Empty-map guard prevents a spurious
  re-render on the retry call when data is already empty

================================================================================

v2.2.710

June 30, 2026
3DTrax Pro v2.2.710 RELEASE NOTES — 2026-06-30
================================================================================

PRINT QUEUE: AUTO-QUEUE RACE CONDITIONS & CLEAR PLATE FIX
-----------------------------------------------------------
[Print Queue Screen — Plate Clear Error Toast & Auto-Queue Cycling]
- Fixed: "Failed to clear plate" error toast appeared even when the plate was
  cleared successfully, because errors from the post-clear "auto-send next job"
  step were propagating up and masking the successful clear
- Fixed: Auto-Queue jobs repeatedly cycling onto a single printer with a flood of
  "auto queue has issues" toasts. Root cause was TWO independent auto-dispatch
  loops running simultaneously (one in PrintQueueV2Page.tsx, one in the
  usePrintQueueV2 hook) racing to assign the same jobs to printers
- Removed the duplicate auto-queue effect from PrintQueueV2Page.tsx; the hook's
  background dispatcher is now the single source of truth
- Added a re-entrancy lock and increased debounce (300ms -> 2s) on the background
  auto-dispatcher to prevent overlapping dispatch cycles
- Added a per-printer lock to clearPlate() to prevent a manual "Clear Plate" click
  from racing with the automatic clear triggered after a print finishes
- Fixed a "stuck job" bug: if an auto-dispatched send failed, the job kept its
  assignedPrinterId but stayed status=queued, making it permanently invisible to
  future auto-queue cycles. Failed auto-sends now revert the assignment so the
  job returns to the unassigned pool and gets retried

ORDERS SCREEN: PERFORMANCE FIX
---------------------------------
[Orders Screen — Duplicate Firestore Listener]
- Removed a redundant second onSnapshot listener on the orders collection that
  was used only to compute status badge counts. It ran the exact same query as
  the main orders listener, doubling Firestore read/processing load on every
  single order change. Badge counts now derive directly from the main orders
  state with zero extra Firestore reads

FILE SCANNER: SEARCH PERFORMANCE FIX
----------------------------------------
[File Scanner Screen — Search Input Debounce]
- Search input previously triggered expensive filtering/memo recalculation on
  every keystroke, cascading into the DataGrid component's own internal state.
  Added a 300ms debounce (matching the pattern already used on the Orders
  screen) so filtering only runs after the user stops typing

GMAIL SYNC: NEW DEVICE RESYNC FIX
-------------------------------------
[Settings Screen — Gmail "Sync Now" / "Full Sync" Failing on New Devices]
- Fixed: Sync Now / Full Sync buttons could silently fail with a generic
  "Failed to sync Gmail" message on freshly installed devices, even after Gmail
  accounts were added
- Root cause: the Electron main process tracks the active workspace as an
  in-memory value that resets on every app restart and is only set when the
  renderer calls workspace:set-active. Every Gmail Accounts handler (add/remove/
  reauthorize) already re-synced this value first, but the Sync Now/Full Sync
  handler in GmailSection.tsx did not — so a sync attempted before any other
  Gmail code path had re-synced the workspace would silently skip
- Fix: handleSync() now re-syncs the active workspace before calling
  gmail:force-sync, matching the pattern used everywhere else
- Also improved error messaging: skipped syncs now show the actual reason
  (no active workspace, no active accounts, already syncing, etc.) instead of a
  generic failure message

===============================================================================

v2.2.709

June 23, 2026
3DTrax Pro v2.2.709 RELEASE NOTES — 2026-06-23
================================================================================

SET TEMPLATE FILE LINKING FIX
-------------------------------
[Orders Screen — Set Template Children Not Linking Files]
- Fixed: Child pieces created via Set Template (e.g. Galaxy Princess, Princess Peach,
  Princess Daisy) showed grey dots in Orders screen despite files existing in scanner
- Root cause 1: saveSetTemplate was hardcoding all expect* flags (expectAI, expectDXF,
  expect3MF, etc.) to false when auto-adding child designs to Firestore — meaning
  buildStatusEntry would return undefined for those file types and paths were never
  populated in the fileStatusMap
- Root cause 2: buildStatusEntry discarded entries where expected=false even when
  files were actually found on disk, making existing broken design docs unrecoverable
  without a manual Firestore migration
- Fix 1: setTemplates.ts now derives expect* flags from the shop profile style config
  (getRequiredFileTypesForStyle) so new set template designs get correct expectations
- Fix 2: buildStatusEntry now surfaces found files even when expected=false — any design
  where files are physically present on disk will show correctly regardless of the
  Firestore expect* flag state

================================================================================

3DTrax Pro v2.2.708 RELEASE NOTES — 2026-06-19
================================================================================

AUTO-EJECT & TODO SCREEN BUG FIXES
------------------------------------
[Auto-Eject — Smart Sweep Fix]
- Fixed: Smart sweep mode was not pushing prints off the plate
- Root cause: sweep was oscillating within object's own Y footprint instead of
  driving all the way to Y0 (front ejection edge)
- Fix: each per-object pass now positions behind the object (yMax+10) then sweeps
  fully to Y0, matching the ejection logic used by Normal mode
- Skim pass also corrected — rises 1mm, repositions behind, then sweeps to Y0

[Todo Screen — Stencil Items Missing from Todo]
- Fixed: Split order pieces with stencil styles (e.g. "Stencil Only",
  "Cutter with_Stencil", "Cutter/Stamp/Stencil") were not appearing in Todo screen
- Root cause: child pieces in Firestore do not have requiresStencil propagated
  from their parent — the flag was undefined on all piece-level items
- Fix: requiresStencil now derived from item style as fallback in all three places:
  collectMissingItemsAcrossAllOrders, computeOrderTodoInfo, and TodoScreen hasStencilFile
- Also fixed: stencil-only items no longer falsely flagged as missing a 3MF file
  (computeOrderTodoInfo now skips the 3MF check for "Stencil Only" style items)

================================================================================

v2.2.708

June 19, 2026
3DTrax Pro v2.2.708 RELEASE NOTES — 2026-06-19
================================================================================

AUTO-EJECT & TODO SCREEN BUG FIXES
------------------------------------
[Auto-Eject — Smart Sweep Fix]
- Fixed: Smart sweep mode was not pushing prints off the plate
- Root cause: sweep was oscillating within object's own Y footprint instead of
  driving all the way to Y0 (front ejection edge)
- Fix: each per-object pass now positions behind the object (yMax+10) then sweeps
  fully to Y0, matching the ejection logic used by Normal mode
- Skim pass also corrected — rises 1mm, repositions behind, then sweeps to Y0

[Todo Screen — Stencil Items Missing from Todo]
- Fixed: Split order pieces with stencil styles (e.g. "Stencil Only",
  "Cutter with_Stencil", "Cutter/Stamp/Stencil") were not appearing in Todo screen
- Root cause: child pieces in Firestore do not have requiresStencil propagated
  from their parent — the flag was undefined on all piece-level items
- Fix: requiresStencil now derived from item style as fallback in all three places:
  collectMissingItemsAcrossAllOrders, computeOrderTodoInfo, and TodoScreen hasStencilFile
- Also fixed: stencil-only items no longer falsely flagged as missing a 3MF file
  (computeOrderTodoInfo now skips the 3MF check for "Stencil Only" style items)

================================================================================

v2.2.707

June 19, 2026
3DTrax Pro v2.2.707 RELEASE NOTES — 2026-06-17
================================================================================

AMS AUTO-REFILL & MODAL REDESIGN
---------------------------------
[AMS Management Modal]
- Redesigned AMS modal: single modal (removed separate Set modal overlay)
- Removed per-slot Rescan button (redundant — Refresh AMS Data covers all slots)
- Removed remaining % display (unreliable for third-party/non-RFID spools)
- Always shows all 4 slots (A1–A4) even if empty
- "Set" button now expands inline color+material form within the slot row
- Color pre-fills from current slot data when opening Set form

[Auto-Refill Groups]
- New: Refill Group assignment per slot — click "+ Group" to cycle A → B → C → D → none
- Groups saved to Firestore per printer (amsRefillGroups field on printer doc)
- Slots sharing the same group letter form an auto-refill backup chain
- Ring diagram shows active groups visually: colored arcs for grouped slots,
  grey arcs for ungrouped, green dashed arrow indicating the chain is active
- Amber notice shown when no groups are configured
- Example: A1=Blue (no group), A2+A3+A4=Orange Group B → ams_mapping [0,1,1,1]

[AMS Mapping Fix]
- Fixed: ams_mapping was hardcoded as [0,1,2,3] for every job
- Now builds correct mapping from amsRefillGroups at job dispatch time
- Slots in same group get same extruder index → Bambu native auto-refill activates
- Falls back to [0,1,2,3] when no groups configured (no behaviour change)

[IPC Handlers — Windows crash fix]
- Fixed: App crashed on Windows startup with "Attempted to register a second handler"
  for v2:rescan-ams-slot, v2:rescan-all-ams-slots, v2:set-ams-filament
- Removed duplicate handlers (old stubs called non-existent BambuPrinter methods)
- New handlers use mqttClient.publish directly on the live activePrinters instance

[Bug Fixes]
- Fixed: autoEjectSweepIntensity type missing 'smart' value causing TS errors
- Auto-queue toggle now persists across navigation (saved to Firestore)
- Auto-queue no longer sends parent job of a split set — queues child pieces only

================================================================================

v2.2.706

June 14, 2026
3DTrax Pro v2.2.706 RELEASE NOTES — 2026-06-14
================================================================================

AUTO-QUEUE & EJECT GCODE INJECTION FIXES
-----------------------------------------
[Auto-Queue]
- Fixed: Second and subsequent orders skipped by auto-queue due to stale badge guard
- Root cause: hasAnyUnqueued check read item.statusQueued from React state which was
  already updated to 'ok' by the first order's run, incorrectly blocking later orders
- Fix: Removed the badge-based guard entirely — handleSendAllToPrintQueue handles its
  own dedup via Firestore checks, making the pre-check redundant and harmful
- Auto-queue now delegates directly to handleSendAllToPrintQueue for each NEW order,
  reusing the same fast, tested logic as the "Print All 3D" button

[Eject Gcode Injection]
- Fixed: adjustedPushHeight used before initialization in bendingSection template
  literals, causing injection to fail with ReferenceError and fall back to original file
- Fix: Moved adjustedPushHeight definition before bendingSection is built
- Fixed: Stray '}' characters in skim height gcode lines (gentle x2, normal x4) that
  were generating malformed gcode (e.g. "G1 Z11 F10000}" instead of "G1 Z11 F10000")
- All three sweep modes (Gentle, Normal, Smart) now inject correct clean gcode

[Debug Eject Mode]
- Fixed: debugEjectOnly checkbox not persisting — was missing from Edit/View button
  initializers so opening the editor reset it to false on save
- Fixed: debugEjectOnly check was nested inside autoEjectEnabled block, so debug mode
  only worked when auto-eject was also enabled
- Fix: Moved debugEjectOnly early-return to top level after injection, independent of
  autoEjectEnabled — debug mode now works regardless of eject toggle state

[File Matching]
- Fixed: check-gcode-3mf-exists partial match allowed space as separator, causing
  "Cutter 4 Inch test.gcode.3mf" to match base name "Cutter 4 Inch"
- Fix: Removed space from valid separators — only '_' and '-' are now accepted,
  preventing wrong files with extra words from being picked up

================================================================================

v2.2.705

June 11, 2026
3DTrax Pro v2.2.705 RELEASE NOTES — 2026-06-11
================================================================================

PRINT QUEUE UI PROGRESS/ETA FIX
--------------------------------
[Critical Fix: Race Condition in Print Server Detection]
- Fixed: Print queue showing 0% progress and incorrect ETA during printing
- Root cause: isPrintServer flag was false when MQTT handler initialized, causing
  it to skip all real-time printer status updates
- Moved Print Server state declarations to top of hook for proper initialization
- Changed 4 useEffects to use isPrintServerRef instead of potentially stale constant
- Added thisHostname to all critical useEffect dependencies to trigger re-subscription
  once the machine's hostname is resolved
- MQTT handler, printer connections, and polling now correctly start when this machine
  is identified as the print server

================================================================================

v2.2.704

June 10, 2026
3DTrax Pro v2.2.704 RELEASE NOTES — 2026-06-10
================================================================================

ETA SYNC FIX — COOLING PHASE DISPLAY
-------------------------------------
[Critical Fix: ETA Stale Data Bug]
- Fixed: Queue showing stale ETA (28m) when printer LCD shows 00 during cooling
- Root cause: When printer entered FINISH state for auto-eject cooling, remainingTime
  updates were being skipped by throttling logic
- Now remainingTime/eta are properly cleared when printer finishes, so queue
  displays correct status during cooling phase

AUTO-QUEUE ENHANCEMENTS
------------------------
[New: Auto-Clear on Print Complete]
- Added: When auto-queue is enabled, printer automatically clears plate and sends next job
- No manual "Clear" button needed - fully automated workflow for B2EMO and other auto-queue printers
- Added checks for both global auto-queue toggle and per-printer auto-queue setting

CHILD DESIGN FILE LINKING
--------------------------
[Bug Fix: Split Set File Detection]
- Fixed: Child pieces created from set splitting not finding their files
- File Scanner now auto-scans new designs added after initial load
- Results now merge instead of replace, preserving all design links
- Orders page properly loads file statuses for child designs even if not in cached data

PRINT SERVER VERIFICATION
--------------------------
[Security: Race Condition Prevention]
- Verified all printer command paths restricted to designated Print Server only:
  - sendToPrinter() IPC calls
  - clearPlate() MQTT state clearing
  - Auto-connect MQTT listeners
  - Status polling fallback
  - Auto-queue job sending
- Other devices now act as secondary listeners, receiving Firestore updates without
  causing race conditions or duplicate commands

UI POLISH
----------
[Fix: Toast Close Button]
- Fixed: Toast notification close button is now perfectly round (was oval)

[Fix: Individual Design Refresh]
- Fixed: Refreshing a single design no longer loses other design links
- Scan results now properly merge with existing results

================================================================================

v2.2.7.03

June 8, 2026
3DTrax Pro v2.2.7.03 RELEASE NOTES — 2026-06-07
================================================================================

AUTO-EJECT ENHANCEMENTS — ROBUST PART EJECTION
--------------------------------------------------

[New: Temperature-Based Cooling Mode]
- Added: Choose between Timer-based (G4 dwell) or Temperature-based (M190) cooling.
- Timer mode: Wait fixed minutes (default 12) before ejecting.
- Temperature mode: Wait until bed reaches target temperature (default 25°C).
- Temperature mode ensures prints are fully cooled before ejection, improving
  reliability in varying ambient conditions.

[New: Plate Bending Configuration]
- Added: Toggle to enable/disable plate bending motion.
- Added: Configurable number of bend cycles (0-20, default 6).
- Plate bending flexes the build plate to break adhesion and release stuck prints.
- Uses FL_S1 method: Z235 (up) → Z200 (down) repeated for configured cycles.

[New: Visual Eject Sequence Summary]
- Added: Real-time summary line showing the complete eject sequence.
- Example: "🚀 Eject Sequence: Wait 12min → 6 bends → Double sweep → Park"
- Updates dynamically as settings change.

[New: Organized Auto-Eject UI]
- Restructured auto-eject settings into clear sections:
  1. COOLING — Timer or Temperature selection with inputs
  2. PLATE BENDING — Enable toggle and cycle count
  3. ADVANCED — Custom G-code override (optional)

[Backend: Robust Auto-Eject G-code]
- Updated: Auto-eject G-code now uses comprehensive FL_S1 pattern:
  - Active temperature-controlled cooling (M190 S25)
  - Plate bending cycles (configurable)
  - Full-plate double sweep pattern (fast then slow)
  - Reduced Z motor current during parking (M17 Z0.4)
  - Proper M400 waits between stages

================================================================================

v2.2.7.02

June 6, 2026
3DTrax Pro v2.2.7.02 RELEASE NOTES — 2026-06-06
================================================================================

PRINT QUEUE — BUG FIXES & AUTO-QUEUE IMPROVEMENTS
--------------------------------------------------

[Auto-Queue: Per-Printer AUTO Setting]
- Fixed: Per-printer AUTO toggle now works independently of the global
  Manual/Auto toggle in the toolbar.
- Previously, setting the global toggle to Manual blocked ALL auto-sends,
  including printers explicitly marked AUTO.
- Now: Global Manual = only printers explicitly set to AUTO will auto-send.
  Global Auto = all non-disabled printers auto-send (previous behavior).

[Send to Printer: Direct IPC on Local Desktop]
- Fixed: "Unknown command" error when auto-queue tried to send jobs on the
  farm desktop. The cloud relay (printerCommands) was being used even when
  running locally, causing failures on older builds.
- Fix: When Electron is available (farm desktop), jobs are now sent directly
  via IPC (v2:send-gcode3mf) instead of the cloud relay. The cloud relay
  is now reserved exclusively for remote sends (mobile/web).

[Clear Plate Button Reappearing]
- Fixed: "Clear" button reappearing on printers after already being cleared,
  caused by Firebase WebChannel reconnects replaying stale needs_clearing
  snapshots from cache.
- Fix 1: Firestore snapshot handler now ignores incoming needs_clearing state
  for up to 30 seconds after a plate has been cleared.
- Fix 2: On app startup, printers stuck in needs_clearing with no valid
  finished job in Firestore are automatically cleared silently.

[Race Condition: processFinish on Queued Jobs]
- Fixed: A race condition where processFinish could mark a job as finished
  before sendToPrinter had updated it to printing status, causing the job
  to get re-queued unexpectedly.
- Fix: processFinish now skips jobs in queued/needs_slicing status.
- Fix: sendToPrinter checks job status before overwriting to printing,
  avoiding conflict if processFinish already completed.

================================================================================

v2.2.7.01

June 6, 2026
3DTrax Pro v2.2.7.01 RELEASE NOTES — 2026-06-06
================================================================================

CLOUD FEATURES — INITIAL RELEASE
---------------------------------

[Cloud Printer Command Relay — Phase 1]
- New: Print jobs can now be sent to printers from any device or network.
  The Electron app on the print farm acts as a local agent, listening for
  commands relayed through Firebase Firestore.
- Sending a print job writes a command document to the printerCommands
  Firestore collection. The local Electron app picks it up, executes the
  FTP upload and MQTT command, and reports success or failure back to the
  cloud in real time.
- The sending device waits up to 2 minutes for confirmation, showing
  live status. On success or failure, the UI updates immediately.
- Existing pause, resume, and stop commands already used this relay;
  send is now fully integrated into the same pattern.
- Commands are scoped to the active workspace to prevent cross-workspace
  interference. A composite Firestore index on workspaceId + status supports
  the listener query.
- The local agent now gracefully skips unrecognized command types instead
  of marking them as failed, preventing stale documents from causing errors.

[Firestore Connection Stability — Electron]
- Fixed: Firestore WebChannel long-polling connections were repeatedly
  dropping with ERR_CONNECTION_RESET inside Electron.
- Root cause: Chromium's HTTP/2 multiplexing conflicts with Firebase's
  long-polling transport in Electron's network stack.
- Fix: HTTP/2 disabled at app launch, forcing HTTP/1.1 for all Firestore
  connections. QUIC was already disabled in a prior release.

================================================================================

v2.2.6.04

June 5, 2026
3DTrax Pro v2.2.6.04 RELEASE NOTES — 2026-06-05 (UTC 23:40)
================================================================================

PRINT QUEUE
-----------

[Cross-Platform Path Fix — Windows/Mac Dropbox Jobs]
- Fixed: Print jobs added from Windows (storing C:/Users/.../Dropbox/... paths)
  now send correctly from Mac without a "File not found" error.
- Root cause: path conversion failed to extract the Dropbox-relative segment
  from Windows-format paths when running on Mac. A regex fallback now correctly
  strips the platform-specific Dropbox root regardless of OS.
- Job filePath in Firestore is automatically updated to a platform-neutral
  relative path on first successful send, preventing the issue from recurring.

[Resend / Reprint Buttons — Jobs Disappearing]
- Fixed: Clicking Reprint or Resend was causing the job to vanish from the
  queue entirely.
- Root cause: clearPlate() archives all "finished" jobs before clearing the
  printer. If the job hadn't been reset to "queued" first, it was archived and
  deleted before the resend could happen.
- Fix: job status is now reset to "queued" before clearPlate() is called in
  all Reprint and Resend flows (Reprint button, Stop→Resend dialog, job row).

[Error State Jobs — Resend Button]
- Fixed: Jobs with status "error" showed only a disabled Send button with no
  way to retry without deleting and re-adding.
- Error jobs now show a Resend button (amber) and Delete button. Resend resets
  the job to "queued" and sends it to the assigned printer immediately.

[Resend / Reprint — Stale Job Status]
- Fixed: Resend and Reprint calls were passing the original job object with a
  stale status (e.g. "finished" or "printing") to sendToPrinter, which could
  cause silent failures or incorrect state transitions.
- All resend paths now pass { ...job, status: 'queued' } explicitly.

ORDERS
------

[Stencil Only Items — 3MF and 3D Print Buttons]
- Fixed: Order items with style "Stencil Only" were showing green 3MF Open and
  3D Print buttons even though they have no printable 3MF file (only a stencil
  cutter file exists on disk).
- Both buttons now correctly show as unavailable (—) for Stencil Only items,
  eliminating user confusion. Exact style name match ("Stencil Only") is used
  so other styles like "Cutter/Stamp/Stencil" are unaffected.

================================================================================

v2.2.6.03

June 5, 2026
3DTrax Pro v2.2.6.03 RELEASE NOTES — 2026-06-05 (UTC 19:55)
================================================================================

PERFORMANCE
-----------

[File Scanner — Speed Improvements]
- Significantly reduced scan times for large Dropbox folders.
- Scanning now completes faster with less UI blocking during long directory
  traversals.
- Improved responsiveness when loading and displaying scan results.

PRINT QUEUE
-----------

[Printer Management — Auto Eject Code Injection]
- Added auto eject feature in Print Queue printer settings: when enabled, a
  custom G-code sequence is automatically injected at the end of each print
  job to eject the finished plate from the printer.
- Configurable per-printer via the printer management settings panel in the
  Print Queue page.
- Allows hands-free plate cycling in production environments without manual
  intervention between prints.

================================================================================

v2.2.6.02

June 2, 2026
3DTrax Pro v2.2.6.02 RELEASE NOTES — 2026-06-02 (UTC 23:24)
================================================================================

PERFORMANCE
-----------

[Status Updates — Instant Response]
- Fixed: Sending jobs to the print queue, updating badges, and clearing plates
  were very slow and often required multiple clicks. Root cause was every badge
  write performing two sequential Firestore round-trips (getDoc then updateDoc).
- All status update operations are now instant via two changes:
  1. Optimistic UI — local React state updates immediately on button click with
     no waiting for Firestore.
  2. Fire-and-forget writes — Firestore writes run in the background; errors are
     logged but never block the UI.
- Core write now uses runTransaction (1 round-trip) instead of getDoc + updateDoc
  (2 round-trips) for every badge update.
- Arrange plate "Confirm & Clear Plate" replaced N sequential awaited
  updateOrderItemPrintStatus calls with a single batched
  updateMultipleOrderItemsStatus call processed concurrently per order.
- Affected actions: "3D Print" button, "Print All 3D" button, "Send to Printer"
  button, and "Clear Plate" confirmation dialog (both single and arrange plates).

[Print Queue — .gcode.3mf Handling]
- Fixed: Sending a print item to the queue was opening Bambu Studio instead of
  queuing the file, even when a .gcode.3mf already existed. Priority logic now
  correctly prefers .gcode.3mf (already sliced) over .3mf (needs slicing) for
  all queue actions.
- Fixed: When a .gcode.3mf was missing, the system attempted to open the
  non-existent .gcode.3mf in Bambu Studio instead of the plain .3mf file.
- Fixed: "needs_slicing" badge was not resolving after saving a .gcode.3mf.
  The 🔍 search now correctly finds the sliced file and updates job status.

================================================================================

3DTrax Pro v2.2.6.01 RELEASE NOTES — 2026-06-02 (UTC 01:31)
================================================================================

BUG FIXES
---------

[File Scanner — Results Lost on Load]
- Fixed: Scan results were randomly showing "Not Found" for all designs despite
  having previously completed a successful scan. Root cause was the Firebase
  onSnapshot listener wiping cached results whenever the expanded design count
  changed (even by 1 design added or removed). Now keeps existing results
  visible and auto-rescans in the background when the count drifts.
- Fixed: localStorage save could silently fail due to QuotaExceededError with
  large workspaces (1300+ designs). Added fallback that retries without
  fileMatchesSnapshot and logs errors instead of failing silently.

[File Scanner — Auto-Updating]
- New: Added background file watcher that monitors the design folder for changes
  to any design file type (.ai, .dxf, .f3d, .3mf, .stl, .png, .pdf). Changes
  are debounced (3s) then trigger a silent background re-scan. Todo and Orders
  screens update instantly — no manual "Scan Files" click needed.

[File Scanner — Performance]
- Fixed: matchFilesToDesigns was calling getShopProfileSync() (localStorage read)
  inside a per-design loop, causing slow scans. Hoisted outside the loop.

[Orders — Print Queue Performance]
- Fixed: "Print All 3D" button was very slow to respond. Badge updates and toast
  messages were delayed because handleSendAllToPrintQueue performed sequential
  Firebase reads and writes per item. Now uses optimistic local state updates
  and batched Firebase writes (fire-and-forget).

[Watch Folder — Dropbox Cross-Network Sync]
- Fixed: Watch folder did not detect new .3mf files synced via Dropbox from a
  workstation on a different network. Root cause was chokidar's stabilityThreshold
  (2s) being too low for Dropbox sync and no file integrity check, causing
  partially-synced files to be processed or missed. Increased stability threshold
  to 8s, added ZIP magic byte validation with 60s retry, and increased polling
  frequency.

[Code Quality]
- Fixed: Removed references to non-existent jpg/jpeg file status properties in
  OrdersV2.tsx. The png property already covers all image types.

================================================================================

v2.2.6.01

June 2, 2026
3DTrax Pro v2.2.6.01 RELEASE NOTES — 2026-06-02 (UTC 01:31)
================================================================================

BUG FIXES
---------

[File Scanner — Results Lost on Load]
- Fixed: Scan results were randomly showing "Not Found" for all designs despite
  having previously completed a successful scan. Root cause was the Firebase
  onSnapshot listener wiping cached results whenever the expanded design count
  changed (even by 1 design added or removed). Now keeps existing results
  visible and auto-rescans in the background when the count drifts.
- Fixed: localStorage save could silently fail due to QuotaExceededError with
  large workspaces (1300+ designs). Added fallback that retries without
  fileMatchesSnapshot and logs errors instead of failing silently.

[File Scanner — Auto-Updating]
- New: Added background file watcher that monitors the design folder for changes
  to any design file type (.ai, .dxf, .f3d, .3mf, .stl, .png, .pdf). Changes
  are debounced (3s) then trigger a silent background re-scan. Todo and Orders
  screens update instantly — no manual "Scan Files" click needed.

[File Scanner — Performance]
- Fixed: matchFilesToDesigns was calling getShopProfileSync() (localStorage read)
  inside a per-design loop, causing slow scans. Hoisted outside the loop.

[Orders — Print Queue Performance]
- Fixed: "Print All 3D" button was very slow to respond. Badge updates and toast
  messages were delayed because handleSendAllToPrintQueue performed sequential
  Firebase reads and writes per item. Now uses optimistic local state updates
  and batched Firebase writes (fire-and-forget).

[Watch Folder — Dropbox Cross-Network Sync]
- Fixed: Watch folder did not detect new .3mf files synced via Dropbox from a
  workstation on a different network. Root cause was chokidar's stabilityThreshold
  (2s) being too low for Dropbox sync and no file integrity check, causing
  partially-synced files to be processed or missed. Increased stability threshold
  to 8s, added ZIP magic byte validation with 60s retry, and increased polling
  frequency.

[Code Quality]
- Fixed: Removed references to non-existent jpg/jpeg file status properties in
  OrdersV2.tsx. The png property already covers all image types.

================================================================================

v2.2.6

June 1, 2026
3DTrax Pro v2.2.6.01 RELEASE NOTES — 2026-06-02 (UTC 01:31)
================================================================================

BUG FIXES
---------

[File Scanner — Results Lost on Load]
- Fixed: Scan results were randomly showing "Not Found" for all designs despite
  having previously completed a successful scan. Root cause was the Firebase
  onSnapshot listener wiping cached results whenever the expanded design count
  changed (even by 1 design added or removed). Now keeps existing results
  visible and auto-rescans in the background when the count drifts.
- Fixed: localStorage save could silently fail due to QuotaExceededError with
  large workspaces (1300+ designs). Added fallback that retries without
  fileMatchesSnapshot and logs errors instead of failing silently.

[File Scanner — Auto-Updating]
- New: Added background file watcher that monitors the design folder for changes
  to any design file type (.ai, .dxf, .f3d, .3mf, .stl, .png, .pdf). Changes
  are debounced (3s) then trigger a silent background re-scan. Todo and Orders
  screens update instantly — no manual "Scan Files" click needed.

[File Scanner — Performance]
- Fixed: matchFilesToDesigns was calling getShopProfileSync() (localStorage read)
  inside a per-design loop, causing slow scans. Hoisted outside the loop.

[Orders — Print Queue Performance]
- Fixed: "Print All 3D" button was very slow to respond. Badge updates and toast
  messages were delayed because handleSendAllToPrintQueue performed sequential
  Firebase reads and writes per item. Now uses optimistic local state updates
  and batched Firebase writes (fire-and-forget).

[Watch Folder — Dropbox Cross-Network Sync]
- Fixed: Watch folder did not detect new .3mf files synced via Dropbox from a
  workstation on a different network. Root cause was chokidar's stabilityThreshold
  (2s) being too low for Dropbox sync and no file integrity check, causing
  partially-synced files to be processed or missed. Increased stability threshold
  to 8s, added ZIP magic byte validation with 60s retry, and increased polling
  frequency.

[Code Quality]
- Fixed: Removed references to non-existent jpg/jpeg file status properties in
  OrdersV2.tsx. The png property already covers all image types.

================================================================================

v2.2.5

May 29, 2026
Version 2.2.5 — May 30, 2026 06:32 UTC
------------------------------------------

### New Features

- **Batch Slicer — Multi-Device Watch Folder Coordination** — The watch folder feature now uses Firebase to coordinate across devices so only one watcher runs at a time:
  - Starting the watcher checks Firebase for an active watcher on another device. If one is found, a confirmation dialog appears: *"Workstation (Maurizio-MacPro) is currently watching. Take over?"*
  - Confirming writes the current device to Firebase — the displaced device's real-time listener fires immediately and auto-stops its own watcher with a log message: *"Watch stopped — taken over by [device]"*
  - All other devices (not watching) show a live amber status banner: *"Maurizio-MacPro is currently watching"* via `onSnapshot` — no polling
  - Stopping the watcher clears the Firebase doc; the banner disappears on all devices instantly
  - Offline/stale protection: if the active device goes offline without stopping, a new device can force-take-over after a 60-second heartbeat timeout
  - Watch/Slice buttons remain enabled on non-watching devices and trigger the takeover flow rather than being disabled



### Bug Fixes

- **Add Design Modal (File Scanner)** — Style checkboxes now only show styles marked as "Include in File Scanner" in Shop Profile settings. Previously all styles were shown regardless of that flag.

- **Orders TODO Checkbox False Positives** — Fixed items incorrectly showing the TODO checkbox as checked when all files were present. Root causes:
  - DXF and F3D files were treated as production blockers (they are source/archive files, not required for production)
  - `expectFusion` is not a real field — was referencing wrong field name causing every item to flag as missing an F3D file
  - PNG/laminate check now only fires when a File Scanner bucket exists for the item

- **Orders TODO — Shop Profile Style Awareness** — TODO checkbox now respects per-style Required File Types from Shop Profile (same logic as File Scanner). E.g. "Cutter Only" configured with only 3MF+STL+PNG will not trigger TODO for missing DXF/F3D/AI files.

- **Stencil Detection False Positive** — Fixed designs whose name contains the word "stencil" (e.g. "Cookie Stencil") incorrectly showing the stencil file indicator as found. The match now requires "STENCIL" to appear after the design name in the filename (e.g. `Cookie Stencil STENCIL 4 inch.dxf`), consistent with the stencil folder naming convention.

v2.2.4

May 29, 2026
================================================================================
  3DTrax Pro - Release Notes
================================================================================

--------------------------------------------------------------------------------
  Version 2.2.4
  Release Date: May 29, 2026 17:04 UTC
--------------------------------------------------------------------------------

FIXES
  - Fixed Batch Slicer auto-watch falsely triggering on files that were opened
    but not modified. Root cause: macOS FSEvents (used by chokidar by default)
    fires change events on file open due to atime/metadata updates — a known
    chokidar bug (#985, #1194). Switched watcher to usePolling mode which reads
    actual fs.stat and only fires on genuine content changes.

  - Fixed auto-watch restarting the chokidar watcher on every page mount,
    causing duplicate watchers and spurious add events for existing files.
    Auto-restart now checks if the backend watcher is already running via
    get-status before calling start-watch.

IMPROVEMENTS
  - Auto-watch now correctly handles both scenarios:
      * New file added to watch folder (add event)
      * Existing file saved with changes (change event, size differs)
  - Opening a file in OrcaSlicer/Bambu Studio without saving no longer
    triggers an auto-slice.
  - usePolling mode is also more reliable on Windows with cloud sync folders
    (Dropbox, OneDrive) which have similar FSEvents-style quirks.

v2.2.3

May 28, 2026
3DTrax Pro - Release Notes
==========================

Version 2.2.3 — May 28, 2026 01:19:30 UTC
------------------------------------------

BUG FIXES
---------
- Fixed Todo badge count to correctly display the total number of missing file
  items (Fusion, DXF, Stencil, Laminate, PNG, etc.) instead of the number of
  orders with missing files. Badge now matches exactly what is shown on the
  Todo screen.

- Resolved an issue where the Todo badge would under-count missing items due to
  stale Firestore cache snapshots being processed before the full server
  response arrived.

- Fixed file status map construction in the header badge to use the same logic
  as the Todo screen, ensuring consistent results across both views.

- Corrected order status field resolution so both `status` and `orderStatus`
  fields are handled uniformly when calculating missing items.


NEW FEATURES
------------
- Print Queue V2: Complete rewrite of the print queue system with direct
  Bambu Lab printer integration. Sends .gcode.3mf files via FTP and triggers
  printing via MQTT — no slicing or file modification required.

- Orders now move to IN_PRODUCTION status only when ALL printable items in the
  order have been queued for printing, preventing premature status changes.

- Shop name badge added to order cards on the Orders page, showing which Gmail
  shop account the order came from, with account email shown in tooltip.

- File Scanner results now persist correctly after using the "Rescan Files"
  button on the Orders page. Results are saved to localStorage and file
  indicators update immediately.

CHANGES
-------
- Todo screen and badge now count individual missing file type badges per item,
  not just the number of items with missing files.

- Improved Gmail sync stability — removed large JSON.stringify calls that were
  causing the sync process to hang or crash on large order batches.

- Printer status tracking improved with better humidity and environmental data
  handling from Bambu Lab MQTT telemetry.

BUG FIXES
---------
- Fixed Gmail sync crash caused by serializing large order objects to logs
  during email parsing.

- Fixed "Rescan Files" button not updating file status indicators after a
  successful scan.

- Fixed orders incorrectly moving to IN_PRODUCTION when only a single item
  in a multi-item order was sent to the print queue.

v2.2.2

May 28, 2026
3DTrax Pro v2.1.2 Release Notes
================================

Bug FIX
----------

🐛 Bug Fixes
   • Added missing "chokidar": "^3.6.0" to dependencies.
   
Thank you for using 3DTrax Pro!

v2.2.1

May 27, 2026
# 3DTrax v2.2.0 Release Notes

**Release Date:** May 27, 2026

## ✨ New Features

### Batch Slicer Enhancements
- **State Persistence**: Batch Slicer operations now persist when navigating away from the page. When you return, the progress bar and operation status are restored automatically.
- **Include Subdirectories**: Added option to process files in subdirectories for both "Update Settings" and "Slice All" operations. Directory structure is preserved in output.
- **Progress Bar**: Progress indicator moved to top of screen during batch operations for better visibility.
- **Screen Sleep Prevention**: System sleep is now blocked during batch operations to prevent interruption.

### Print Queue Improvements
- **Slice Folder Watch Toggle**: Quick-access toggle button on Print Queue page to enable/disable watch folder without navigating to Batch Slicer screen.
  - Green = "Slice Folder Watch ON"
  - Red = "Slice Folder Watch OFF"

### Todo Badge Accuracy
- **Fixed badge count calculation** to match actual missing items in Todo screen
- Now checks: 3MF, DXF, F3D (Fusion), PNG (laminate), and stencil files
- Added size-specific path matching (e.g., 4" items match files with "4inch" in path)
- Proper root cause analysis: missing DXF → can't make Fusion → can't make 3MF

### Include in Todo Toggle
- **New checkbox on each order item** (left of Style column) showing actual Todo status
- **Checked** = Item is missing files and appears in Todo count/Todo screen
- **Unchecked** = Item has all required files (not in Todo)
- **Disabled/grayed** = Item is in production or doesn't need Todo tracking
- **Click to exclude**: When checked, click to manually exclude from Todo
- Toggle is saved to Firebase and persists across sessions

## 🔧 Bug Fixes

### Batch Slicer Subdirectory Output
Fixed output path calculation when processing files in subdirectories with `overwriteSource` enabled. Files now correctly overwrite in their original subdirectory locations.

### Header Todo Badge
- Fixed mismatch between Header badge count and actual Todo screen items
- Added DXF, F3D, and stencil file checking to badge calculation
- Items in production status (QUEUED, PRINTING, PRINTED, DONE) are now properly excluded

## 📦 Build Artifacts

### Mac ARM64 (Apple Silicon)
- **File:** `3DTrax-2.2.0-arm64.dmg`
- **Status:** ✅ Signed with Developer ID
- **Compatible:** macOS 11.0+ (Big Sur and later)

### Windows x64
- **Setup:** `3DTrax Setup 2.2.0.exe`
- **Portable:** `3DTrax 2.2.0.exe`
- **Status:** ✅ Signed with code signing certificate
- **Compatible:** Windows 10/11 (64-bit)

## ✅ Testing Checklist

### Batch Slicer
- [ ] Enable "Include subdirectories" and verify files in subfolders are processed
- [ ] Verify directory structure is preserved when overwriteSource is enabled
- [ ] Navigate away during operation and verify progress restores when returning
- [ ] Verify screen stays awake during batch operations
- [ ] Verify progress bar appears at top of screen

### Print Queue
- [ ] Click "Slice Folder Watch" toggle ON (should turn green)
- [ ] Verify folder is being watched for new 3MF files
- [ ] Click toggle OFF (should turn red)
- [ ] Verify watch is stopped

### Todo Screen
- [ ] Verify Header badge count matches Todo screen item count
- [ ] Check that items with missing DXF/F3D/stencil files are counted correctly
- [ ] Verify items in production are excluded from count

## 🚀 Deployment

Installers located in:
- Mac: `/out/3DTrax-2.2.0-arm64.dmg`
- Windows: `/dist-electron/3DTrax Setup 2.2.0.exe`
- Windows Portable: `/dist-electron/3DTrax 2.2.0.exe`

## 📝 Known Issues

None reported.

---

**Full Changelog**: Compare with v2.0.12

v2.0.12

May 23, 2026
3DTrax Pro 2.0.12 Release Notes
================================

Bug Fixes:
----------
- **Cross-Device Profile Sync**: Fixed workspace ID derivation to ensure shop profile syncs correctly across different computers when logging in with the same account
- **LocalStorage Key Format**: Fixed inconsistent key format (`3dtrax:shopProfile:` vs `shopProfile::`) that prevented profile lookup in built apps
- **Profile Lookup on New Devices**: Built app now correctly reads from `workspaces/ws_{uid}/config/shopProfile` in Firebase instead of showing setup wizard

v2.0.11

May 21, 2026
3DTrax Pro 2.0.11 Release Notes
================================

Performance Optimizations:
--------------------------
- **FileScanner Instant Load**: Designs now load instantly from local cache instead of waiting 10+ seconds for Firebase
- **Algorithm Optimization**: FileScanner style expansion optimized from O(n×m) to O(n) using Map-based lookups
- **DataGrid Pagination**: Added pagination (50 items/page) to prevent UI freeze with 1000+ designs
- **DataGrid Grouping**: Optimized grouping algorithm from O(n²) to O(n) using Map instead of find()

Memory Leak Fixes:
------------------
- **Header Component**: Replaced 1-second polling interval with Firebase onAuthStateChanged listener
- **OrdersV2 Scroll Tracking**: Removed redundant 1-second scroll position polling interval
- **Memory Optimizer**: Fixed global setInterval leak by adding explicit startMonitoring/stopMonitoring controls

React Performance:
------------------
- **OrderCard Memoization**: Added React.memo to prevent unnecessary re-renders when parent updates (critical for 100+ orders)

Code Cleanup:
-------------
- **Console Log Removal**: Removed 150+ console.log, console.warn, and console.error statements across:
  - usePrintQueueV2.ts (polling, finish handlers, job tracking)
  - ProductionNotes.tsx (photo upload, note loading)
  - TodoScreen.tsx (Firebase error handlers)
  - SetupWizard.tsx (Firebase save failures)
  - useSubscription.ts (trial initialization)
  - Home.tsx (data loading, theme parsing)
  - SetTemplates.tsx (template CRUD operations)
  - NotFound.tsx (404 logging)
  - OrdersV2.tsx (scroll tracking, bulk operations)

Bug Fixes:
----------
- **useCallback Import**: Fixed missing useCallback import in FileScanner.tsx causing runtime error
- **Silent Error Handling**: Changed non-critical error handlers to silent fails to reduce console noise while preserving toast notifications

Developer Experience:
---------------------
- **Reduced Console Spam**: App console is now significantly cleaner for debugging
- **Faster Initial Load**: FileScanner and Orders pages load noticeably faster
- **Smoother Scrolling**: Orders page scroll performance improved

Notes:
------
- All Firebase listeners remain intact with proper cleanup
- Error handling preserved for critical operations (toast notifications still work)
- Build time unchanged (5-7 seconds)
- Bundle size unchanged (2.48 MB)

Performance Impact Summary:
---------------------------
| Metric | Before | After |
|--------|--------|-------|
| FileScanner load time | ~10 seconds | Instant |
| FileScanner algorithm | O(n²) + O(n×m) | O(n) |
| DataGrid render items | 1402 designs | 50 per page |
| Console statements | ~250 logs | ~100 logs |
| OrderCard re-renders | 100+ per update | Only on prop change |

v2.0.10

May 17, 2026
3DTrax Pro 2.0.10 Release Notes
================================

Bug Fixes:
----------
- **Reprocess Style Matching**: Fixed auto-split functionality to correctly match order item styles with set templates regardless of word ordering (e.g., "cutter/stamp/stencil" now matches "cutter/stencil/stamp" via word-order-agnostic comparison)
- **Duplicate Key Warning**: Fixed React duplicate key warning for `PRINTED` status in bulk status dropdown
- **Debug Logging**: Removed excessive console logging from reprocess functionality to reduce noise

Improvements:
-------------
- **Style Normalization**: Enhanced style matching to use normalized word-based comparison, making it more robust against variations in style name formatting
- **Template Matching**: Template style matching now uses the same normalization logic as shop profile style mappings

Notes:
------
- Shop profile style names should match the exact word ordering from Etsy orders (e.g., "cutter/stamp/stencil")
- The system will now automatically handle minor variations in word ordering and separators (/ vs _ vs spaces)

v2.0.9

May 16, 2026
3DTrax Pro v2.0.9 Release Notes
================================

What's New
----------


🎨 Consistent Subscription Status Colors
   • Your subscription status now uses matching colors throughout the app — the user menu 
     icon and dropdown now show the same colors (red for expired, blue for trial, green 
     for monthly, gold for annual). Easier to see your subscription status at a glance.

📝 Updated Page Titles
   • Header titles now match each screen for better navigation:
     - Orders, Todo's, Notes, File Scanner, Inventory, Queue, Reports, Settings

⚙️ Streamlined Settings Menu
   • The settings navigation is now more compact with less spacing between items — 
     quicker to find what you need.

🌐 Version History on Website
   • The "Version History & Changelog" section now links to our website changelog 
     instead of GitHub. Links open in your default browser for a smoother experience.

🐛 Bug Fixes
   • Fixed loading issue on the Notes screen — your production notes now load reliably 
     without error messages.
   • Fixed Analytics page login — SMS codes now send and verify properly.
   • Fixed data display on Analytics dashboard — all stats now load correctly.

Thank you for using 3DTrax Pro!

v2.0.8

May 15, 2026
Version 2.0.8 — May 15, 2026

What's New & Fixed:

BUG FIXES
- Fixed subscription page showing incorrect monthly revenue amount
- Removed leftover internal branding visible in certain settings screens
- General stability improvements

v2.0.7

May 15, 2026
Version 2.0.7 — May 15, 2026

What's New & Fixed:

SIGNUP FIX
Fixed an issue where creating a new account would get stuck on the loading screen.
The app now correctly proceeds to the setup wizard immediately after signup.

BUG FIXES
- Fixed the About window displaying incorrect company information
- General stability improvements

v2.0.6

May 13, 2026
Version 2.0.6 — May 13, 2026

What's New & Fixed:

UPDATES NOW DOWNLOAD AUTOMATICALLY
Previously, clicking "Install & Quit" could fail with a missing folder error.
Updates now download straight from the cloud — no manual steps needed.

LOGIN SECURITY IMPROVEMENTS
The analytics dashboard now supports SMS-based two-factor authentication.
You'll receive a text message with a one-time code each time you log in,
keeping your data secure.

SUBSCRIPTION MANAGEMENT
Admins can now extend trials, apply discounts, and cancel or reactivate
subscriptions directly from the dashboard. Changes sync to Stripe in real time.

SETUP WIZARD FIX
Fixed an issue where the setup wizard would reappear after reinstalling the app,
even for users who had already completed it. Your settings are now correctly
restored the first time the app opens.

BUG FIXES & STABILITY
- Fixed shop profiles not loading correctly on startup
- Improved update check reliability
- General performance and stability improvements

v2.0.5

May 13, 2026
fix: Fixed workspace ID prefix (ws_) in App.tsx to correctly read existing shop profiles from Firebase
fix: Setup wizard no longer reappears for existing users after reinstall

v2.0.4

May 12, 2026
# Create/edit this file in Development/
echo "feat: App now checks Firebase for existing profiles before showing setup wizard
feat: OAuth branding updated to show 3DTrax Pro
fix: Website download links now use Firebase Storage
fix: Mac builds signed and notarized" > RELEASE_NOTES.txt

v2.0.3

May 12, 2026
feat: New Features Welcome Screen & App Analytics

New Features:
- Redesigned "New Features" welcome screen now shows when you select it from the User menu
- Added "View Changelog" button to see all version history
- Version number now correctly displayed on welcome screen

Better Release Experience:
- Faster app updates with improved release process
- Website download links always point to latest version
- Changelog page on website shows complete version history

Behind the Scenes:
- Added analytics to help improve the app based on usage
- Anonymous tracking of features used (no personal data collected)
- Helps us prioritize which features to improve next

Bug Fixes:
- Fixed GitHub release link in Settings
- Fixed website download buttons to always get latest version

v2.0.2

May 12, 2026
feat: New Features Welcome Screen & App Analytics

New Features:
- Redesigned "New Features" welcome screen now shows when you select it from the User menu
- Added "View Changelog" button to see all version history
- Version number now correctly displayed on welcome screen

Better Release Experience:
- Faster app updates with improved release process
- Website download links always point to latest version
- Changelog page on website shows complete version history

Behind the Scenes:
- Added analytics to help improve the app based on usage
- Anonymous tracking of features used (no personal data collected)
- Helps us prioritize which features to improve next

Bug Fixes:
- Fixed GitHub release link in Settings
- Fixed website download buttons to always get latest version

v2.0.1

May 11, 2026
feat: Local PNG thumbnail display with base64 loading

- Added automatic loading of local PNG artwork as thumbnails in File Scanner
- Uses base64 data URLs via Electron IPC (read-binary-file) for cross-platform compatibility
- Thumbnails load progressively in batches with loading spinners
- Removed legacy 'Fix Etsy Thumbnails' button (no longer needed)
- Updated DataGrid to display base64 thumbnails with loading states
- Works on both macOS and Windows file paths

v2.0.0

May 9, 2026
3DTrax Pro v2.0 - Major Release

## Core Features

### Inventory Management
- Complete 3D print inventory tracking
- Design catalog with thumbnails and metadata
- Stock level monitoring and alerts
- SKU generation and management
- Barcode/QR code support

### Production System
- Production workflow management
- Job scheduling and tracking
- Print queue organization
- Status updates (Pending, Printing, Completed)
- Production analytics and reporting

### Etsy Integration
- Automatic Etsy order import
- Product synchronization
- Customer data management
- Order status syncing

### File Management
- Drag & drop file scanning
- Support for multiple file formats
- Cross-platform file path handling (macOS & Windows)

### Data Management
- Firebase cloud storage
- Real-time data synchronization
- CSV import/export
- Data backup and restore
- Multi-workspace support

### Settings & Configuration
- Branding: Custom logo and business info
- Artwork: Default artwork settings and templates
- Gmail: Email integration for notifications
- Shipping: Shipping provider integration
- Printer Settings: 3D printer configuration
- Notifications: Customizable alert settings
- Workspaces: Multiple workspace management
- Subscription: License and subscription management
- Shop Profile: Shop-specific settings

### User Interface
- Modern dark theme UI
- Responsive design
- Real-time data grid
- Intuitive navigation with sidebar

### System Features
- Automatic updates
- Cross-platform support (macOS, Windows, Linux)
- Electron-based desktop application
- GitHub release integration

Looking for the latest version?

Get Latest Version