maksit-lto-backup/CHANGELOG.md
2026-09-06 15:33:46 +02:00

66 lines
5.4 KiB
Markdown

# 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`).