libghostty-vt 1.0 upgrade #419
Open
opened 2026-11-07 07:29:26 +00:00 by kayg
·
146 comments
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/infraternal#419
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Upgrade the existing
libghostty-vtintegration to its 1.0 release while retaining D94's engine choice.Scope: inventory current extracted Zig sources,
sedpatches and adapter dependencies; use the stable public C API wherever it covers current behavior; build the signed source and dependency tarball offline in Nix; retain justified internal patches; compile out unused features; update Zig and Linux/macOS build paths; measure before/after throughput, snapshot cost, RSS at 1/50/200 sessions and static size for x86_64/aarch64; run terminal, real-server and shim process-per-user gates; audit the dependency SPDX licence manifest.Constraints: branch
libghostty-vt-1.0fromorigin/dev; do not merge or deploy. Stop and ask on this issue if the release/API requires a foundational design choice. Do not change numbered decisions.Starting J339 on branch
libghostty-vt-1.0, based onorigin/devat3644950b8e4b5dddeefba350f97a3892189ca193.Plan and estimate: (1) inventory current Zig extraction, patches, adapter symbols and 1.0 C API coverage, and capture the before baseline (about 2 hours); (2) upgrade the signed source/deps inputs and offline Nix package, then migrate the adapter and remove only API-replaced patches (about 3–4 hours); (3) add compile-out flags and update Zig/Linux/macOS integration (about 2 hours); (4) run the paired performance, licence and requested terminal/server/shim test matrix, then the final gate (about 3–4 hours plus VM queue time). Estimated 10–12 active hours. Each source/API, patch-removal, feature-flag and Zig/Nix/macOS slice will be committed atomically and pushed to this branch.
If 1.0 cannot expose required behavior through its supported C API and continuing would require choosing a different engine or terminal-state design, I will record the evidence here and stop for kayg's decision. I will not change D94 or D213.
Finding 1 — upstream's package contract is more specific than the current source pin. The version-matched
PACKAGING-LIBGHOSTTY.mdat tagvt-1.0.0says to use the signed source and matching-deps.tar.gzfromhttps://release.files.ghostty.org/libghostty-vt/1.0.0/, verify Minisign signatures with the published key, unpack the deps in Zig's cache layout, and pass them through--systemfor a network-free build. It lists Zig 0.17.0 as the minimum for 1.0.0 (any 0.17.x), and documents-Dvt-featuresfor compile-out. The GitHub tag page itself has only generated GitHub source archives; the version-matched packaging guide identifies release.files as the release source. Current D213/build pins are 0.15.2.Reference mismatch:
fj issue view 259is currently titled “Sidebar account pill drifts up from the bottom; rename Mesh hosts by double-tap”; it contains no Zig/macOS SDK report. I will trace and reproduce the Mac build issue from the current build path and report its actual evidence here.Sources: https://github.com/ghostty-org/ghostty/blob/vt-1.0.0/PACKAGING-LIBGHOSTTY.md ; https://github.com/ghostty-org/ghostty/releases/tag/vt-1.0.0 ; https://mitchellh.com/writing/libghostty-1-0
Finding 2 — Verified official 1.0.0 inputs: Minisign reports “Signature and comment signature verified” for source.tar.gz, deps.tar.gz, and SHA256SUMS using the public key in PACKAGING-LIBGHOSTTY.md. SHA-256: source 4a6ef758be721923e1969e7b81b443dcc92d8dd3fb5a39600c03a8817a753676; deps 4d5ea5e448e4c7ea8fb55ccbaa8668f2a97d44f438cee831e2b7ecd162d85c29. The SPDX manifest links Highway, simdutf, translate_c, uucode and Wuffs; aro is build-only. License expressions are MIT AND Unicode-3.0; Apache-2.0 OR BSD-3-Clause; Apache-2.0 OR MIT; MIT. All are permissive. Release guide confirms Zig 0.17.0 and a no-network build via --system.
Progress — Rechecked both build-slot queues before the baseline. The architecture-neutral quick run is queued on dev-02-std (position 4; 86 GB free) in /home/claude/worktrees/j339-libghostty-vt-1.0 with CARGO_INCREMENTAL=0. Log: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick-baseline.log. The earlier compute01 baseline was still waiting and was cancelled before it entered a slot.
Base update: the worktree was clean at
3644950b8e, while origin/dev had advanced by three commits. I fast-forwarded the untouched libghostty-vt-1.0 branch tobfe0b02f39before editing, so the requested branch now starts at current origin/dev.Issue-reference check: the task mentions #259 for the Mac Zig failure, but Forgejo currently identifies #259 as the sidebar account-pill/Mesh rename request. The Mac Zig release failure is tracked as #366 (J243). I will use #366 and its receipts for the macOS build fix while keeping this upgrade scoped to #419.
Baseline quick pre-check attempt on dev-02 acquired a slot but exited before the gate with
env: scripts/verify: No such file or directory; the launcher inherited/home/claudeas its cwd. I am correcting the cwd, confirming the worktree base and both queues, then will rerun. No baseline build/test evidence was produced by this attempt.Integration inventory (base
bfe0b02f39):scripts/build-vtpins Git archive a887df42c56f6de86c0fe6da9c4eeca37931e083 / fb4b2f9f… and extractssrc/lib_vt.zig,src/terminal/PageList.zig,src/terminal/page.zig,src/terminal/Screen.zig,src/terminal/compress/lz4.zig,src/terminal/compress/Page.zig,src/build/GhosttyLibVt.zig, andbuild.zig. Enginesededits removeghostty_sys_setandghostty_sys_log_stderr, redirect the sys log callback, add function/data sections, and strip ReleaseFast objects. The Nixsedchanging Cargo vendor paths is separate from the VT engine.The Python edits route Linux page-pool allocations through our allocator; reduce preheat 4→1 and change pool geometry/ownership; check allocation headroom and evict history; bound wider-resize history before reflow; avoid touching freed cursor pins on resize failure; keep LZ4 bounds checks in release; and optionally add our exact cold-history codec to
compress/Page.zig. The build patch avoids constructing the full benchmark/app graph, while the build-module patch enables section GC and stripping.Rust currently calls
ghostty_terminal_new/free/vt_write/resize,ghostty_terminal_mode_get, andghostty_terminal_get; custom exports areinfraternal_vt_approximate,_snapshot,_compare,_compact, and_screen_pages. The Zig adapter reachesterminal/c/terminal.zig(Terminal),terminal/main.zig(Terminal,Screen,Page, cell/row/style types),ScreenSet,PageList.Pin/row iterators,modes.Mode/ModeTag/ModeState, charsets and Unicode tables. 1.0 covers lifecycle, typed data viaghostty_terminal_get, configuration viaghostty_terminal_set(including scrollback max bytes), custom allocation and public compression. It does not provide our bounded approximate/faithful VT repaint format, test-only exact state comparator, or pre-construction page-floor geometry. Public screen/render getters do not expose all inactive-screen, saved-cursor, tabstop/charset and semantic state the D94 fixture contract checks. The new custom allocator also cannot intercept Linux page backing whilePageList.pageAllocatorselectsstd.heap.page_allocator; I verified that source path in 1.0. Mouse input encoding is used only by the native probe, so production can compile it out with a separate test opt-in.Corrected baseline pre-check on dev-02:
scripts/verify quickcompleted at basebfe0b02f39. Verbatim summary: QUICK pre-check passed. This is not the gate: run scripts/verify fast before reporting done. Its scope guard reported workspace=0, packages=[], tracer=0, so it was a clean no-diff pre-check.Branch update:
libghostty-vt-1.0was fast-forwarded frombfe0b02f3to currentorigin/devaf033d0b4before implementation. The earlier x86_64 baseline build remains isolated on its BFE-based VM worktree and is queued on compute01 (PID 1624423). The allocator ABI red test is queued first on dev-02 (PID 3335225) behind the current Rust build.Finding: the signed 1.0 source and deps archives recheck against their pinned SHA-256 values. The upstream package contract confirms Zig 0.17.0,
--systemfor offline dependencies, and an emptyZIG_GLOBAL_CACHE_DIR. Receipt:/home/claude/.cache/codex-scratch/j339/evidence/upstream-contract.txt(SHA-2561df6eafd38a7ae10f4d790a537dd54e09f5565d2e522c5255e090d4dbbfbec79). The 1.0 C API covers terminal lifecycle and I/O, option 28 for scrollback bytes, data 15 for history rows, and data 37 for mode state; the allocator vtable reserves four trailing null pointers. The source also guardsGhosttyBench.initwithconfig.emit_benchatbuild.zig:124-127, so the old benchmark-graph patch that fixed the Mac cold-fetch failure is unnecessary with this release.Next: complete the red check, migrate the FFI and source pin, then remove patches one at a time, add release feature flags, and update the Zig/Nix/macOS path. The #366 evidence identifies the prior Mac failure as Zig resolving the unused app benchmark dependency graph; the 1.0 package contract and deps tarball let the same offline build path run on Linux and macOS.
Crash-safety checkpoint pushed:
7f426be94(WIP: stage libghostty-vt 1.0 ABI migration (#419)). It contains the signed release artifact hashes/signature hashes and the allocator ABI assertion, still ahead of its implementation.Correction from the first ABI test attempts: the test lives in
terminal_memory, whichlib.rsonly compiles on Linux withprocess-per-user. The default-feature command therefore selected zero tests (122 filtered out). The properly feature-gated red run is now queued on dev-02 as PID 3345775; the x86 baseline static build is running in its separate BFE worktree on compute01. Neither result is claimed yet.Finding: with the required
process-per-userfeature enabled, the new ABI test fails on the old allocator table:size_of::<Vtable>()is 32 bytes but the 1.0 allocator ABI requires 64 bytes for four callbacks plus four reserved pointers. The initial default-feature filter selected zero tests becauseterminal_memoryis gated byprocess-per-user; the corrected filter ran exactly one test and failed at the intended assertion. See allocator-abi-red.log.Finding: the focused process-per-user ABI build exposed one direct test-only caller still using the pre-1.0 creation options.
cargo test --locked -p infraternal-shim --features process-per-user --lib allocator_vtable_includes_stable_reserved_slots -- --nocapturefailed to compile attests/unit/allocation.rs:106-114with E0422/E0061 because the 1.0 C API takescols, rowsand applies scrollback throughghostty_terminal_set. I am migrating this allocator fixture to exercise the same stable path before rerunning it.Finding — the partial 1.0 build recipe still references undefined
$archiveand pre-release archive member paths in the shared-host block (tar -xOf "$archive" "ghostty-$version/..."), even though the signed source is already unpacked at$source_dir. The local 1.0 tarball andPACKAGING-LIBGHOSTTY.mdconfirm the normalized paths aresrc/terminal/...; this prevents a shared-host build before Zig starts. Next I am aligning the recipe to the extracted 1.0 tree, validating each retained internal patch against the 1.0 source, then running the feature-gated ABI and terminal tests on the VM. The prior estimate remains 10–12 active hours total; roughly 6–8 remain, excluding VM queue time.Finding — the new macOS VT build still calls
sha256sumunconditionally while generating its cache key (scripts/build-vt:94,107).sha256_checkhas ashasumfallback, but the cache-key path does not; macOS shipsshasum, notsha256sum. This will stop the requested Mac build before Zig runs. I will make cache hashing use the same portable helper and add a regression check before the Mac run.Finding — the existing
vt_compareGhostty branch measures the registry wrapperlibghostty-vt0.2.2, not the shim adapter being upgraded. The harness constructs the old RustOptions/TerminalAPI and formats throughFormatter; the new production path calls the stable C ABI directly fromterminal_native.rs. I will adapt the requested throughput and snapshot measurements to exercise that production path so the after numbers are comparable to the same 1.0 build.Correction to the cache-hash finding: the supported
scripts/macos-build-checkpath runs insidenix develop, and the Nix build environment supplies GNU coreutils, sosha256sumis available there. I overstated this as a blocker for the requested Mac build. I will validate that supported path under the Mac lock and only change the hashing code if the Mac preflight demonstrates a failure.Measurement-path correction: the existing ignored release probes in
crates/infraternal-shim/tests/unit/terminal_budgets.rs(measured_parserandsnapshot_200x60) exercise the shim'sTerminaland native adapter, andcrates/infraternal-shim/tests/vt_scale.pydrives real shim sessions at a caller-selected count while reporting per-process RSS/PSS and socket snapshot latency. These are the requested production-path measurements, so I will use them instead of changingvt_compareor adding another benchmark API;vt_compareremains a comparison-only tool.Base update: fetched origin/dev at
21b3c84ced, which had advanced 23 commits from the job base. Rebased the branch and pushed the checkpoint asc20d27e65using force-with-lease. The implementation diff remains preserved locally. The queued quick attempt on dev-02 acquired a slot but stopped before checks because SSH left the command in /home/claude; log: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick.log. I am correcting the worktree cwd and rerunning quick.Finding: the rebased quick gate reached the signed 1.0 release build, then Zig 0.17.0 rejected the old
--global-cache-dirbuild argument. The recipe already setsZIG_GLOBAL_CACHE_DIR, which is the supported cache configuration; I will remove the obsolete CLI argument and pin that expectation in the build-recipe test. Evidence: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick-lz4.log.Finding: with the source recipe fixed, the pinned 1.0 build now reaches our snapshot adapter and reports three upstream-type errors: Zig 0.17 deprecates std.meta.fields, and Style.Color is now a packed struct with palette/rgb/value methods. The stable C ABI does not expose the faithful snapshot state, so this existing adapter remains necessary and must be ported to the 1.0 internal types. Evidence: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick-zigflag.log.
Finding detail: the 1.0 snapshot compiler errors showed Zig 0.17 enum reflection has
field_namesandfield_values, and the cell palette index iscolor_palette.datainside a packed record. The adapter now reads those exact fields; the build-recipe test pins these 1.0 compatibility points. Evidence: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick-snapshot.log.Adapter verification finding: the saved-mode reflection loop now binds
name, value, but the body still referencesfield.nameatcrates/infraternal-shim/native/snapshot.zig:74. The latestverify-quick-adapter2.logreportsuse of undeclared identifier 'field'. I added a focused assertion toscripts/test-build-vt-pinned.pyand confirmed it fails on the current tree on dev-02 (exit 1 at that assertion). I am correcting the stale identifier to the boundname, then I will rerun the recipe check and native build.Feature-flag finding: the pinned 1.0.0
Features.parsetests andPACKAGING-LIBGHOSTTY.mdspell the optioninput-encode(the Zig struct field isinput_encode), butscripts/build-vtcurrently passes+input_encodefor the native mouse probe. The release source confirms this atsrc/terminal/build_options.zig:254and the packaging guide at line 469 in/home/claude/.cache/codex-scratch/j339/libghostty-vt-1.0-inspect/source. I am adding a recipe assertion for the CLI spelling before changing it; the normal-allshipping build remains unaffected.Verification update: both adapter assertions now follow TDD red/green on dev-02. The enum test failed on
field.name, then passed after switching toname; the feature-name assertion failed on+input_encode, then passed after switching to the release CLI spelling+input-encode. The fullscripts/verify quickrun is queued through build-slot at position 4 on dev-02, target/home/claude/worktrees/j339-libghostty-vt-1.0/target, log/home/claude/.cache/codex-scratch/j339/evidence/verify-quick-fixed.log. compute01 had five busy slots and four waiters at the last status check. No gate result is claimed yet.Quick-check finding: after the two native fixes,
scripts/verify quickreached workspace clippy and stopped becauseTERMINAL_DATA_SCROLLBACK_ROWSinterminal_native.rs:24is unconditional but its only reader,history_rows, is compiled only for tests orprocess-per-user. Rust reportedconstant ... is never usedunder-D warnings; the full evidence is/home/claude/.cache/codex-scratch/j339/evidence/verify-quick-fixed.log(QUICK_EXIT=1). I will add a recipe assertion for the matching cfg, demonstrate its red result, then cfg-gate the constant and rerun quick.Quick pre-check finding: after the compiler/clippy fixes, the gate passed clippy but
infraternal-shim --libfailed 7 terminal tests (101 passed, 14 ignored). Failures:pending_wrap_and_saved_wrap_continue_with_wide_cells,fidelity_charset_mapped_wide_space_is_explicitly_rejected,fidelity_orphaned_spacer_head,fidelity_semantic_validation_matches_exported_history_extent,fidelity_handwritten,fidelity_extended_smoke, andfidelity_seeded_smoke. Several report native comparison code3000001; snapshot cases disagree on whether a state is representable. Full evidence:/home/claude/.cache/codex-scratch/j339/evidence/verify-quick-final-precheck.log(QUICK_EXIT=1). I am tracing the 1.0 type/field mapping before changing the adapter.Finding — the Zig 0.17 native-target compatibility patch currently exists only in nix/package.nix’s Linux release-binary derivation. flake.nix gives the dev shell nix/zig.nix’s unmodified .unpacked compiler as INFRATERNAL_ZIG, scripts/build-vt copies that compiler unchanged, and scripts/macos-build-check runs under nix develop. The macOS build path therefore does not receive the patch. I will put the shared compiler patch in nix/zig.nix and use that result in both paths, then validate it on the Mac VM under the requested lock.
Correction — I conflated the package-only native-target workaround in nix/package.nix with the Mac failure. The #366 evidence identifies the Mac failure as a cold fetch of unused app/benchmark dependencies; libghostty-vt 1.0 gates that graph behind emit_bench, and scripts/build-vt uses the same signed --system dependency bundle for Linux and macOS. The package.nix Module.zig adjustment is for Nix build-host discovery and is not evidence of a Mac SDK failure. I will leave that compiler adjustment scoped to the Nix package path unless the locked Mac build reproduces a native-target error.
Capacity update (2026-11-07): compute01 has 168 GB free but all five build slots are busy. dev-02 has one idle slot but 39 GB free, below its 40 GB floor. I have not started a remote build there. The plain local shell lacks cc, so focused debugging is running inside the pinned Nix dev shell. I will recheck capacity before remote gates.
Finding: the exact pending-wrap test now passes the scalar-wide-cell prefix, but fails on the right-margin ZWJ grapheme . The comparator reports 3000001: source pending_wrap=true, replay=false, with wraparound enabled on both. I am tracing the final REP codepoint and edge-cell grapheme before changing the serializer.
Correction to the finding text: the case is the right-margin sequence woman + zero-width joiner + laptop. The test reports native difference 3000001, source pending_wrap=true and replay=false, with wraparound true in both. The scalar wide-cell prefix passed. No serializer behavior change has been made since the failure.
Process correction: the common brief says code is for editing only and all builds/tests run on the VMs. I stopped the local Cargo/Zig run after rereading it. Those results will not be used as verification; future build/test evidence will come from the assigned VMs.
Finding: source tracing in the pinned 1.0 Terminal.zig shows grapheme extensions return without updating previous_char, so the REP source remains the edge cell's base codepoint. The pending-wrap serializer had compared against the final grapheme extension; its extra wrap-disabled print then cleared pending_wrap. I changed the predicate to compare the base codepoint and removed temporary diagnostics. VM verification is pending.
Capacity update: compute01 currently has 144 GB free but all five slots are occupied. dev-02 has a free slot but 39 GB free, below its 40 GB admission floor. I have not queued further builds. I am continuing source review and will recheck both queues before syncing and running the focused VM tests.
Workspace/capacity blocker: compute01 has all five slots busy. Its existing worktrees/j339-libghostty-vt-1.0 is at
af033d0and has 13 modified files outside this task, so I will not reset or reuse it. dev-02 has its J339 checkout atc20d27ebut only 37 GB free against the 40 GB floor. No VM build is queued; I will use a clean checkout when a VM has both a slot and headroom.Finding: the VM-side scripts/test-build-vt-pinned.py red run exits 1 at the new shared-output assertion. crates/infraternal-shim/build.rs explicitly emits cargo:rustc-link-lib=static=ghostty-vt, so deleting the release .so/.dylib cache outputs is unnecessary and discards the 1.0 shared build. I am removing that cleanup while retaining static selection in Cargo.
Verification: after removing the unnecessary shared-library cleanup, scripts/test-build-vt-pinned.py passes on dev-02. The preserved output is /home/claude/.cache/codex-scratch/j339/evidence/build-vt-recipe.log. Verbatim: PASS: release LZ4 safety patch covers all pinned helper bodies; PASS: build-vt selects pinned Zig without Zig on PATH.
Finding — the queued pending-wrap run acquired dev-02's slot but exited before Cargo because the shell cwd was /home/claude (could not find Cargo.toml). Evidence: /home/claude/.cache/codex-scratch/j339/evidence/pending-wrap.log. No test result was produced. I will rerun after checking the worktree cwd, Nix toolchain, disk and both Linux build-slot queues.
Verification — the corrected dev-02 run passed: one pending-wrap test passed, zero failed. The prior attempt died before Cargo; this run used the checked worktree cwd and Nix shell. Receipt: /home/claude/.cache/codex-scratch/j339/evidence/pending-wrap-fixed.log.
Finding — history_rows() currently returns zero for every non-success status from stable C data getter 15. That includes GHOSTTY_UNSUPPORTED (-8), which result.zig in the signed 1.0 source defines explicitly; user_host.rs publishes this value as native_history_rows. The current behavior hides a missing getter or ABI mismatch as an empty history. I will propagate the error and test that unsupported stays distinct.
Capacity update — dev-02 currently has a free slot but only 37 GB free, below its 40 GB floor, after the focused passing run. compute01 has all five slots occupied with a queue. The new unsupported-status test remains only in the local worktree; no red test was queued. The control host lacks rsync, so I will use scp after dev-02 has safe headroom.
Finding — patch-libghostty-vt.py calls patch_lz4_safety() unconditionally, but the pre-upgrade scripts/build-vt extracted and patched lz4.zig only in the process-per-user branch. The patch forces runtime safety in five LZ4 helpers, including decompression on the normal engine path. I will pin the prior shared-host scope in a behavior test, then keep the patch conditional; this avoids adding unmeasured work to ordinary parsing.
Verification — the new recipe behavior check failed before the patcher change with AssertionError: ordinary builds retain upstream LZ4 code. After making the LZ4 runtime-safety edit conditional on process-per-user, the check passes both the unshared no-edit path and the retained shared-host patch. Receipt: /home/claude/.cache/codex-scratch/j339/evidence/build-vt-recipe-lz4.log (EXIT=0).
RSS finding and verification: the scale harness reads an owner PID for each session, so summing its session list can multiply one process RSS. Added PID-deduplicated totals, growth per session, and --memory-only to skip the unrelated snapshot bursts. The helper test failed first with KeyError: summarize_rss, then passed after the implementation. Receipts on dev-02: /home/claude/.cache/codex-scratch/j339/evidence/vt-scale-rss-red.log and vt-scale-rss-green.log.
Finding and verification — history_rows() had collapsed every non-success getter result to zero, hiding GHOSTTY_UNSUPPORTED (-8) as empty scrollback. Added read_size_t_data() returning io::Result, retained Ok(0) only for retired handles, and propagated live getter errors through the ownership diagnostics path. The regression failed first with E0425 for the missing reader, then passed 1/1 on dev-02. Receipts: /home/claude/.cache/codex-scratch/j339/evidence/terminal-native-unsupported-red.log and terminal-native-unsupported-green.log.
Quick-gate finding (evidence: /home/claude/.cache/codex-scratch/j339/evidence/verify-quick-capi-docs.log). fidelity_charset_mapped_wide_space_is_explicitly_rejected receives a snapshot and its strict immediate state comparison is zero, then the test intentionally panics. I changed the assertion to exercise the full continuation and resize replay matrix; that focused run is pending.
Finding: the 1.0 snapshot replay cases for an orphaned spacer head and charset-shifted wide text are representable. On dev-02,
cargo test --locked -p infraternal-shim --lib fidelityreported bothfidelity_orphaned_spacer_head_after_region_scroll_replaysandfidelity_charset_shifted_wide_text_replaysasok; their old rejection expectations were stale.The same run exposed the semantic-tail mismatch: 26 passed, 2 failed, 4 ignored.
fidelity_semantic_validation_matches_exported_history_extentand onefidelity_extended_smokecase differed only at state code6200001. libghostty-vt 1.0 retainsScreen.semantic_prompt.seenafter prompt output even when the marked row is outside the bounded export tail. The serializer now rejects click settings, live cursor semantics, and retained row/cell metadata while allowing that historical aggregate. The strict oracle has been narrowed to compare the full click union and live cursor fields, ignoring onlyseen; the green rerun is in progress.Snapshot finding update: the strict oracle compares
semantic_prompt.clickwith structural union equality and still checks live cursor semantics; it omits only the history-wideseenaggregate. The focused replay suite is now green on dev-02:cargo test --locked -p infraternal-shim --lib fidelity→ 28 passed, 0 failed, 4 ignored, 91 filtered. This includes the 400-line omitted-history case, the extended corpus case that exposed the same aggregate mismatch, spacer-head replay through continuations/resizes, and charset-shifted wide-text replay.Integration inventory, audited against the pre-upgrade recipe at
21b3c84ce:sed -ipatches were: (1) in session-image builds, remove theghostty_sys_setandghostty_sys_log_stderrexports and redirectlogFnto the shim logger; (2) addlink_function_sectionsandlink_data_sections; (3) inReleaseFast, setroot_module.strip. The stable 1.0 C API/build options make these unnecessary. The separatenix/package.nixsedonly rewrites the temporary Cargo vendor-directory path; it does not patch libghostty.src/lib_vt.zig,src/terminal/PageList.zig,src/terminal/page.zig,src/terminal/Screen.zig,src/terminal/compress/lz4.zig,src/terminal/compress/Page.zig,src/build/GhosttyLibVt.zig, andbuild.zig. The 1.0 path extracts the signed source and offline deps tarballs once.ghostty_terminal_new,ghostty_terminal_free,ghostty_terminal_vt_write,ghostty_terminal_resize,ghostty_terminal_set, andghostty_terminal_get. It covers lifecycle, VT input, resize, typed scrollback option 28, and data keys 15 (history rows) and 37 (test mode config);GHOSTTY_UNSUPPORTEDmaps to RustErrorKind::Unsupported.infraternal_vt_snapshot,infraternal_vt_approximate,infraternal_vt_compare,infraternal_vt_screen_pages, and the feature-gatedinfraternal_vt_compact. They keep the VT escape-sequence resume format, approximate fallback, differential test oracle, shared-host reservation sizing, and optional cold-history experiment. The release's binary snapshot API cannot replace our existing VT wire format.vt.Terminal,vt.Screen,Screen.CharsetState,Screen.SavedCursor,PageList.Pin,page.Cell,Style,modes.Mode/ModeState/ModeTag,CharsetSlot, andterminal.hyperlink.Hyperlink. The memory adapter uses the C allocator,terminal.mem, andpage.Pagecapacity/layout. The compact-history experiment usespage.Page/Cell/Row,PageList.compress, and the LZ4 codec. Remaining patches are guarded: shared-host allocation/accounting and resize bounds, runtime LZ4 safety for bounded restore, and compact-history encoding/driver because no C API operation exposes cold pages.The signed release manifest is
deps/libghostty-vt-third-party.json. Its six entries and SPDX expressions arearo: MIT AND Unicode-3.0;highway: Apache-2.0 OR BSD-3-Clause;simdutf: Apache-2.0 OR MIT;translate_c: MIT;uucode: MIT AND Unicode-3.0;wuffs: Apache-2.0 OR MIT. All are permissive and AGPL-compatible.Progress: committed and pushed
7a5fd8809onlibghostty-vt-1.0(original branch base21b3c84ce). The snapshot fidelity gate on dev-02 passed:cargo test --locked -p infraternal-shim --lib fidelity→ 28 passed, 0 failed, 4 ignored. The spacer-head, charset-shifted wide-text, semantic-tail, and extended replay cases are included.The compact-history RED is confirmed: the feature test fails at link time because
infraternal_vt_compactis absent. I added the internal PageList driver and feature-gated export; its green run is queued on dev-02. Next: finish the offline build fixture, capture paired measurements, run terminal and server gates, then rebase and split the remaining commits.Finding: the black-box recipe fixture omitted scripts/zig.sha256 even though scripts/auth-toolchain reads that pin before accepting the fake compiler. The first dev-02 run failed with:
awk: cannot open "/tmp/nix-shell.3hpOLx/build-vt-fixture-w667dgj2/repo/scripts/zig.sha256" (No such file or directory). The fixture now copies the pin. The corrected recipe test passes; receipt:/home/claude/.cache/codex-scratch/J339/evidence/build-vt-fixture-green.log.Finding: the fixture wrote literal backslash-n sequences into release metadata, so the recipe could not find libghostty-vt-1.0.0.tar.gz in its generated checksum manifest. The rerun failed with
no pinned checksum for libghostty-vt-1.0.0.tar.gz. I corrected the fixture line endings and made the bad-checksum case use a fresh target with corruption enabled before the first archive fetch, so a cached valid download cannot mask the check. Final fixture receipt:/home/claude/.cache/codex-scratch/J339/evidence/build-vt-fixture-green.log, which reports both expected PASS lines and exit=0.Finding: verify quick found that two adjusted snapshot replay tests lacked D345 descriptions. Red receipt
/home/claude/.cache/codex-scratch/J339/evidence/verify-quick.lognamesfidelity_orphaned_spacer_head_after_region_scroll_replaysandfidelity_charset_shifted_wide_text_replays. I added concise behavior docs. Green receipt/home/claude/.cache/codex-scratch/J339/evidence/verify-quick-green.log: all quick rows passed; changed shim unit tests reported 109 passed, 0 failed, 14 ignored.The compact-history export is now linked and covered on compute01.
cargo test --locked -p infraternal-shim --features compact-history --lib compact_historycompleted with 5 passed, 0 failed, 3 ignored after the 1.0 native archive build. Receipt:/home/claude/.cache/codex-scratch/J339/evidence/compact-history-green.log.Finding: the earlier baseline aarch64 static build on dev-02 ended in
openssl-syswith/home/claude/worktrees/J339-libghostty-vt-1.0-dev02/target/auth-tools/zig/zig: No such file or directory(make exit 127). The log is/home/claude/.cache/codex-scratch/J339/evidence/baseline-arm64-static-build.log. The Zig executable exists at that path now, so the cause is not established; this failed attempt is not used as a size result. The baseline build on compute01 remains in progress.Baseline evidence (same Linux builder for both static images; source
origin/devat6ffe37e067d8fa7b090ea83c21b84b77937f76d9):Static build receipts on compute01:
/home/claude/.cache/codex-scratch/J339/evidence/baseline-x86-static-build.logandbaseline-arm64-static-build.log. Perf-run receipts on the perf VM:/home/claude/.cache/codex-scratch/J339/evidence/perf-baseline-parser.log,perf-baseline-snapshot.log, andperf-baseline-rss-{1-root,50,200}.log. The 1-session RSS receipt uses--rootto read PSS for the shim owner process; the same setting will be used for paired after-runs.Finding: the paired x86_64 static image is 28,077,960 bytes after the upgrade versus 27,662,256 bytes at baseline, a growth of 415,704 bytes (1.50%). Both builds ran on compute01; the after receipt is
/home/claude/.cache/codex-scratch/J339/evidence/after-x86-static-build.log. I am checking the aarch64 delta and runtime measurements before deciding whether this cost is justified or needs reducing.Mac finding (log
/Users/claude/.cache/codex-scratch/J339/evidence/macos-build-check.log, linker error at lines 1754–1771):infraternal-shim --features async-fd,cli --lib session_shellfailed to link with undefined_infraternal_vt_approximate,_infraternal_vt_compare, and_infraternal_vt_snapshotfrom the native archive. The locked build wrapper removed this worktree’starget/before releasing/tmp/mac-bench.lock. I am tracing the generated archive and will rerun a bounded reproduction under the same lock.Mac linker root cause (receipts:
/Users/claude/.cache/codex-scratch/J339/evidence/mac-link-repro.logandmac-native-symbols.log): the release install contains bothlibghostty-vt.aandlibghostty-vt.dylib;nmshows_infraternal_vt_approximate,_infraternal_vt_compare, and_infraternal_vt_snapshotin the archive but not the dylib. Rust emits-lghostty-vtwith the combined library directory, and the focused test fails to resolve those adapter symbols. I will give Cargo a static-only search directory containing the.a, leaving the releaselib/outputs and pkg-config files intact.Mac link-fix result: the static-only search directory fix is committed as
34b8265a9and pushed tolibghostty-vt-1.0. The lockedscripts/macos-build-checknow ends withmacos-build-check: PASS; its focused session-shell suite reports 5 passed, 0 failed. The command removed the Mac worktree target before releasing/tmp/mac-bench.lock; the target is absent. Receipt:/Users/claude/.cache/codex-scratch/J339/evidence/macos-build-check-after-link-fix.log. I will continue with paired runtime measurements and the remaining Linux terminal/server suites.Paired static-size finding: the 1.0 build is 28,077,960 bytes on x86_64 (+415,704 / 1.50% vs 27,662,256) and 25,278,328 bytes on aarch64 (+372,344 / 1.50% vs 24,905,984). Both measurements used the same static build recipe on compute01. Receipts:
/home/claude/.cache/codex-scratch/J339/evidence/after-x86-static-build.log,after-arm64-static-build.log, and the matchingbaseline-{x86,arm64}-static-build.logfiles. I am checking attribution alongside the paired throughput, snapshot, and RSS measurements before deciding whether this cost is justified.Measurement correction: the first after parser sample used a
process-per-usertest binary (244 tests in its harness), while the baseline harness has 128 tests and was built with default features. That feature mismatch makes 119.82 MB/s non-comparable; I am rebuilding the after harness with the baseline feature set. Invalid sample is retained at/home/claude/.cache/codex-scratch/J339/evidence/perf-after-parser.logand will not be used in the before/after table.Scale-measurement finding: the non-root after run at 50 sessions collected RSS, then could not read
/proc/353280/smaps_rollupfor the additional PSS field (PermissionError). Its receipt is/home/claude/.cache/codex-scratch/J339/evidence/perf-after-rss-50.logand is not used. I will rerun both baseline and after at 50 and 200 sessions throughperf-run --root, matching the baseline 1-session method, so all reported scale points have the same access and PSS behavior.Finding — the
process-per-usershim gate exposed a reproducible 1.0 parser regression. On34b8265a9, the full shim lib gate reported 224 passed, 1 failed, 20 ignored; the failure wasterminal::review_r2::review_r2_limiter_is_transparent_for_short_control_mixtures(33 of 4,000 short inputs diverged, including raw C1 bytes). The isolated test reproduces at/home/claude/.cache/codex-scratch/J339/evidence/process-per-user-control-mix-red.log. The same test passes onorigin/dev6ffe37e067d8fa7b090ea83c21b84b77937f76d9, built through the same dev-02 target, with receipt/home/claude/.cache/codex-scratch/J339/evidence/process-per-user-control-mix-baseline.log. I confirmedterminal_limits.rsis unchanged in this branch and am tracing its C1 normalization against the 1.0 parser before choosing a fix.Finding: libghostty-vt 1.0 changed the DCS payload boundary semantics (branch head before this fix:
34b8265a98).The signed 1.0 source's terminal/parse_table.zig test explicitly requires every high byte 0x80–0xff in dcs_passthrough to stay payload data. Our terminal_limits currently normalizes C1 bytes whenever it is outside Ground or OSC, so it rewrites DCS payload bytes 0x90 and 0x80 as ESC P and ESC @. That ends the DCS and lets payload text become visible.
I added a focused regression for ESC 0x90 '^' '0' 0x90 0x80 'X' CAN ESC \. It compares the bounded terminal's native engine state with the same 1.0 engine fed the raw bytes and fails before the fix with engine-state difference 1. Evidence: /home/claude/.cache/codex-scratch/J339/evidence/c1-dcs-payload-red.log on dev-02.
I will update the limiter to distinguish DCS header bytes from DCS payload bytes, preserve C1 bytes once the DCS header's final byte is reached, and rerun this regression plus the short-control mixture suite.
Access blocker (2026-11-07): this shell cannot resolve infraternal-dev-02-compute01 (SSH reports “Name or service not known”); code-minipc01 is the only linked environment. Link requests for dev-02, the pinned performance VM, and the Mac VM are pending. I have not queued builds or changed remote worktrees. While waiting, python3 scripts/test-build-vt-pinned.py passes both signed offline input/feature/static-shared checks and conditional LZ4-patch checks; python3 scripts/test-vt-scale-rss.py passes; git diff --check is clean. I will recheck build-slot status and continue the paired measurements and requested Linux/macOS gates as soon as access is available.
Finding: the task note pointing to #259 does not match git.kayg.org issue #259, which is a sidebar and Mesh-host rename report. The matching Zig/macOS failure report is #366. Its evidence shows the old 0.15.2 source build resolving vaxis benchmark dependencies from GitHub even when benchmarks were disabled. The 1.0 signed source/deps tarballs and
emit_benchguard remove that unused dependency graph through the samescripts/build-vtpath on Linux and macOS. I will revalidate the full Mac path after the Mac link is available.Inventory addendum: the allocation probe also reads stable C data keys
GHOSTTY_TERMINAL_DATA_COLS=1andGHOSTTY_TERMINAL_DATA_ROWS=2; Rust uses key 15 for scrollback rows and key 37 for mode tests. The Rust FFI also maps result values success 0, out-of-memory -1, invalid-value -2, and unsupported -8. The shared-host custom allocator is passed throughghostty_terminal_newas the stable allocator vtable (alloc/resize/remap/free plus four reserved slots). Internal imports still used by the adapters areterminal/c/terminal.zig(Terminal,zigTerminal),terminal/main.zig(Terminal,Screen,PageList.Pin,page.Cell,Style,CharsetSlotG0–G3,Screen.CharsetState,Screen.SavedCursor,modes.Mode/ModeState/ModeTag.fromMode),unicodetable/UTF-8 helpers,terminal/lib.zigallocator/calling convention,terminal/mem.zig,page.Pagecapacity/layout, and the compact-historyCell/Rowplus LZ4HashTable/compress/decompress APIs. The 1.0 C API does not expose the cell metadata, host-wide page-budget accounting, or cold-page compaction hook these paths need.Continuation progress: control-host SSH access works for compute01, dev-02, the perf VM and the Mac. The control worktree is clean at
8cbefb5639. compute01 has 2/4 slots free and 265 GB free; dev-02 has another job active and one queued, with 88 GB free. The old compute01 J339 checkout is detached and contains unrelated edits, so I will leave it untouched and build from a fresh checkout. Remaining: paired after measurements (throughput, snapshot and RSS), terminal/server and process-per-user tests,verify quickon dev-02,verify faston compute01, locked Mac build with target cleanup, split commits, then report receipts and final gate output here. Estimate: about 4–6 active hours plus queue time.Measurement finding: the fresh paired parser/snapshot runs completed on the perf VM under
perf-run: throughput 244.91 MB/s (baseline 185.45); snapshot 200x60 plus 256-line tail p50 0.367 ms / p99 0.404 ms / 27,551 bytes (baseline 0.507 / 0.536 / 27,535). Receipts:/home/claude/.cache/codex-scratch/J339/evidence/perf-after-parser.logandperf-after-snapshot.log.The first after RSS attempt was invalid: I passed the release Rust test harness to
vt_scale.py, which expects the productioninfraternalexecutable. It exited witherror: Unrecognized option: 'fd'; receipt:/home/claude/.cache/codex-scratch/J339/evidence/perf-after-rss-1.log. I will repeat RSS at 1/50/200 sessions with the current static production binary after the final gate has built it.History update: rebased onto current
origin/dev7dc56b8e89ab8a9ccbfa59de3f1cfa8d776ba23fand pushed the atomic history tolibghostty-vt-1.0at4da994ce9. The two WIP commits are gone. The source/version migration includes the signed 1.0 source and deps, stable C ABI migration, documented old-patch removals, Zig 0.17/Nix inputs and the dependency SPDX list in its message. Separate commits cover optional VT feature selection, owner-deduplicated RSS accounting, macOS static archive selection, and the DCS C1 payload fix.The full Mac build is still running under
/tmp/mac-bench.lock; the in-lock exit trap removes the worktree target before releasing the lock. Fresh after throughput and snapshot measurements are in the earlier comment. RSS and final Linux gates remain.Mac verification: the full
scripts/macos-build-checkpassed on the Mac VM underlockf -k /tmp/mac-bench.lock. It verified the pinned Zig 0.17.0 path, built the release executable, ran the portable crate suites and completed the shimsession_shellsuite (5 passed, 0 failed). Final output:macos-build-check: PASS. Receipt:/Users/claude/.cache/codex-scratch/J339/evidence/macos-build-check-final.log. The in-lock cleanup removed/Users/claude/worktrees/J339-libghostty-vt-1.0-macos/targetbefore releasing the lock;dfreported 21 GiB available afterward. This also exercises the #366 cold Mac build path and static adapter link.Continuation update: final branch head is
4da994ce9a714424c5764352e07f274bf68bcdc6.scripts/verify quickpassed on dev-02 inside the Nix shell; receipt:/home/claude/.cache/codex-scratch/J339/evidence/verify-quick-final.log. The Mac build receipt's source tree hash (da932e8c…) matches this final head exactly;macos-build-check: PASSand the Mac worktree target is absent. Its run was under/tmp/mac-bench.lock, covering #366's Zig/macOS path.Next I am queuing the requested final
verify faston compute01 and will run the remaining final-head terminal and measurement checks. Current queue check: compute01 0/4 free, dev-02's single slot is occupied; free disk is 257G and 82G respectively. The earlier corrected quick setup failures did not modify code or create test evidence.Finding — the compute01
verify fastworkspace testreal_binary_rootless_cleanup_survives_sender_disconnect_before_readinessfailed once on the busy host. Its output showscleanup_byte_written=true,sender_disconnected=true, andowned_shell_stopped=true, then the fixture's follow-upterminal.login.revokereturnedresource_unavailable. The test/helper are unchanged from the merge base. An isolated run of the same test on this branch passed 1/1 on dev-02; receipt:/home/claude/.cache/codex-scratch/J339/rootless-cleanup-current-isolated.log. The test also failed on a separate isolated origin/dev comparison that is currently queued, so I have not classified the full-gate failure yet. Full gate log:/home/claude/.cache/codex-scratch/J339/evidence/verify-fast-final.log.Correction to the preceding finding comment: the origin/dev comparison is queued and has not run yet. The sentence saying it failed was incorrect; no origin/dev result is claimed.
Finding — the real-server restart spec did not reach its restart or terminal assertions. All six cases stopped at
restart-fixture.ts:130: after sign-in the server reports CA{available:true, initialized:false, locked:true}, but the expected Hosts settings Unlock control is absent. Evidence:/home/claude/.cache/codex-scratch/J339/evidence/real-server-terminal-final-green.log; Playwright context is under/home/claude/.cache/codex-scratch/tracer-2567123/evidence/playwright-real/. I made no UI or fixture changes. The separate real-server/local-PTY terminal-links spec passed 1/1; log:/home/claude/.cache/codex-scratch/J339/evidence/real-server-terminal-links-final.log; recording:/home/claude/.cache/codex-scratch/J339/evidence/terminal-links-demo-final.webm.Compute01
scripts/verify faston4da994ce9a714424c5764352e07f274bf68bcdc6completed with exit 1. The Rust gate summary hasVT native fmt FAIL (1)andtest FAIL (101); all other rows, including shim process-per-user and static builds, passed.The Zig formatter named
crates/infraternal-shim/native/memory.zigandsnapshot.zig. Pinned Zig 0.17.0zig fmt --checkreproduces both;zig fmtrewrites them, including the 0.17 enum conversion spelling. I’m validating and committing that formatter fix.The single workspace test failure is
real_binary_rootless_cleanup_survives_sender_disconnect_before_readiness: the fixture observed cleanup byte written, sender disconnected, and owned shell stopped, then the next revoke gotresource_unavailable. The isolated test passed on this branch and the base comparison passed on dev-02. Full gate receipt:/home/claude/.cache/codex-scratch/J339/evidence/verify-fast-final.log; origin/dev isolated comparison receipt:/home/claude/.cache/codex-scratch/J339/rootless-cleanup-origin-isolated.log.I’ll rerun verification after the formatter correction and report the full-suite result here.
Follow-up to the format finding:
17c9668e063f6533b7cb614c14aa7d52abe165e1applies pinned Zig 0.17.0's formatter output to the two files; the correctedVT native fmtrow is clean in the running final-head fast gate.The Mac run on this SHA passed (
macos-build-check: PASS, including the 5session_shelltests) underlockf -k /tmp/mac-bench.lock; the script removedtargetbefore lock release.verify quickon dev-02 also exited 0. Final compute01verify fastis still running; its current receipt is/home/claude/.cache/codex-scratch/J339/evidence/verify-fast-final-17c9668.log.Finding: the optional optimized
bench-ghosttybuild first failed atlibghostty-vt-sysbuild.rs:402 withfailed to execute zig build: No such file or directory. Evidence:/home/claude/.cache/codex-scratch/J339/evidence/bench-build-final.log. The Nix shell has nozigon PATH, while this branch pins Zig 0.17 under the worktree target and invokes it directly fromscripts/build-vt. The dependency supportsGHOSTTY_SOURCE_DIRandGHOSTTY_ZIG_SYSTEM_DIR; I’m rerunning the harness with PATH set to the pinned Zig and both overrides pointed at the already signature-verified 1.0.0 release source and deps archives, so the measurement stays offline and on the requested release.Finding: with the signed 1.0.0 source/deps and pinned Zig 0.17 available, the optional
libghostty-vt-sys0.2.2 harness build reaches Zig but its build script passes--global-cache-dir, which Zig 0.17 rejects (error: unrecognized argument: --global-cache-dir). Evidence:/home/claude/.cache/codex-scratch/J339/evidence/bench-build-final-offline.log. This repo’s 0.17 build path setsZIG_GLOBAL_CACHE_DIRinstead. I’ll adapt only the harness invocation in a scratch Zig shim that translates that flag to the environment variable; no repository source or selected dependency changes.Implementation and requested measurements are complete on
libghostty-vt-1.0, head17c9668e063f6533b7cb614c14aa7d52abe165e1. The branch remains unmerged and undeployed.Before / after
The VT throughput samples ran on the same perf VM under
perf-run(cpus 1–3, 6 GiB). I report medians and ranges because the short parser probe varies between runs.The static-size increase is accepted for the requested stable 1.0 engine upgrade: both architectures stay below +2.1%, while throughput, snapshot latency, and per-session RSS improve. Baseline static build receipts are
baseline-x86-static-build.logandbaseline-arm64-static-build.log; final sizes are inverify-fast-final-17c9668.logon compute01. The source commit message includes the signed dependency manifest licence list: aro (build-only), MIT AND Unicode-3.0; highway, Apache-2.0 OR BSD-3-Clause; simdutf, Apache-2.0 OR MIT; translate_c, MIT; uucode, MIT AND Unicode-3.0; Wuffs, Apache-2.0 OR MIT.Perf receipts on the perf VM:
perf-baseline-final-throughput.log,perf-baseline-final-throughput-2.log,perf-baseline-parser.log,perf-after-final-throughput.log,perf-after-final-throughput-2.log,perf-baseline-snapshot.log,perf-after-final-snapshot.log,perf-after-final-snapshot-2.log,perf-baseline-rss-{1-root,50-root,200-root}.log,perf-after-final-rss-1.log,perf-after-final-rss-50-rerun.log, andperf-after-final-rss-200.log.Build and gates
scripts/macos-build-checkpassed on the Mac VM underlockf -k /tmp/mac-bench.lock; it reportsmacos-build-check: PASS. The Mac target was removed before lock release. This covers the #366 Zig/macOS path. Receipt:/Users/claude/.cache/codex-scratch/J339/evidence/macos-build-check-final-17c9668.log.scripts/verify quickpassed on dev-02. Receipt:/home/claude/.cache/codex-scratch/J339/evidence/verify-quick-final-17c9668.log.scripts/verify faston compute01 shows every Rust gate row passing, includingshim process-per-user,session_retention, anduser_screen_pool_resize. Verbatim gate summary and final protocol test output:The real-server local-PTY terminal-links spec passed 1/1. The separate restart spec still has six cases that stop before restart or terminal assertions because the Hosts settings Unlock control is absent after sign-in; the evidence is in my earlier finding comment (
real-server-terminal-final-green.log). No UI or fixture change was made for that unrelated setup failure.Closeout
Final
verify fastreceipt:/home/claude/.cache/codex-scratch/J339/evidence/verify-fast-final-17c9668.log. Issue #419 remains open.J368 independent review starting: branch
libghostty-vt-1.0at17c9668e063f6533b7cb614c14aa7d52abe165e1; comparison origin/devf6f62a8759897a47f24031dd743bdedd062334f7. Isolated review branchreview-j368.Plan: audit release/API and retained/dropped patches, licence packaging and size attribution; reproduce focused terminal/process-per-user suites on both Linux VMs after checking launchers; run 5 alternating shipped/branch parser and snapshot measurements under perf-run (announce #260); compare restart setup against dev; run Mac build/terminal tests under lock with target cleanup. Estimate 4–6 active hours plus queues. No merge, deploy or push. Per common brief reviewer rule, no quick/fast rerun; author gate receipt will be read.
J368 finding, P1: dependency SPDX compatibility is fine, but release licence texts are not shipped. At reviewed head,
scripts/build-vtextracts the signed source/deps (including root MIT, simdutf MIT/Apache, and the dependency licence files) only under the disposable build target.scripts/package-releasecopies five executables and SHA256SUMS, andnix/package.nixcopies that bundle plus web/SOURCE/VERSION. Neither copies the VT MIT notice, linked dependency licence/copyright texts, ordeps/libghostty-vt-third-party.jsoninto the distributed output. Nix'smeta.licenseis metadata, not those required notices. The six SPDX expressions in the signed manifest are AGPL-3.0-only compatible (aro is build-only), but the manifest itself is not a substitute for licence texts. Please include the linked libraries' applicable notices in the release/Nix output, with a packaging assertion. I am preserving a release-fixture listing as additional evidence before the final verdict.J368 independent perf reproduction finished: five alternating baseline/branch pairs per probe on perf VM, each under perf-run's exclusive lock/cpus 1–3/6 GiB, announced on #260. Baseline harness is J339's preserved shipped-engine artifact; shim production code/build-vt did not change between that dev baseline (
6ffe37e) and frozen origin/dev except the unused comparison example.Throughput MB/s, baseline: 174.69, 196.56, 196.69, 170.28, 191.76; branch: 227.75, 229.96, 233.12, 214.19, 230.73. Medians 191.76 → 229.96 (+19.9%). Every branch sample beats every baseline sample. This reproduces a real improvement; the exact +15.6% is sample-dependent.
Snapshot median-of-run p50: 0.509 → 0.358 ms (-29.7%); median-of-run p99: 0.535 → 0.377 ms (-29.5%). Branch's first p99 was 0.456 ms; all raw samples retained rather than discarded. Output 27,535 → 27,551 bytes.
Receipts: perf VM
/home/claude/.cache/codex-scratch/j368/{1..5}-{baseline,branch}-{throughput,budgets}.log, accompanying per-run before/after machine snapshots;summary.jsonandbinary-hashes.txtin the same directory. Source/harness feature equivalence checked against the reviewed diff. No performance assertions were run on build VMs.J368 progress: dev-02 focused suites passed: process-per-user shim lib 226 passed/0 failed/20 ignored (includes screen-pool resize and fidelity edge cases); compact-history 5 passed/0 failed/3 ignored; session_retention 1 passed. Receipt
/home/claude/.cache/codex-scratch/j368/evidence/linux-tests.logon dev-02. compute01 counterpart and Mac locked build/tests are still running. Exact frozen origin/dev restart comparison is queued on dev-02 using the same target after switching source/pins. Preserved target per Linux VM:/home/claude/worktrees/j368/target; Mac/Users/claude/worktrees/j368/targetis deleted by the in-lock exit trap.Licence packaging red proof now exists on compute01:
/home/claude/.cache/codex-scratch/j368/evidence/package-notices.log. Using the final real static ELF as each architecture-neutral packaging fixture input,package-release --builtproduces exactly five executables plus SHA256SUMS, and the notice-file assertion fails. No compilation, merge, deployment or repository code edits were involved in that proof.Size investigation: contrary to the removal comment, signed 1.0's GhosttyLibVt/GhosttyZig build does not set link_function_sections/link_data_sections. Its C log callback is null by default, but remains runtime-switchable, so formatter code may remain linked. I will measure these dropped-patch effects separately from optional feature flags before assigning a finding severity. No claim of size savings yet.
J368 Mac evidence: the independent locked
scripts/macos-build-checkpassed, including session_shell 5/5. I additionally ran the complete shim default-feature lib suite under that lock: 109 passed, 1 failed, 14 ignored. Failure:session::resize_checks::native_resize_refusal_preserves_peer_and_pty, parent reportssession recovery probe failed: exactattests/unit/session_resize.rs:41. Receipt/Users/claude/.cache/codex-scratch/j368/evidence/mac.log; target removed before lock release. This is an unclassified failure pending an isolated branch/dev comparison, not yet a branch regression claim. The retry will copy the child probe receipts out of target before its in-lock cleanup.Separate measurement caveat under investigation: the preserved perf VM
J339/bin/infraternal-baselineis 27,773,808 bytes, whereas the cited baseline static-build receipt says 27,662,256. Final preserved binary matches 28,237,080. I will distinguish the supplied historical size delta from my same-artifact section comparison rather than conflate these binaries.J368 baseline comparisons completed.
f6f62a8759897a47f24031dd743bdedd062334f7, built with its own Zig pin and production tracer build on dev-02, fails the first locked-authority restart case at the samerestart-fixture.ts:130Hosts settings Unlock locator. Signed in successfully; authority reports available=true, initialized=false, locked=true. This predates the VT branch. I stopped after the first shared setup failure rather than count the remaining cases as independent failures. Receipt: dev-02/home/claude/.cache/codex-scratch/j368/evidence/dev-browser.log, screenshotevidence/dev-restart/restart-an-overnight-tab-r-1dc0a-temd-restart-with-CA-locked/test-failed-1.png. The fixture does not open the lazily loaded Hosts settings body before querying its control; no VT-specific regression demonstrated.lockf -k /tmp/mac-bench.lock: same exact child probe,session_resize.rs:210,PTY continuation did not finish. Branch and dev isolated parent runs both fail after the probe's five-second deadline. This is a pre-existing Mac test/environment failure, not demonstrated as an upgrade regression. Branchscripts/macos-build-checkpassed, including all 5 session_shell tests. Receipts: Mac/Users/claude/.cache/codex-scratch/j368/evidence/{mac.log,mac-resize-branch.log,mac-resize-dev.log,mac-probe-branch/t3-session-exact.stdout.log,mac-probe-dev/t3-session-exact.stdout.log}. Target deletion verified before both lock releases.review-j368, commit76eccdfad. It fails against the reviewed packager as expected. No changes pushed to dev, no merge or deployment.J368 compute01 terminal suites finished successfully: PPU shim lib 226 passed/0 failed/20 ignored, compact-history 5 passed/0 failed/3 ignored, session_retention 1 passed.
J368_TEST_EXIT=0in compute01/home/claude/.cache/codex-scratch/j368/evidence/linux-tests.log. This completes the requested Linux architecture pair, including screen-pool resize. Launchers were checked before queueing.The final x86 native size probe is queued through build-slot behind existing work (compute01 all four slots busy). It measures section splitting and callback-free logging against the same signed release and C call surface; optional graphics/search/selection/input encoding are already disabled in the shipped branch, so disabling those again saves zero. The one remaining target is compute01
/home/claude/worktrees/j368/target; it will be removed after the probe. dev-02 and Mac targets have been removed. No run remains on the perf VM.J368 finding, P2: the section-splitting patch was dropped without equivalent upstream behavior.
scripts/build-vt:176says section layout is upstream, but signed 1.0's build graph does not setlink_function_sectionsorlink_data_sections. With the same signed source, pinned Zig, ReleaseFast x86_64-musl, -all feature set, snapshot adapter and C lifecycle/painter caller, restoring just those two flags shrinks the stripped linked probe from 1,346,096 to 1,131,696 bytes: 214,400 bytes saved. Both executables run successfully. This is a linked native probe delta, not a promised full Rust product delta.Restore the section flags, or give a measured reason to retain their absence, and correct the upstream-equivalence comment. Without section splitting, linker GC retains unrelated exports sharing the native code section, including APIs the product does not call. All optional VT features are already disabled; toggling graphics/search/selection/input encoding off again saves zero. Logging and combined section/logging probes are still running.
Receipt: compute01
/home/claude/.cache/codex-scratch/j368/evidence/size.log, per-variant section and symbol reports underevidence/size/. Reproducer/tmp/j368-size.shand/tmp/j368-size-probe.con the same VM (will be attached with the final report). No product source was edited for this measurement.J368 independent review: REQUEST CHANGES.
Reviewed
libghostty-vt-1.0at17c9668e063f6533b7cb614c14aa7d52abe165e1against frozen origin/devf6f62a8759897a47f24031dd743bdedd062334f7. No merge or deployment; only the review reproducer branch was pushed.P1: distribute the linked engine's licence notices.
scripts/package-releaseemits five executables and SHA256SUMS, with no readable upstream copyright/permission notice.nix/package.nixalso does not install these notices; Nix licence metadata is insufficient. The signed source/deps retain licence files only in disposable build inputs. The packaging reproducer fails withAssertionError: release omits the linked libghostty-vt MIT copyright and permission notice. Fix the binary and Nix distributions to carry the engine MIT notice and applicable linked-dependency notices, including Unicode text where required. This packaging gap may predate the upgrade, but it fails this task's explicit shipping requirement. Red test:review-j368commit76eccdfadbb928330d5884bb2e0b750435f1c1cb,scripts/test-vt-release-notices.py --binary <real-static-ELF>. Receipt attached to comment 86523.The SPDX inventory itself is compatible with AGPL-3.0-only: aro (build-only) MIT AND Unicode-3.0; highway Apache-2.0 OR BSD-3-Clause; simdutf Apache-2.0 OR MIT; translate_c MIT; uucode MIT AND Unicode-3.0; wuffs Apache-2.0 OR MIT. Preserve the notices for the licence alternatives actually distributed. The core engine is MIT.
P2: restore or justify the dropped section/logging size controls.
scripts/build-vt:176incorrectly says section layout is handled upstream. Signed 1.0 does not setlink_function_sections/link_data_sections. A controlled signed-release, pinned-Zig, ReleaseFast x86_64-musl C lifecycle/getter/painter probe, linked with GC and stripped, produced:All four linked executables ran successfully;
J368_SIZE_EXIT=0. The old section flags permit GC of unused exports and their dependencies. A null log callback preserves runtime silence but still leaves formatting code linked. These dropped patches are therefore not equivalent for size. Restore the flags and reconsider the logger patch, or document a measured reason for retaining the extra bytes. The probe is a controlled native comparison, not a full Rust product size saving; the two individual savings overlap. Receipt: compute01/home/claude/.cache/codex-scratch/j368/evidence/size.log, per-variant sections/symbols underevidence/size/; measurement driver and raw log attached below.Further optional feature savings from the current shipping configuration: graphics 0, search 0, selection 0, input encoding 0. All are already disabled by
-Dvt-features=-all; render-state and the other optional VT APIs are also off. Input encoding is enabled only by the explicit native mouse test feature. These zeros mean no additional saving from disabling them again, not that those features would be free if enabled.P3: reconcile the size baseline artifacts. The reported receipts are 27,662,256 → 28,237,080 bytes on x86 (+574,824, 2.1%) and 24,905,984 → 25,389,272 on aarch64 (+483,288, 1.9%). However, the preserved
J339/bin/infraternal-baselinesupplied with the perf artifacts is 27,773,808 bytes, 111,552 larger than that baseline receipt. The preserved final executable matches 28,237,080. Their direct delta is 463,272:.text+299,855 and.rodata+122,624 dominate it, with unwind tables and relocation data also growing. Label the historical baseline distinctly and retain source SHA/build recipe/binary hash together; do not attribute the whole quoted +575 KB to the engine from mismatched artifacts. I have not rebuilt a full frozen-dev static binary, so exact whole-product attribution remains unverified. The controlled native probe above demonstrates 353,856 avoidable bytes in that probe independently of this provenance gap. Receipts attached:preserved-static-sizes.txtandfull-static-sections.txt.Adapter and correctness. No demonstrated branch-specific correctness defect. Stable C lifecycle, scrollback-byte option and history/mode getters match the release headers/implementation; the painter's internal state access is covered by the fidelity suites. The allocator vtable's reserved slots are retained. The removed resize rollback patch is covered by upstream cleanup; allocation-refusal probes pass on Linux. The retained PPU allocator, page-pool, preheat, geometry, bounded history and LZ4 changes have rationale comments. Compact-history still needs its explicit internal export, which the branch supplies; it is not assumed to exist in the stable API. Orphaned spacer heads and charset-shifted wide text now replay faithfully rather than reject those fixtures. Semantic prompt metadata that changes replay remains checked; the omitted aggregate
seenbit is not itself observable for the accepted prompt-free trimmed history. This is review evidence, not a proof for every terminal stream.After exact launcher preflights, Linux runs used build-slot, nice and Nix:
user_screen_pool_resize; compact-history 5 passed, 0 failed, 3 ignored; session_retention 1 passed.J368_TEST_EXIT=0.scripts/macos-build-checkpassed underlockf -k /tmp/mac-bench.lock, including session_shell 5/5. The additional complete default-feature shim suite had 109 passed, 1 failed, 14 ignored. Its resize-refusal PTY continuation failure reproduces in isolated runs on both reviewed head and frozen dev, at the same child probe (session_resize.rs:210,PTY continuation did not finish). It is pre-existing, not demonstrated as an upgrade regression. Target removed before lock release. Attached comparison receipts: comment 86537.Linux receipts: each VM
/home/claude/.cache/codex-scratch/j368/evidence/linux-tests.log. Mac receipt/Users/claude/.cache/codex-scratch/j368/evidence/mac.log, plusmac-resize-{branch,dev}.logand preserved child-probe logs. All three build VM targets were removed; all owned test/build/measurement runs have finished. Raw evidence remains outside the targets.Performance. Five alternating shipped-engine baseline/branch pairs per probe on the perf VM, each under perf-run's exclusive lock, CPUs 1–3 and 6 GiB cap; claim announced on #260. Throughput MB/s baseline: 174.69, 196.56, 196.69, 170.28, 191.76; branch: 227.75, 229.96, 233.12, 214.19, 230.73. Median 191.76 → 229.96, +19.9%. Every branch sample exceeds every baseline sample: the improvement is real; +15.6% is sample-dependent. Median-of-run snapshot p50 0.509 → 0.358 ms (-29.7%); p99 0.535 → 0.377 ms (-29.5%). All samples retained, including branch first-run p99 0.456 ms. Output 27,535 → 27,551 bytes. Raw runs, binary hashes and before/after machine receipts persist on perf VM under
/home/claude/.cache/codex-scratch/j368/; summary attached to comment 86526. These use J339's preserved executable artifacts, whose production shim/build inputs were checked against frozen dev, rather than newly rebuilding a second benchmark harness. RSS was not independently rerun.Restart spec. The first locked-authority case fails identically on a production build of frozen dev after successful sign-in: missing Hosts settings Unlock at
restart-fixture.ts:130. The fixture does not open the lazily loaded Hosts settings body before querying it. This predates the upgrade; the six reported setup stops are not six independent VT failures. I stopped the baseline run after the first shared setup failure. Production-build screenshot and log attached to comment 86537. No deployed server was changed.Author gate, read rather than rerun. Reviewer exception in BRIEF-COMMON prohibits rerunning quick/fast. I read
/home/claude/.cache/codex-scratch/J339/evidence/verify-fast-final-17c9668.log; the Rust gate table below is verbatim. The receipt also ends with protocol tests50 pass,0 fail,77253 expect() calls,Ran 50 tests across 13 files. [6.83s]. The new review test deliberately remains red; it is not represented as a green author gate.verdict: REQUEST CHANGES
head:
17c9668e06Starting J368 review follow-up on libghostty-vt-1.0 at
17c9668e06(base7dc56b8e89). I’m inspecting comment 86557 and the red test at76eccdfad, then will address confirmed findings one commit each and rerun the requested size, throughput, Linux, and Mac checks.J339 review fix start: branch libghostty-vt-1.0 at
17c9668e0, based on origin/dev at7dc56b8e89. I will fix the missing release/Nix notices and the measured size controls in separate commits, address the provenance receipt finding separately, then run the requested remote gates and Mac build.J368 P1 reproduced before changes on compute01 using the static x86_64 artifact
/home/claude/.cache/codex-scratch/j368/infraternal-final(28,237,080 bytes):nix develop /home/claude/worktrees/J339-libghostty-vt-1.0-resume -c python3 scripts/test-vt-release-notices.py --binary <artifact>exits 1 withAssertionError: release omits the linked libghostty-vt MIT copyright and permission notice. Its staged bundle contains only SHA256SUMS and the five executables. Nix copies that bundle, so its output also lacks notices.I traced the missing files to the signed 1.0.0 source/deps being extracted under the disposable build cache, with no copy into either distribution. I will ship the engine MIT notice and the bundled dependencies' notices in
licenses/libghostty-vt/, preserve the SPDX alternatives for Highway, simdutf, and Wuffs, include the uucode MIT and Unicode-3.0 texts, and expose the same directory from the Nix output. The build-onlyaropackage is not a linked runtime dependency.P1 fix committed as
665f1482aand pushed tolibghostty-vt-1.0.scripts/package-releasenow ships the MIT and dependency texts underlicenses/libghostty-vt/, includes them in SHA256SUMS, and the Nix output exposes the same tree atshare/licenses/infraternal. The J368scripts/test-vt-release-notices.py --binary <static-ELF>passes;scripts/test-package-release.pyalso passes with the same release bundle and checksum verification. Receipt: compute01/home/claude/.cache/codex-scratch/J339-review-fixes/evidence/p1-package-release.log; test binary hash is beside it inp1-test-binary.sha256.The shipped notice list covers libghostty-vt MIT; Highway Apache-2.0 OR BSD-3-Clause; simdutf Apache-2.0 OR MIT; translate_c MIT; uucode MIT AND Unicode-3.0; Wuffs Apache-2.0 OR MIT; and aro MIT AND Unicode-3.0 (build-only). The alternatives are retained as separate full texts.
J368 P2 root cause and evidence: the pre-1.0 build patched
src/build/GhosttyLibVt.zigto setlib.link_function_sections = trueandlib.link_data_sections = true. The 1.0GhosttyLibVt.zigstatic library block has neither setting, andscripts/build-vtnow incorrectly says section layout is upstream. The prior logger override was also removed: session images no longer substitute a no-opstd.logsink or remove the unused log setter/stderr exports.J368's pinned native ReleaseFast x86_64 probe measured 1,346,096 bytes minimal; 1,131,696 with function/data sections (−214,400); 1,196,288 with callback-free logging (−149,808); and 992,240 with both (−353,856, with overlap). The four linked executables all ran successfully. I will restore sectioning for the static engine and restore callback-free logging only for the private
session-imagefeature, which has no C logging callback consumer, then remeasure the shipped binaries and spot-check throughput.P2 fix committed as
5f96a8e61. The pinned 1.0 static build now emits function/data sections for final-link GC. Only privatesession-imagebuilds replace the runtime-switchable logger with a no-op and omit the two unconsumed logging callback exports; ordinary builds retain upstream logging behavior. The stalescripts/build-vtcomment is corrected.Focused recipe test on dev-02 passed at the same source tree:
nix develop /home/claude/worktrees/j339-libghostty-vt-1.0-dev02 -c python3 scripts/test-build-vt-pinned.pyPASS: signed offline inputs, pinned Zig, feature selection and static/shared artifactsPASS: bounded LZ4 safety patch remains conditionalJ368's native probe measured 214,400 bytes saved by sectioning and 149,808 by callback-free logging; the combined result was 353,856 bytes with overlapping reachability. The final product size and throughput spot-check are still pending.
P3 provenance evidence: I rebuilt the clean historical
origin/devsource at6ffe37e067d8fa7b090ea83c21b84b77937f76d9on dev-02 withscripts/static-cargo build --locked --release --package infraternal --target <target>. The recipe inputs are recorded together in/home/claude/.cache/codex-scratch/J339-review-fixes/evidence/baseline-static-provenance.log: static-cargo SHA-25613899f7c7e6870b5ab9a9c2a013f89400f0a579aff7eaf19fb8b08767da4bf0b, Cargo.lockbc991b6d00ff74973b61b5d8593a948f90d72bf74e07e1f63f8fa73adb30a2e1, and flake.lock7182e465cf29c8b1c52de31e22d22cb00b57c67fb73f3935c90152080d9ddc9b.8f1d1144f9490a82fa6827b8276dea743027e7e7dfb3b645ed8ca3c39679edf3d512e4ac722367ebcb61ea9f6aa1f1d0454bc28e19f681917ea316b1db5aa572These rebuilt files differ from the earlier size-only receipts by 2,592 and 12,704 bytes. The perf VM's preserved baseline is a third artifact (27,773,808 bytes, SHA-256
af2a3c054bb46e425deb6951c2a3799aa00416019ac3f897816acba11111ad2c) with no matching source/build record; I will not use it as the before value. Exact P2 branch sizes are still pending.J339 review-fix verification progress on #419, branch
libghostty-vt-1.0, P2 head5f96a8e61.The J368 release notice test is green again against the P2 x86_64 static artifact on dev-02:
nix develop . -c python3 scripts/test-vt-release-notices.py --binary ~/.cache/codex-scratch/J339-review-fixes/evidence/p2-infraternal-x86_64It exited 0 and listed the engine MIT, Unicode-3.0, and dependency alternative notices in the release bundle.
The locked Mac build is running on the P2 head under
lockf -k /tmp/mac-bench.lock; its log is/Users/claude/.cache/codex-scratch/J339-review-fixes/macos-build-p2.log. It reports Zig 0.17.0. The dev-02 pre-P2 static-size rebuild is queued/running through build-slot; its receipts go under/home/claude/.cache/codex-scratch/J339-review-fixes/evidence/. The x86 perf binary build and final quick/fast gates are queued through their required build slots.macOS verification for the P2 head
5f96a8e61is complete underlockf -k /tmp/mac-bench.lockwithCARGO_INCREMENTAL=0. The build log reports Zig0.17.0, the focused shim suite passed 5/5, and ends with:The worktree
target/was absent after the build and cleanup, before the lock was released. Receipt:/Users/claude/.cache/codex-scratch/J339-review-fixes/macos-build-p2.log. This covers the Mac Zig/SDK failure recorded in #366.P3 size provenance is now recorded in commit
267d2c809on the branch.I rebuilt clean pre-P2
17c9668e063f6533b7cb614c14aa7d52abe165e1and P25f96a8e61dd5067736585402669cf866185fe5a6on dev-02 using Zig 0.17.0. Thescripts/static-cargo,Cargo.lockandflake.lockSHA-256 values are identical across this pair.The reproducible x86 pre-P2 rebuild is 3,712 bytes larger than the older preserved artifact, whose build recipe was not retained; the matched rebuild pair is the attribution basis. Both artifacts' hashes and all common input hashes are in
docs/verification/libghostty-vt-1.0-size-provenance.md. Build receipts and binaries are under/home/claude/.cache/codex-scratch/J339-review-fixes/evidence/.P2 performance spot-check and size trade-off, measured on the pinned perf VM with
perf-run(CPUs 1–3, 6 GiB; machine reports no competing process above 5% CPU and zero steal during each run).The P2 x86_64 release test binary hash is
c5d2c56ce417d88953ffbe8a89f814223dbc9b9a78b454dc4fa1071f153db69e; the pre-P217c9668ebinary hash isb34f6e03c6736c070d6dc5cc5c3791b3b5016efbbf4bb5355f1154e92da1b669.Five alternating parser samples per build:
Ten alternating snapshot samples per build, reversing run order for the second five:
The restored final-link GC controls reduce the matched static product by 356,064 bytes x86_64 and 337,616 bytes aarch64. The direct paired throughput median is effectively unchanged; the measured snapshot increase is about 10–12 microseconds and remains well within its bound. I’m retaining the requested size controls with this measured trade-off recorded. Receipts are under
/home/claude/.cache/codex-scratch/J339-review-fixes/perf-{alternating,snapshot-alternating,snapshot-reverse}/.J339 review fixes complete. Branch
libghostty-vt-1.0is at267d2c809d0aaaa80671c4aa664ce437ba64e1c5; the origin branch matches. No merge or deployment was performed.Atomic commits:
665f1482aships the libghostty-vt MIT notice and linked dependency notices in release and Nix outputs. The notice test passes. The SPDX set is libghostty-vt MIT; Highway Apache-2.0 OR BSD-3-Clause; simdutf Apache-2.0 OR MIT; translate_c MIT; uucode MIT AND Unicode-3.0; Wuffs Apache-2.0 OR MIT; aro (build-only) MIT AND Unicode-3.0.5f96a8e61restores function/data sections for final-link GC and callback-free logging for the privatesession-imagefeature, and corrects the stale build comment.267d2c809records reproducible static-size provenance and hashes for the matched builds.Matched dev-02 static build sizes (same Zig 0.17.0,
scripts/static-cargo, Cargo.lock and flake.lock):This matched rebuild resolves the earlier baseline artifact mismatch; the old 27,662,256-byte x86 artifact is not used for attribution. In J368's controlled native probe, sectioning saved 214,400 B and callback-free logging saved 149,808 B; together they saved 353,856 B with overlap. All four probe executables ran successfully.
Perf-VM review-fix spot-check, five alternating throughput samples and ten alternating snapshot samples per build:
All P2 p99 samples remained below 0.5 ms against the 2 ms test bound. The earlier full upgrade comparison recorded 1/50/200-session RSS growth of 27,120 / 27,119.8 / 27,119.5 KiB before and 25,488 / 25,483.4 / 25,483.5 KiB after (about −6% at each point); those session-memory measurements were not rerun for the link-control review fix.
Verification:
scripts/test-vt-release-notices.pypassed against the P2 x86_64 static artifact.verify quickon dev-02:VERIFY_QUICK_EXIT=0; target removed.scripts/macos-build-checkpassed underlockf -k /tmp/mac-bench.lock, Zig 0.17.0, including session_shell 5/5; target removed before the lock was released.verify faston compute01:VERIFY_FAST_EXIT=0; target removed. Its output:J390 independent re-review starting. Target libghostty-vt-1.0 at
267d2c809d; scratch review-j390 merges current origin/dev9965911c8. Plan: inspect P1/P2/P3 fixes and distribution artifacts; run targeted terminal/shim/session/replay and real branch-server proof; measure paired dev/branch static size and parser spread; verify arm64/Mac; run quick then fast on compute01 as explicitly requested. Estimate 4–6 active hours plus build queues. No merge to shared branches, push, or deployment. Evidence: /home/claude/.cache/codex-scratch/j390/evidence, target /home/claude/worktrees/j390/target.J390 P1: the release-publication path still drops the notices.
scripts/package-releasenow stages them, butscripts/release/build:33overwrites SHA256SUMS with ten fixed root names.scripts/release/publish:12,35uploads only its fixedfileslist (plus component archives), so nolicenses/libghostty-vt/*object reaches recipients.scripts/release/common:51rejects such manifest paths, and the signer has its own fixed object inventory. The lower-level packager test cannot cover this path.Reproduced on scratch merge
1b05ae8497(reviewed head267d2c809+ dev9965911c8) on compute01, with Nix and the existing release-channel fixture modified only to feed real notice files from package-release into the real release/build script. The notice exists in the resulting bundle, but the manifest omits it. Command:nix develop . -c python3 ~/.cache/codex-scratch/j390/evidence/release-pipeline-red.py ReleaseScripts.test_version_grammar_and_explicit_build_channel. Exit 1:AssertionError: 'licenses/libghostty-vt/libghostty-vt-MIT.txt' not found ... : release/build dropped VT notices from SHA256SUMS.Reproducer and full output: compute01
/home/claude/.cache/codex-scratch/j390/evidence/release-pipeline-red.{py,log}. No publication or deployment occurred. Fix the complete build/sign/publish/download contract to distribute and verify the notices, preserving bounded path allowlists, and add a publication-path regression test. This leaves J368's P1 unresolved for published releases; the local packager and Nix path are separate checks still underway.J390 licence verification update: all 11 distributed
.txtfiles exactly match files in the checksum/signature-verified 1.0 source/dependency extraction (license-check.log,LICENSE_EXACT_MATCH=PASS). SPDX inventory remains permissive and AGPL-3.0-only compatible: engine MIT; Highway Apache-2.0 OR BSD-3-Clause; simdutf and Wuffs Apache-2.0 OR MIT; translate_c MIT; uucode MIT AND Unicode-3.0; build-only aro MIT AND Unicode-3.0. No additional top-level dependency NOTICE files were found.The actual
package-release --builtstaging succeeds, every licence is in SHA256SUMS and passes strict checksum verification, andscripts/release/deploy.archivecarries the notices in its transport tarball (18 members). Executing the installPhase evaluated from.#packages.x86_64-linux.default.installPhaseagainst that real bundle exposes identical bytes atshare/licenses/infraternal/libghostty-vt/*. This is an install-phase harness, not a complete Nix derivation build. Evidence: compute01/home/claude/.cache/codex-scratch/j390/evidence/{package-notices.log,license-check.py,license-check.log,distribution-check.py,distribution-check.log,nix-install-phase.sh,tarball-members.txt}.P1 from comment 86985 remains: signed public publication bypasses these working local bundle/install paths. Precision correction: the Worker signer is root-path-only, not a fixed filename inventory:
apps/release-signer/src/index.js:121explicitly skips every name containing/, so it would omitlicenses/...even if the publisher uploaded those objects. The fix must cover that boundary too. No external publishing or deployment has been performed.J390's minimal P1 regression is committed locally as
1f008bfb90873814eca70bfbbd1b7ae30630da52onreview-j390, with the patch attached to comment 86985 (p1-regression.zip). It extends the existing release-channel fixture rather than adding a separate harness. Replayed on compute01 against the unchanged scratch merge, it fails with all 12licenses/libghostty-vt/*paths missing from final SHA256SUMS (release-notices-regression.log, exit 1). No review branch was pushed. Full quick/fast runs remain on unmodified scratch merge1b05ae84971f71cab54f435264bbb9b67355c460, so the intentionally red review test does not contaminate the author's gate result.J390 verification progress on scratch merge
1b05ae84971f71cab54f435264bbb9b67355c460(target267d2c809+ dev9965911c8): compute01 quick passed. Verbatim output summary:Mac
scripts/macos-build-checkpassed underlockf -k /tmp/mac-bench.lock, CARGO_INCREMENTAL=0, including session_shell 5/5. The worktree target is absent after lock release (MAC_TARGET_CLEAN=YES). Receipt: Mac/Users/claude/.cache/codex-scratch/j390/evidence/mac.log. Quick receipt: compute01/home/claude/.cache/codex-scratch/j390/evidence/quick.log. Both logs attached below.Fast is queued on compute01, PID 4177666, log
/home/claude/.cache/codex-scratch/j390/evidence/fast.log. Both VM queues checked first. Remaining: final gate, matched current-dev static and parser measurements, and real branch-server terminal smoke. No gate pass is claimed for the pending fast run.J390 P2/P3 cross-check: independently hashed and sized the preserved matched pre-P2 and P2 artifacts on dev-02. All four binary hashes exactly match
docs/verification/libghostty-vt-1.0-size-provenance.md. The source commits' Cargo.lock and flake.lock hashes also match each other. Verified recorded static reductions: x86_64 28,240,792 → 27,884,728 bytes (-356,064); aarch64 25,388,760 → 25,051,144 bytes (-337,616). Raw artifact receipt: compute01/home/claude/.cache/codex-scratch/j390/evidence/p2-artifact-check.txt(original files remain on dev-02 underJ339-review-fixes/evidence/). This confirms that the provenance record identifies real matching files; it is not presented as J390's fresh build or as the current-dev comparison, both still pending behind the required gate queue.J390 re-review progress: macOS build/check passed; quick passed on the clean scratch merge
1b05ae84971f71cab54f435264bbb9b67355c460of reviewed267d2c809with dev9965911c8. The fast run is queued on compute01 (PID 4177666), log/home/claude/.cache/codex-scratch/j390/evidence/fast.log; one physical target directory/home/claude/worktrees/j390/target.P1 publication finding remains as reported in 86985. Remaining work is fresh matched static builds versus dev, the VT/feature suites, real terminal smoke, and alternating parser measurements on the performance VM. These are prepared sequentially, with no shared branch changes or deployment.
Browser routing: shared preview reports
This host is missing libraries T3's browser needs (libnspr4.so, libnss3.so, ...). The real terminal test will use repository Playwright on compute01, as required by the task's compute01 branch-server scope. No browser runs on the control host.J390: compute01 granted slot 1/4 after approximately 38 minutes queued. The requested
scripts/verify fastis now running on scratch merge1b05ae84971f71cab54f435264bbb9b67355c460, innix develop -c, jobs=4. Early formatting/vendor/migration checks passed; no final gate result yet. Remaining suites/builds and the performance comparison stay pending. Evidence:/home/claude/.cache/codex-scratch/j390/evidence/fast.log.J390 progress: the clean scratch-merge fast gate completed its workspace and process-per-user shim rows with no recorded failures, and
privileged integration: PASS. It is now in release-probe exclusion; static builds and final gate tables remain pending.Fresh requested correctness receipts from
/home/claude/.cache/codex-scratch/j390/evidence/fast.log(also extracted intocorrectness-summary.txt): default shim 158 passed / 0 failed / 15 ignored;agent_sessions4/4;replay_size1/1;replay_size_review1/1; shim integration 31/31;vt_credit1/1;vt_reconnect1/1. The feature-specific session-image, native VT, real branch-server smoke, and matched size/perf work remain pending after this reservation. P1 publication finding is unchanged.J390: fresh x86_64 static release build on the scratch merge finished. The gate reports:
The x86 key-memory check passed. aarch64 is compiling; fast has no final result yet. This recorded gate baseline is not the current-dev comparison. That comparison will rebuild frozen dev
9965911c8in the same isolated checkout path after preserving branch outputs and finishing branch checks, then restorereview-j390; exact source-SHA guards and a restore trap are in the scratch driver. This keeps source-path remap flags and unchanged dependency artifacts matched, avoiding an unnecessary rebuild caused by a second checkout path. Both ordinary daemon and private session executables are included in the size capture.Evidence:
/home/claude/.cache/codex-scratch/j390/evidence/fast.log,matched-build.sh,remaining.sh. P1 publication finding remains unchanged. No push, shared-branch merge, or deployment.J390 measurement-plan correction before any baseline build: retain the separate frozen dev checkout (
/home/claude/worktrees/j390-dev) rather than the same-path checkout proposed in 87631. The Zig pin also changes native C compiler inputs, and Cargo's cached build-script outputs must not obscure that distinction. Distinct checkout/remap/compiler paths force independent fingerprints for the static baseline, at the cost of rebuilding dependencies. Both checkouts still use the one physical J390 target directory. No baseline measurements or source checkout switches were made under the superseded approach. Exact SHA guards remain enabled.J390 receipt-label correction to 87595: quick's stand-alone default shim lib suite was 115 passed / 0 failed / 14 ignored. Fast's workspace shim lib suite was 158 passed / 0 failed / 15 ignored, with Cargo workspace feature unification (including CLI/session features). The explicit process-per-user lib suite was 226 passed / 0 failed / 20 ignored. These are all passing receipts, but 158 should not be labeled the stand-alone default configuration. Full logs retain the exact commands/binaries. The forthcoming matched parser executables explicitly use
--features session-image, matching the shipping executable engine configuration on both source revisions; the ordinary logger boundary is checked separately in compiled archives.J390: requested compute01 gates on clean scratch merge
1b05ae84971f71cab54f435264bbb9b67355c460(reviewed267d2c809, dev9965911c8) both passed, through build-slot andnix develop -c. The full unedited logs are attached. No #421 red occurred.Verbatim quick summary:
Verbatim fast Rust table:
Verbatim fast ending:
Both shipping ELF architectures built; fresh branch sizes are x86_64 28,225,752 B and aarch64 25,341,656 B, both without PT_INTERP. These are branch sizes, not yet deltas against current dev. The matched-build/feature/runtime reservation is queued (PID 1623764), and parser measurements will follow on the performance VM. P1 publication finding remains unresolved.
J390 follow-up: explicit release session-image lib tests passed 115 / 0 failed / 14 ignored,
SESSION_IMAGE_EXIT=0.Two initial review harness invocations were unsuitable and their failures are retained:
test-lib-vtin ReleaseSafe: upstream PageList tests requirebuild_options.slow_runtime_safety(compile-time assertion), while the Zig-only module also reaches our C-only adapter exports with Zig ABI types. No shipping build failed. Upstreambuild.zig:489–496explicitly documents thattest-lib-vt-build -Demit-test-exe=trueemits the C test binary containing every test from the Zig module plus the C tests. That documented superset is scheduled in Debug mode, with its result still pending.user_hostfrominfraternal-shim; it belongs toinfraternal. The corrected process-per-user integration command is scheduled with--no-default-features, since it exercises the standalone research-host command.Evidence:
/home/claude/.cache/codex-scratch/j390/evidence/{vt-suite,session-image,user-host}.log; corrected receipts will bevt-suite-c.loganduser-host-corrected.log. Initial failures are not being counted as passing tests or attributed to #421. No product source changes were made.J390 continuation: recovered the existing reservation and retained logs. Release session-image lib: 115 passed / 0 failed / 14 ignored (
SESSION_IMAGE_EXIT=0); compact-history lib: 232 passed / 0 failed / 23 ignored (COMPACT_HISTORY_EXIT=0). Evidence remains compute01/home/claude/.cache/codex-scratch/j390/evidence/{session-image,compact-history}.log. Native mouse feature compilation is still running before the branch-server smoke and corrected upstream C VT superset; fresh frozen-dev comparison follows in the same reservation. Quick and fast have already passed as recorded in 87657. P1 publication finding in 86985 remains unresolved. No shared branch change, push or deployment.J390 P2: the explicit native mouse continuation test was not fully ported to the 1.0 C API. On the clean scratch merge
1b05ae849(reviewed267d2c809),nix develop . -c cargo test --locked -p infraternal-shim --features vt-test-input --test mousefails with exit 101.tests/native/mouse_probe.c:12,14still callsghostty_mouse_encoder_setopt_from_terminalandghostty_mouse_encoder_setopt; neither is declared by the signed 1.0 headers, so the C probe cannot compile and never checks snapshot mouse continuations. This is repository test code, not the review harness. The main fast gate did not exercise this explicit feature.Evidence: compute01
/home/claude/.cache/codex-scratch/j390/evidence/mouse.logand/home/claude/.cache/codex-scratch/infraternal-shim-tests/evidence/mouse-2545863/{mouse-build,stderr}.log. Compiler output:error: call to undeclared function 'ghostty_mouse_encoder_setopt_from_terminal'and the same error forghostty_mouse_encoder_setopt. Port the remaining encoder calls and retain the exact-library probe selection. No runtime mouse regression is claimed from this compile failure.J390 real branch-server smoke finished on compute01 using the retained x86 static binary and freshly built production tracer. A fresh private server/browser/passkey and real PTY were used, with cleanup in
finally; no deployment or shared authenticator state was used. Vim saved exactlyj390 界🙂 é\n, htop entered/exited its full-screen UI, and wide-char output reached the rendered terminal. Screenshots are attached. OSC 52 bytes were observed through the bridge, but the browser clipboard stayed unchanged despite granted permissions; this is a failed clipboard check, even though the harness process exits 0 after recording it. Baseline dev smoke remains pending before attribution.Artifacts: compute01
/home/claude/.cache/codex-scratch/j390/evidence/smoke-branch/{report.json,vim.png,htop.png,wide.png,osc52.png}andsmoke-branch.log. Corrected upstream C VT suite is compiling in the same reservation. Mouse test P2 is separately recorded in 87753, with compiler diagnostics attached there.J390 P3: the repaired artifact hashes match, but the size-control attribution still needs one correction.
docs/verification/libghostty-vt-1.0-size-provenance.md:82–85says the privatesession-imagelogger is checked separately and “does not change the ordinary product configuration.” Both pre-P217c9668eand P25f96a8e61havecrates/infraternal/Cargo.toml:22unconditionally enablinginfraternal-shimfeatures["session-image", "cli"];infraternal-sessionenablessession-imagetoo. The statedstatic-cargo ... --package infraternalrecipe therefore includes the logger change. Its -356,064 / -337,616-byte result is a combined P2 product delta, not an isolated sectioning measurement.Correct the prose to label the combined controls, keeping J368's separate native-probe measurements distinct. The numerical sizes/hashes themselves are verified; no new isolated product measurement is claimed or required for that labeling fix. Source evidence:
git show 17c9668e:crates/infraternal/Cargo.tomlandgit show 5f96a8e61:crates/infraternal/Cargo.tomlcontain the same feature selection. J390 parser executables already explicitly usesession-imageon both revisions, matching the shipping executable configuration.J390 upstream VT suite is still running (beyond 2,700 / 3,671 cases). It has one observed failure so far:
terminal.stream_terminal.test.full reset,stream_terminal.zig:3361, whereexpect(t.glyph_glossary.contains(0xE0A0))runs BEFORE the RIS/reset command. Our tested-Dvt-features=-allconfiguration disables glyph registration, so that setup precondition cannot hold. The immediately adjacent glyph test guardsif (comptime !build_options.glyph_protocol) return error.SkipZigTest; the full-reset fixture does not. This is not being counted as a passing suite or attributed to #421, and it does not demonstrate a reset runtime regression. Final counts remain pending.Command/recipe: compute01
/home/claude/.cache/codex-scratch/j390/evidence/vt-suite-c.sh; raw outputvt-suite-c.log; source/feature guard excerptvt-fixture-inspection.txt. Branch-server screenshots are on comment 87755, mouse C compile regression on 87753, provenance labeling P3 on 87761. No additional repository code changes were made.J390 correction: my progress-count regex missed multiline Zig failures (
expected ...on the test-name line, followed byFAILon the next line). The earlier “one observed failure” count in 87779 and interim progress text is incorrect. The uneditedvt-suite-c.logcurrently contains 221 failures: the glyph setup precondition plus C API cases for optional selection/search/input/formatter/render/color/cell facilities disabled by the test invocation's-Dvt-features=-all. The default-feature upstream C fixtures are not a passing oracle under that configuration. Full failure names are retained in compute01/home/claude/.cache/codex-scratch/j390/evidence/vt-failure-summary.txt; raw output remains unchanged.The run is still in the large hyperlink-map snapshot stress case. A focused enabled-feature recheck (
terminal.c.plusfull resetfilters, omitting-Dvt-features=-all) is scheduled next before the dev build, so the feature-mismatch explanation can be tested without changing the shipping configuration or repeating the large internal fuzz/stress cases. That diagnostic has not run or passed yet. The repository-native mouse test failure in 87753 remains separate: it cannot compile due to removed C API names. P1/P3 findings are unchanged.J390 full minimal-feature upstream VT run finished: 3295 passed; 155 skipped; 221 failed. 37 errors were logged. 3 tests leaked memory. VT_C_SUITE_EXIT=1. The unedited log is retained at compute01
/home/claude/.cache/codex-scratch/j390/evidence/vt-suite-c.log. It is a FAILED run, not a passing gate. The fixture expects optional facilities intentionally disabled by-Dvt-features=-all; the inspected failures include the pre-RIS glyph expectation and C API.unsupportedreturns for selection/search/input/formatter/render/color/cell operations. The enabled-feature C API diagnostic has not completed yet, so that explanation is not presented as a green recheck.Current reservation: corrected process-per-user
infraternal --no-default-features --features process-per-user --test user_hostis compiling; then compiled-archive section/logger evidence, then the enabled C API diagnostic (vt-enabled-delta.sh, filtersterminal.c.andfull reset, upstream default features), then fresh matched frozen-dev static/parser builds and baseline browser smoke. One target:/home/claude/worktrees/j390/target, shared with baseline checkout/home/claude/worktrees/j390-dev; no second target. Guarded baseline recipe isevidence/matched-build.sh; parentevidence/remaining.sh; logremaining.log; PID 1623764 / driver 1922818.Confirmed review findings remain P1 86985 (signed publication drops notices), P2 87753 (mouse test uses removed 1.0 function names), P3 87761 (size-control pair includes private logger but prose says otherwise). Quick/fast on clean scratch merge
1b05ae849passed, quoted in 87657. Mac passed. Fresh branch x86/arm binaries and parser executable are preserved outside target withbranch-provenance.txt; fresh dev numbers and perf spread remain pending. Branch smoke passed vim/htop/wide output, failed browser OSC52 copy; baseline attribution pending. No shared branch merge, push or deployment.J390 enabled-feature C API recheck PASSED: All 549 tests passed,
VT_ENABLED_DELTA_BINARY_EXIT=0,VT_ENABLED_DELTA_EXIT=0; no logged-error or leak summary. Comparing test names shows all 221 failures from the-allrun pass in this enabled-feature diagnostic (vt-delta-coverage.json: covered_failures=221, uncovered_failures=[]). The raw minimal-feature run remains red and unchanged; its feature-unaware upstream fixtures are now accounted for rather than presented as engine regressions.The corrected private process-per-user integration initially hit an environment-dependent fixture path of exactly 108 bytes with seven-digit PIDs (
path must be shorter than SUN_LEN). Running its already-compiled binary with a fresh short HOME passed 2/2,USER_HOST_SHORT_HOME_EXIT=0, and the temporary HOME was removed. Logs:user-host-corrected.log(red),user-host-short-home.log(green).Compiled native archive inspection PASSED (
ARCHIVE_CHECK_EXIT=0): all completed variants emit function and data sections; ordinary archives retainghostty_sys_setandghostty_sys_log_stderr; only private-image archives omit them and contain the no-op source. Receiptarchive-check.log. Fresh frozen-dev builds are now running in the existing reservation. Evidence root remains compute01/home/claude/.cache/codex-scratch/j390/evidence/.J390 progress: the initial frozen-dev (
9965911c8) static build failed in native C dependency compilation while parsing Zig .o.d files. Both source pins remain unchanged: dev Zig 0.15.2 and reviewed branch Zig 0.17.0. Their C wrapper reused this job's auth-tools/cache. I preserved dev-build-initial-red.log and am retrying with only that job-local cache cold (old cache retained). This is a cache-isolation hypothesis, not yet a result. The retry is queued on compute01 (PID 3342046); fresh size deltas, paired perf measurements and dev OSC52 comparison remain pending. No gates rerun, no merge/push/deployment.J390 re-review verdict: REQUEST CHANGES.
Reviewed
libghostty-vt-1.0at267d2c809d0aaaa80671c4aa664ce437ba64e1c5; verification used the clean scratch merge1b05ae84971f71cab54f435264bbb9b67355c460with dev9965911c8ac2848168f5947f623488c75631c320. No integration merge, push, or deployment was performed.Findings:
scripts/package-releaseand the transport tarball contain the notices, butscripts/release/build:33overwrites SHA256SUMS with a fixed root inventory;scripts/release/publishomits the notices; the downloader allowlist and release signer exclude nested licence objects. The release/build fixture reproduces the missing manifest entries. Reproducer patch is attached in the earlier comment (local-only commit1f008bfb90873814eca70bfbbd1b7ae30630da52). Carry notices through the complete signed publication/download path, with a regression covering that path.cargo test --locked -p infraternal-shim --features vt-test-input --test mouseexits 101 becausetests/native/mouse_probe.c:12,14usesghostty_mouse_encoder_setopt_from_terminalandghostty_mouse_encoder_setopt. The new APIs areghostty_mouse_encoder_set_from_terminalandghostty_mouse_encoder_set. This is a compile regression; I am not claiming a runtime mouse regression.docs/verification/libghostty-vt-1.0-size-provenance.md:82–85treats private logging as a separate check, but the product enablessession-imagein both measured revisions. The direct pair includes section emission and logger removal; correct the attribution or provide an isolated comparison. The preserved binary hashes and reported sizes match.Other verification:
share/licenses/infraternal/libghostty-vt/. The Nix check is an install-phase harness, not a complete derivation build.session-imagearchives omit them. Preserved pre-P2/P2 product deltas are −356,064 B x86_64 and −337,616 B aarch64, representing the combined controls.vt-delta-coverage.json. The minimal run is not represented as green.macos-build-check: PASS,MAC_EXIT=0). Both Linux static architectures built without PT_INTERP.Fresh size comparison (compute01, same physical target and
scripts/static-cargorecipe; complete hashes insize-summary.jsonand both provenance receipts):The first dev native-C build failed parsing cached dependency files. The retry with only the job-local C cache cold passed (
MATCHED_dev_BUILD_EXIT=0,RETRY_DEV_EXIT=0); both attempts are retained. Sources and pins were unchanged. This comparison includes the engine/build-recipe changes and Zig 0.15.2 → 0.17.0, not an isolated engine attribution. The two source snapshots have identical Cargo.lock and flake.lock hashes.Parser performance: production release
session-imageadapter, identicalmeasured_parserworkload (100 × 392,340 bytes of ASCII/CRLF output, 200×60 terminal), one warmup per executable followed by seven alternating pairs. On the perf VM underperf-runCPU 1–3 /6 GiB, dev median 207.77 MB/s (201.59–210.02), reviewed merge median 223.63 MB/s (211.27–228.52). Median paired gain 7.61%, paired range +4.80% to +9.92%; ratio of medians +7.63%. Every pair improved. Before/after quiet checks passed; steal during run was 0/1805 jiffies.PERF_PAIRS_EXIT=0. Raw samples, binary hashes, machine snapshots and summary JSON/CSV are in the perf evidence attachment. This is one parser workload, not a claim about every terminal operation.Real compute01 branch-server smoke: vim saved the exact Unicode input, htop entered/exited, and wide-character/combining output passed on both branch and frozen dev. OSC 52 copy did not change the browser clipboard on either binary, although the escape sequence was delivered through the PTY. The smoke is not represented as wholly green and the comparison does not establish an upgrade regression. Both reports and real production-build screenshots are retained/attached. The harness deliberately reports per-check status even when its process exit is zero.
All requested checks have finished. The compute01 scratch merge remains clean. No job build target is retained on compute01 or the Mac; evidence and the copied measurement binaries remain outside the deleted target. No review-owned server/browser/build/benchmark remains running. The optional inline chart preview failed because the control host lacks browser libraries (including libnspr4.so/libnss3.so); this does not affect the recorded compute01 browser smoke.
J390: requested compute01 gates on clean scratch merge
1b05ae84971f71cab54f435264bbb9b67355c460(reviewed267d2c809, dev9965911c8) both passed, through build-slot andnix develop -c. The full unedited logs are attached. No #421 red occurred.Verbatim quick summary:
Verbatim fast Rust table:
Verbatim fast ending:
Final: REQUEST CHANGES; reviewed
267d2c809d0aaaa80671c4aa664ce437ba64e1c5; product size +53,168 B x86_64 /+36,344 B aarch64 versus dev; parser median 207.77 → 223.63 MB/s (median paired +7.61%); quick exit 0, fast exit 0.J339 follow-up started. Existing branch
libghostty-vt-1.0is at267d2c809d0aaaa80671c4aa664ce437ba64e1c5; fetchedorigin/devis0a5432d2c1347c57bf1a6c57e368877599d57587. I will rebase the feature branch onto that current dev head before edits, following the repository workflow; I will not merge the feature branch to dev.Plan (estimate: 3–5 active hours plus build-slot queue): (1) add and run a red regression through signed release publication, then carry notices through its manifest/signing/download allow-lists; (2) reproduce the mouse probe compile failure and port it to the 1.0 setters if the probe still covers behavior; (3) correct the size-provenance wording so the measured product delta is labeled as the combined section/logger effect unless isolated evidence supports separate attribution. Commit the three findings separately, run
verify quickthenverify faston compute01, and post final head/gate output here.P1 finding confirmed with test-first regressions (no production edits yet). On dev-02,
python3 scripts/release/test.pyfails in four checks: the release builder's signed-root checksum list omits all 12licenses/libghostty-vt/notices; the local publication fixture observes 14 uploaded objects versus 26 expected; a bundle missingUnicode-3.0.txtis accepted for upload (exit 0); and the fixture's signed manifest omits the notice paths. Evidence:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/p1-release-red-final.log.The release-signer Worker test is red too:
entry.filescontains onlyVERSIONand the five binaries, and signing succeeds (HTTP 200) after the Unicode notice is removed (expected 409). Evidence:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/p1-worker-red-clean.log.Next I am carrying the fixed notice inventory through build checksums, publisher uploads, signer requirements, and verified downloads; the test will also confirm missing or modified notice objects fail verification.
P1 fix committed and pushed as
8c2d66cca(fix: include VT notices in signed releases (#419)). The release builder now covers all 12 notice paths in the signed root checksums; publication uploads and compares them; the signer refuses new signatures when any is absent; and the verifier accepts only those nested notice paths, creates their download directories, validates complete notice sets when present, and checks their signed hashes. Old signed releases with no notice paths remain verifiable.Green evidence on dev-02:
scripts/release/test.pyran 9 tests and passed (/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/p1-release-green2.log);bun test scripts/release/worker.test.tsran 4 tests and passed (.../p1-worker-green.log);scripts/test-vt-release-notices.pypassed with the preserved static x86 artifact (.../vt-local-notices-green.log). The regression checks exercise the signed manifest, public object list, required notice set, and missing/modified notice downloads.P3 provenance correction committed and pushed as
80fb025b7(docs: label the combined VT size controls (#419)). The direct pre-P2/P2 product pair includes restored function/data section emission and removal of the private session-image logger symbols; both product builds enable session-image. The document now states the reported -356,064/-337,616 byte deltas combine those controls and cannot be separately attributed. It also clarifies that the private-only archive symbol check is not an isolated product size measurement. Evidence is the updated “Direct P2 size-control comparison” paragraph indocs/verification/libghostty-vt-1.0-size-provenance.md.P2 finding confirmed before editing.
cargo test --locked -p infraternal-shim --features vt-test-input --test mouseexited 101. The native compiler reportsghostty_mouse_encoder_setopt_from_terminalandghostty_mouse_encoder_setoptas undeclared attests/native/mouse_probe.c:12,14; the captured compiler output also points to the 1.0 header'suint8_t *encode buffer. Evidence:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/p2-mouse-red-v2.logand/home/claude/.cache/codex-scratch/infraternal-shim-tests/evidence/mouse-856572/stderr.log.The probe remains useful: it checks that faithful snapshot/replay preserves public mouse reports across tracking-mode changes. I will port it to
ghostty_mouse_encoder_set_from_terminalandghostty_mouse_encoder_set, retaining the 1.0GHOSTTY_MOUSE_ENCODER_OPT_SIZEoption and using the byte-buffer type declared by the API.Base update before the final green run: after fetching,
origin/devis now44e80ccc5e1462bc19ae34979c2edf23c525a967(#438), four commits beyond this branch's current merge base0a5432d2c1347c57bf1a6c57e368877599d57587. The P2 green test is still queued and has not started. I will rebase this branch onto44e80ccc5, update the test worktree to that rebased head, then finish the P2 red/green pair and run the requested gates. No merge to dev.P2 fix committed and pushed as
8cd1475ad9a8ce05fe9583bb5e669b356d105f5a. The retained probe still checks faithful snapshot/replay of public mouse reports across tracking-mode changes; libghostty-vt 1.0 does not make that behavior check redundant. It now usesghostty_mouse_encoder_set_from_terminal,ghostty_mouse_encoder_set, and the declareduint8_t *output buffer. The current dev-02 quick gate is queued; I will post the fresh focused-test and gate results when they finish.Gate finding: the first
verify quickrun stopped atdoc comments on diffwithscripts/release/worker.test.ts:23: fixture needs a doc comment (D345). The new release-signer fixture was added with the P1 notice regression and lacked the required function comment; the full log is/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-quick.log. I added the fixture comment and autosquashed it into the P1 notice-publication commit to keep one commit per review finding. The rewritten branch head isfbfd48c3b32647ce2aad7b9e10c8d168c613c77d; I am rerunning quick before the focused mouse test and fast gate.The corrected
scripts/verify quickrun on dev-02 passed atfbfd48c3b32647ce2aad7b9e10c8d168c613c77d. The full log is/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-quick-final.log.Verbatim gate output:
The changed shim unit tests reported
115 passed; 0 failed; 14 ignored. The focused mouse probe and required compute01 fast gate are next.P2 green on current branch head
fbfd48c3b32647ce2aad7b9e10c8d168c613c77d:cargo test --locked -p infraternal-shim --features vt-test-input --test mouse -- --nocapturecompleted through build-slot and Nix on dev-02.Verbatim result:
Full receipt:
/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/p2-mouse-green-final.log.Base update during queue wait:
origin/devadvanced from44e80ccc5e1462bc19ae34979c2edf23c525a967to6b60f1fb7da71005da7c5f291ede28eb742fe583while the fast gate was still queued. I canceled the queued old-head command before it acquired a slot. The branch is now rebased onto current dev and force-pushed ate0d879000bdb88533e75af07c23f3933de7084c4. I am refreshing both VM worktrees and rerunning quick and fast on this head; the earlier quick receipt is retained but is not the final-base result.Current-base
scripts/verify quickpassed on dev-02 at heade0d879000bdb88533e75af07c23f3933de7084c4, withorigin/dev6b60f1fb7da71005da7c5f291ede28eb742fe583. The base changes since44e80ccc5were SELinux install changes; none touched the shim or VT build path. Full log:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-quick-6b60.log.Verbatim result:
The changed shim unit tests reported
115 passed; 0 failed; 14 ignored. The focused mouse test passed 1/1 on the same VT source and adapter code in the immediately preceding rebased run; the intervening base changes did not touch either path.J339c progress: J339's P1 (notices in signed publication,
79cac8148), P2 (mouse probe ported to 1.0, kept because it still checks snapshot/replay of mouse reports,e0d879000) and P3 (size provenance labelled as combined,39a46de3d) were already on the branch. I merged origin/dev (966c52e07) with no conflicts and pushed36fef2b430f2e34fc625af0061ea0cb67a9b75c7(confirmed withgit ls-remote). I stopped J339's staleverify fastrun on the old head (e0d879000) on compute01 and started a fresh one on36fef2b43. Log:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-fast-36fef.log.verify quickfollows.J339c: branch head is now
ee7ab5db62e66f63dc217e93939207c962a7cb8a(origin/deve34516d19merged; dev only added DECISIONS.md text since the last merge). Confirmed withgit ls-remote.verify fastis queued on compute01 (position 13 of 5 slots) andverify quickon dev-02. Both were killed twice while queued by something outside this job; I now run them as systemd user units with an explicit PATH. Logs:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-fast-36fef.log(compute01) andverify-quick-36fef.log(dev-02). I will post the verbatim results when they finish.J339c finish. Branch
libghostty-vt-1.0, headee7ab5db62e66f63dc217e93939207c962a7cb8a(pushed;git ls-remoteagrees). origin/deve34516d19is merged.J390's findings were already fixed by J339 and are on the branch: P1 notices in the signed publication (
79cac8148, with a release-signer test), P2 mouse probe ported to 1.0 and kept (e0d879000; 1.0 does not make its snapshot/replay check redundant), P3 size provenance labelled as combined (39a46de3d). This job only merged dev and re-ran the gates; no code changed.scripts/verify quickon dev-02: pass (115 shim unit tests passed, 14 ignored). Log:verify-quick-36fef.log.scripts/verify faston compute01:VERIFY_EXIT=0. All 24 rows PASS, including release component publication, shim process-per-user, privileged integration and static builds. Log:/home/claude/.cache/codex-scratch/j339-review-fixes/evidence/verify-fast-36fef.log.Static sizes (report only, D243 amended 2026-11-01): x86_64 musl 28230744 bytes (baseline 22418256, +5812488); aarch64 musl 25346776 bytes (baseline 20453280, +4893496). These deltas are against the gate's stored baseline, not a same-day dev build, so they are not the 53 KB J390 measured; I did not re-measure that.
Both gates were killed twice while queued by something outside this job. I ran them as systemd user units with an explicit PATH.
Fix-check verdict: APPROVE for
libghostty-vt-1.0atee7ab5db62e66f63dc217e93939207c962a7cb8a(git ls-remote origin libghostty-vt-1.0shows the same SHA). I merged nothing, pushed nothing and deployed nothing.1. The three fixes
79cac8148adds the 12 notice paths toscripts/release/common, andrelease/buildnow checksums them.release/publishuploads them, and the downloader allowlist accepts them and requires all 12 or none, so older signed releases still verify. The signer lists nested notice objects and refuses to sign when any is missing.ee7ab5db6into scratch trees on compute01 and applied one mutation to each.bun test scripts/release/worker.test.tsgives 4 pass, 0 fail.python3 scripts/release/test.pygives 9 tests OK.refuses to sign a release that omits any engine or dependency noticefails (3 pass, 1 fail). The signer would then sign a bucket without the notices.signs stable…andsigns edge…fail (2 pass, 2 fail), because the notices are missing from the signed manifest.publishfile list without the notices:test.pyfails, 3 failures of 9 (the new missing-notice test is not among them; they are the existing publication cases).verify_download. The Python tests do cover its behaviour end to end: they delete a signed notice and tamper with another, and each timeverifymust fail.e0d879000switches toghostty_mouse_encoder_set_from_terminalandghostty_mouse_encoder_set, checks both return codes, and uses auint8_tbuffer.libghostty-vt-1.0.0.tar.gz; its sha256 matchesscripts/libghostty-vt.sha256.cc,-fsyntax-only -Wall -I include: the pre-fix probe (e0d879000~1) fails with two implicit-declaration errors (…setopt_from_terminal,…setopt), and the fixed probe compiles. The only warning is a misleading-indentation note on a line that was already there.cargo test -p infraternal-shim --features vt-test-input --test mouse. In the fast log,tests/mouse.rsran "0 tests" because the feature is off, soverify fastnever exercises this probe. J339'sp2-mouse-green.logholds only a build-slot queue line (70 bytes), no result. compute01's queue was 9 deep, so I did not queue the run. Please run it once at merge.39a46de3donly changes wording. The doc now says the −356,064 / −337,616 B pair combines section emission and logger-symbol removal, that both builds enablesession-image, and that the private-only archive check is not a separate size measurement. That is the attribution J390 asked for, and it matches what J390 found. No isolated comparison was added.2. Fast log
The log is
~/.cache/codex-scratch/j339-review-fixes/evidence/verify-fast-36fef.logon compute01. Line 4 printsee7ab5db62e66f63dc217e93939207c962a7cb8a, and the last line isVERIFY_EXIT=0. All 24 rows of the Rust gate table are PASS, from Nix Cargo vendoring through static builds, including privileged integration and shim process-per-user. The log has 0(fail)lines. The bun protocol tests ended at 50 pass, 0 fail.ee7ab5db6. The diff36fef2b43..ee7ab5db6isDECISIONS.mdonly (+46 lines).nightly fuzz: could not take a build slotinside a row that still reports PASS; I read that as the reporter test's expected path.3. Static size
scripts/verify.d/rust.sh:116hasbaseline_bytes=22418256, last ratcheted on 2026-11-02 ina8926703a.scripts/static-cargorecipe, dev9965911c8from 2026-11-08). Dev is already 28,172,584 B on x86_64, so dev alone grew about 5.75 MB over the baseline in seven days.origin/devis 106 commits past9965911c8, mostly ssh plugin and UI, so another hours-long static build pair would only change the figures slightly. Per the 2026-11-01 owner rule the size is report-only.Non-blocking, for the merge
devaddress it.J430 started (test sub-agent, follow-ups from J424 fix check).
1a0be9343(dev merge of libghostty-vt 1.0).crates/infraternal-shim/tests/mouse.rs. Its feature isvt-test-input(added in this merge's Cargo.toml). Run once on compute01 through build-slot. If it fails, run the same on the first parent54a9da2a8.scripts/verify.d/rust.sh(stale since 2026-11-02). Measure x86_64 and aarch64 at1a0be9343the way the gate does. Pushratchet-size-baseline-419from1a0be9343with one commit, don't merge.J430: mouse test at
1a0be9343— PASSFeature:
vt-test-input(added by this merge tocrates/infraternal-shim/Cargo.toml, "Enables input encoding only for the native mouse ABI probe"). Without ittests/mouse.rsbuilds with 0 tests inverify fast.Command, run once on
claude@infraternal-dev-01-compute01in worktree~/worktrees/j430(detached at1a0be9343), through build-slot:Result (verbatim from the log):
Log: compute01
~/.cache/codex-scratch/j430/mouse-1a0be9343.log. Probe evidence dirs:~/.cache/codex-scratch/infraternal-shim-tests/evidence/mouse-<pid>.The first-parent check (
54a9da2a8) was not needed because the test passes at the merge.J430: static size baseline ratchet at
1a0be9343Branch
ratchet-size-baseline-419, one commit5bca4c0b8on base1a0be9343(not merged). It changesscripts/verify.d/rust.sh(bothbaseline_bytes) and the PROCESS.md §7 table. It is pushed;git ls-remote origin ratchet-size-baseline-419returns5bca4c0b8cfe82dfc751035ee1aee89331d811a1.Build:
scripts/auth-toolchain, thenscripts/static-cargo build --locked --release --package infraternal --target <t>for both targets, on compute01 through build-slot (worktree~/worktrees/j430, detached at1a0be9343). Log:~/.cache/codex-scratch/j430/static-1a0be9343.log.1a0be9343Both images have no PT_INTERP, and their ELF class and machine match the targets.
Gate's own size row, after the ratchet, on the same binaries (
source scripts/verify.d/rust.sh; rust_check_static_binary <target>):Note: the owner's brief put dev's growth at about 5.75 MB. The measured x86_64 growth is 5,850,184 B. The libghostty part is about 53 KB (x86_64) per the merge commit. The measured numbers are used here.
verify fastwas not run for this change: it is a two-constant edit, verified by the size row above. The full gate is for the merge owner.