docs(rewrite): record final verification RV14
This commit is contained in:
1 parent
ee9b163d06
commit
4eb5522813
1 file changed
+43
@@ -0,0 +1,43 @@
|
|||||||
|
# Codex final verification (RV14, 2026-10-12, audited f9094c8)
|
||||||
|
|
||||||
|
**Parity remains incomplete at `f9094c8`: 0 P1, 1 P2, 5 P3 verified gaps.** No files were modified; the worktree remains clean.
|
||||||
|
|
||||||
|
All four original RV13 reproductions are addressed, but two fixes retain broader differences:
|
||||||
|
|
||||||
|
| RV13 finding | Verification |
|
||||||
|
|---|---|
|
||||||
|
| Default update channel | Fixed. Both binaries default to `tip`; explicit-value tests pass. |
|
||||||
|
| Ineffective `async-backend` | Selection now reaches the I/O reactor. Epoll works; availability differs in the case below. |
|
||||||
|
| Windows sharing-violation diagnostic | Fixed: `AccessDenied`, matching Zig **0.15.2**. Source and platform-independent tests checked. |
|
||||||
|
| Windows `1:theme` basename | Fixed, but the replacement introduces newer-Zig semantics described below. |
|
||||||
|
|
||||||
|
Concrete remaining gaps:
|
||||||
|
|
||||||
|
1. **P2 — `+show-face` accepts oversized codepoints and can panic.** [show_face.rs:41](../../../crates/ghostty-cli/src/show_face.rs:41) uses `u32` instead of Zig’s `u21`. With `--config-default-files=false --cp=4294967295`, Rust panics in the Unicode lookup and exits **101**; Ghostty reports an invalid value and exits **1**. Differentially verified.
|
||||||
|
|
||||||
|
2. **P3 — Invalid UTF-8 in `+show-face --string` changes validation behavior.** [show_face.rs:44](../../../crates/ghostty-cli/src/show_face.rs:44) rejects it during option parsing. With `--cp=65` and a raw `0xFF` string, Ghostty prints the codepoint result, then `error.InvalidUtf8`; Rust prints only an option diagnostic. Differentially verified.
|
||||||
|
|
||||||
|
3. **P3 — `+show-face` diagnostics appear in a different order.** [show_face.rs:85](../../../crates/ghostty-cli/src/show_face.rs:85) writes both streams directly to stdout. For `--cp=65 --font-size=bad`, Rust prints the diagnostic first; Zig’s separate buffers put the lookup first. Differentially verified.
|
||||||
|
|
||||||
|
4. **P3 — Windows basename fix follows the wrong Zig version.** [theme.rs:249](../../../crates/ghostty-config/src/theme.rs:249) treats multibyte characters followed by `:` as drive prefixes. Rust returns `theme` for `λ:theme`; Zig **0.15.2** returns `λ:theme`, recognizing a colon only at byte index 1. This changes theme-name rejection, including names supplied through `light:λ:theme,dark:λ:theme`. Statically verified.
|
||||||
|
|
||||||
|
5. **P3 — Windows rooted theme paths are rejected.** [theme.rs:288](../../../crates/ghostty-config/src/theme.rs:288) uses Rust’s `Path::is_absolute`, which requires a Windows prefix. Zig accepts `\theme` and `/theme` as absolute; Rust instead rejects their separators. Verified against both standard-library implementations.
|
||||||
|
|
||||||
|
6. **P3 — io_uring availability is narrower than upstream.** [xev.rs:120](../../../crates/ghostty-os/src/xev.rs:120) additionally requires `EXT_ARG` and successful opcode probing. Upstream libxev accepts a successful Zig `IoUring.init(256, 0)`. A supported ring without `EXT_ARG` therefore selects io_uring upstream but falls back to epoll in Rust. Statically verified; that environment was not reproduced here.
|
||||||
|
|
||||||
|
The fresh breadth sweep screened **461 Zig files: 428 non-build and 33 build files**, including counterparts, public functions, config consumers, incomplete paths, and build outputs. No wholly missing counterpart was established; this does not prove exhaustive behavioral equivalence.
|
||||||
|
|
||||||
|
Fresh validation:
|
||||||
|
|
||||||
|
- **2,799 distinct tests passed**, four ignored; three fixture tests were blocked by the read-only filesystem.
|
||||||
|
- **1,000 terminal differential cases matched**, without aborts. The documented 390k campaign was not rerun.
|
||||||
|
- **567 broad CLI/config comparisons:** 555 exact matches; three build-mode differences, two known `list-colors` differences, seven diagnostic-order differences.
|
||||||
|
- **594 additional config probes** matched after normalizing the identified output ordering.
|
||||||
|
- All **138 C/WASM declarations** have source counterparts; WASM smoke test passed.
|
||||||
|
- Saved captures recomputed to **zero differing pixels** for all three visual scenarios and all **36 sprite sheets**. No fresh captures were made.
|
||||||
|
|
||||||
|
The previously documented benign `+list-colors` difference remains separate: Rust flushes all **15,434 bytes**; Zig omits its final flush and emits **12,297**. Genuine Zig memory bugs/UB were excluded.
|
||||||
|
|
||||||
|
**Inherently unavailable natively here:** Apple Metal/IOSurface/CoreText, Carbon/AppKit/UIKit, Mach exception handling, and Apple packaging; Windows ConPTY, process creation, native filesystem behavior, and exception handling. Swift remains excluded.
|
||||||
|
|
||||||
|
**Other coverage limits:** io_uring was denied in this sandbox; 20 integration cases skipped. Fresh compositor/GPU, portal/D-Bus, interactive GTK, builds, and cross-compilation were not run. Existing binaries were reused after their build-tree Rust/Cargo sources were compared with HEAD.
|
||||||
Reference in new issue
Block a user