Repository navigation
chore: sync verify-native-lifecycle to c54051e - #50
Conversation
The coverage record now names ghostty_terminal_set and its failure path, the DATA_MODE read, and Resize's second call. The "no JS inside native methods" assumption now says which methods read arguments before RequireTerminal, and that it was false for snapshot until #46. #48 changes only a test, and #49 changes only Feed's argument checks, so the model's Use(t) step still describes them. Drafted in workspace 36beaed175. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `xhigh`_ Change-Id: Iea32c157625764a4779be3eb8230069cc925a18a Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
Verdict: PASS+NOTES Parent: main Check 1. Rows and the assumption bullet against the head code. Every changed statement is true.
Check 2. Coverage of Check 3. Model run at the head. Check 4. Runtime probe (ReleaseFast addon, Node 26.12.1, one child process per case). I put traps on
Notes (non-blocking):
Generated with |
The lifecycle record now says that public feed runs a Proxy's getPrototypeOf trap in assertFeedData after #assertUsable, and that the native null check covers it. The CreateFails comment in the model now names the ghostty_terminal_set failure too, as the coverage row does. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `xhigh`_ Change-Id: I78a9534868aadd6f97ed08e3c4ae997c678f51bb Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
Verdict: PASS Delta since my last check:
Generated with |
## Why Ship the fixes merged since `v0.1.0-beta.3` to npm, so downstream projects such as agent-tty can update. The consumer-visible change is #53: `getNativeInfo()` now reports the Ghostty commit the addon was built from (`ghosttyCommit`), and `ghosttyVersion` reads `0.1.0-dev+<commit>`. ## What changed - `package.json` and `package-lock.json` go from `0.1.0-beta.3` to `0.1.0-beta.4`. The branch name matches the version, so `publish.yml` creates `v0.1.0-beta.4` after merge. - The `release-changelog` workflow adds the CHANGELOG entry to this branch. ## Scope - Included since beta.3: #53 (Ghostty commit in `getNativeInfo()`), #51 (7-day `min-release-age` for this repo's own npm installs, `devEngines` npm >= 11.10), #52 (verify skill scripts, not in the npm tarball), #50 (skill sync, not in the tarball). ## Blast Radius The merge publishes `0.1.0-beta.4` to npm under the `beta` dist-tag. `latest` stays on `0.1.0-beta.0`. The tarball's `package.json` now carries `devEngines`. npm checks it only for the project it runs in, and the #51 verifier installed a packed tarball with npm 9.9.4, 10.8.2, 10.9.8 and 11.20.0 (all exit 0). `.npmrc` is not in the tarball. ## Verification - `prepare-release-changelog.mjs` prints `should_generate=true` and `version-changed`. `resolve-npm-publish-tag.mjs` prints `beta`. - Local gate on this branch with Node 26.12.1: results posted as a PR comment. --- _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_
Why
The
verify-native-lifecycleskill keeps a sync commit. At that commit, its TLA+ model describes the covered native code. The sync commit was still7366b75(#12). Since then, #40 to #43, #46, and #49 changed covered code. #46 promised this follow-up.What changed
c54051e, the current main. It includes test: check that encodeMouse reads every caller field once #48 and fix(native): reject typed arrays other than Uint8Array in feed #49.ghostty_terminal_set(scrollback byte limit) in the constructor and its failure path,Resize's secondghostty_terminal_resizecall, and theGHOSTTY_TERMINAL_DATA_MODEread inEncodeMouse. Ghostty v1.4.0 (feat: pin Ghostty v1.4.0 so DECSTR soft resets apply #43) brought these.Snapshotreads its options beforeRequireTerminal, and it builds its result withDefineValueandDefineIndex.FeedandResizecallRequireTerminalfirst. After that, they only test types and read strings, bytes, and numbers, which runs no JS.GetVisibleText,FormatPlain, andFormatHtmlread no arguments.snapshotuntil fix(native): keep snapshot() from running JS while it uses the terminal #46.feed:assertFeedDatarunsdata instanceof Uint8Array, which runs a Proxy'sgetPrototypeOftrap after#assertUsable. The native null check covers it, as it does forsnapshot.AddonEnvLifecycle.tlachanges in comments only. TheCreateFailscomment now names theghostty_terminal_setfailure too.The model itself does not change. #48 changes only a test. #49 changes only
Feed's argument checks, so theUse(t)step still describesfeed.Verification
native/terminal.ccandsrc/index.tsatc54051e.git diff 7366b75 c54051eon the covered paths adds no new static state,Napi::Reference, or new place that freesterminal_ormouse_encoder_.run.sh: all 35 rows match EXPECT (OK: every result matches EXPECT.). The current config holds all 5 rules. Each of the 6 mutants breaks the rule it guards.The verifier's two notes on
0ff0941(thefeedwindow and theCreateFailscomment) are fixed in584c561.run.shstill passes all 35 rows.Workspace 36beaed175 drafted the first version of this commit. I corrected the assumption bullet: it said that every method reads its arguments before
RequireTerminal, butFeedandResizedo not.Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:xhigh