7.0 KiB
7.0 KiB
Codex targeted re-audit (RV4, 2026-10-12)
Audited 86d0d3830f9a, read-only. Statuses include concrete regressions in the repaired paths. “Resolved” means the previous gap is closed with no remaining defect identified in this targeted check.
Rust locations below abbreviate crates/ghostty-<crate>/src/ as <crate>/.
| Previous Zig row | Status now | What remains |
|---|---|---|
Surface.zig |
still partial | Flatpak cwd still reaches D-Bus as encoded text rather than original bytes: os/flatpak.rs:363. Screen-file creation now preserves temporary-directory bytes, but its returned filename remains lossy: core/surface/binding.rs:444. Windows field/import fixes are present. |
global.zig |
resolved | — |
os/file.zig |
resolved | — |
renderer/shadertoy.zig |
still partial | Overload selection and directly indexed uniform reads are fixed. Whole-array loads/copies remain unadapted: the patch changes the uniform member’s wrapper type but only rewrites .member.inner[index] accesses: renderer/shadertoy.rs:449, 461. |
main_ghostty.zig |
resolved | — |
cli/args.zig |
still partial | Unix byte handling is fixed. The non-Unix OS-string encoder does not escape literal U+FDD0, although decoding interprets it as an escape. For example, U+FDD0 followed by U+00FF does not round-trip through the Windows config-argument path: os/osbytes.rs:103, os/args.rs:66. |
config/Config.zig |
still partial | CLI loading/path expansion is fixed, but default-template creation passes encoded paths directly to create_dir_all and write. A non-UTF-8 HOME/XDG path therefore creates the template at the wrong pathname: config/config.rs:3945. |
main_c.zig |
resolved | — |
config/CApi.zig |
resolved | — |
apprt/embedded.zig |
resolved | — |
apprt/gtk/class/surface.zig |
still partial | File-drop bytes are preserved, but confirmation now decodes every paste as encoded text, including ordinary UTF-8 passed unencoded by paste(). Confirming text containing U+FDD0 followed by U+00FF changes it to byte FF: apprt-gtk/class/surface.rs:2625, 2692. |
os/env.zig |
resolved | — |
os/homedir.zig |
resolved | — |
os/path.zig |
resolved | — |
os/passwd.zig |
resolved | — |
os/resourcesdir.zig |
still partial | Discovery preserves bytes, but consumers still use encoded resource strings directly: child GHOSTTY_RESOURCES_DIR, terminfo lookup/export, and gettext directory binding: termio/exec.rs:794, 814, os/i18n.rs:45. |
config/path.zig |
still partial | Canonicalization preserves bytes, but custom-shader loading still constructs Path::new from the encoded string. A symlink resolving to a non-UTF-8 shader filename still fails: renderer/shadertoy.rs:127. |
cli/validate_config.zig |
resolved | — |
cli/list_themes.zig |
still partial | Listing/loading preserves bytes, but preview hyperlinks percent-encode the escape representation instead of the original pathname: cli/list_themes.rs:79. |
lib/allocator.zig |
still partial | The OSC storage object itself remains globally allocated through Box::new, and parser payload copies still allocate global Vecs. Caller allocator control is incomplete: vt-capi/osc.rs:75, vt/osc/mod.rs:566. |
terminal/c/osc.zig |
still partial | Payload storage and returned title use the C allocator, but ghostty_osc_end first constructs globally allocated command payload copies. Caller limits/failure behavior do not govern those allocations: vt-capi/osc.rs:134, vt/osc/mod.rs:566. |
os/i18n.zig |
resolved | — |
crash/sentry.zig |
still partial | Darwin still discards signal/machine context and writes an event without native capture: crash/signal.rs:217. New Linux code also accesses nonexistent AArch64 mcontext_t.fpregs, a compilation regression: crash/minidump.rs:97. |
build_config.zig |
resolved | — |
termio/Exec.zig |
resolved | — |
termio/stream_handler.zig |
resolved | — |
apprt/gtk/class/window.zig |
resolved | — |
os/cgroup.zig |
resolved | — |
benchmark/Benchmark.zig |
resolved | — |
terminal/kitty/graphics_image.zig |
resolved | — |
tripwire.zig |
still partial | Named injection, hit counts, and trip verification now exist. The associated selection-string map allocation-failure injection/test remains absent; its explicit skip remains: terminal/screen/tests/p5.rs:688. |
| Previous artifact/distribution row | Status now | What remains |
|---|---|---|
build/GhosttyWebdata.zig — three MDX outputs |
resolved | — |
build/GhosttyXCFramework.zig / build/GhosttyLib.zig — universal library/XCFramework |
resolved | — |
build/GhosttyLib.zig — native library/header installation |
resolved | — |
build/GhosttyLibVt.zig — native VT distribution |
still partial | Installation permits an unversioned SONAME when patchelf is absent, despite installing versioned filenames. The build still emits libghostty-vt.so: vt-capi/build.rs:6; optional correction: scripts/install-lib.sh:48. |
build/GhosttyResources.zig — Linux desktop/D-Bus identity |
resolved | — |
build/GhosttyI18n.zig — extraction/POT/PO merging |
resolved | — |
build/GhosttyDist.zig — versioned source distribution |
resolved | — |
build/GhosttyExe.zig — Windows executable resources |
resolved | — |
| Scope | Resolved | Still partial | Still missing | Total |
|---|---|---|---|---|
| Source rows | 19 | 12 | 0 | 31 |
| Artifact/distribution rows | 7 | 1 | 0 | 8 |
| Overall | 26 | 13 | 0 | 39 |
The byte codec itself round-trips bytes and leaves valid UTF-8 without U+FDD0 unchanged. 30 selected tests passed using existing binaries: 6 byte-codec, 19 in-memory shader, and 5 tripwire tests. Packaging was inspected statically; scripts passed syntax checks, and all three Windows resource files match Zig’s copies. No files were modified; the working tree remains clean.