RELEASING
wootc writes Linux onto a stranger's only computer. The release rule follows directly from the North Star (a nervous Windows user must not lose data): the app only ever offers scenarios the E2E matrix has actually proven green. Everything else is hidden until it is proven. Features unlock as the matrix greens; the channel graduates when whole tiers are green.
The single source of truthβ
The build/test matrix is authoritative. A
combination is green only when the hosted E2E (e2e-matrix.yml /
e2e-gui.yml) has passed it end-to-end β Windows seed β deploy β Phase-2
bridge β Phase-3 native disk β seeded file on the native disk.
Two places consume that status, and they must agree:
app/data/images.jsonβ each image carries"status": "green" | "experimental". Onlygreenimages are offered in alpha.app/app.goGetSupportPolicy()β per-channel gate for the scenario axes (BitLocker/FDE, custom OCI refs, encryption). The frontend reads it to gate the UI;StartInstallenforces it as the authoritative backstop.
When a matrix cell goes green, flip its status (and/or the relevant policy
flag) in the same PR that records the green run β never ahead of it.
Channelsβ
The active channel comes from $WOOTC_CHANNEL, else C:\wootc\channel.txt,
else the built-in default (alpha).
| Channel | Bar to enter | Offers |
|---|---|---|
| alpha | one image green end-to-end (incl. GUI-driven) | green images only; encryption off; no BitLocker; no custom refs |
| beta | the full matrix green | all images; custom refs; still gates any axis whose issue is open |
| stable | full matrix green + a soak period with no data-safety regressions | everything |
Alpha deliberately refuses more than it allows. A blocked user with intact Windows is a good outcome; a walked-into-red user with a broken boot is not.
Alpha (now)β
- Image:
ghcr.io/projectbluefin/bluefin:ltsβ the one combination green end-to-end, including a full GUI-driven run. - Encryption: off only.
tpm2-luks(Phase-2 regen, #33) and BitLocker FDE (#34) are gated off; the app detects BitLocker and tells the user plainly that it is coming soon rather than proceeding into a known failure. - Root filesystem: ext4 (sealed default). btrfs is blocked (#35).
- No custom OCI refs β only the offered, tested image.
The unlock path to betaβ
Each of these flips a gate the moment its matrix row is green:
- yellowfin / bonito / marlin / flounder full three-phase β
status: green - composefs-native (dakota) Phase-2/3
- Windows 10 + Home/Enterprise/LTSC editions
- BitLocker FDE path (#34) β
BitLockerSupported: true - tpm2-luks root (#33) β offer encryption
- btrfs sealed Phase-2 (#35) β offer btrfs
- custom OCI refs (once the deploy path is family-agnostic green) β
CustomImageAllowed: true
When the whole matrix is green, the default channel becomes beta
(catalog all-green, custom refs on), and the axis gates open as their issues
close.
Cutting a releaseβ
Releases are E2E-gated β tagging publishes nothing until a real Windows VM
has migrated to Linux and back on a hosted runner (release.yml β the gate
calls the same reusable E2E the nightly proves, on the alpha image, GUI-driven).
git tag v0.1.0-alpha.1 && git push origin v0.1.0-alpha.1
# β tests β E2E gate (real Windows VM, bluefin:lts, GUI-driven) β build + publish
The published artifact is wootc.exe (Wails, Go + web UI; no runtime deps).
skip_e2e exists for emergencies and documents itself in the release notes.
User instructions (shipped in the release notes / INSTALL.md)β
- Download
wootc.exe. It is not code-signed yet (alpha) β SmartScreen will warn; More info β Run anyway. - Requirements the app checks for you: Windows 10/11 64-bit, UEFI + Secure Boot, TPM 2.0, BitLocker off (alpha), ~40 GB free.
- Run it, pick Bluefin, set a username + password, click Install. Nothing on your PC changes until you click Reboot Now β and even then Windows and all your files stay put; Linux lives in a file beside them.
- First boot shows a calm "Setting up your new Linux system" screen for 5β15 minutes. When it finishes you're in Linux. To go back to Windows, reboot and pick Windows β or uninstall wootc from inside it (deletes a folder and a boot entry).
Uninstalling is always: delete C:\wootc and remove the "wootc" boot entry β
the app's Control Panel does both.