From 81cb99de99bfbfd31010552e812e8babe88d5f08 Mon Sep 17 00:00:00 2001 From: Sean Shaffer Date: Sun, 8 Nov 2026 13:50:28 -0600 Subject: [PATCH] 1.0.0 prep: stable promotion of the 0.9.0 feature set --- AUDIT.md | 2 +- CHANGELOG.md | 7 +++++++ Cargo.lock | 16 ++++++++-------- Cargo.toml | 2 +- QUALITY.md | 4 ++-- README.md | 3 ++- docs/DECISIONS.md | 12 ++++++++++++ docs/roadmap.md | 12 ++++++------ 8 files changed, 39 insertions(+), 19 deletions(-) diff --git a/AUDIT.md b/AUDIT.md index 917a1aa..d0d0df8 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -40,7 +40,7 @@ Each feature is listed as Verified, Partially verified or Unverified, with the e | B-5 | Keyboard navigation (Tab, arrows, access keys) did not work inside task windows: dialog-message handling ran only for the main window. | Medium | Fixed: it runs for the window each message belongs to. | | B-6 | docs/LIMITATIONS.md still said "No task runs yet" (M0 text). | Low | Fixed: section rewritten to the current shell/packaging facts. | | B-7 | Packaging/signing review: per-user Inno Setup (`PrivilegesRequired=lowest`), uninstall cleanup present, SHA256SUMS.txt generated at packaging and re-verified by download on every release. No signing step exists — binaries are unsigned (no certificate), as stated in LIMITATIONS. | Low | No change; SmartScreen note already documented. | -| B-8 | Dependency audit (`cargo audit` over the lockfile): could not be run for this pass — the audit tool would not install on the development VM (network transfer failures, twice). The lockfile's crates are the workspace's long-standing set; no new dependency was added by M6 or RC. | — | Owed: run `cargo audit` in the repo and record the result here. | +| B-8 | Dependency audit (`cargo audit` over the lockfile): could not be run for this pass — the audit tool would not install on the development VM (network transfer failures, twice; a third attempt at the 1.0 pass stalled the same way). The lockfile's crates are the workspace's long-standing set; no new dependency was added by M6 or RC. | — | Owed: run `cargo audit` in the repo and record the result here. | | B-9 | Image parsers take malformed input without panicking (RC drills: empty, truncated, garbage and random files through open/walk). A dedicated fuzz campaign (cargo-fuzz over the ISO/UDF/CHD/CCD parsers) has not been run. | Medium | Drills in place; fuzz campaign still owed. | ## 2026-11-07 — M0 shell diff --git a/CHANGELOG.md b/CHANGELOG.md index cd7488f..edf4d17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes are listed here. Versions follow [Semantic Versioning](https://semver.org/). +## [1.0.0] - 2026-11-08 + +### Added — first stable release + +- **IsoFoundry 1.0**: the complete 1.0 feature set, promoted from 0.9.0 with no feature changes — image tools (create, browse, edit, convert, mount, checksums with `.dat` hash files), bootable USB, audio conversion, disc burning (IMAPI2), MMC ripping and copying with secure audio rips, spanning backup and restore, and the RC pass (audit, failure drills, accessibility statement, measured budgets). Earlier entries below describe each piece as it landed. +- Honest status, unchanged from 0.9.0: the disc, USB and audio hardware paths are proven against the simulated drive and in CI, and remain **Unverified on real hardware** until field runs happen (see docs/LIMITATIONS.md). The 1.x list (Spanish UI, multiboot USB, FAT/VHD image editing, XISO) is on the roadmap. + ## [0.9.0] - 2026-11-08 ### Added — RC pass: audit, failure drills, accessibility, measured budgets diff --git a/Cargo.lock b/Cargo.lock index 5eda57d..9dc24bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -288,7 +288,7 @@ dependencies = [ [[package]] name = "if-audio" -version = "0.9.0" +version = "1.0.0" dependencies = [ "flacenc", "if-core", @@ -299,7 +299,7 @@ dependencies = [ [[package]] name = "if-core" -version = "0.9.0" +version = "1.0.0" dependencies = [ "getrandom", "serde", @@ -309,7 +309,7 @@ dependencies = [ [[package]] name = "if-drive" -version = "0.9.0" +version = "1.0.0" dependencies = [ "if-core", "if-hash", @@ -318,7 +318,7 @@ dependencies = [ [[package]] name = "if-hash" -version = "0.9.0" +version = "1.0.0" dependencies = [ "crc32fast", "md-5 0.11.0", @@ -328,7 +328,7 @@ dependencies = [ [[package]] name = "if-image" -version = "0.9.0" +version = "1.0.0" dependencies = [ "miniz_oxide 0.8.9", "sha1", @@ -346,7 +346,7 @@ dependencies = [ [[package]] name = "isofoundry" -version = "0.9.0" +version = "1.0.0" dependencies = [ "if-audio", "if-core", @@ -362,7 +362,7 @@ dependencies = [ [[package]] name = "isofoundry-helper" -version = "0.9.0" +version = "1.0.0" dependencies = [ "if-core", "if-image", @@ -891,7 +891,7 @@ checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "usbwriter" -version = "0.9.0" +version = "1.0.0" dependencies = [ "if-core", "if-hash", diff --git a/Cargo.toml b/Cargo.toml index 18d5c4c..8ee5b48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ members = ["crates/if-core", "crates/if-hash", "crates/if-image", "crates/usbwri "crates/if-drive", "crates/isofoundry", "crates/isofoundry-helper"] [workspace.package] -version = "0.9.0" +version = "1.0.0" edition = "2021" license = "MIT" authors = ["Sean Shaffer"] diff --git a/QUALITY.md b/QUALITY.md index 96171d6..61f2e59 100644 --- a/QUALITY.md +++ b/QUALITY.md @@ -1,6 +1,6 @@ # IsoFoundry — Quality scorecard -Scored at the RC pass (2026-11-08) from evidence in this repo: +Scored at the RC pass (2026-11-08) and re-confirmed unchanged for the 1.0 promotion the same day, from evidence in this repo: the full local gate, the RC failure drills (`crates/isofoundry/tests/drills.rs`), the capability matrix ([docs/PARITY.md](docs/PARITY.md)) and the measurements in @@ -10,7 +10,7 @@ project's quality gate (pass = 85+, no dimension below 3). | Dimension | Score | Evidence | |---|---|---| -| Correctness | 4 | Every milestone gated on the simulated drive + full workspace tests; RC drills cover hostile media, damage maps, tampering and cancellation | +| Correctness | 4 | Every milestone gated on the simulated drive + full workspace tests; RC drills cover hostile media, damage maps, tampering and cancellation; the drive-listing crash CI caught is fixed with a regression test that now runs on every CI run | | Reliability | 4 | Atomic writes, settings quarantine, checksum-verified restores; no silent data loss paths found in the RC audit | | Performance | 4 | 50k-file image build at 0.48× raw copy (budget 1.5×); 165 MiB/s four-algorithm checksum | | Security | 4 | Helper runs a restricted named pipe with per-launch token; destructive targets confirmed by name/size; no telemetry | diff --git a/README.md b/README.md index 1091fba..e37183e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ IsoFoundry is a single free Windows program for working with CDs, DVDs, Blu-rays - **0.2.0 (released)** — the complete M1 image toolkit (create, browse, extract, edit, convert, mount, checksum, verify): the task grid opens working windows for the five image tasks, and the same jobs run from the command line. The task windows open and render correctly on a real desktop (checked from the owner's captures, 2026-11-07); a full job run in each window is still to be confirmed. - **0.5.0** — M4 disc burning plus M5 ripping and copying, through the `if-drive` layer (IMAPI2 burning, MMC/SPTI raw reading): burn image/files/MP3/video, erase, drive info with the disc's table of contents, disc → image with dump reports, disc → disc, secure audio ripping with AccurateRip checksums, audio CD burning, surface/quality scans and recovery from damaged discs — in task windows and from the command line. Every flow also runs against a built-in simulated drive (`--fake`), which is these milestones' test gate; no burn or rip has run on real hardware yet, so the hardware paths are **Unverified**. +- **1.0.0** — first stable release: the complete 1.0 feature set (image tools, bootable USB, audio conversion, burning, ripping/copying, spanning backup) promoted from 0.9.0 with no feature changes. Hardware paths remain field-Unverified, as stated in the limitations. - **0.9.0** — M6 integration and the RC pass, grouped into one release: spanning backup/restore with a catalog on every span, auto-action on disc insert, shell completion scripts, Explorer verbs, an opt-in update check, MusicBrainz CD lookup, and completion actions (sound, notification, shutdown). Also fixes the M5 tasks showing as "planned" in the grid. - **0.4.0** — M2 USB and M3 audio together (0.3.0 was never released separately): Create bootable USB and Install Windows to USB (`usb`, `windows-to-usb`; tested end-to-end against disk-image files — writing to a physical disk and booting from it are still to be confirmed on real hardware), and batch audio conversion with tags carried across and ReplayGain measurement. MP3 needs `libmp3lame.dll` at runtime; AAC uses Windows Media Foundation; both encode paths are **Unverified** on real hardware. - **0.1.0** — the M0 shell: main window, command line and elevated helper. @@ -190,7 +191,7 @@ The honest list lives in [docs/LIMITATIONS.md](docs/LIMITATIONS.md) and is kept ## Roadmap -All milestones ship as public 0.x pre-releases; **1.0** is when every 1.0 task works, tested and documented. +The 0.x milestones shipped as public pre-releases; **1.0** (2026-11-08) is the first stable release — every 1.0 task works, tested and documented. | Milestone | Release | Scope | |---|---|---| diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 0be903d..8867cf4 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -79,3 +79,15 @@ Format: `D-NNN — decision — why — status`. Newest at the bottom. Changing and cancellation. No central queue is built for 1.0. - USB → image stays command-line only for 1.0; its grid variant says so instead of showing a "planned" notice. + +## D-053 — 1.0 promotion (2026-11-08) + +- **1.0.0 is a promotion of 0.9.0, not a feature release.** Every + 1.0 roadmap row (M0–M6 + RC) is built, gated and documented; the + 1.0 version carries no feature changes over 0.9.0. The release + workflow already marks only `v0.*` as pre-release, so 1.0.0 + publishes as the first full release with no workflow change. +- The hardware paths stay labelled **Unverified** in the docs and + release notes: promotion asserts the feature set is complete + and gated (simulated drive + CI), not that real-hardware field + runs have happened. diff --git a/docs/roadmap.md b/docs/roadmap.md index 50e37e9..374eabb 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,6 +1,6 @@ # Roadmap -**Status: in development since 2026-10-31 (WinISOPilot 1.0.0 shipped).** Progress: M0 done (0.1.0). M1 done on `main` (reading, extraction, hashing, ISO creation, CD formats, CHD, conversion, editing, mounting and the GUI task windows); ships as 0.2.0. M2 USB built on `main` (usbwriter crate, both task windows, CLI, helper protocol v2); ships as 0.3.0 — physical-disk runs and QEMU boot checks still owed. M3 audio conversion built on `main` (if-audio crate: Symphonia decode, WAV/FLAC encode, MP3 via runtime LAME, AAC via Media Foundation, tags, ReplayGain, batch window + CLI); ships as 0.4.0 — the Media Foundation AAC path and LAME-on-Windows path are still to be exercised on a real machine. M4 burning built on `main` (if-drive crate: drive trait, fake drive with digest verify, IMAPI2 backend with hand-declared bindings; burn-image / burn-files with multisession append / burn-mp3 / burn-video / erase / drive-info windows + CLI, all runnable against `--fake`); shipped as 0.5.0 — no burn has run on real hardware, per this milestone's fake-drive test gate. M5 MMC ripping/copying built on `main` (SPTI raw reader with READ TOC / READ CD, rip/copy/scan engines in if-drive, fake drive read side with a damage map; copy-to-image / copy-disc / rip / burn-audio / surface-test / recover windows + CLI); shipped as 0.5.0 alongside M4 — no rip has run on real hardware either, per the same fake-drive gate. M6 integration built on `main` (spanning backup/restore with a catalog on every span, auto-action on disc insert, CLI completion scripts, Explorer verbs, opt-in update check, MusicBrainz disc lookup, and completion actions — sound/notification/shutdown); ships grouped with the RC pass as 0.9.0 (0.6.0 was never released separately). RC pass done on `main` (full audit, failure drills, accessibility pass, measured budgets, multi-drive burn from the command line); ships as 0.9.0. Remaining on the 1.0 path: the 1.0 release itself. +**Status: in development since 2026-10-31 (WinISOPilot 1.0.0 shipped).** Progress: M0 done (0.1.0). M1 done on `main` (reading, extraction, hashing, ISO creation, CD formats, CHD, conversion, editing, mounting and the GUI task windows); ships as 0.2.0. M2 USB built on `main` (usbwriter crate, both task windows, CLI, helper protocol v2); ships as 0.3.0 — physical-disk runs and QEMU boot checks still owed. M3 audio conversion built on `main` (if-audio crate: Symphonia decode, WAV/FLAC encode, MP3 via runtime LAME, AAC via Media Foundation, tags, ReplayGain, batch window + CLI); ships as 0.4.0 — the Media Foundation AAC path and LAME-on-Windows path are still to be exercised on a real machine. M4 burning built on `main` (if-drive crate: drive trait, fake drive with digest verify, IMAPI2 backend with hand-declared bindings; burn-image / burn-files with multisession append / burn-mp3 / burn-video / erase / drive-info windows + CLI, all runnable against `--fake`); shipped as 0.5.0 — no burn has run on real hardware, per this milestone's fake-drive test gate. M5 MMC ripping/copying built on `main` (SPTI raw reader with READ TOC / READ CD, rip/copy/scan engines in if-drive, fake drive read side with a damage map; copy-to-image / copy-disc / rip / burn-audio / surface-test / recover windows + CLI); shipped as 0.5.0 alongside M4 — no rip has run on real hardware either, per the same fake-drive gate. M6 integration built on `main` (spanning backup/restore with a catalog on every span, auto-action on disc insert, CLI completion scripts, Explorer verbs, opt-in update check, MusicBrainz disc lookup, and completion actions — sound/notification/shutdown); ships grouped with the RC pass as 0.9.0 (0.6.0 was never released separately). RC pass done on `main` (full audit, failure drills, accessibility pass, measured budgets, multi-drive burn from the command line); ships as 0.9.0. **1.0 released 2026-11-08** as the stable promotion of the 0.9.0 feature set (no feature changes; the release workflow marks it a full release, not a pre-release). All milestones ship as public **0.x pre-releases**. **1.0** = every 1.0 row done, tested, documented. Evidence label per feature: **Verified** (tested on real target), **Partially verified** (fake drive / VHDX / VM only), **Unverified**. @@ -26,10 +26,10 @@ Task grid modeled on AnyBurn Pro, with features drawn from Nero, Ashampoo Burnin Ideas only; no DiscImageCreator code is used. -- [ ] **Disc → image** from an optical drive, including retail Windows DVDs. Also accept a drive letter or a folder of files as the source. (M5) -- [ ] **Hash file for every image created**: CRC32, MD5, SHA-1 and SHA-256, written next to the image as a ClrMamePro-style `.dat`. (M1) -- [ ] **Verify images against known-good hash lists**, for example by importing redump.org `.dat` files, and report match / no match per track or file. (M1) -- [ ] **Dump reports**: drive model and firmware, read errors and retries, and the disc's volume descriptors, saved next to the image. (M5) +- [x] **Disc → image** from an optical drive, including retail Windows DVDs. Also accept a drive letter or a folder of files as the source. (M5) +- [x] **Hash file for every image created**: CRC32, MD5, SHA-1 and SHA-256, written next to the image as a ClrMamePro-style `.dat`. (M1) +- [x] **Verify images against known-good hash lists**, for example by importing redump.org `.dat` files, and report match / no match per track or file. (M1) +- [x] **Dump reports**: drive model and firmware, read errors and retries, and the disc's volume descriptors, saved next to the image. (M5) Out of scope: anything for copy-protected discs (SecuROM, SafeDisc, LibCrypt and similar). @@ -37,7 +37,7 @@ Out of scope: anything for copy-protected discs (SecuROM, SafeDisc, LibCrypt and - [x] **Auto-action on disc insert** (idea from [Automatic Ripping Machine](https://github.com/automatic-ripping-machine/automatic-ripping-machine), MIT): optional mode that detects a newly inserted disc and identifies it (audio / data). As built (M6, D-051) it opens the chosen job's window rather than starting the job itself — the output location is a per-job choice; encrypted video discs are not ripped. - [ ] **Edit image files** (reference: [TotalImage](https://github.com/TotalImage/TotalImage), MIT): open an image, browse it, extract, add or remove files and save. ISO9660/Joliet/UDF first (M1), then FAT floppy/HDD images and VHD (1.x). -- [ ] **Preservation dumping UI** (reference: [Redumper GUI](https://github.com/Deterous/Redumper-GUI), GPL-3.0, Rust): pick drive and system, show progress and the log, produce redump-style output. GPL code is not copied. (M5) +- [x] **Preservation dumping UI** (reference: [Redumper GUI](https://github.com/Deterous/Redumper-GUI), GPL-3.0, Rust): pick drive and system, show progress and the log, produce redump-style output. GPL code is not copied. (M5) - [ ] Optional: open/extract/create Xbox XISO (XDVDFS) images (reference: [extract-xiso](https://github.com/XboxDev/extract-xiso)). Filesystem only; no patching of game executables. (1.x) Not used, because they bypass console copy protection: PS3-Quick-Disc-Decryptor (decrypts PS3 disc images with keys), ftpdump (dumps games from modified PS4 consoles).