Skip to content

Commit e8199a0

Browse files
UnbreakableMJclaude
andcommitted
release: v0.8.0
CI-infrastructure consolidation release. Since v0.7.0 (2026-04-21), 15 commits landed — all 16 CI jobs pass on `main`, the harness + UEFI x86-64 boot are fully green for the first time, and the BIOS chain is scaffolded down to the specific failing instruction (M1-16 remains partial, tracked). Highlights: - GitHub Actions CI port (full Forgejo parity: fmt, clippy, miri, deny, test × 3 hosts, freebsd, cross × 4 bootloader targets, qemu-smoke, asm-verification, size-gate, sbom). - zamak-test `--timeout <seconds>` flag + proper mpsc-channel watchdog replacing the advisory-only BOOT_TIMEOUT that never fired; OVMF discovery robust to Ubuntu 22.04/24.04/Nix. - UEFI x86-64 boot-smoke now PASSes end-to-end. Four masked loader bugs fixed (PML4 identity-map, KERNEL_PATH lookup, path separators, font.psf placeholder). - BIOS boot chain scaffolded: build-images.sh assembles MBR+stage2+FAT32 disk; stage1 gained build.rs, serial output, multi-chunk INT 13h loop; zamak-bios gained MBR-partition scan and boot checkpoints. Hangs on the call_bios_int 32→real→32 trampoline — next session's work. - cargo-deny v0.15+ schema migration; latent Miri UB in elf+gfx fixed (write_unaligned); ~15 clippy lints cleaned up. - zamak-cli: global `--version` no longer shadows sbom's sub-command arg (renamed to `--release-version`). See CHANGELOG.md for the full Added/Fixed/Changed breakdown. 11 workspace crates bumped 0.7.0 → 0.8.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4d4328f commit e8199a0

14 files changed

Lines changed: 138 additions & 31 deletions

File tree

CHANGELOG.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,113 @@ All dates use ISO 8601 format (YYYY-MM-DD).
1212

1313
## [Unreleased]
1414

15+
## [0.8.0] - 2026-04-24
16+
17+
CI-infrastructure consolidation release. Since v0.7.0, the CI
18+
pipeline was ported from Forgejo to GitHub Actions with full
19+
parity; a six-hour-hang regression in the `zamak-test` QEMU
20+
harness was fixed (watchdog now owns the child via an mpsc
21+
channel) and exposed four distinct loader bugs in the UEFI
22+
x86-64 boot path, all fixed — `qemu-smoke` and
23+
`asm-verification` are green end-to-end for the first time. The
24+
BIOS boot chain is now fully scaffolded: `zamak-test/build-images.sh`
25+
assembles a real MBR + stage2 + FAT32-partition disk, and the
26+
remaining blocker (`call_bios_int` trampoline returning AH=0x01)
27+
is isolated to a single instruction and documented in M1-16.
28+
29+
### Added
30+
31+
- **GitHub Actions CI pipeline** — complete port of
32+
`.forgejo/workflows/ci.yml` to `.github/workflows/ci.yml`. All
33+
16 jobs (fmt, clippy, test × 3 host targets, freebsd, miri,
34+
deny, cross × 4 bootloader targets, size-gate, qemu-smoke,
35+
asm-verification, sbom) pass on the Ubuntu / macOS / FreeBSD
36+
runners.
37+
- **`zamak-test` `--timeout <seconds>` flag** — replaces the
38+
advisory-only `BOOT_TIMEOUT` constant that never fired. A
39+
watchdog thread now owns the QEMU child process via an
40+
`mpsc::channel`-based shutdown contract; `recv_timeout`
41+
guarantees the kill fires on schedule regardless of whether
42+
the guest emits serial output. Wired into CI with
43+
`--timeout 60` on both qemu-smoke and asm-verification.
44+
- **`zamak-test` robust OVMF discovery** — harness probes
45+
`OVMF_CODE.fd` / `OVMF_CODE_4M.fd` / `OVMF_CODE_4M.ms.fd`
46+
under `$OVMF_DIR` and copies `OVMF_VARS.fd` to a writable
47+
temp file, so the UEFI suites run unchanged on Ubuntu 22.04,
48+
Ubuntu 24.04, and Nix.
49+
- **BIOS boot chain scaffolding (partial M1-16)**
50+
`zamak-test/build-images.sh` now assembles a real
51+
BIOS-bootable disk (MBR stage1 at LBA 0 + `zamak-bios` stage2
52+
at LBA 1 + FAT32 partition at LBA 4096 containing
53+
`zamak.conf` + `kernel.elf`). `zamak-stage1` gained a missing
54+
`build.rs` (without it rust-lld ignored `linker.ld` and
55+
objcopy produced an empty binary), direct COM1 serial output
56+
for progress tracing, an INT 13h extension presence check,
57+
and a multi-chunk read loop so stage2 binaries > 64 KiB don't
58+
exceed the real-mode segment boundary. `zamak-bios` gained
59+
serial checkpoints through `kmain`, an MBR partition-table
60+
scan, and feature-gated SMP modules (trampoline asm needs a
61+
position-independent rewrite — tracked in M1-16). The chain
62+
boots cleanly through `_start → protected-mode → kmain entry
63+
→ Disk::new → first BIOS-I/O call`, where it currently hangs
64+
on `AH=0x01` from the `call_bios_int` round-trip; see
65+
`TODO.md` M1-16 for the two proposed paths forward.
66+
67+
### Fixed
68+
69+
- **UEFI x86-64 boot smoke — four masked loader bugs** in
70+
`zamak-uefi` that the watchdog hang had hidden:
71+
- PML4 did not identity-map low physical memory, so the
72+
instruction after `Cr3::write` in `handoff::jump_to_kernel`
73+
page-faulted → triple fault.
74+
- `KERNEL_PATH` lookup read from `entry.options` but the
75+
config parser writes directly to `entry.kernel_path`.
76+
- Kernel/module path separators weren't translated from
77+
Limine-style `/` to UEFI's `\`.
78+
- `zamak-core/src/assets/font.psf` was a 307-byte ASCII
79+
placeholder, not a PSF1 binary — `PsfFont::parse` returned
80+
`None` and the `.unwrap()` panicked before kernel load.
81+
Replaced with a minimal valid PSF1 (4-byte header + 4096
82+
bytes of blank glyphs).
83+
- **`cargo-deny` v0.15+ schema migration**`deny.toml`
84+
rewritten: dropped `vulnerability`/`yanked`/`notice`/`unlicensed`/`copyleft`
85+
(removed per EmbarkStudios/cargo-deny#611), added
86+
`GPL-3.0-or-later` to the allow list so the workspace crates
87+
themselves stop being rejected, and added `license =
88+
"GPL-3.0-or-later"` + `version = "0.7.0"` pins on every
89+
`path` dep so path-only deps no longer count as wildcard
90+
dependencies.
91+
- **Miri UB in `elf::apply_relocations` + `gfx::put_pixel`**
92+
unaligned u64/u32 writes through `*mut u8`-derived pointers
93+
are UB under Miri's symbolic alignment check (hardware
94+
tolerates them on x86/ARM); switched to `write_unaligned`.
95+
- **Clippy regressions after the GH Actions port** — clippy
96+
scope narrowed to host-runnable crates (freestanding crates
97+
pull `uefi-services`, whose `#[panic_handler]` collides with
98+
Linux std's `panic_impl` → E0152). Multiple lint fixes across
99+
`zamak-core` (doc-list overindent, collapsible-if,
100+
manual-is-multiple-of, unnecessary-map-or), `zamak-cli` (10
101+
lints from `derivable_impls` to `result_large_err`),
102+
`wallpaper`/`proptests` (identity ops, inconsistent hex digit
103+
grouping). Latent `bad_asm_style` errors (`.intel_syntax` /
104+
`.att_syntax` directives are redundant on current nightly)
105+
fixed in `zamak-stage1/src/mbr.rs` and
106+
`zamak-bios/src/entry.rs`.
107+
- **`zamak-cli` global `--version` shadowed sbom's
108+
`--version` arg** — sbom's flag renamed to `--release-version`;
109+
the global parser now stops consuming `--version`/`--help`
110+
after seeing a sub-command positional.
111+
112+
### Changed
113+
114+
- **Style sweep** — one-shot `cargo fmt --all` across the
115+
workspace.
116+
- **TODO.md** — post-v0.7.0 flips for REL-1..7, M4-7, M6-2
117+
(v0.7.0 tag published their artifacts); TEST-4 and TEST-5
118+
flipped to `[✓]` for the UEFI x86-64 path; M1-16 note
119+
updated with concrete next-step for the `call_bios_int`
120+
trampoline.
121+
15122
## [0.7.0] - 2026-04-21
16123

17124
First cut of the dual-mode host CLI (SFRS v1.0.0), multi-arch UEFI

Cargo.lock

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

zamak-bios/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-bios"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
license = "GPL-3.0-or-later"
88

@@ -13,8 +13,8 @@ license = "GPL-3.0-or-later"
1313
smp = []
1414

1515
[dependencies]
16-
zamak-core = { path = "../zamak-core", version = "0.7.0" }
17-
zamak-theme = { path = "../zamak-theme", version = "0.7.0" }
16+
zamak-core = { path = "../zamak-core", version = "0.8.0" }
17+
zamak-theme = { path = "../zamak-theme", version = "0.8.0" }
1818
log = "0.4"
1919
x86_64 = { version = "0.15", default-features = false, features = ["instructions"] }
2020
limine-protocol = "0.5"

zamak-cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-cli"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
description = "Host-side CLI tool for ZAMAK bootloader (MBR install, config enrollment, SBOM)"
88
license = "GPL-3.0-or-later"

zamak-core/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
[package]
44
name = "zamak-core"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
license = "GPL-3.0-or-later"
88

99
[dependencies]
10-
zamak-proto = { path = "../zamak-proto", version = "0.7.0" }
11-
zamak-macros = { path = "../zamak-macros", version = "0.7.0" }
12-
zamak-theme = { path = "../zamak-theme", version = "0.7.0" }
10+
zamak-proto = { path = "../zamak-proto", version = "0.8.0" }
11+
zamak-macros = { path = "../zamak-macros", version = "0.8.0" }
12+
zamak-theme = { path = "../zamak-theme", version = "0.8.0" }
1313
limine-protocol = "0.5"
1414
goblin = { version = "0.7", default-features = false, features = ["elf64", "elf32", "endian_fd", "alloc"] }
1515

zamak-decompressor/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-decompressor"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
description = "BIOS stage2 decompressor — inflates zamak-bios.sys to a fixed physical address"
88
license = "GPL-3.0-or-later"

zamak-macros/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-macros"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
description = "Procedural macros for ZAMAK bootloader safety annotations"
88
license = "GPL-3.0-or-later"

zamak-proto/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-proto"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
description = "Limine Protocol types and request/response structures for ZAMAK"
88
license = "GPL-3.0-or-later"

zamak-stage1/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "zamak-stage1"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
edition = "2021"
77
description = "BIOS stage1 MBR boot sector — 512-byte pure global_asm! binary"
88
license = "GPL-3.0-or-later"

zamak-test-kernel/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)