Create a contiguous VHD on an exFAT image #14

Closed
opened 2026-10-11 19:10:44 +00:00 by phg · 1 comment
Owner

Parent

IODD Tool specification

What to build

Use the same approved creation workflow on exFAT images with correctly committed bitmap, allocation, and directory-entry metadata.

Acceptance criteria

  • The native creation form and operation API produce the agreed fixed VHD on supported exFAT images.
  • Complete final allocation, bitmap ownership, stream flags, DataLength/ValidDataLength, and entry-set checksums are independently verified.
  • Supported directory growth and entries crossing sector/cluster boundaries preserve unrelated metadata.
  • The final VHD footer and guest contents pass independent validation, and every allocated payload/footer cluster belongs to one extent.
  • Cancellation and injected data/metadata/flush failures have defined recoverable or rolled-back outcomes without a false successful file.
  • No existing destination or unrelated allocation/content is silently replaced.
  • The original FAT32 creation behavior remains externally verifiable through the shared request/result contract.

Blocked by

Validation contract

Completion requires the applicable independently checked software evidence in Set validation gates and the implementation handoff. A closed policy decision does not establish that implementation tests have passed. Use disposable images/virtual volumes and controlled faults; no hardware-trial or performance gate applies.

Scope

This ticket belongs to the later implementation effort. All planning decisions are resolved; current work covers tracker and documentation updates. The parent specification indexes the authoritative product and software-validation contracts. Forgejo governs live updates; retained local files record the handoff.

## Parent [IODD Tool specification](https://git.s1q.dev/phg/iodd-tool/issues/7) ## What to build Use the same approved creation workflow on exFAT images with correctly committed bitmap, allocation, and directory-entry metadata. ## Acceptance criteria - [ ] The native creation form and operation API produce the agreed fixed VHD on supported exFAT images. - [ ] Complete final allocation, bitmap ownership, stream flags, DataLength/ValidDataLength, and entry-set checksums are independently verified. - [ ] Supported directory growth and entries crossing sector/cluster boundaries preserve unrelated metadata. - [ ] The final VHD footer and guest contents pass independent validation, and every allocated payload/footer cluster belongs to one extent. - [ ] Cancellation and injected data/metadata/flush failures have defined recoverable or rolled-back outcomes without a false successful file. - [ ] No existing destination or unrelated allocation/content is silently replaced. - [ ] The original FAT32 creation behavior remains externally verifiable through the shared request/result contract. ## Blocked by - [Analyze an exFAT image](https://git.s1q.dev/phg/iodd-tool/issues/9) - [Create a contiguous VHD on a FAT32 image](https://git.s1q.dev/phg/iodd-tool/issues/13) ## Validation contract Completion requires the applicable independently checked software evidence in [Set validation gates and the implementation handoff](https://git.s1q.dev/phg/iodd-tool/issues/6). A closed policy decision does not establish that implementation tests have passed. Use disposable images/virtual volumes and controlled faults; no hardware-trial or performance gate applies. ## Scope This ticket belongs to the later implementation effort. All planning decisions are resolved; current work covers tracker and documentation updates. The parent specification indexes the authoritative product and software-validation contracts. Forgejo governs live updates; retained local files record the handoff.
phg self-assigned this 2026-10-13 15:51:57 +00:00
Author
Owner

Resolution — contiguous exFAT VHD creation implemented

Implemented on implement/iodd-tool-spec-7, completed branch 9b57bad, integration merge fef4131.

The native Create preview/confirmation/Stop workflow and public operation API reserve and verify the complete guest-plus-footer allocation, initialize every guest byte to zero and publish the fixed VHD through the shared bounded journal. Bitmap/FAT, NoFatChain stream publication, complete entry checksums/name hash, directory growth and zero-length-directory first allocation are regenerated from verified metadata. Root/nested and chained/contiguous parents preserve original files, supported vendor/unknown secondary payloads and unrelated allocation. Source-free precommit rollback/postcommit completion, imported authority refusal, checked persistence and durable retirement preserve recoverable evidence.

Validation: frozen source3572fa5 passed 143 tests in1154.814s with ordinary release optimization on pinned Xcode27.0/27A266a. All62 exFAT geometry pairs, 1008 source-free creation/replay fault cases, short/torn/lost/reordered persistence, Stop, imported-authority cases, 4096-byte physical writes, 512-byte subcluster writes, directory growth and complete zero/footer/EOF/single-extent independent oracles passed, with inherited FAT32 regression. Native checker evidence covers17 nonrepairing 512-byte-sector rows; remaining45 geometries retain software-only qualification. Actual native Create and Stop during verification, QEMU explicit VPC validation and conclusive journal retirement passed.

Latest-integration refresh preserves the entire qualified production Sources tree; its sole Tests delta adds two independently qualified #16 relocation parameter rows. Fresh merged integration passes8tests/25cases in3.581s, arm64 release, plist and macOS15.0 minimum checks. Root ran the exact final standalone creation probe on pristine macOS15.6.1/24G90: existing-directory creation completed, every original logical/full-allocation hash and entry metadata remained unchanged, the new VHD has complete guest zeros, exact fixed footer/EOF, contiguous allocation and exact16MiB QEMU capacity. That probe does not claim directory growth or a native checker pass: direct regular-file native checking lacks required ioctls (exit211) and leaves identical bytes.

Reproducible validation, full logs, integration equivalence proof and qualification limits. Qualification covers disposable regular images/internal recovery storage; raw-device, physical-media and final signing/notarization/Gatekeeper gates remain separate. Existing recovery evidence is preserved.

## Resolution — contiguous exFAT VHD creation implemented Implemented on [implement/iodd-tool-spec-7](https://git.s1q.dev/phg/iodd-tool/src/branch/implement/iodd-tool-spec-7), completed branch [9b57bad](https://git.s1q.dev/phg/iodd-tool/commit/9b57badba2313e3992cccc9937b9d0399a001cbc), integration merge [fef4131](https://git.s1q.dev/phg/iodd-tool/commit/fef41316d7de887b0bb4edc3bdb5c762baa382c2). The native Create preview/confirmation/Stop workflow and public operation API reserve and verify the complete guest-plus-footer allocation, initialize every guest byte to zero and publish the fixed VHD through the shared bounded journal. Bitmap/FAT, NoFatChain stream publication, complete entry checksums/name hash, directory growth and zero-length-directory first allocation are regenerated from verified metadata. Root/nested and chained/contiguous parents preserve original files, supported vendor/unknown secondary payloads and unrelated allocation. Source-free precommit rollback/postcommit completion, imported authority refusal, checked persistence and durable retirement preserve recoverable evidence. Validation: frozen source3572fa5 passed 143 tests in1154.814s with ordinary release optimization on pinned Xcode27.0/27A266a. All62 exFAT geometry pairs, 1008 source-free creation/replay fault cases, short/torn/lost/reordered persistence, Stop, imported-authority cases, 4096-byte physical writes, 512-byte subcluster writes, directory growth and complete zero/footer/EOF/single-extent independent oracles passed, with inherited FAT32 regression. Native checker evidence covers17 nonrepairing 512-byte-sector rows; remaining45 geometries retain software-only qualification. Actual native Create and Stop during verification, QEMU explicit VPC validation and conclusive journal retirement passed. Latest-integration refresh preserves the entire qualified production Sources tree; its sole Tests delta adds two independently qualified #16 relocation parameter rows. Fresh merged integration passes8tests/25cases in3.581s, arm64 release, plist and macOS15.0 minimum checks. Root ran the exact final standalone creation probe on pristine macOS15.6.1/24G90: existing-directory creation completed, every original logical/full-allocation hash and entry metadata remained unchanged, the new VHD has complete guest zeros, exact fixed footer/EOF, contiguous allocation and exact16MiB QEMU capacity. That probe does not claim directory growth or a native checker pass: direct regular-file native checking lacks required ioctls (exit211) and leaves identical bytes. [Reproducible validation, full logs, integration equivalence proof and qualification limits](https://git.s1q.dev/phg/iodd-tool/src/commit/fef41316d7de887b0bb4edc3bdb5c762baa382c2/docs/validation/exfat-creation.md). Qualification covers disposable regular images/internal recovery storage; raw-device, physical-media and final signing/notarization/Gatekeeper gates remain separate. Existing recovery evidence is preserved.
phg closed this issue 2026-10-13 18:01:34 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
phg/iodd-tool#14
No description provided.