Version History

Track updates, new features, and download previous versions

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