Skip to content

🤖 fix: verify-xum reads its launch time from node, and names chmod only for your own folders - #7919

Merged
ThomasK33 merged 3 commits into
mainfrom
verify-xum-node-clock
Nov 4, 2026
Merged

ThomasK33 merged 3 commits into
mainfrom
verify-xum-node-clock

Conversation

@ThomasK33

Copy link
Copy Markdown
Member

Summary

Every verify-xum launch on a host whose /usr/bin/date is uutils coreutils 0.8 failed at the 300 s deadline. This PR fixes that: launch now reads its start time from node -p 'Date.now()'. It also adds one #7917 advisor follow-up: the chmod fix in the git-dir refusal now appears only for a folder the user owns. Only files under .xum/skills/verify-xum/ change.

Background

  • Launch waits for a build stamp newer than its own start (t0). scripts/build-main-watch.js writes that stamp as Date.now() in milliseconds. t0 came from date +%s%3N.
    • uutils date 0.8.0 ignores the 3 in %3N and prints nanoseconds. On this host, date +%s%3N printed 1793814151776897404 (19 digits).
    • No 13-digit stamp is ever newer than that, so launch never saw a fresh build.
  • 🤖 fix: verify-xum names the umask fix, fails fast on a lost leader, keeps the guard from agent-browser #7917 added a chmod g-w,o-w <folder> fix to the refusals for group-writable git dirs and the folders above them. For a folder the user does not own, such as a root-owned, group-writable folder above the checkout, that command fails with "Operation not permitted".

Implementation

  • t0=$(node -p 'Date.now()') takes the stamp's own clock and unit. node is already a launch requirement. t0 is the only millisecond timestamp in the skill. The run id's date -u +%Y%m%d-%H%M%S has no width flag.
  • In require_safe_ancestors, a writable folder that the user does not own gets "use a checkout under folders you own" instead of the chmod fix. refusal_fix now also prints a fix text that names no folder. SKILL.md says the same next to the umask 002 note.

Validation

  • Launch on this host, with VERIFY_XUM_READY_TIMEOUT=120, comparing main (96216fc) with this branch:

    date on PATH date +%s%3N prints main this branch
    uutils 0.8.0 (/usr/bin/date) 19 digits fails at the deadline after 122 s: "launch did not finish in 120 s" ready after 19 s
    GNU coreutils 9.7 (/usr/bin/gnudate, linked as date on PATH) 13 digits ready after 13 s ready after 13 s
  • Folder you do not own: a repo made under umask 002, below a root-owned 0775 folder (created with sudo for the test).

    • Main printed run chmod g-w,o-w $B/rootdir for the root-owned folder. That command failed with "Operation not permitted", and every later run printed it again.
    • This branch still prints the chmod fix for the user's own .git and repo folder, and those commands exit 0. For the root-owned folder it says "use a checkout under folders you own".
  • Full token-mode proof of SKILL.md and every features/*.md recipe, on this host with uutils date: 184 PASS, 0 FAIL at 15e96ea (and at d9ce137 before the merge of 🤖 fix: verify-xum names the umask fix, fails fast on a lost leader, keeps the guard from agent-browser #7917).

  • make static-check, plus shellcheck 0.8.0 (CI's version) over all 46 shell scripts.

Risks

The risk is low. Only the agent-facing verify-xum skill changes. t0 now comes from the same clock that writes the build stamp. The refusal change only alters the text of a message that already refuses.


Generated with xum • Model: anthropic:claude-opus-5-5 • Thinking: xhigh • Cost: $213.46

uutils date 0.8 ignores the width in %3N and prints nanoseconds, so
t0=$(date +%s%3N) was 18-19 digits and no build stamp (Date.now(), in
milliseconds) was ever newer: every launch failed at the deadline on a
host where /usr/bin/date is uutils. Launch now takes t0 from
node -p 'Date.now()', the same clock and unit as the stamp.

---

_Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `xhigh` • Cost: `$213.46`_

<!-- mux-attribution: model=anthropic:claude-opus-5-5 thinking=xhigh costs=213.46 -->
A root-owned, group-writable folder above the git dir got the advice to
chmod it, which fails for anyone but root. The refusal now names the
chmod only for a folder of this user. For one you do not own, it says to
use a checkout under folders you own, and SKILL.md says so too.

---

_Generated with `xum` • Model: `anthropic:claude-opus-5-5` • Thinking: `xhigh` • Cost: `$213.46`_

<!-- mux-attribution: model=anthropic:claude-opus-5-5 thinking=xhigh costs=213.46 -->
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-04T18:04:42.373886Z 15e96ea Manual request
🔒 Security Review ✅ Completed 2026-11-04T18:06:34.416168Z 15e96ea Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@ThomasK33

Copy link
Copy Markdown
Member Author

@codex security review

Head: 15e96ea

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 15e96eac90

ℹ️ 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".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 15e96eac90

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ 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.

@ThomasK33
ThomasK33 added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit e4583a5 Nov 4, 2026
25 of 26 checks passed
@ThomasK33
ThomasK33 deleted the verify-xum-node-clock branch November 4, 2026 18:37
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