Repository navigation
chore: add the verify-libghostty-vt-node driving skill - #25
Conversation
Adds a project skill that verifies the package the way a user gets it: launch.sh builds and packs the checkout with a prebuild for this platform and installs the tarball into a scratch consumer project. doctor.sh checks that the bare import resolves inside the consumer and loads the packed prebuild. drive.sh runs one Node journey that imports @coder/libghostty-vt-node by name and keeps stdout, stderr and the exit code as evidence. cleanup.sh removes the instance and keeps the evidence. features/ maps five user-facing features (text, snapshot, resize, lifecycle and errors, install and native info) to 19 literal journeys that assert their own results. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_ Change-Id: Ic299a2c8a99e1b9fc58835f2612873130f5532a5 Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
@codex review |
|
@codex security review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
Security findingsAdvisory findings (2)
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
🛡️ Codex Security Review
Here are some automated security review suggestions for this pull request.
Reviewed commit: f9f51654e1
ℹ️ About Codex security reviews in GitHub
This is an experimental Codex feature. Security reviews are triggered when:
- You comment "@codex security review"
- A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review
Once complete, Codex will leave suggestions, or a comment if no findings are found.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9f51654e1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…-node Change-Id: I1d4d4ea69f03d1e5a85f71590638f8498fe52864 Signed-off-by: Thomas Kosiewski <tk@coder.com>
- Refuse a RUN_ROOT that another account can change (a symlink, a directory not owned by you or writable by group or others, or one in a parent that others can write without the sticky bit), and check the checkout boundary before creating anything. npm install runs package scripts from the tarball in RUN_ROOT. - Rerun npm ci and build:libghostty when their inputs changed, using a stamp with the hash of package-lock.json, or of the build script and the GHOSTTY_ / LIBGHOSTTY_VT_ variables. - Build from an empty dist/, so npm pack cannot ship stale output. - Record the checkout state before the build and fail if it changes before the end. - lifecycle-gc claims only what JS can see: V8 collected the Terminal objects and the process survived. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_ Change-Id: Iad83169a805a150caaf433b81588de523ffc489f Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
@codex review |
|
@codex security review |
There was a problem hiding this comment.
🛡️ Codex Security Review
Here are some automated security review suggestions for this pull request.
Reviewed commit: db70475143
ℹ️ About Codex security reviews in GitHub
This is an experimental Codex feature. Security reviews are triggered when:
- You comment "@codex security review"
- A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review
Once complete, Codex will leave suggestions, or a comment if no findings are found.
The parent check exempted a group-writable parent that you own, but any group member can rename the 0700 RUN_ROOT inside it and swap the tarball. launch.sh now walks every directory above RUN_ROOT and refuses one that another account owns (root excepted) or that group or others can write without the sticky bit. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_ Change-Id: I7a31693d4d2846366c411e7998a15a2a05b9ed7f Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
@codex review |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0821d9253f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- launch.sh checks the ancestors of RUN_ROOT as given and of its physical path, and uses the physical path that the check returns instead of resolving RUN_ROOT again. - launch.sh refuses a RUN_ROOT whose evidence/ already holds evidence, so one RUN_ROOT holds one launch. - instance.json records the sha256 of the loaded addon and of the libghostty-vt static library, with the hash of its build inputs. - drive.sh reserves each evidence directory with one mkdir. - doctor.sh compares the resolved file path, not the file URL, so a RUN_ROOT with a space passes. - lifecycle-workers fails after 20 s instead of hanging. _Generated with [`xum`](https://github.com/coder/xum) • Model: `anthropic:claude-opus-5-5` • Thinking: `high`_ Change-Id: Ie8dc0b6f9bae72da5857608d30bf73a5d4b80977 Signed-off-by: Thomas Kosiewski <tk@coder.com>
|
@codex review |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 676de35e90
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Adds
.agents/skills/verify-libghostty-vt-node/, a project skill that verifies the package the way a user gets it from npm.How it works
scripts/launch.shbuilds the checkout, packs it with a prebuild for this platform, and installs the tarball into a scratch consumer project outside the checkout.scripts/doctor.shis read-only. It checks that the bare import resolves inside the consumer, that the packed prebuild loads, and that the build still matches the checkout (STALEotherwise).scripts/drive.shruns one Node journey that imports@coder/libghostty-vt-nodeby name. It keeps the script, stdout, stderr, and exit code as evidence.scripts/cleanup.shremoves the instance and keeps the evidence. It also cleans up after a failed launch.features/maps five user-facing features to 18 literal journeys that assert their own results: text and debug formatters, snapshot, resize, lifecycle and errors (worker threads included), and install and native info.Proof
lifecycle-workerswas killed by a signal (exit 139), which is the bug the bottom PR fixes.SKILL.mdcold: launch, doctor, the four snapshot journeys, and cleanup all worked as written. I fixed the wording gaps it reported.npm ciandbuild:libghosttypaths.LIBGHOSTTY_VT_PREFIX) left an instance thatdoctor.shrejects andcleanup.shremoves.launch.shrefuses a symlinked, group-writable, or open-parentRUN_ROOTand one that resolves into the checkout, before it creates anything. It rerunsnpm ciandbuild:libghosttywhen their inputs change, builds from an emptydist/, and fails when the checkout changes during the launch. I tested each of these.Almost all of the diff is Markdown journeys and four shell scripts.
Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:high