Skip to content

fix(rebuild): support OpenClaw without Buildx - #7253

Closed
apurvvkumaria wants to merge 29 commits into
mainfrom
codex/7111-root-cause-investigation
Closed

fix(rebuild): support OpenClaw without Buildx#7253
apurvvkumaria wants to merge 29 commits into
mainfrom
codex/7111-root-cause-investigation

Conversation

@apurvvkumaria

@apurvvkumaria apurvvkumaria commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

Support rebuilding a NemoClaw-generated OpenClaw sandbox on a local Docker-driver gateway when Docker reports that Buildx is missing or broken.
NemoClaw independently confirms the failure, retries the exact staged context once with Docker's legacy builder, and binds the retained immutable image and verified Docker engine through deletion and recreation.
Unsupported rebuild paths still stop before deletion with Buildx repair guidance, and Hermes continues to require Buildx.

Related Issue

Related to #7111.

Reported by @JoyceChenNV.
The rebuild preflight builds on the original BuildKit prebuild implementation by @TLA27.

Changes

  • Add the product-approved compatibility path for NemoClaw-generated OpenClaw rebuilds on supported local Docker-driver gateways where Buildx is unavailable.
  • Require Docker's canonical missing-or-broken Buildx diagnostic plus an independent failed docker buildx version probe before one DOCKER_BUILDKIT=0 retry.
  • Fingerprint and reuse the exact staged context, retain the preflight-built image, and recreate from its immutable image ID instead of rebuilding mutable paths after deletion.
  • Pin Docker selector variables, canonical working directory, and engine identity across build, inspect, cleanup, create, GPU fallback, diagnostics, and rollback.
  • Revalidate context, engine, tag, and immutable image identity at the synchronous delete edge and fail closed on later drift or a native-snapshot image mismatch.
  • Keep custom Dockerfiles, Hermes, nonlocal gateways, disabled local prebuilds, successful Buildx probes, and unrelated build failures outside the fallback.
  • Add mutation-boundary, engine/context drift, retag, cleanup, retained-image lifecycle, GPU fallback, and recreate integration coverage.
  • Document the OpenClaw fallback boundaries and preserve the Hermes Buildx remediation path.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification:
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent exact-head Codex security review at 0c559f783 found no blocking findings after verifying fallback eligibility, immutable-image ownership, Docker selector/engine and canonical-working-directory binding, deletion gating, cleanup, GPU fallback, rollback, stable-engine fixtures, and the final sandbox-preserving delete-failure fixture.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/reference/commands.mdx remains the affected user-facing page for the OpenClaw rebuild fallback; follow-up commits changed code/test plumbing only. npm run docs completed with zero errors and two pre-existing Fern warnings before the latest line-budget-only follow-up.
  • Agent: Pi coding agent

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — At 30938a5, npm run typecheck:cli, npm run checks:repository, Biome format/lint for touched files, git diff --check, and focused Vitest for sandbox-gpu-create-flow, rebuild-destroy-phase, and retained-runtime coverage (82/82) passed. On the preceding local head, npm run test:changed passed 1102/1102 and npm run docs completed with zero errors and two pre-existing Fern warnings.
  • Applicable broad gate passed — Exact-head GitHub CI, advisor, CodeRabbit, and E2E / PR Gate are running for 30938a5. Merge after required checks pass and requested human review changes are resolved.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

npm run typecheck:cli, repository checks, changed-file Biome format/lint, and git diff --check passed.
npm run docs completed with zero errors and two pre-existing warnings.


Signed-off-by: Apurv Kumaria akumaria@nvidia.com
Signed-off-by: Julie Yaunches jyaunches@nvidia.com

Detect the canonical missing-Buildx failure and verify it with an independent probe.

Retry generated managed OpenClaw contexts once with the legacy Docker builder.

Seal the builder and Docker endpoint through rebuild and fail closed on drift.

Co-authored-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria apurvvkumaria self-assigned this Jul 20, 2026
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Rebuild stages and validates replacement images before sandbox deletion. Eligible generated OpenClaw contexts can retry once with Docker’s legacy builder when Buildx is unavailable. Verified builder metadata and Docker environment are propagated through sandbox recreation with strict context validation.

Changes

Legacy builder rebuild flow

Layer / File(s) Summary
Preflight fallback and cleanup
src/lib/actions/sandbox/rebuild-custom-image-preflight.ts, src/lib/actions/sandbox/rebuild-custom-image-preflight.test.ts, src/lib/actions/sandbox/rebuild-target-runtime.ts, docs/reference/commands.mdx
Buildx failures can trigger one legacy-builder retry for eligible generated contexts, while context drift, custom Dockerfiles, and unrelated failures do not retry. Cleanup preserves the verified Docker environment, and documentation describes the behavior.
Prepared context trust propagation
src/lib/onboard/build-context-stage.ts, src/lib/actions/sandbox/rebuild-prepared-image-context.ts, src/lib/onboard/prepared-dcode-rebuild.ts, src/lib/onboard/prepared-dcode-rebuild.test.ts, src/lib/onboard.ts, src/lib/onboard/sandbox-create-launch.ts, src/lib/onboard/sandbox-create-launch.test.ts
Prepared contexts record legacy-builder metadata and Docker environment, validate generated OpenClaw rebuild identity and context fingerprints, and pass verified state into sandbox creation.
Prepared prebuild execution
src/lib/onboard/sandbox-prebuild.ts, src/lib/onboard/sandbox-prebuild.test.ts
Sandbox prebuild reuses verified legacy-builder settings, validates retained context and Dockerfile selection, fails closed on drift or build failure, and uses explicit working-directory and environment options for Docker operations.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant RebuildTargetRuntime
  participant Preflight
  participant Docker
  participant SandboxCreation
  RebuildTargetRuntime->>Preflight: stage and validate replacement image
  Preflight->>Docker: build generated OpenClaw context
  Docker-->>Preflight: Buildx availability result
  Preflight->>Docker: retry once with DOCKER_BUILDKIT=0
  Preflight-->>SandboxCreation: prepared context and verified Docker environment
  SandboxCreation->>Docker: reuse verified legacy-builder settings
Loading

Possibly related PRs

Suggested labels: area: sandbox

Suggested reviewers: cv, ericksoa, prekshivyas, laitingsheng

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: enabling OpenClaw rebuilds without Buildx.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/7111-root-cause-investigation

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Blocking findings reported

Advisor assessment: Blockers require maintainer review
Next action: Review the blockers below.
Findings: 1 blocker · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 1 blocker · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 1 warning · 1 suggestion
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections differ; Nemotron reported 1 fewer blocker, 1 more warning, 1 more suggestion.
5 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • delete-edge at src/lib/actions/sandbox/rebuild-destroy-phase.ts:432: selected only by the second-opinion lane as established.
  • mutation boundary at src/lib/actions/sandbox/rebuild-buildx-mutation-boundary.test.ts:87: selected only by the second-opinion lane as established.
  • retained image at src/lib/actions/sandbox/rebuild-prepared-image-context.ts:39: selected only by the second-opinion lane as established.
  • Buildx fallback at src/lib/actions/sandbox/rebuild-custom-image-preflight.test.ts:379: selected only by the second-opinion lane as define.
  • legacy-image at src/lib/actions/sandbox/rebuild/openclaw-legacy-image.ts:68: selected only by the second-opinion lane as justified.
2 additional E2E selections from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • rebuild-hermes: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • security-posture: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — legacy builder at docs/reference/commands.mdx:2779: Keep “legacy builder” for the non-BuildKit Docker build path.
  • define — retained image at docs/reference/commands.mdx:2780: Keep “retained image” and retain the first-use explanation of its engine and immutable-ID binding.
  • established — immutable image ID at docs/reference/commands.mdx:2780: Keep “immutable image ID” for the verified content identity and contrast it with the mutable tag where both appear.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: device-auth-health, inference-routing, issue-4462-scope-upgrade-approval, network-policy, onboard-repair, onboard-resume, openclaw-inference-switch, rebuild-openclaw, state-backup-restore, cloud-onboard

2 optional E2E recommendations
  • gpu-e2e
  • sandbox-survival

Blockers

PRA-1 Blocker — Commit the retained image when the source sandbox is already absent

  • Location: src/lib/actions/sandbox/rebuild-destroy-phase.ts:427
  • Category: correctness
  • Problem: The `sourcePresence === "missing"` branch skips `validateDeleteEdge`, so it skips `retainPreparedImageForRecreate`. Rebuild then continues to creation with a legacy image lease still in `prepared` state.
  • Impact: A resumed rebuild whose journal observes the original sandbox as absent can enter recreation with an uncommitted lease. Bound Docker operations then reject the lease, leaving the replacement incomplete after the original sandbox is gone.
  • Fix: Run the same synchronous retained-image validation and commit before the source-missing recreate path proceeds, or abort the lease and stop the rebuild before recreation.
  • Verification: Inspect the source-missing branch in `runRebuildDestroyPhase` and trace a retained image through `sandbox-prebuild.ts` to `verifyForCreate()`.
  • Test coverage: Add a rebuild-flow test where the journal reports the source sandbox missing and a retained OpenClaw image is present; assert the lease is retained before recreation and the recreate flow can verify it.
  • Evidence: src/lib/actions/sandbox/rebuild-destroy-phase.ts:427-467 skips `validateDeleteEdge` when `sourcePresence` is `missing`. src/lib/actions/sandbox/rebuild-pipeline.ts:328-348 places `retainPreparedImageForRecreate` only in `validateDeleteEdge` and passes the prepared image into the recreate flow. src/lib/actions/sandbox/rebuild/openclaw-legacy-image.ts:310-319 permits `verifyForCreate()` only after `retainForRecreate()` changes lease state to `retained`. src/lib/onboard/sandbox-prebuild.ts:161-190 returns the prepared lease to the recreate path.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@github-code-quality

github-code-quality Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 30938a5 in the codex/7111-root-caus... branch remains at 96%, unchanged from commit 03fbf5e in the main branch.


Updated August 03, 2026 21:08 UTC

apurvvkumaria and others added 2 commits July 20, 2026 11:28
Move prepared rebuild proof binding into the sandbox launch coordinator.

Keep the top-level onboard entrypoint net-neutral and avoid documenting an unsupported rebuild flag.

Co-authored-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Narrow the failed preflight result with an explicit type assertion.

Keep the regression test free of conditional control flow.

Co-authored-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@wscurran wscurran added area: packaging Packages, images, registries, installers, or distribution bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior platform: container Affects Docker, containerd, Podman, or images labels Jul 20, 2026

@dfernandez365-rgb dfernandez365-rgb 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.

Security review — changes required before merge.

The preflight does not bind the destructive rebuild to one Docker daemon and one approved artifact:

  1. prebuildDockerEnv reaches build/inspect, but cleanup and recreation fall back to the generic subprocess environment. That drops DOCKER_CONTEXT, DOCKER_CONFIG, TLS/certificate, and API-version selection. A stable non-default context can therefore build on daemon A while dockerRmi or sandbox creation resolves daemon B.
  2. Freezing the environment strings does not freeze what a named Docker context, config, socket, certificate, SSH target, or DNS name resolves to. Repointing a named context after verification passes the current identity check.
  3. The preflight image is removed. After the original sandbox is deleted, the context is rebuilt from mutable paths and native create consumes a mutable tag, so the artifact ultimately launched need not be the artifact preflight approved.

Please carry one immutable Docker-selection/engine identity through build, inspect, cleanup, and create; retain and create from the preflight-proven immutable image ID (or an equivalently attested byte snapshot); and add non-default-context, context-drift, post-verification mutation, and retag tests. The current mock/static tests do not exercise these destructive-boundary failures.

@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Current main is no longer mechanically compatible with this fallback: the generated OpenClaw Dockerfile now contains BuildKit-only RUN --mount instructions, and the PR regression keeps the generated OpenClaw Dockerfile compatible with the legacy fallback (#7111) fails after a normal main sync. Resolving this would require a product/design decision to transform those instructions for the legacy path or retire the fallback; I did not change behavior or push a conflict resolution.

@apurvvkumaria apurvvkumaria removed their assignment Jul 24, 2026
@prekshivyas prekshivyas self-assigned this Jul 25, 2026

@jyaunches jyaunches left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Changes requested: a maintainer product decision is required before this implementation continues.

This PR makes a host with working Docker but missing or broken Buildx a supported rebuild environment. Current main intentionally uses BuildKit-only RUN --mount instructions for OpenClaw payload materialization in #7486. A mechanical rebase cannot preserve both designs.

Record one decision before updating this PR:

  • If Buildx is required, remove the legacy-builder fallback. Fail before sandbox deletion with an actionable Buildx repair requirement.
  • If missing Buildx is supported, define the supported host and Docker versions, current consumer, lifecycle owner, and legacy-compatible image path. That path must preserve ownership, modes, cache boundaries, layer limits, and security scans. Add exact-head tests and affected-host evidence.

If the fallback remains, also address the existing security review. Build, inspect, cleanup, and create must use the same verified Docker daemon and immutable image artifact through the delete-and-recreate boundary. Add the requested context-drift, post-verification mutation, and retag tests.

Do not merge until the product decision, security contract, implementation, and validation evidence agree.

@cv cv added v0.0.97 and removed v0.0.96 labels Jul 26, 2026
@cv cv mentioned this pull request Jul 26, 2026
23 tasks
cv added a commit that referenced this pull request Jul 26, 2026
<!-- markdownlint-disable MD041 -->
## Summary
Conflict publication now constructs validated GitHub trees from the
recorded `main` tree instead of the stale PR head.
Production requests for #7253 and #6054 shrink from 1,180 and 3,754
entries to 13 and 6 entries.

## Related Issue
Follow-up to #7542.

## Changes

- Build each GitHub tree from the recorded base SHA and the final tree
delta.
- Read deletion entries from the base tree.
- Keep parent blob reuse, final-tree equality, verified commits, and
atomic ref updates unchanged.
- Model 100 `main`-only files and a PR-side deletion in the publisher
regression.

## Type of Change

- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: This changes internal GitHub
publication mechanics and no user-facing contract.
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: Maintainer approved
this repair after [production run
30193861556](https://github.com/NVIDIA/NemoClaw/actions/runs/30193861556)
demonstrated the failure. Trust boundaries do not change.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `no-docs-needed`
- Evidence: The change repairs internal GitHub tree publication. It does
not change commands, configuration, output, or supported behavior.
- Agent: Codex Desktop
<!-- docs-review-head-sha: 424209c -->
<!-- docs-review-agents-blob-sha: be20a09 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit:
- Station profile/scenario:
- Result:
- Supporting evidence:

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: `npx
vitest run --project integration test/pr-merge-conflict-fixer.test.ts`
passed 12/12 after formatting.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not applicable to this
focused publisher fix.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved pull request conflict resolution publishing to correctly
reflect files added, modified, or deleted on each branch.
* Ensured resolved updates are built from the correct base revision,
preventing unrelated or outdated files from being included.
* Improved publication accuracy when the target branch has advanced with
additional changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@copy-pr-bot

copy-pr-bot Bot commented Jul 26, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Maintainer update: we should pause this PR until the Podman integration is available. This Buildx path and the Podman path should share a container-runtime abstraction for handling this scenario, rather than landing a Docker-specific design that Podman would later need to duplicate or unwind.

Unblock criteria:

  • The Podman integration lands, or its runtime interface becomes stable enough to target.
  • This PR is refreshed to use the shared Docker/Podman abstraction.
  • Requested review changes are addressed and exact-head CI/E2E passes.

If the team decides this PR should establish the abstraction first and Podman should adopt it afterward, we can revisit that direction explicitly. Until then, #7253 is blocked on the Podman integration.

@apurvvkumaria apurvvkumaria added the needs: design Requires product or architecture direction label Jul 31, 2026
@github-actions github-actions Bot added v0.0.102 and removed v0.0.101 labels Aug 3, 2026
Comment thread src/lib/onboard/sandbox-gpu-create-flow.test.ts Fixed
Comment thread src/lib/onboard/sandbox-gpu-create-flow.ts Fixed
Comment thread src/lib/onboard/sandbox-gpu-create-flow.ts Fixed
@apurvvkumaria apurvvkumaria removed their assignment Aug 3, 2026
cv added 2 commits August 3, 2026 14:01
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

@apurvvkumaria apurvvkumaria left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Reviewed current head 30938a5. I found no demonstrated correctness, security, compatibility, or regression blocker after the latest binding and export fixes. This focused code review does not resolve or override the existing product hold concerning the Podman and shared-runtime abstraction decision; that owner decision should remain in place.

@apurvvkumaria apurvvkumaria left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Blocking finding (Request changes outcome; GitHub does not permit the PR author to submit a Request changes review): I independently confirmed the existing PRA-1 recovery defect still reproduces at current head 825984c. In src/lib/actions/sandbox/rebuild-destroy-phase.ts, when observeSourceForDelete reports missing, execution skips validateDeleteEdge. That callback in rebuild-pipeline.ts is the only path that calls retainPreparedImageForRecreate. The lease therefore remains prepared, while openclaw-legacy-image.ts requires retained state for verifyForCreate. A resumed rebuild whose original sandbox is already absent proceeds into recreation and then rejects the retained image, leaving the supported recovery workflow unable to recreate the sandbox after the source is gone. Run the same prepared-image verification and retain transition before both the source-present and source-missing recreate paths (or stop before recreation), and add a regression with sourcePresence missing that proves the lease is retained and creation can verify it. This is distinct from, and does not override, the existing product-direction hold.

@jyaunches jyaunches removed their assignment Aug 4, 2026
@jyaunches
jyaunches self-requested a review August 4, 2026 00:46
@jyaunches jyaunches assigned ericksoa and unassigned ericksoa Aug 4, 2026
@jyaunches jyaunches closed this Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: packaging Packages, images, registries, installers, or distribution bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior needs: design Requires product or architecture direction platform: container Affects Docker, containerd, Podman, or images

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants