Skip to content

feat: verified VM artifact consumer and native lifecycle qualification - #998

Open
hanthor wants to merge 19 commits into
mainfrom
fix/launcher-completion
Open

hanthor wants to merge 19 commits into
mainfrom
fix/launcher-completion

Conversation

@hanthor

@hanthor hanthor commented Nov 1, 2026

Copy link
Copy Markdown
Member

Implement the private artifact consumer and real four-host native qualification driver for #577. Reuse Corral qemu create --qcow --firmware uefi --arch amd64, canonical qemu//local/NAME lifecycle, and authenticated real RFB callback. Keep HOST binaries separate from the one signed amd64 GUEST; ARM hosts explicitly use x86 TCG. Verify exact release/main workflow certificate identity, issuer, transparency bundle and source SHA; immutable manifest pin, same-byte offline acquisition, qcow2 ownership, native binary headers, QEMU/UEFI package acquisition, browser/process ownership and safe cancellation are enforced. Critical OS package transactions finish rather than being killed midway.\n\nNative qualification drives pristine stock GNOME Initial Setup in a COPY through actual Chromium/noVNC pixels, real passworded Tuna login and password-required wheel sudo, logout/login and changed-kernel-boot-ID persistence. It also exercises real browser close, stop/cancel/failure retirement, signature/source rejection and a separate owned guard VM. Browser transport readiness is never described as OS readiness.\n\nThe public scripts/try-tuna-desktop and duplicate .sh are deliberately unchanged until the real signed artifact and all four native gates are qualified. No unsigned/local binary fallback, PENDING production identities or publisher-policy changes. This branch includes the required strict published-acquisition cutover from #994; the separate producer is #993 and minimal stock GIS image dependency is tunaOS#4207. Actual tagged Corral release and qualified normal core package/image handoffs remain prerequisites for final native dispatch/public cutover; this PR alone is not full launcher acceptance. Latest review fixes have not been locally re-tested; the new normal CI step exercises behavioral helper boundary tests, and actual native artifact tests remain mandatory.

# Conflicts:
#	docs/vm-lifecycle.md
#	scripts/tuna-vm-lane
…qualification

# Conflicts:
#	docs/vm-lifecycle.md
#	scripts/tuna-vm-lane
…qualification

# Conflicts:
#	scripts/tuna-vm-lane
…dentity

The strict published qualification removed guest_role with its pre-rename
prefix normalization, but menu_identity still called it, so the published
lifecycle died with NameError at the restart/power-off dialog cases
(run 41388914199 marlin-vm). Match the tuna-compositor executable exactly,
like every other identity check.
TourViewPredicates' await_still test patches lane.time.sleep, which is the
process-wide time.sleep. On Python 3.12 (the CI runners), subprocess.wait()
reaps ffmpeg in a time.sleep() poll loop, so a slow ffmpeg exit after it
closes stdout spun that loop, advanced the fake clock past the 5 s deadline
and left the exact alt-tab PNG unconfirmed (check failed on #994-#1008-era
heads: runs for PRs 998, 999, 903, 920, 922). Reproduced with an ffmpeg shim
that exits 0.2 s after closing stdout; Python 3.13+ waits via pidfd and was
unaffected. Only sleeps issued from the lane now advance the fake clock.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant