From f698cdeea457b666cdc347075c7b62609368ed2e Mon Sep 17 00:00:00 2001 From: ddidderr Date: Mon, 12 Oct 2026 13:47:53 +0200 Subject: [PATCH] docs(rewrite): record final verification RV11 --- docs/rewrite/notes/review-rv11-codex.md | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 docs/rewrite/notes/review-rv11-codex.md diff --git a/docs/rewrite/notes/review-rv11-codex.md b/docs/rewrite/notes/review-rv11-codex.md new file mode 100644 index 0000000..3590d85 --- /dev/null +++ b/docs/rewrite/notes/review-rv11-codex.md @@ -0,0 +1,48 @@ +# Codex final verification (RV11, 2026-10-12) + +**Parity remains incomplete.** At HEAD `38c6ad670a60e400293ef27a6ce5699b66ed4e3c`, RV10 has **7 fully resolved findings and 1 partially resolved finding**. I verified **3 remaining port-gap groups: 0 P1, 2 P2, 1 P3**, plus one benign output divergence. + +The worktree remains clean. No files were modified and no build was performed. + +| RV10 finding | Verification | +|---|---| +| 1. Counted C-action buffers | **Resolved.** Full bytes, including interior NULs, are allocated; advertised lengths match. Existing allocation tests pass. | +| 2. Benchmark argument parsing | **Partial.** Original numeric-reset, duplicate-number, empty-data and quoted-backslash cases match. Duplicate enum values still differ; reproduction below. | +| 3. OSC7-derived titles | **Resolved.** Raw decoded path bytes reach the title buffer; regression test passes. | +| 4. Notification/hover-link bytes | **Resolved.** Raw bytes survive core/runtime/C conversion. Notification and counted-buffer tests pass. | +| 5. Diagnostic byte encoding | **Resolved.** Live C-library comparison returns raw `FF` identically. | +| 6. Escaped-surrogate diagnostic | **Resolved.** Both return `Utf8CannotEncodeSurrogateHalf`. | +| 7. NaN formatting | **Resolved.** Current WASM artifact prints `wght=nan` and `nan%`. | +| 8. Embedded GTK finalization | **Resolved.** Both embedded libraries retain `gtk-single-instance=detect` after finalization. | + +No regression of the original reproductions was established. + +The remaining verified gaps are: + +1. **P2 — Benchmark duplicate enum arguments bypass earlier validation.** + [`args.rs:116`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-bench/src/args.rs:116) retains the last string; [`benches.rs:262`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-bench/src/benches.rs:262) validates only that result. + Reproduction: `+codepoint-width --mode=bad --mode=noop`. Zig exits **1** with `InvalidValue`; Rust’s C benchmark entry returns **true**. Also reproduced for `grapheme-break` and `is-symbol`, and with a trailing empty reset. This is the residual RV10 finding 2. + +2. **P2 — Theme loading still rejects interior-NUL paths instead of opening their prefix.** + [`theme.rs:244`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-config/src/theme.rs:244), also the named-theme path at [`theme.rs:200`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-config/src/theme.rs:200). + Live reproduction: an absolute path to the existing `0x96f` theme followed by `tail`. The ReleaseFast Zig oracle loads it, yielding background **`#262427`** without diagnostics. Rust rejects it and retains **`#282c34`**. Without the suffix, both load identically. + +3. **P3 — Filesystem diagnostics expose Rust error descriptions.** + [`path.rs:167`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-config/src/path.rs:167), [`theme.rs:257`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-config/src/theme.rs:257). + Live reproduction: `theme=/etc/passwd/x`. Zig reports **`error.NotDir`**; Rust reports **`Not a directory (os error 20)`**. Relative-path expansion produces the same discrepancy. Both reject the path. + +There is also a **benign observable divergence**: piped `+list-colors` produces **15,434 bytes** in Rust versus **12,297 bytes** in the installed oracle. Zig omits its final buffer flush and stops midway through `PeachPuff3`; Rust explicitly flushes at [`list_colors.rs:68`](/pantheon/pfs/git/rust/ghostty-rewrite/ghostty-rs/target/wt-head/crates/ghostty-cli/src/list_colors.rs:68). This improves output completeness; I have separated it from the three port defects. + +The fresh sweep covered the **461-file source inventory**, implementation mappings, public-function/export checks and stub searches across terminal, GTK, fonts/rendering, configuration/input, OS/termio, C/WASM, crash, CLI and build/distribution code. **159 active literal ABI names had counterparts**; presence does not establish behavioral equivalence. No wholly absent feature was established. + +Validation included: + +- **14,746 differential configuration cases across all 202 fields**, followed by targeted reproductions. +- **2,495 distinct existing-binary tests passed**; four ignored, 17 excluded, and five artifact-writing tests blocked by the read-only filesystem. +- Current WASM Node smoke test passed. +- CLI actions, default keybindings, plain theme listing and font listing matched. Default configuration differed only by expected debug-build `gtk-opengl-debug`. +- The documented **390,000-case terminal campaign** remains supporting evidence; I did not rerun it. Its genuine upstream memory bugs/UB were excluded from gap counts. + +**Inherently unverifiable natively on this Linux machine:** macOS/iOS Metal, IOSurface, CoreText, AppKit/UIKit/Carbon integration, Mach crash handling and Apple framework packaging; Windows ConPTY, `CreateProcessW`, native filesystem/environment behavior and exception handling. + +Linux GPU/compositor, portal/D-Bus and interactive GTK integration were **not exercised in this read-only pass**. Those are outstanding runtime checks, rather than inherently untestable Linux functionality. The sweep does not certify exhaustive behavioral equivalence across all 461 files. \ No newline at end of file