102 lines
6.6 KiB
Markdown
102 lines
6.6 KiB
Markdown
# Workstation extension acceptance
|
|
|
|
Development reference and historical context. For current operating instructions, use the [user manual](../README.md). 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](workstation.md#physical-pi-acceptance-procedure-deferred),
|
|
[stress procedure](stress-testing.md), and [Dasung guide](dasung.md) 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.
|