# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.1.0-alpha.2] - 2026-09-06 Still alpha versus **0.1.0-alpha.1**. Emulator and build validated; physical Windows/Linux tape, changer, and Linux SMB staging are not hardware-proven yet. Not a production-ready line. ### Added - Desktop packaging as sibling GitHub assets: Windows setup `maksit-lto-backup-{version}.exe` (Avalonia UI) and `maksit-lto-backup-{version}.flatpak` (Avalonia UI), alongside the portable `maksit-lto-backup-{version}.zip` (win-x64 console, Avalonia UI, and Worker). The installer and Flatpak are not packed inside the zip. On Windows the Flatpak bundle is built via WSL Debian. - Faceted LTO cartridge app icon (not the brand M). ### Changed - Avalonia UI is **MVVM** (`CommunityToolkit.Mvvm`): operations, settings, monitor, and service controls live in `MainViewModel`; `MainWindow` is a thin view. - Configuration (console, UI, Worker) is written to `%AppData%/MaksIT/LTO Backup/settings.json` (WiX `installFolderName`). The shipped `configuration.json` next to the exe is seed-only. - Dark theme uses the MAKS.IT origami blues (`#33A5CF` / `#006199`). - Synced RepoUtils utils: ContainerRegistry JSON catalog (PascalCase Harbor / InCluster keys). ## [0.1.0-alpha.1] - 2026-08-21 Alpha preview versus last published **0.0.2** (HEAD was console-only Windows on **net8.0**). Emulator and build validated; physical Windows/Linux tape, changer, and Linux SMB staging are not hardware-proven yet. Not a production-ready line. ### Added - **Avalonia UI (`MaksIT.LTO.Backup.UI`):** cross-platform operations host (Monitor / Drive / Library / Backup / Settings / Service) on Windows and Linux — SimpleTheme **Dark** styles aligned with Cluster Console. - **Shared library (`MaksIT.LTO.Backup.Shared`):** configuration model, `ConfigurationFileService`, `BackupOrchestrator`, `LibraryOrchestrator`, scheduling helpers used by console, UI, and Worker. - **Worker (`MaksIT.LTO.Backup.Service`):** scheduled **aggregations** (ordered job waves) with UScheduler-shaped calendars and overdue catch-up; exclusive lease; automatic drive claim/unload; console `backup --name` / `backup --aggregation` [`--scheduled`]. - **Service registration:** Windows SCM (`sc.exe` `binPath=` / `start=` spacing) and systemd (`Type=notify` + `AddSystemd()`, quoted `ExecStart`/`WorkingDirectory`, execute bit, unit removal on uninstall). Worker content root is the application base directory so SCM/`systemd` cwd does not hide `configuration.json`. - **Device abstraction:** `ITapeDrive` / `ITapeLibrary` with file-backed emulators (`EmulatedTapeDrive`, `EmulatedTapeLibrary`), `WindowsTapeDrive` adapter, and `DeviceMode` / `Topology` (`StandaloneDrive` | `TapeLibrary`). - **Linux physical backends:** `LinuxTapeDrive` (`/dev/nst*` + MTIOCTOP/SG_IO MAM) and `LinuxTapeLibrary` (`/dev/sg*` + SCSI medium changer). - **Windows physical changer:** `WindowsTapeLibrary` via `IOCTL_CHANGER_*` (inventory, initialize, move) — 0.0.2 had drive IOCTLs only. - **Shared SCSI/MAM helpers:** `MamAttributeCodec`, `ScsiMediumChanger`; neutral `TapePosition`. - **Cross-platform SMB:** `RemotePathAccess` — WNet on Windows (replaces in-repo `NetworkConnection`), SMBLibrary staging on Linux (new). - **SchemaVersion 2 on-tape layout:** BOT index (`MLTI`), payload, filemark, descriptor preamble (`MLTD`), length-prefixed AES-GCM descriptor, double filemark; Overwrite or Append; SHA-256 file hashes (0.0.2 used a simpler CRC32 descriptor layout). - **Emulator tests (`MaksIT.LTO.Tests`):** unit / E2E / scheduling coverage without physical tape; **xunit.v3** **4.0** + **Microsoft Testing Platform** (`global.json` `test.runner`, `TestingPlatformDotnetTestSupport`) and **coverlet.MTP**. - **RepoUtils** under `utils/` (community test / release engines). README coverage badges are rewritten by the **CoverageBadges** plugin (`badgeFormat: shields`) when `utils\Invoke-TestEngine.bat` runs. - Maintainer-local agent wiring (`AGENTS.md`, `.cursor/maksit-skills.json`) and this changelog. ### Changed - Target **.NET 10** (`net10.0`); solution file `src/MaksIT.LTO.slnx` (was `MaksIT.LTO.Backup.sln` + **net8.0**). - Console host thinned to Shared orchestrators; configuration lives in Shared (`configuration.json`). Console, UI, and Worker load it from the application base directory. - Crypto / hashing / logging / Windows SMB move onto **MaksIT.Core** (+ local `FileHashUtility`); in-repo `AESGCMUtility`, `ChecksumUtility`/`Crc32`, `FileLogger*`, and `NetworkConnection` removed. - Publish path: RepoUtils release packaging instead of `dotnet_build_script.*`. Host version comes from root `Directory.Build.props` only. ### Removed - Legacy `MaksIT.LTO.Backup.sln`, console-local `Configuration` / `Entities`, and `src/dotnet_build_script.*`. - WPF-classic Avalonia light theme (`WpfClassic.axaml`); unused `WindowsVersions` constants; console `secret.txt` copy that was never in-repo; Community-only `utils/templates/` and obsolete `Update-RepoUtils` docs. ## [0.0.2] - 2024-11-03 ### Added - Console LTO backup/restore toolkit (local and SMB paths). - AES-GCM encrypted descriptors, checksum verification, cartridge EEPROM (MAM) read/write. - Dependency injection, console and file logging. - Build scripts and contributor docs (`README.md`, `CONTRIBUTING.md`, `LICENSE.md`).