1
Developer Workstation Validation
Felis edited this page 2026-09-24 13:51:28 +08:00
Table of Contents
include_toc
include_toc
true

Workstation extension acceptance

Development reference and historical context. For current operating instructions, use the user manual. Acceptance applies only to the source and artifacts identified in each record.

Software acceptance passed on 2026-09-21. This record covers the new native Linux software/cartridge builder, whole-image writer, public QEMU emulator and guest software runtime. It is separate from the immutable local 0.1.0 release.

The host was Arch Linux x86_64, with QEMU 11.1.1 and erofs-utils 1.9.4. The public workstation tools use ordinary Linux interfaces and distribution tools; other Linux distributions and ARM workstations have not been exercised in this run. The guest tests used the actual FDS Pi kernel, current initramfs and current CLI SYSTEM on QEMU virt. The separate native-init test used its documented generic ARM kernel fixture. Neither environment substitutes for physical Pi testing.

Workstation and emulator evidence

Check Result and evidence
Typed Rust interfaces and archive contracts 62 tests passed across all host-testable workspace crates; out/logs/workstation-all-rust-tests.log. The architecture-restricted smoketest is validated separately by the ARM build.
Workstation builds and images out/workstation-images.5jczgwr7/acceptance.json and commands.log; the recorded CLI SHA-256 matches the delivered fds-cartridge binary.
Public emulator lifecycle out/emu-test.36iqvx0j/acceptance.json, inputs.sha256, commands.log and serial logs. The input hash matches the delivered fds-emulator binary.
Exact documentation examples out/logs/workstation-documented-example.log; the compiled C program and report script were packaged into out/demo-tools.img, booted, run as UID 1000, safely ejected and shut down.
Incompatible initramfs out/emu-old-initramfs-final/console.log; start promptly reports the complete unsupported boot-option diagnostic and stops the failed VM.
Current build inventory out/manifests/workstation-acceptance.json, workstation-artifacts.sha256 and workstation-sources.sha256. These are local evidence records, not a new signed release.

The host suite executed a real AArch64 build recipe and packaged a portable script. It built both separate-payload three-partition images and shared-payload two-partition images; unchanged recipes produced identical bytes. Independent sfdisk, xz and tar checks passed. Whole-image writes to exact-size and larger disposable files passed flush/readback and backup-GPT checks.

Negative checks covered wrong confirmations, changed source images, stale target previews, corrupt GPT, corrupt archives, invalid catalogue mappings, ELF files in an architecture-independent bundle, escaping source symlinks, unsafe archive paths/types, privileged modes, incorrect lengths/counts, trailing content and a file replacing an implied parent directory. Existing writer failure tests remain passing. The final host suite also uses the relative image-tool runner shown in the guide, including extraction inside the inspection sandbox.

The emulator suite exercised all twelve virtual USB bays, catalogue reporting, execution from both payload partitions and from shared partitions, read-only runtime caches, safe eject, forced removal during execution, and reinsertion. It verified that managed consumers and mounts disappear and that QEMU retains only the SYSTEM block nodes after removal. It also checked literal guest arguments, guest exit statuses, interactive console detach and terminal-state restoration, DATA overlays preserving their original image, and native shutdown with active software.

Normal-image workflows used the ordinary FDS user. A separate test-only admin console image exercised service interruption/restart cleanup, unexpected payload mount refusal and on-target PROGRAM creation rejection. That admin console is not part of the delivered base SYSTEM.

Regression commands completed

Command Evidence log under out/logs/
make bootstrap workstation-bootstrap.log
make smoke-test workstation-smoke-test.log
make check workstation-check.log; final Rust formatting also passed
make rootfs PROFILE=cli workstation-rootfs-cli-accepted.log
make system-card PROFILE=cli workstation-system-cli-accepted.log
make initramfs workstation-initramfs.log
make rootfs-test workstation-rootfs-test-accepted.log
make init-test workstation-init-test-accepted.log
make tooling-test workstation-tooling-test.log
make boot-test workstation-boot-test.log — all nine boot cases passed
make cartridge-test workstation-cartridge-test.log
make data-test workstation-data-test.log
make media-image-test workstation-media-image-test.log
make media-test workstation-media-test-accepted.log, including actual SYSTEM write/readback and boot
make power-test workstation-power-test.log
make desktop-test workstation-desktop-test.log
make workstation-test workstation-release-final.log
make emulator-test workstation-emulator-final.log

The legacy media tests now require PROGRAM creation to fail inside FDS while retaining prepared-image writing and legacy application execution. New software creation is exercised through the native workstation tool. The ARM CLI test also checks the explicit emulator boot option alongside strict invalid-option rejection.

The final CLI rootfs is out/rootfs-build.KfWKvx/rootfs-aarch64.tar; its SYSTEM is out/system-build.u1050ckh/system.img. The matching emulator initramfs is out/initramfs-build.y6x9022y/initramfs.cpio. Public convenience paths point to these accepted artifacts. Upstream Void tracked files remain unchanged at 02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1.

Skips and hardware boundary

M0's optional host qemu-aarch64 execution was skipped because that command is not installed in the host PATH; ARM static/glibc compilation and ELF validation passed. The required guest tests ran separately through the project-local QEMU.

These checks do not measure Pi boot/shutdown speed, RP1 USB behavior, USB power cycling, real drive writeback, physical bay wiring, or Dasung display recovery. Use the new software-cartridge hardware procedure, stress procedure, and Dasung guide for those checks. No physical USB disk or EEPROM was written. The frozen 0.1.0 release and its source/build-input archives remain unchanged; it does not include this extension.