Skip to content

fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec - #6696

Merged
waynesun09 merged 5 commits into
mainfrom
agent/6691-openshell-persistent-sandbox
Aug 27, 2026
Merged

fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec#6696
waynesun09 merged 5 commits into
mainfrom
agent/6691-openshell-persistent-sandbox

Conversation

@fullsend-ai-coder

@fullsend-ai-coder fullsend-ai-coder Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Adapts Fullsend's persistent sandbox creation to work with OpenShell 0.0.111+, which introduced canonical main-process lifecycle semantics. The old -- true bootstrap command exits immediately, making the sandbox terminal; the new --detach -- sleep infinity keeps a long-running process so the sandbox stays Ready for subsequent sandbox exec calls.

Breaking change

Fullsend now requires OpenShell 0.0.111 or newer. sandbox create is
invoked with --detach, which does not exist in 0.0.83 (the previous pin), so
a local openshell older than 0.0.111 fails sandbox creation outright.
Reinstall the pinned version before upgrading — the install snippet in
docs/guides/user/running-agents-locally.md now pins 0.0.115. CI and the
GitLab runner VMs pick this up automatically from
.github/scripts/openshell-version.sh.

Related Issue

Closes #6691

Changes

  • Replace -- true with --detach -- sleep infinity in createOnce so sandboxes remain Ready after creation
  • Add terminal-phase detection in the ready-polling loop to fail fast instead of burning the full timeout
  • Preserve original sandbox create stderr/output in error messages for better diagnostics
  • Bump OpenShell version pin from 0.0.83 to 0.0.115 in the version file, VM setup fallbacks, and docs
  • Refresh OPENSHELL_SHA to the v0.0.115 tag commit so the pinned installer matches the pinned version
  • Make the version-specific fallback comment in hack/gitlab-runner-vm/setup.sh version-neutral
  • Wrap the exec error in the immediate create-failure path, where an empty combined output would otherwise leave no diagnostic
  • Add tests for detached persistent command, terminal-phase fast failure, diagnostic preservation, phase parsing, and readiness not being inferred from unrelated output

Unrelated CI flake fixed here (blocking)

pkg/behaviourtest/drivers/install/ensure.go is not part of the sandbox
change. awaitDeletion and awaitCreation observed context cancellation
only through a select against time.After(delay); their tests set
resetRetryDelay = 0, so both channels are ready every iteration and Go
picks between them at random. When the timer won every round the loop ran to
exhaustion and returned the wrong result.

TestAwaitDeletion_ContextCancellation / TestAwaitCreation_ContextCancellation
failed three consecutive test runs on this branch and reruns were not
converging, so the fix is included here to unblock the merge queue. The file
is byte-identical between origin/main and this branch, so the flake is
pre-existing and not caused by this PR. It can be split into its own PR on
request.

Notes on phase detection

Both the terminal-phase check and the readiness check are anchored to the
Phase: field of openshell sandbox get output rather than searching the
whole output. That output also carries the sandbox name, labels, annotations,
and the formatted active policy YAML, so an unanchored substring search could
abort a healthy creation on its first poll, or report a still-provisioning
sandbox as ready. The match tolerates ANSI escapes around either the field
label or the value.

Anchoring is fail-open for terminal detection (a parse miss simply stops the
fast-fail and the loop times out as before) but would be fail-closed for the
readiness check — a future output-format change would strand every healthy
sandbox until the timeout. So readiness falls back to the historical substring
check when, and only when, no phase field parses at all. A decoy cannot slip
through that fallback, because a decoy requires a phase field to be present and
say otherwise.

The terminal set is Error and Completed. OpenShell v0.0.115 reports
Error once the canonical main process exits; Completed is reserved for the
pending upstream exit-zero mapping (NVIDIA/OpenShell#2884) and is inert until
that lands. There is no Dead phase — phase_name() in
crates/openshell-cli/src/commands/common.rs emits only Unspecified,
Provisioning, Ready, Error, Deleting, Stopping, Stopped,
Starting, and Unknown.

Edit to an accepted ADR

Per docs/contributing/adrs.md, edits to Accepted ADRs must be called out here.
docs/ADRs/0030-openshell-sandbox-interaction-model.md records the sandbox
lifecycle with -- true as the entry command, which this PR makes inaccurate.
Its Decision section is not rewritten; only the short annotation the
convention permits is added, pointing at #6691.

Testing

  • go test ./internal/sandbox/... passes
  • go vet ./internal/sandbox/... passes
  • gofmt passes
  • shellcheck passes on the touched shell scripts
  • pre-commit passes
  • Secret scan passes

Closes #6691

Post-script verification

  • Branch is not main/master (agent/6691-openshell-persistent-sandbox)
  • Secret scan passed (gitleaks)
  • PR body secret scan passed (gitleaks — no-git)

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown

Site preview

Preview: https://ebfc6b46-site.fullsend-ai.workers.dev

Commit: 1a46686621f711e2a46a8c3f929ae27509d66664

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:10 PM UTC · Completed 7:28 PM UTC

Commit: a2dcc3d · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.10

@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Aug 27, 2026
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Moderate risk. The change touches a high-churn area (sandbox.go has 21 commits and 40 fix/reverts in 90d) which elevates git-history risk, but the change is well-scoped (339 lines, 8 files) with 227 test lines added, authored by a bot with repo history, and targets a clearly-specified high-priority bug with all acceptance criteria addressed. Rollback safety is the main concern as this modifies existing sandbox behavior without a feature flag.

Previous run

Risk Assessment: moderate (2/5)

Details

Moderate risk. The change touches a high-churn area (sandbox.go has 21 commits and 34 fix/reverts in recent history) which elevates git-history risk. However, the change itself is well-scoped (334 lines, 7 files), authored by a bot with repo history, and targets a clearly-specified high-priority bug with concrete acceptance criteria all addressed. Additional lines are predominantly tests (227 added), strengthening confidence.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Moderate risk. The change touches a high-churn area (sandbox.go has 21 commits and 40 fix/reverts in recent history) which elevates git-history risk. However, the change itself is well-scoped (160 lines, 6 files), authored by a bot with repo history, and targets a clearly-specified high-priority bug with concrete acceptance criteria.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [protected-path] .github/scripts/openshell-version.sh — This file is under the .github/ protected path. The PR links to issue fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec #6691 which authorizes the OpenShell version bump, and the PR body explains the rationale for modifying this governance file. Human approval is required for protected-path changes regardless of context.

Low

  • [edge-case] internal/sandbox/sandbox.go:882 — The backwards-compatibility fallback phase == "" && strings.Contains(lastOutput, readySandboxPhase) can false-positive when there is genuinely no Phase field in the output and the string "Ready" appears in an unrelated context (e.g., sandbox name, network policy host, label value). The structured regex path avoids this, but the fallback path retains the weakness of the original code. In practice this is unlikely because the fallback only fires when the Phase field regex matches nothing, which means the output format has changed significantly.

  • [scope-creep] pkg/behaviourtest/drivers/install/ensure.go — The ensure.go context-cancellation fix is unrelated to issue fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec #6691's sandbox lifecycle work. The PR body explains it was blocking the merge queue. The fix is small (6 lines) and the PR offers to split it on request. Minor scope expansion, adequately disclosed.

Previous run

Review

Findings

Medium

  • [protected-path] .github/scripts/openshell-version.sh — This file is under the .github/ protected path. The PR links to issue fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec #6691 which authorizes the OpenShell version bump, and the PR body explains the rationale for modifying this governance file. Human approval is required for protected-path changes regardless of context.

Low

  • [edge-case] internal/sandbox/sandbox.go:882 — The backwards-compatibility fallback phase == "" && strings.Contains(lastOutput, readySandboxPhase) can false-positive when there is genuinely no Phase field in the output and the string "Ready" appears in an unrelated context (e.g., sandbox name, network policy host, label value). The structured regex path avoids this, but the fallback path retains the weakness of the original code. In practice this is unlikely because the fallback only fires when the Phase field regex matches nothing, which means the output format has changed significantly.

  • [stale-doc] docs/ADRs/0030-openshell-sandbox-interaction-model.md:150 — The sandbox lifecycle description documents the old create command ending with -- true and explains the --keep flag in terms of the true entry command exiting. The PR changes this pattern to --detach -- sleep infinity, making the documented command and its rationale inaccurate. Since this is an accepted ADR (which the project convention treats as a historical record that should not be substantially rewritten), consider adding a brief inline note indicating the command was updated in this PR.

Previous run (2)

Review

Findings

Critical

  • [API contract violation] .github/scripts/openshell-version.sh:18OPENSHELL_VERSION is bumped from 0.0.83 to 0.0.115 but OPENSHELL_SHA remains e3d26dd3ae0dee247bbc5db368545832757ac493 (the commit SHA for v0.0.83). The install script (.github/scripts/install-openshell.sh) downloads install.sh from this SHA-pinned URL and runs it with OPENSHELL_VERSION=v0.0.115. This PR was created by the fullsend-ai-coder bot (not Renovate), so the postUpgradeTasks that normally refresh the SHA did not fire. The SHA must be updated before merge.
    Remediation: Run scripts/renovate/update-openshell-sha.sh to resolve the correct commit SHA for v0.0.115 and update OPENSHELL_SHA before merging.

Medium

Low

  • [edge-case] internal/sandbox/sandbox.go:785terminalSandboxPhase uses bare strings.Contains(output, "Error") which could match non-phase substrings in openshell sandbox get output. The existing Ready check uses the identical strings.Contains pattern, and the output is structured CLI output, limiting false-positive risk. Consider using strings.Contains(output, "Phase: Error") for a more targeted match.

  • [data-structure-choice] internal/sandbox/sandbox.go:777terminalSandboxPhases is a []string used for membership lookup. The package uses map[string]bool for lookup sets elsewhere. With only 3 elements this is irrelevant; the slice is justified because the function returns the matched phase string.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ❌ Failure (post-script /home/runner/work/fullsend/fullsend/.fullsend/.fullsend-cache/resources/sha256/416e3495dbe6b3d0ece160ca879d45f30595f26b71c301116c148872b408d019/scripts/post-fix.sh failed: exit status 1) · Started 7:30 PM UTC · Completed 7:39 PM UTC

Commit: a2dcc3d · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $1.77

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:34 PM UTC · Ended 7:47 PM UTC

Commit: 2287af4 · View workflow run →

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

⚠️ Post-fix script failed — Push rejected (exit code 1)

The fix agent completed, but the post-fix script failed before finishing.

Workflow run: https://github.com/fullsend-ai/fullsend/actions/runs/33108617191

Details:
To https://github.com/fullsend-ai/fullsend.git
! [rejected] agent/6691-openshell-persistent-sandbox -> agent/6691-openshell-persistent-sandbox (fetch first)
error: failed to push some refs to 'https://github.com/fullsend-ai/fullsend.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
To https://github.com/fullsend-ai/fullsend.git
! [rejected] agent/6691-openshell-persistent-sandbox -> agent/6691-openshell-persistent-sandbox (stale info)
error: failed to push some refs to 'https://github.com/fullsend-ai/fullsend.git'
Please check the workflow logs for full details and retry with /fs-fix if appropriate.

@waynesun09 waynesun09 added the fullsend-no-fix Skip bot-triggered fix agent runs label Aug 27, 2026
@waynesun09
waynesun09 force-pushed the agent/6691-openshell-persistent-sandbox branch from 2287af4 to b58c640 Compare August 27, 2026 19:47
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:49 PM UTC · Ended 7:56 PM UTC

Commit: b58c640 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:58 PM UTC · Ended 8:02 PM UTC

Commit: d7ef5d9 · View workflow run →

@waynesun09 waynesun09 changed the title fix(#6691): keep OpenShell 0.0.111+ sandboxes alive for later exec fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec Aug 27, 2026
@waynesun09
waynesun09 force-pushed the agent/6691-openshell-persistent-sandbox branch from d7ef5d9 to db3710d Compare August 27, 2026 20:01
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:03 PM UTC · Completed 8:21 PM UTC

Commit: db3710d · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $4.97

@fullsend-ai-review
fullsend-ai-review Bot dismissed their stale review August 27, 2026 20:21

Superseded by updated review

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 27, 2026
fullsend-ai-coder Bot and others added 5 commits August 27, 2026 16:26
OpenShell 0.0.111 introduced canonical main-process lifecycle
semantics: when the bootstrap command exits, the sandbox becomes
terminal instead of staying Ready. Fullsend's `-- true` invocation
triggered this, causing sandbox creation to retry and fail.

Changes:
- Replace `-- true` with `--detach -- sleep infinity` so the
  sandbox keeps a long-running process and stays Ready for
  subsequent sandbox exec calls.
- Detect terminal sandbox phases during the ready-polling loop and
  fail immediately instead of burning the full timeout.
- Preserve the original sandbox create stderr/output in error
  messages even when sandbox get succeeds, so diagnostic context
  is not silently discarded.
- Bump the OpenShell version pin from 0.0.83 to 0.0.115 across
  the version file, VM setup fallbacks, and docs.
- Make the version-specific fallback comment in setup.sh
  version-neutral.

Closes #6691

BREAKING CHANGE: Fullsend now requires OpenShell 0.0.111 or newer.
`sandbox create` is invoked with `--detach`, a flag that does not
exist in 0.0.83 (the previous pin), so a local `openshell` older
than 0.0.111 fails sandbox creation outright. Reinstall the pinned
version before upgrading: the install snippet in
docs/guides/user/running-agents-locally.md now pins 0.0.115.

CI and the GitLab runner VMs pick this up automatically from
.github/scripts/openshell-version.sh.
The version pin moved to 0.0.115 but OPENSHELL_SHA still pointed at
v0.0.83's commit (e3d26dd), so .github/scripts/install-openshell.sh
fetched the old release's install.sh. Resolve the tag the same way
scripts/renovate/update-openshell-sha.sh does and pin the v0.0.115
commit, keeping the version and SHA consistent.

Assisted-by: Claude (fix)
Signed-off-by: Wayne Sun <gsun@redhat.com>
…field

Phase detection searched the entire `openshell sandbox get` output for a
phase name. That output also carries the sandbox name, labels,
annotations and the formatted active policy YAML, so an unrelated
occurrence of "Error" or "Completed" would abort a healthy creation on
its first poll, and one of "Ready" would report a still-provisioning
sandbox as ready. Match the "Phase:" field for both, tolerating ANSI
escapes around either the label or the value.

Also correct the terminal phase set. OpenShell v0.0.115 has no "Dead"
phase (phase_name maps Unspecified, Provisioning, Ready, Error,
Deleting, Stopping, Stopped, Starting, Unknown), so drop it. "Error" is
what 0.0.111+ reports when the main process exits; "Completed" is
retained for the pending upstream exit-zero mapping.

Wrap the exec error in the immediate create-failure path: when openshell
cannot execute at all the combined output is empty and that error is the
only diagnostic available.

Assisted-by: Claude (fix), Codex (review), Gemini (review), Grok (review)
Signed-off-by: Wayne Sun <gsun@redhat.com>
awaitDeletion and awaitCreation only observed cancellation through a
select against time.After(delay). Tests set resetRetryDelay to 0, so
both channels are ready on every iteration and Go picks between them at
random; when the timer won every round the loop ran to exhaustion and
returned nil (or the "not visible" error) instead of the cancellation
error. TestAwaitDeletion_ContextCancellation and
TestAwaitCreation_ContextCancellation failed three consecutive CI runs
on this basis.

Check ctx.Err() at the top of each attempt so a cancelled context is
honoured deterministically, before any further forge call. The select
still covers cancellation that arrives mid-backoff.

Assisted-by: Claude (fix)
Signed-off-by: Wayne Sun <gsun@redhat.com>
ADR 0030 records the sandbox lifecycle with `-- true` as the entry
command and explains `--keep` in terms of that command exiting. #6691
changes the invocation to `--detach -- sleep infinity`, leaving the
recorded command inaccurate.

ADR 0030 is Accepted on main, so per docs/contributing/adrs.md its
Decision section is not rewritten; this adds only the short annotation
that convention allows, pointing at the newer decision.

Assisted-by: Claude (fix), Codex (review), Gemini (review), Grok (review)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:28 PM UTC · Completed 8:49 PM UTC

Commit: 1a46686 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.57

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

Comment thread internal/sandbox/sandbox.go

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took over from the bot; reviewed with Grok, Codex, and Gemini, all findings addressed. Protected-path change (.github/scripts/openshell-version.sh) is the OpenShell pin bump authorized by #6691; SHA refreshed to the v0.0.115 tag commit. Validated against real OpenShell 0.0.115 via functional-tests and e2e.

@waynesun09
waynesun09 added this pull request to the merge queue Aug 27, 2026
Merged via the queue into main with commit 96d46c8 Aug 27, 2026
95 of 96 checks passed
@waynesun09
waynesun09 deleted the agent/6691-openshell-persistent-sandbox branch August 27, 2026 21:24
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 9:26 PM UTC · Completed 9:39 PM UTC

Commit: 1a46686 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $4.82

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #6696 — keep OpenShell 0.0.111+ sandboxes alive

Timeline

  1. Issue #6691 filed (18:47 UTC) — sandbox bug with OpenShell 0.0.111+ lifecycle change.
  2. Triage agent (run, 18:47–18:53, $0.68) — correctly identified key files and proposed test cases. Added ready-to-code.
  3. Code agent (run, 18:53–19:08, $5.00) — created PR fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec #6696 with the core fix (--detach -- sleep infinity), terminal-phase detection, and tests. Missed updating OPENSHELL_SHA when bumping the version from 0.0.83 to 0.0.115.
  4. Review agent docs: Add agent-compatible code problem document #1 (run, 19:08–19:28, $5.10) — caught the stale SHA as a critical finding. Also flagged protected-path change (medium) and two edge-case lows.
  5. Fix agent (run, 19:28–19:40, $1.77) — completed its work but push was rejected because the human pushed concurrent commits at 19:31. Safety mechanism (--force-with-lease) correctly prevented overwriting the human's work. The $1.77 was wasted.
  6. Human takeover (waynesun09, 19:31–20:26) — pushed 4 commits: SHA refresh, anchored phase detection, behaviourtest flake fix, ADR annotation.
  7. 3 cancelled review runs (19:32–20:02) — superseded by rapid human pushes before completing.
  8. Review agent Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2 (run, 20:01–20:21, $4.97) — confirmed critical resolved. Medium (protected-path) and low (edge-case fallback) remained.
  9. Review agent docs: Add codebase context problem document and trim CLAUDE.md #3 (run, 20:26–20:49, $7.57) — final review on last commit. Findings unchanged from Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2.
  10. Human approved (21:12) and merged (21:24). Total agent spend: ~$25.09.

What went well

  • Review quality was excellent. The review agent caught the critical SHA mismatch on its first pass — a bug that would have caused install-script integrity failures in production. All findings were valid with zero false positives. Risk assessment (moderate, 2/5) was accurate.
  • Triage was efficient. $0.68, identified the right files and test cases that the code agent subsequently implemented.
  • Safety mechanisms worked. The fix agent's --force-with-lease push correctly refused to overwrite the human's concurrent commits.

Evidence for existing open issues

  • #4960 / #1014 (review debouncing): 3 review runs were cancelled during rapid human pushes (19:32–20:02). Debouncing would have prevented these dispatches.
  • #2553 (code agent detecting Renovate-managed deps): The code agent modified openshell-version.sh, which is managed by Renovate with postUpgradeTasks that refresh the SHA. The code agent had no way to know about this coupling.
  • #6690 (awaitCreation/awaitDeletion flake): This PR's commit 962041d fixes the race condition described in Fix race condition in awaitCreation / awaitDeletion causing flaky test #6690 by checking ctx.Err() at the top of each retry loop. The issue is still open and could be closed by this merge.

Proposals filed

waynesun09 added a commit that referenced this pull request Aug 28, 2026
Renovate only tracks .github/scripts/openshell-version.sh. The runner VM
fallbacks in hack/gitlab-runner-vm/{create-vm,setup}.sh and the install
snippet in docs/guides/user/running-agents-locally.md carry the same
version by hand and were left at 0.0.115, so move them together with the
pin as #6696 did.

The docs snippet matters beyond consistency: 0.0.115's Apple Silicon
binaries were linked against a Nix store libiconv and could not start
(NVIDIA/OpenShell#2997), and the guide pointed macOS users at exactly
that build. 0.0.116 ships the upstream fix (NVIDIA/OpenShell#3006), so
pointing the guide at it resolves the macOS install path.

Closes #6707

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fullsend-no-fix Skip bot-triggered fix agent runs ready-for-review Triggers review agent dispatch requires-manual-review Review requires human judgment risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec

1 participant