|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## [1.0.14] - 2026-03-30 |
| 4 | + |
| 5 | +### Added |
| 6 | +- Progress log entries are now written to a per-session log file at `%LocalAppData%\EvergreenUI\logs\EvergreenUI-<timestamp>.log` (UTF-8, no BOM); a new file is created on each launch of the Workbench |
| 7 | +- `Format-LogEntry` private function: shared timestamp and level-prefix formatting used by `Write-UILog` and `Write-UpdateOutput`, eliminating duplicated formatting logic |
| 8 | +- `Merge-ConfigSection` private function: merges missing default properties into a loaded config section, replacing six identical `foreach`/`Add-Member` blocks in `Get-UIConfig` |
| 9 | +- `Get-SafeFolderName` private function: sanitises a definition file's parent directory name for use as a working folder name; applied in `Invoke-IntunePackageBuild` and `Invoke-LocalPackageInstall` |
| 10 | + |
| 11 | +### Changed |
| 12 | +- Navigation rail is now collapsible via a hamburger toggle button; nav items show icon and label when expanded (180 px) and icon only when collapsed (64 px); label visibility is toggled via named `TextBlock` controls (`NavAppsLabel`, `NavDownloadLabel`, etc.) |
| 13 | +- NerdioShellApps PowerShell module moved from `support/` into `Resources/` and is loaded automatically from the bundled path at runtime; the Nerdio Manager module-path setting and its associated Settings page controls have been removed |
| 14 | +- `Write-UILog` and `Write-UpdateOutput` now delegate to `Format-LogEntry` for consistent `[HH:mm:ss] [LEVEL]` formatting |
| 15 | +- `Get-UIConfig` simplified by replacing repeated merge loops with `Merge-ConfigSection` calls |
| 16 | +- `Format-LogEntry.ps1` is now dot-sourced into every background runspace before `Write-UILog.ps1` so log formatting is available in all runspaces |
| 17 | +- `Get-SafeFolderName.ps1` is now dot-sourced into the Intune import and Install runspaces so the helper is available where needed |
| 18 | +- Post-import Nerdio verification context (`PendingNerdioPostImportVerifyAppId`, `PendingNerdioPostImportExpectedEvergreenVersion`) is now stored in `$syncHash` at dispatch time rather than being re-read from captured local variables in the completion timer tick, fixing a strict-mode variable-not-set error after a successful Shell App version add |
| 19 | +- Install tab: elevation/UAC status indicator right-aligned to match sign-in status indicators on the Import tabs (DockPanel `LastChildFill` changed from `True` to `False`) |
| 20 | +- Download queue list view: padding removed from the wrapping border to tighten spacing |
| 21 | +- `GridViewColumnHeader` style extracted to a single shared style in `Window.Resources`, removing duplicated per-`ListView` header style definitions |
| 22 | + |
| 23 | +### Fixed |
| 24 | +- Background runspaces (Download All, Library Update, Update-Evergreen, Install resolve/run, Intune import, M365 package build) all failed silently because `Format-LogEntry` was not dot-sourced into the runspace session; every `Write-UILog` call threw a "term not recognised" error that was caught and swallowed, leaving no log output and no work performed |
| 25 | +- Intune Win32 import and Install run runspaces failed with "term not recognised" for `Get-SafeFolderName` after the function was extracted in the observability refactor |
| 26 | +- Install tab "Find latest versions" logged an error (`Format-LogEntry` not recognised) and performed no version resolution |
| 27 | +- Nerdio Shell App "Add version" logged a strict-mode error (`$shellAppId` cannot be retrieved) when attempting to set post-import verification context in the completion handler |
| 28 | +- Install tab elevation status indicator no longer stretches across the full status bar width |
| 29 | +- NerdioShellApps module updated for Windows PowerShell 5.1 compatibility: PS 7-only ternary and null-coalescing operators replaced, temp directory detection rewritten using Windows-compatible environment checks, `PSStyle` fallback added for informational logging |
| 30 | +- Em dash characters (`—`) replaced with hyphens in string literals across private functions; UTF-8 em dashes were misread by PowerShell 5.1 as Windows-1252, causing the middle byte (`0x94`) to be interpreted as a closing double-quote and breaking script parsing on import |
| 31 | + |
3 | 32 | ## [1.0.13] - 2026-03-29 |
4 | 33 |
|
5 | 34 | ### Added |
|
17 | 46 | ### Changed |
18 | 47 | - Import tab: Microsoft 365 Apps sub-tab inserted between Nerdio Manager Shell Apps and Authentication tabs |
19 | 48 | - Import tab / Microsoft 365 Apps: Channel and Company Name XML placeholders (`#Channel`) are resolved at packaging time from the user's dropdown selection; Channel is no longer read from the XML for display purposes |
20 | | -- Import tab / Intune and Nerdio Manager: connection status indicators updated to match the Microsoft 365 Apps tab — 9×9 ellipse with border stroke, service-name prefix label ("Intune:" / "Nerdio Manager:"), and status text right-aligned in the count bar |
| 49 | +- Import tab / Intune and Nerdio Manager: connection status indicators updated to match the Microsoft 365 Apps tab - 9×9 ellipse with border stroke, service-name prefix label ("Intune:" / "Nerdio Manager:"), and status text right-aligned in the count bar |
21 | 50 | - Import tab / Intune and Nerdio Manager: count bar `DockPanel` changed to `LastChildFill="False"` so the right-docked status indicators correctly snap to the right edge |
22 | 51 | - Import tab / Microsoft Intune Win32 Apps: Import Win32 app button height pinned to 32 px to match the Nerdio Manager Shell Apps tab |
23 | 52 | - Nerdio Manager authentication: `Connect-Nme` called with `-ErrorAction Stop` so non-terminating errors are promoted to terminating and caught by the existing error handler; return value checked for null with an explicit failure message; `Set-NmeCredentials` also called with `-ErrorAction Stop`; module-load failure path now writes to the progress log |
24 | 53 |
|
25 | 54 | ### Fixed |
26 | | -- Nerdio Manager authentication: failures produced no log output when the NerdioShellApps module could not be loaded silently (empty path) or when `Connect-Nme` wrote non-terminating errors rather than throwing — both cases are now logged |
| 55 | +- Nerdio Manager authentication: failures produced no log output when the NerdioShellApps module could not be loaded silently (empty path) or when `Connect-Nme` wrote non-terminating errors rather than throwing - both cases are now logged |
27 | 56 |
|
28 | 57 | ## [1.0.12] - 2026-03-28 |
29 | 58 |
|
|
38 | 67 | ## [1.0.11] - 2026-03-27 |
39 | 68 |
|
40 | 69 | ### Added |
41 | | -- Import tab / Microsoft Intune: `DisplayName` property added to all comparison rows and used as the **App** column — matched rows show the Intune app name, unmatched rows show the definition name |
| 70 | +- Import tab / Microsoft Intune: `DisplayName` property added to all comparison rows and used as the **App** column - matched rows show the Intune app name, unmatched rows show the definition name |
42 | 71 | - Import tab / Nerdio Shell Apps: **Versions** column shows the total count of versions present on the Shell App |
43 | 72 |
|
44 | 73 | ### Changed |
45 | | -- Import tab / Microsoft Intune: columns reduced from 9 to 6 — **App**, **Publisher**, **Intune Version**, **Latest**, **Status**, **Action**; removed Definition, Matched, Update Required, and Definition Version columns |
46 | | -- Import tab / Microsoft Intune: Action column values rationalised — `Import new app` (definition not in Intune), `Import new version and supersede` (matched app with update available), `Fix in definition` (duplicate GUID across definitions), `-` (no action required) |
47 | | -- Import tab / Microsoft Intune: row colours updated — green tint for matched apps that are current; amber tint for matched apps with an update available; transparent background for all other rows |
48 | | -- Import tab / Nerdio Shell Apps: columns restructured — **App**, **Publisher**, **Shell App**, **Versions**, **Shell App Version**, **Latest**, **Status**, **Action**; removed Definition App column |
49 | | -- Import tab / Nerdio Shell Apps: Action column values — `Update`, `Import`, or `-`; same row colour scheme as the Intune tab |
| 74 | +- Import tab / Microsoft Intune: columns reduced from 9 to 6 - **App**, **Publisher**, **Intune Version**, **Latest**, **Status**, **Action**; removed Definition, Matched, Update Required, and Definition Version columns |
| 75 | +- Import tab / Microsoft Intune: Action column values rationalised - `Import new app` (definition not in Intune), `Import new version and supersede` (matched app with update available), `Fix in definition` (duplicate GUID across definitions), `-` (no action required) |
| 76 | +- Import tab / Microsoft Intune: row colours updated - green tint for matched apps that are current; amber tint for matched apps with an update available; transparent background for all other rows |
| 77 | +- Import tab / Nerdio Shell Apps: columns restructured - **App**, **Publisher**, **Shell App**, **Versions**, **Shell App Version**, **Latest**, **Status**, **Action**; removed Definition App column |
| 78 | +- Import tab / Nerdio Shell Apps: Action column values - `Update`, `Import`, or `-`; same row colour scheme as the Intune tab |
50 | 79 | - Import tab / Authentication: sign-in buttons are disabled while a session is already authenticated and re-enabled when the user signs out |
51 | | -- Settings tab: Preferences section reorganised — Theme selector occupies the left half of the row; **Show Import tab** and **Show Install tab** toggle switches are grouped on the right half within the same row |
| 80 | +- Settings tab: Preferences section reorganised - Theme selector occupies the left half of the row; **Show Import tab** and **Show Install tab** toggle switches are grouped on the right half within the same row |
52 | 81 | - Import tab / Microsoft Intune: `IsUpdate` flag passed to the import runspace is now derived from `IsMatched` and `UpdateRequired` row properties rather than the `ImportAction` string, making the distinction between a new app and a supersedence update independent of the display label |
53 | 82 |
|
54 | 83 | ### Fixed |
|
146 | 175 | ### Added |
147 | 176 | - **Export CSV**: Apps view results can be exported to a CSV file via the toolbar |
148 | 177 | - **Open folder** button in the Downloads view to open the output directory in Explorer |
149 | | -- Library GridView is now fully dynamic — columns are generated from the properties returned by Evergreen rather than being hardcoded |
| 178 | +- Library GridView is now fully dynamic - columns are generated from the properties returned by Evergreen rather than being hardcoded |
150 | 179 |
|
151 | 180 | ### Fixed |
152 | 181 | - Prevented duplicate entries appearing in the download queue when the same app is added multiple times |
|
0 commit comments