Skip to content

test(ui-sdk): exercise literal /tmp regardless of runner TMPDIR - #2389

Merged
schlessera merged 1 commit into
mainfrom
test/2387-runtime-temp-fixture-q2k6
Oct 18, 2026
Merged

schlessera merged 1 commit into
mainfrom
test/2387-runtime-temp-fixture-q2k6

Conversation

@schlessera

@schlessera schlessera commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Closes #2387

What changed

The native runtime-placement fixture now creates its inside-/tmp runtime, alias and unrelated host sentinel beneath literal /tmp. Previously it used tmpdir(), so a runner with relocated TMPDIR tested a path outside the mount while asserting that the private /tmp mount hid it. The fixture now tests the namespace boundary named by its existing assertions.

Why this shape

The launcher already overlays literal /tmp; its bare mode intentionally retains the rest of the host read-only. Only the test path and its explanatory comment change, and the unused import is removed. All six launcher modes, inside/outside/alias controls, read-only runtime, hidden sentinel, worker isolation, exact allowance, capability, brain access, reserved-path and masked-alias assertions remain unchanged. No product policy or timeout changes.

Proof

Clean candidate 2c3913504382ab54e97586f1fbfc26f87a442aff, tree 6950afd2ff88c8bd5bca35be9755c92380fa3f17, based on main 775eb17aab740fa759c2182f306c38fc17acbcbe. Linux, Bun 1.4.3, installed native bubblewrap, normal offline preload.

  • Failing-first on unchanged main: relocated TMPDIR beneath /var/tmp produces 3 pass / 1 fail / 95 assertions. The actual native matrix reaches OWNED_RUNTIME_DOES_NOT_EXPOSE_HOST_TMP: expected hidden, received visible. Identical source with TMPDIR=/tmp passes 4 tests / 253 assertions.
  • Corrected native proof passes 4 tests / 253 assertions with both the default temporary directory and relocated TMPDIR (2.10 / 2.27 seconds).
  • Meaningful runtime mutation: temporarily broaden narrow runtime binds to their containing directories. With relocated TMPDIR, the actual native matrix fails the same hidden-sentinel assertion (3 pass / 1 fail / 104 assertions). Restore the production launcher byte-for-byte; all 4 tests / 253 assertions pass again in 2.53 seconds. All commands remove their owned fixture directories.
  • Required bun run check:pr --base origin/main passes on the clean committed candidate with relocated TMPDIR in 21.40 seconds: lint/leakage/metadata/contribution gates, 73 fast tests / 592 assertions, and all 4 affected native tests / 253 assertions. No failures or skips. The command records the actual base 775eb17aab740fa759c2182f306c38fc17acbcbe.

Hosted confirmation

Automatic ready PR CI run 39081799475, attempt 1, passes every selected job: changeset 117540091959; verify 117540233468; unit shards 117540233477 / 117540233452 / 117540233458 / 117540233502; aggregate proof 117540964423. All seven actual checkout logs identify bdf835777dd54f113471f95605039899e9a01c3d; immutable GitHub/local objects and the aggregate agree on parents 775eb17aab740fa759c2182f306c38fc17acbcbe / 2c3913504382ab54e97586f1fbfc26f87a442aff, tree 6950afd2ff88c8bd5bca35be9755c92380fa3f17. Live main is still that tested base at verification.

Unit (1) executes the actual native matrix successfully; strict types and all selected affected unit/integration proof pass. Packaging, browser/layout/captures/endurance and the separate runtime categories are planner-intended exclusions for this one test-file change, independently accepted by the successful aggregate. They are not represented as executed proof. The current head's contract gate passes on head checkout 2c3913504382ab54e97586f1fbfc26f87a442aff; its initial creation run was superseded by the label event.

No consumer changeset: this changes one unshipped test file. No repository citation names a moved line in this fixture. The same-file audit finds and removes its sole configurable temporary-root assumption; the remaining /tmp references already name the actual tested mount.

Checklist

  • Focused local preflight/behavioral receipts and complete selected hosted proof passed; actual head/base/job checkout evidence is in Proof.
  • Acceptance criteria from the issue are all met, or the gap is named below.
  • The PR and completed/advanced issues have verified release milestones under docs/process/github.md.
  • A changeset is included, or this changes nothing a consumer can see.
  • No personal data anywhere in the diff — the leakage gate covers the whole tree.
  • The integration contract index or relevant component is updated in this same commit, or nothing in the machine surface moved.
  • Docs under docs/ reflect the change, or nothing documented moved.
  • Provider history stays append-only: nothing on a production turn's path changed.

Anything left open

No remaining acceptance gap for #2387. The actual squash and automatic main-push proof are recorded below. The earlier Storage #2172 preflight remains failed until its own candidate is qualified with the correction; this isolated proof does not replace it. The distinct #2334 and #2380 investigations remain unresolved.

Automatic main-push confirmation

2026-10-18: automatic main-push CI run 39082348526, attempt 1 passes all 15 selected jobs on squash 68e12f27eb249c9fe7262a498a0397c04bbda8f4. Every selected job's actual checkout log and the aggregate identify that SHA. The immutable API/local object agree on parent 775eb17aab740fa759c2182f306c38fc17acbcbe and tree 6950afd2ff88c8bd5bca35be9755c92380fa3f17.

Packaging is the sole planner-excluded job for this test-only change. Every selected category executes successfully, with no retained execution. The ten browser skips are the existing soft-keyboard cases excluded only from the fine-pointer project; all execute in coarse and mixed projects. The selected unit runs have zero failures or skips. This verifies the actual main integration independently of the earlier PR proof. #2387 remains closed, with milestone 0.44.0 preserved on the issue and PR. The separate Storage investigations remain open.

@schlessera schlessera added this to the 0.44.0 milestone Oct 18, 2026
@schlessera schlessera added type: test Coverage, harness or proof work with no behaviour change. area: ci CI workflows, the gates they run, release scripts, packaging. labels Oct 18, 2026
@schlessera
schlessera merged commit 68e12f2 into main Oct 18, 2026
16 of 17 checks passed
@schlessera

Copy link
Copy Markdown
Owner Author

2026-10-18: automatic main-push CI run 39082348526, attempt 1 passes all 15 selected jobs on squash 68e12f27eb249c9fe7262a498a0397c04bbda8f4. Every selected job's actual checkout log and the aggregate identify that SHA. The immutable API/local object agree on parent 775eb17aab740fa759c2182f306c38fc17acbcbe and tree 6950afd2ff88c8bd5bca35be9755c92380fa3f17.

Packaging is the sole planner-excluded job for this test-only change. Every selected category executes successfully, with no retained execution. The ten browser skips are the existing soft-keyboard cases excluded only from the fine-pointer project; all execute in coarse and mixed projects. The selected unit runs have zero failures or skips. This verifies the actual main integration independently of the earlier PR proof. #2387 remains closed, with milestone 0.44.0 preserved on the issue and PR. The separate Storage investigations remain open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, the gates they run, release scripts, packaging. type: test Coverage, harness or proof work with no behaviour change.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tests: keep native runtime placement proof under literal /tmp

1 participant