IODD Tool specification #7
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
phg/iodd-tool#7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
IODD Tool specification
Status: complete — implementation-ready specification
Labels: ready-for-agent, wayfinder:map
Scope: planning and specification only
Updated: 13 October 2026
Destination
An implementation-ready specification for a native macOS Swift app, IODD Tool, that preserves the useful FAT Defrag GUI functionality and creates valid fixed-size VHD files with verified contiguous host allocation for IODD devices. The map is complete when product, filesystem, recovery, platform and validation decisions are settled; implementation is a later effort.
Notes
Problem Statement
An IODD user needs to inspect and fix fragmentation on external storage from a native macOS application. The existing FAT Defrag GUI offers analysis, file defragmentation, and small-file compaction, but its non-native interface and documented allocation, display, cancellation, and recovery defects make a direct visual rewrite insufficient.
The user owns an IODD mini and wants support for that device and newer IODD devices. An ISO may satisfy documented IODD allocation requirements while still being fragmented; a VHD must be contiguous. Users need to understand this distinction and know whether a file actually satisfies the selected device's requirements.
The user also needs the relevant VHD Tool++ creation functionality on macOS: choose a size and create a valid fixed-size VHD in a single contiguous host allocation. Enough total free space does not establish that a sufficiently large free run exists. A blank reservation, a sparse image, a valid but fragmented VHD, or an image whose footer falls in another extent does not satisfy this request.
Solution
Specify IODD Tool, a native Swift application for macOS 15 and later on Apple Silicon. It discovers all external FAT32/exFAT host volumes, including devices reported as fixed media, and preserves the useful original Analyze, Defrag File, Defrag All, Compact, statistics, allocation map, selection, progress, and cancellation workflow.
Add fixed-size VHD creation with an explicit virtual capacity, file-format validation, and verification that the complete resulting host file occupies one extent. Present total free space, the largest free run, host-file overhead, and device eligibility as separate properties. Define correct failure and recovery behavior before enabling writes.
This document indexes the conversation, completed research and resolved decisions. The product, workflow, software-validation and distribution contracts are accepted, and the implementation handoff is complete. The user has authorized planning and specification only for this effort.
User Stories
Decisions so far
Set the supported volume and device contract: Full base-format geometry and validated layouts; read-only/partial diagnostics; separate volume-operation eligibility and IODD qualification. The authoritative answer is the ticket's resolution comment.
Choose the filesystem engine and recoverable mutation contract: Swift offline worker, device-wide isolation, internal journal, verified per-file commits, and conditional recovery. The authoritative answer is the ticket's resolution comment.
Define fixed VHD creation and allocation failure behavior: Exact binary capacity, verified zeroed guest disk, create-only destination, separate compaction, and recoverable creation outcomes. The authoritative answer is the ticket's resolution comment.
Define analysis, defrag, and compaction success criteria: Complete verified snapshots, separate profile annotations, largest-first Defrag All, and bounded compaction with measured free-run outcomes. The authoritative answer is the ticket's resolution comment.
Validate the native analysis and VHD creation workflows: User accepted the macOS HIG redesign and all five workflow presentation decisions. The authoritative answer and prototype evidence are in the ticket's resolution comment.
Set validation gates and the implementation handoff: Independent software/fault gates, virtual macOS integration, no hardware or performance gates, and a signed/notarized DMG plus Homebrew cask and staged handoff. The authoritative answer is the ticket's resolution comment.
Name the project IODD Tool: IODD Tool branding and iodd-tool repository identity, with historical evidence preserved.
Analyze a FAT32 image: Native image analysis and independent 32-geometry corpus implemented; full-Xcode integration tests/build pass on implement/iodd-tool-spec-7, merge
766c42c.Inspect the complete allocation map: Full-volume exact map/selection/accessible ranges implemented and independently verified on FAT32 and exFAT;37 integrated tests and native keyboard/stale checks pass, final checked commit
cd50bd8.Analyze an exFAT image: All62 ordinary exFAT geometry pairs and complete allocation/entry-set/VDL analysis independently verified; native checker qualification remains explicit, integrated native table/map smoke passes.
Assess IODD image eligibility: Named documented profiles, ISO24-piece allowance and separate fixed-VHD complete-allocation/container checks implemented;49 integration tests, QEMU/oracles and native FAT32/exFAT selection/firmware/stale checks pass at
904dd22.Preview fixed VHD creation: Exact binary capacity, footer-inclusive allocation, directory/collision semantics, conservative recovery workspace and stale/no-write preview implemented;61 integration tests and native unit/correction/collision checks pass, merge
a133e4d.FAT32 file defragmentation and shared recovery implemented: exact reviewed whole-file relocation, physical-unit-safe reservations, bounded checksummed journal/registry/retirement, idempotent logged rollback/forward recovery and conservative imported-evidence refusal. Final83tests/1018faultcases, all32geometries, native explicit-consent image workflow and independent content/untouched/fsck checks pass; integration950e500. Raw-device and signed-release gates remain later tickets.
Contiguous FAT32 VHD creation implemented: exact create-only reviewed full allocation, complete zero guest/fixed footer verification, logged spanning entries/directory growth, source-free rollback/forward recovery and physical-unit-safe reservations. Final105tests/all32geometries/1010creationfaultcases plus nativeCreate/Stop and independent footer/content/extent/QEMU/fsck checks pass; integration2b1dbcb. exFAT/nativeexternal/signedrelease gates remain separate.
Implementation #16: Defragment a file on an exFAT image is resolved on integration a4ec902. The shared journal now verifies complete exFAT allocation, bitmap/FAT/entry publication and bounded replay; final 124-test suite, all62 software geometry pairs, controlled faults, native image workflows and exact-source macOS15 probe pass. Native checker evidence retains21 passes/45 explicit driver refusals; raw access and release gates remain separate.
Implementation #14: Create a contiguous VHD on an exFAT image is resolved on integration fef4131. Full zero guest/footer/contiguous allocation, bitmap/entry publication, separate directory growth and bounded source-free recovery pass143tests/all62software geometry pairs/1008fault cases, native Create/Stop and exact-source pristine15 creation. Native checker scope is17passes/45software-only geometries; external access and final release gates remain separate.
Implementation #20: Discover and analyze external host volumes is resolved on integration f424fb8. Signed ordinary-worker discovery, selected-range read-only analysis, whole/sibling exclusion and truthful lifecycle outcomes pass 158 tests and actual standard-user macOS 15/current checks. Final combined signed scans preserve independent six-file/VDL/range and full offline hashes. Native writes, physical/cache durability and final distribution gates remain separate.
Implementation #17: Run Defrag All with accurate outcomes is resolved on integration cbc9aef. Full-volume frozen review/order, verified file transactions, predictable skips, failure/recovery halts, safe Stop and truthful retained final results pass 166 integrated tests and native FAT32/exFAT/large-file checks. Shared FAT32 allocation-slack and postcommit Stop regressions are corrected. Image-only scope; later raw-write/recovery/release gates remain pending.
Implementation #18: Compact small files with measured outcomes is resolved on integration 6f6a9b3. Reviewed bounded FAT32/exFAT compaction includes contiguous files, finite caps, strict final benefit and preserved committed-prefix free space. Full 182-test combined suite, fresh 26-test/79-case integration checks, native two-file completion and actual Copying/Stop pass independent complete allocation/content/free-run checks. Scoped image qualification and explicit limited/unverified outcomes are retained; later recovery/raw-write/distribution gates remain pending.
Implementation #19 — verified recovery workflow
Recover interrupted operations in the app is implemented and resolved on integration merge 58e8cf4. Read-only matching, explicit replay, self-contained bundles and reverified per-file/aggregate history preserve unresolved evidence and distinguish unknown later outcomes/metrics. All 200 ordinary release tests pass (895.115 s), including 952 aggregate faults; six final-source native image bundle sessions and fresh 21-test/87-case merge/release checks pass. External writes #21–23 and final supported-runtime/distribution/lifecycle gates #24 remain active under the resumed full implementation effort.
Implementation #21–23 — qualified external operations enabled
All four flags are enabled in development integration after independent review, canonical/signing checks and thin exact-artifact checks on both runtimes. Qualify and package the native app (#24) remains the frontier: supported lifecycle, final frozen both-OS suites/native UI/whole-review and notarized/stapled DMG/Homebrew distribution are still open. Earlier planning, pause, milestone and failure history is preserved.
Not yet specified
None. All required planning decisions are resolved; implementation and software validation execution are the later effort.
Implementation Decisions
The following records confirmed scope and requirements implied by it. Research constraints are identified as such; accepted operation and workflow choices are indexed by their resolved tickets. Validation gates and the staged handoff are governed by Set validation gates and the implementation handoff.
ready-for-agent.Testing Decisions
The authoritative independent fixture/oracle matrix, fault/recovery outcomes, virtual macOS integration, release/lifecycle prerequisites and staged implementation plan live in the resolution comment on Set validation gates and the implementation handoff. The confirmed main test boundary remains the public volume-operation API against disposable FAT32/exFAT images, supplemented by thin UI and virtual-volume integration checks.
Software validation is the release gate. Physical-media/IODD trials and performance commitments are outside this effort. The referenced contracts specify required evidence; this planning record does not claim that the eventual implementation has already passed it.
Out of Scope
Further Notes
Specification maturity and triage. The specification retains its requested
ready-for-agentlabel and is implementation-ready. All wayfinder decisions are resolved through user feedback; the map is complete. The later implementation tickets remain open. Current work remains planning and documentation, with the actual software evidence to be produced during implementation.Logical structure. The accepted operation, worker and storage-ownership contract is held by Choose the filesystem engine and recoverable mutation contract, retaining the public volume-operation API as the primary testing boundary. The native presentation direction is held by Validate the native analysis and VHD creation workflows. Detailed module layout and exact production interfaces remain later implementation matters; this map authorizes no production build.
Resolved validation and handoff. Set validation gates and the implementation handoff holds the accepted independent software evidence, virtual macOS integration, DMG/Homebrew lifecycle contract and staged route through the existing implementation tickets. No required decision remains open.
No common maximum VHD capacity or host sector/cluster geometry matrix was proved for all IODD models. A consumer's published 2040 GiB VHD limit must not automatically become an IODD guarantee. Firmware-specific named-image features must remain separate from ordinary creation.
IODD preparation constraint. Vendor guidance prohibits moving or defragmenting a host image while its hardware virtual drive is in use. The accepted preparation/access requirements are held by Choose the filesystem engine and recoverable mutation contract. OS volume unmounting does not prove hardware LUN detachment; the accepted presentation is held by Validate the native analysis and VHD creation workflows. IODD operational evidence.
Evidence scope. The original FAT Defrag investigation observed startup and TEST discovery, not successful Analyze, mutation, or recovery. VHD Tool++ translation resources were inspected as clues, but its executable was not run or traced. Completed research establishes independently implementable format requirements and source-backed platform alternatives; it does not certify the eventual app or the user's unspecified firmware.
Source and decision provenance. Read the wayfinder map, reference baseline, and completed IODD, macOS access, and fixed VHD research. Detailed findings remain in those assets and their resolved research tickets. The glossary supplies the terms host volume, extent, free run, defragmentation, compaction, fixed-size VHD, virtual capacity, uninitialized guest disk, and IODD eligibility.
Tracker configuration. Forgejo Issues for this repository govern the hosted specification and implementation tickets. The local planning map, original specification, and retained research keep their history; the separate implementation publication index holds reciprocal hosted/local references. This hosted specification and its resolved decision comments govern the implementation-ready handoff. The retained original specification remains a historical publication snapshot; all named planning decisions are closed.
Current implementation effort
On 13 October 2026, phg invoked implement-spec for this specification, starting the software build effort on implement/iodd-tool-spec-7. The planning-only scope above records the completed prior effort. Implementation follows the existing 17-ticket graph and the accepted software-only validation gates; completed slices are recorded in Decisions so far. Physical-media trials remain outside scope.
Paused on 13 October 2026 at the user's request, “Pause when you've finished the current tickets,” after resolving the current set #17, #18 and #20. The pushed integration checkpoint is 6f6a9b3 on implement/iodd-tool-spec-7. Twelve of the seventeen implementation tickets are resolved. On resume, the first unblocked unassigned ticket is Recover interrupted operations in the app (#19); #21, #22, #23 and #24 remain pending behind their dependencies. No new frontier ticket has been claimed or started. The full-spec code review and final signed/notarized release are deferred until the remaining tickets complete. Task-owned VMs are stopped; committed worktrees, validation/recovery evidence and resume context are preserved.
Resumed at 2026-10-13T21:01:53.034022+00:00 after phg's explicit “please continue”. The completed pause checkpoint remains above as history. Recover interrupted operations in the app (#19) is now assigned to phg and started from validated integration6f6a9b3; the remaining dependency graph, full-spec review and final release gates are active again. The original checkout and prior evidence remain preserved.
Implementation continued on 15 October 2026 at pushed 381442f: 16 of 17 implementation tickets (#8–23) are resolved; #24 is assigned to phg and active. This is operation enablement, not final release or whole-review completion. Older macOS 15 and capacity-derivative VMs remain normally stopped with evidence retained; the fresh 100 GB macOS 27 VM is safely idle after exact-d514 qualification. Earlier pause/resume statements remain historical.
Wayfinder complete — implementation-ready specification
All six required decision tickets are resolved through the user's feedback. The destination is reached: this specification indexes the accepted product, engine/recovery, creation, analysis/compaction, native-workflow and validation contracts, with no required decision or in-scope fog remaining.
The authoritative final software-validation, distribution/lifecycle and staged implementation handoff is the resolution comment on Set validation gates and the implementation handoff.
The existing 17 implementation tickets remain open for the later build effort. Their acceptance criteria and retained records have been reconciled with the final contract. Verified the dependency graph has no cycles or missing references and that the original specification snapshot is preserved. The first unblocked implementation slice is Analyze a FAT32 image.
Closing this map records planning completion. The actual implementation and its required software evidence have not yet been produced.
Native Swift FAT Defrag and contiguous VHD creation specificationto IODD Tool specification