Skip to content

release: 0.13.2 - #72

Merged
jamesyong-42 merged 3 commits into
mainfrom
release/0.13.2
Oct 25, 2026
Merged

jamesyong-42 merged 3 commits into
mainfrom
release/0.13.2

Conversation

@jamesyong-42

@jamesyong-42 jamesyong-42 commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Ships 0.13.2, the security patch for 0.13.1's prebuilt daemons. It carries the three PRs merged since 0.13.1:

Why now. 0.13.1's prebuilt ghosttead daemons on npm embed ctutils 0.4.3 and tokio 1.52.3. Both advisories entered their databases on 2026-10-23, after 0.13.1's audits had passed. 0.13.2's daemons build against ctutils 0.4.5 and tokio 1.53.3. The crates carry no lockfile, so crates.io consumers resolve their own versions.

The commits in this PR

  • 827478b chore(audit): one dated comment line under RUSTSEC-2026-0192's ignore. The ignore said to revisit by 2026-10-23, and the re-read found that fontdb 0.24.0 drops ttf-parser. The ignore stays: it is an unmaintained notice with no patched version. Moving ghosttea-text to fontdb 0.24 is its own lane after this release.
  • 8263cf0 release: 0.13.2: a pure bump made the way ccfb3e4 and 1541256 were. It is 45 replacements in 20 manifests, Cargo.lock moves only the 11 workspace versions, and it touches 1541256's 28 files. CHANGELOG.md gains the dated 0.13.2 section:
    • Fixed: RUSTSEC-2026-0385 and RUSTSEC-2026-0386, each by id;
    • Validation: the soak metric;
    • zod gets no line, because nothing shipped changes.
  • 22e25cd release: pin 0.13.2 Apple native artifact: the rebuilt artifact.

It is a patch. No public declaration, wire shape or default changes. The daemons move two dependencies, and the rest is a test, docs, one audit-config comment and dev tooling.

The Apple native artifact is rebuilt. Cargo.lock is one of its source inputs. #69, #71 and the bump moved the native source digest from the pinned 0.13.1 artifact's fa08d019… to 0c9f828e…, so check:apple-native-artifact requires a new publication.

  • Run 40047394201 built the candidate from 8263cf0. It ran the complete GhostteaKit SwiftPM suite, linked every public product against the candidate, and published ghosttea-apple-native-21a593e3611b (checksum 41e7a5ec…) through the release environment.
  • The pin commit records it: the lock equals the served JSON, shasum -a 256 equals swift package compute-checksum, and the tree's digest equals the served sourceDigest.

A full release. Like every release, 0.13.2 publishes all 10 npm packages and 7 Rust crates under one shared version, and npm's latest moves to 0.13.2.

Checks

  • Desktop gates 40052699512 and iOS release hardening 40052701856 on the head.
  • This PR's own checks run again on the head. audit-published runs check:apple-native-artifact:release and links every public product against the published artifact.
  • The artifact run's candidate job is the Swift compile proof. The iOS hardening workflow checks manifests, the BOM and resources; it does not compile Swift.
  • Local checks:
    • cargo audit is clean, and npm audit at high is 0 (3 moderates, all dev tooling);
    • check:apple-native-artifact and check:swiftpm:manifests pass on the pinned tree;
    • the iOS BOM, release-resources and App Store checks pass;
    • the release-notes, release-channel and npm-publisher tests pass 31/31;
    • node scripts/release-notes.mjs 0.13.2 renders Fixed with both advisory ids, and Validation.
  • Both audits ran in each push command, and each push ran only because both exited 0.
  • ci:desktop did not run locally. This Mac had no build window, so the compile and test proof is CI's.

After the merge, James signs and pushes v0.13.2 on the merge commit, as with 0.13.1 (ee3b721e).

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

jamesyong-42 and others added 3 commits October 23, 2026 17:54
…fontdb 0.24.0 drops ttf-parser

- The ignore's comment said "Revisit by 2026-10-23 or when fontdb publishes a maintained parser
  migration". Re-read on 2026-10-23: fontdb 0.24.0 is published, and its dependencies (log, slotmap,
  tinyvec; optional fontconfig-parser and memmap2) no longer include ttf-parser. fontdb 0.23.0 depends
  on ttf-parser 0.25, and it is the lock's only path to it, through ghosttea-text.
- The ignore stays: RUSTSEC-2026-0192 is an unmaintained notice with no patched version, not a known
  vulnerability, and future ttf-parser advisories remain fatal. Moving ghosttea-text to fontdb 0.24 is
  semver-breaking and is its own lane after 0.13.2; it removes ttf-parser and this ignore together.
- One comment line, dated at its source. cargo audit stays clean, and .cargo/audit.toml is not an
  input of the Apple native source digest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ships what main carried since 0.13.1: the ctutils advisory fix (#69), the lifecycle soak's metric fix
(#70), and the tokio advisory fix with zod for the dev tooling (#71). The commits under this one carry
them, so this commit stays a pure bump plus its CHANGELOG section, as 1541256 and ccfb3e4 were.

It is a patch release: no public declaration, wire shape or default changes.

- RUSTSEC-2026-0385 (ctutils < 0.4.4: non-constant-time mask generation and `u128` comparisons). #69
  (b09caeb) moved Cargo.lock to ctutils 0.4.5 under digest 0.11.3 <- sha2 0.11.0 + hmac 0.13.0 <-
  truffle-core 0.7.19. 0.13.1's prebuilt `ghosttead` daemons embed 0.4.3; 0.13.2's build against 0.4.5.
- RUSTSEC-2026-0386 (tokio < 1.53.3 on the 1.52 line: the safe `AsyncFd` constructors accept a
  descriptor the caller does not own). #71 (50343dd) moved Cargo.lock to tokio 1.53.3; neither ghosttea
  nor truffle-core calls those constructors. #71's f88df38 moved the dev-only zod to 4.6.7
  (GHSA-mrhx-c7xc-m3w5); no published package ships zod, so the CHANGELOG gives it no line.
- The soak: #70 (256cb11, ff3d318) measures the Windows handle rate per session churned since the
  baseline, and records the retained Windows handle as open in native/ghosttea/README.md.
- Version 0.13.1 -> 0.13.2 in every ghosttea-owned manifest:
  - the root and `[workspace.package]` versions;
  - all ten `packages/*`, versions and internal `@vibecook/ghosttea*` / ghosttead pins;
  - the three `apps/*`;
  - the sibling-crate `version =` pins in native/**/Cargo.toml.
  That is 45 replacements in 20 files, ccfb3e4's count; no third-party version moved.
- Cargo.lock moves only the 11 workspace versions. It was resolved offline with the ghosttea-config
  patch line set aside, then Cargo.toml was restored byte for byte (f17a0ff's method), and
  `cargo metadata --locked` agrees.
- package-lock.json follows the workspace versions.
- The iOS inventory is regenerated by its documented chain (update:ios-rust-components,
  check-ios-release-bom --write, update:ios-release-resources). It moves the same five files ccfb3e4
  moved, changing only the versions and the hashes derived from Cargo.lock and the BOM.
- CHANGELOG.md gains the 0.13.2 section, dated 2026-10-23 for the planned tag: Fixed (RUSTSEC-2026-0385
  and -0386, each by id) and Validation (the soak metric, under the heading 0.10.1 used for a test-only
  witness change). Nothing else. `release-notes.mjs 0.13.2` renders it.
- Not here: the Apple native artifact. #69's and #71's lock changes already moved its source digest
  (fa08d019…, the pinned 0.13.1 artifact's, to 369b5f27… and then 0c82a3a6…), and this bump moves it
  again through Cargo.lock, Cargo.toml, native/ghosttea/Cargo.toml, and ghosttea-core's and ghosttea-vt's
  Cargo.toml. The artifact is rebuilt from this commit and pinned in the next one.

Verified here:
- cargo audit is clean (263 crates), and npm audit --audit-level=high is 0 (3 dev-only moderates);
- the release-notes, release-channel and npm-publisher tests pass 31/31, and `release-notes.mjs 0.13.2`
  renders Fixed with both advisory ids, and Validation;
- check:workspace-names and prettier --check over format:check's paths pass;
- check:ios-release-bom, check:ios-release-resources, check:ios-app-store and check:swiftpm:manifests
  pass, and `cargo metadata --locked` agrees with the lock.
The compile and test proof is CI's: the artifact's candidate job and the release gates, dispatched on
this branch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Package.swift and apple-native-artifact.lock.json now name
  ghosttea-apple-native-21a593e3611b. ghosttea-apple-native-artifact.yml
  run 40047394201 built it from the clean release commit 8263cf0
  (release/0.13.2), then:
  - qualified it: the complete SwiftPM suite (298 tests), and a
    local-artifact consumer linking all 18 public library products
    against the candidate;
  - attested it (attestation 59304697);
  - published it after promotion through the protected release
    environment.
- The fields come from the SERVED release, not the run. The lock's tag,
  url, checksum, size, contentDigest, sourceDigest, entries and slices equal
  the published GhostteaAppleNative.xcframework.zip.json, field for field.
  - Here: the served archive's SHA-256 41e7a5ec… equals
    `swift package compute-checksum`, and its size is 45310278. The source
    digest 0c9f828e… is `nativeSourceDigest()` of this tree, and
    `check:apple-native-artifact` and `check:swiftpm:manifests` pass.
  - In CI: the promotion job re-downloaded the published assets and
    re-derived from those bytes the checksum, the content digest 21a593e3…
    (137 entries), the three slice digests and the source digest
    (`verify:ghosttea-apple-native-package`).
- `check:apple-native-artifact:release` was not run here, because this
  release has no local build window. The release PR's `audit-published`
  runs it against this lock, with the published-artifact consumer.
- It supersedes ghosttea-apple-native-6c5898e91c6a, the 0.13.1 artifact.
  #69's ctutils move, #71's tokio move and the 0.13.2 bump moved the native
  source digest (fa08d019… to 369b5f27…, 0c82a3a6…, then 0c9f828e…)
  through Cargo.lock, Cargo.toml, native/ghosttea/Cargo.toml, and
  ghosttea-core's and ghosttea-vt's Cargo.toml. A field-only update was not
  possible. #70's soak change and the audit.toml line are outside the
  digest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jamesyong-42 added a commit that referenced this pull request Oct 25, 2026
…ksum — the audit jobs stop compiling it

- `cargo install cargo-audit --version 0.22.2 --locked` compiled the tool on every run: 106 s of
  dependency-audit's 128 s on PR #72 (run 40052723708), and 169 s of rust-audit's 188 s on v0.13.1
  (run 39899120469).
- Both jobs now download cargo-audit-x86_64-unknown-linux-musl-v0.22.2.tgz from rustsec/rustsec's
  cargo-audit/v0.22.2 release, check it against a pinned SHA-256 and install it into ~/.cargo/bin.
  The version stays 0.22.2, so `cargo audit` and .cargo/audit.toml behave as before.
- The pinned hash, 7fb9497f…c428, is the sha256 of the served asset. It equals the hash that
  taiki-e/install-action's manifest records for the same file. The musl build is static, so it does
  not depend on the runner's glibc.
- publish-release's rust-audit only runs on tags. dependency-audit runs the identical step on
  ubuntu-24.04 in this PR.
- Verified here: the asset's sha256 and its archive layout (`cargo-audit-…-v0.22.2/cargo-audit`);
  both workflows parse and keep their step order. Not run here: prettier (no Node on this machine).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jamesyong-42 added a commit that referenced this pull request Oct 25, 2026
…ed while their inputs are unchanged — validate-package-manifests skips about seven minutes

- validate-package-manifests rebuilt both native inputs from source on every run:
  build:ghostty-vt:apple took 177 s and build:ssh:apple 248 s of the job's 762 s on PR #72
  (run 40052723838).
- The cache key hashes everything those builds depend on:
  - ghostty.lock.json, native/patches, ssh.lock.json and ios-toolchain.lock.json;
  - the six bootstrap, build and validate scripts, plus ghostty-vt-target.mjs, their only local
    import;
  - the runner architecture;
  - `xcodebuild -version` and the macOS, iOS and simulator SDK versions of both DEVELOPER_DIR (26.6)
    and GHOSTTY_DEVELOPER_DIR (26.3).
- A runner image that moves an Xcode build or SDK therefore misses and rebuilds. The rebuild is where
  build-ghostty-vt-apple.mjs checks the toolchain against ghostty.lock.json's appleBuilder.
- A hit can only restore outputs that a successful run built from identical inputs, because
  actions/cache saves on success only.
- The cache holds only what build:apple-native reads and the job uploads: the two xcframeworks in
  apple/GhostteaKit/Artifacts and the two build-metadata.json files. Zig's cache directories and
  the OpenSSL build tree stay out.
- The bootstraps still run on a hit, because build-ghosttea-apple-native.mjs runs
  sync-ghosttea-fonts.mjs, which needs native/vendor/ghostty at the locked commit.
- Unchanged: the publication build (build-candidate in ghosttea-apple-native-artifact.yml) and
  publish-release never use this cache.
- Verified here: the step order and conditions parse as intended, and grep finds the consumers of
  each cached path. This PR's first run misses and saves; a re-run of the job exercises a hit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jamesyong-42 added a commit that referenced this pull request Oct 25, 2026
…variants and the release flow

- Commands as package.json and the workflows run them, including the local prerequisite ci:desktop
  needs (bootstrap:ghostty-vt for the font sync) and how to run one Rust, TypeScript, Node or Swift
  test.
- The desktop frame path, the two local planes, and what each crate and package owns.
- Invariants checked against the source:
  - protocol minors (service.rs constants and asserts) and TRF1's additive sections;
  - the stdout test and the input actor's weak session reference;
  - the vt-sys build-script guard and the renderer command allowlist;
  - the iOS inventory chain after a Cargo.lock change, and the Apple artifact's source digest.
- The release outline from PUBLISHING.md and the release commits, with the `release` environment's
  current settings: no required reviewer since 2026-10-24, and `v*` tags admin-only through the
  "release tags" ruleset. It also notes auto-merge's limit: it waits only for the required verify
  and windows checks.
- One process note: don't dispatch desktop-release-gates or ios-release-hardening by hand on a
  branch that has a PR. On PR #72 both ran twice, and the PR's verify waited 68 s for a macOS
  runner.
- Not run here: prettier (no Node on this machine). The file follows its markdown rules by hand.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jamesyong-42
jamesyong-42 merged commit 117df06 into main Oct 25, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant