You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Record its final NemoClaw commit as the repository v0.0.99 baseline.
Record the last public NemoClaw tag.
Record the exact OpenShell v0.0.85 identities from that tag.
Record the final NemoClaw release-candidate SHA.
Review the v0.0.99...v0.0.101 source boundary.
Review the v0.0.85...v0.0.101 user boundary.
2. Establish release trust
Review the published v0.0.101 tag and release.
Review its checksum manifests, packages, and assets.
Add the checksum-manifest identities through the base-branch trust model.
Add these identities before the selector change.
Record the immutable CLI identity.
Record the immutable gateway identity.
Record the immutable supervisor-image identity.
Record the immutable sandbox-binary identity.
Record the immutable virtual-machine-driver identity.
Record the package and platform identities.
Make sure that all consumers use the same release.
3. Review the changes
Review the full v0.0.99...v0.0.101 source change.
Review the full v0.0.85...v0.0.101 user change.
Review the middleware and HTTP/2 keepalive changes.
Review the credential and policy changes.
Review the proxy and sandbox-isolation changes.
Review the gateway and compute-driver changes.
Review the package and dependency changes.
Review all lifecycle changes.
Generate the child-visible credential manifest for v0.0.101.
Review the generated manifest.
Do not rename the v0.0.99 manifest as a substitute.
Make sure that new upstream functions stay disabled by default.
Record each changed runtime contract.
Include CLI output, errors, names, labels, identifiers, and SSH aliases.
Include supervisor arguments, image metadata, process identity, and socket selection.
Include policy validation and reconnect behavior.
Capture fixtures from the published runtime.
Add a fail-closed contract test for each changed contract.
Add compatibility corrections before the selector PR when possible.
4. Prepare the selector PR
Change the minimum and maximum OpenShell selectors to v0.0.101.
Change all installer, blueprint, and workflow pins.
Change all fixture and artifact identities.
Change all trust anchors and credential manifests.
Change all applicable documents and tests.
Make sure that all OpenShell components use v0.0.101.
Do not include unrelated changes.
Do not merge the branch before qualification is complete.
5. Do the exact-head qualification
Test these installation paths with published artifacts:
Install NemoClaw with OpenShell v0.0.101 on a clean host.
Upgrade OpenShell v0.0.99 to v0.0.101.
Upgrade the last public NemoClaw tag from OpenShell v0.0.85 to v0.0.101.
Use released baseline state and released sandbox images for the upgrade tests.
For each applicable path, do these tests:
Activate each registered agent.
Test installation and onboarding.
Test status, connect, exec, and SSH.
Test inference.
Test all supported policy presets together.
Test managed MCP add, list, update, remove, restart, and rebuild.
Test provider credential substitution.
Test recovery and rebuild.
Test backup and restore.
Test stop, destroy, cleanup, and uninstallation.
Test Docker with its real socket and identity contracts.
Test rootless Podman with its real socket and identity contracts.
Test supported operating systems and architectures.
Test central processing unit (CPU) paths.
Test applicable graphics processing unit (GPU) paths.
Record an approved platform exception when a platform test is not applicable.
Do not use an exception for a target-version compatibility failure.
Run the openshell-00101-keepalive test.
Apply the same configuration a second time.
Make sure that the second application does not change the system.
Keep all failure data short and sanitized.
Do not publish credentials, tokens, secrets, or raw container data.
Publish the exact-head qualification receipt.
Run the applicable tests again after each corrective commit.
After all release changes are complete, test the exact final release-candidate SHA.
Run the clean v0.0.101 installation again. Run the direct v0.0.85 to v0.0.101 upgrade again.
Tests for the previous regressions
These tests apply only to #8590. Run them on the selector-PR head and the final release-candidate SHA.
Do not add these tests to these test groups:
Default PR tests
Scheduled tests
Nightly tests
The full-E2E matrix
Tests for unrelated changes
A maintainer must make a separate decision before a test becomes a general gate.
Do these regression tests:
Make a regression table for all known v0.0.99 problems.
Link each problem to one executable test and one successful exact-SHA result.
Include the sandbox-name and supervisor-workdir problems.
Include the workspace-name, label, container-ID, and SSH-alias problems.
Include the gateway-status, Podman-socket, policy, and reconnect problems.
Make an inventory of all active OpenShell version consumers.
Make sure that each production consumer selects trusted v0.0.101.
Permit older versions only in approved migration fixtures, tests, and historical documents.
Put one v0.0.99 component in a v0.0.101 component set.
Make sure that validation stops before installation or sandbox changes.
Cause controlled failures during download and checksum verification.
Cause controlled failures during gateway replacement and sandbox migration.
Make sure that the old sandbox and its state stay available or recoverable.
Preserve or recover the registry, credentials, and recovery material.
Make sure that a second attempt succeeds without duplicate resources.
Create two workspaces or gateways with the same sandbox name.
Test status, connect, exec, SSH, stop, start, rebuild, and destroy.
Make sure that an operation cannot change the peer sandbox.
Install the complete Personal policy.
Include hostless ports 80/443 and the named mail and local-tool routes.
Apply the Personal policy a second time.
Make sure that no L4/L7 conflict, route loss, or duplicate state occurs.
Make sure that no misleading protocol error occurs.
Compare the effective v0.0.101 configuration with the approved baseline.
Compare the child-visible credential and policy boundary with the approved baseline.
Make sure that credential storage and the SDK stay disabled by default.
Make sure that the egress adapter and virtual-machine driver stay disabled by default.
Make sure that default credentials, egress, privileges, mounts, and compute-driver access do not increase.
Keep an optional test or fixture only for #8590. A separate maintainer decision is necessary before broader use.
Rootless Podman tests
Use two different proofs. The controlled contract proof does not replace the clean product-path proof.
For the controlled proof:
Change podman-cpu-lifecycle to use the exact OpenShell v0.0.101 artifacts.
Keep Docker unavailable.
Use rootless Podman 5.
Use the exact Podman socket.
Start an authenticated OpenShell gateway.
Activate all registered agents.
Verify workspace identities, labels, full container IDs, and supervisor commands.
Verify lifecycle authority and resource ownership.
Fail the test if a Docker command runs.
Keep diagnostic data short and sanitized.
Verify cleanup.
For the clean product-path proof:
Use a clean supported Linux host.
Keep Docker unavailable.
Remove all old NemoClaw and OpenShell state.
Do not prepare a Podman API socket or OpenShell gateway manually.
Install and onboard through public NemoClaw commands.
Do not write the gateway configuration by hand.
Do not inject a test-only socket.
Do not start podman system service outside the product bootstrap.
Run all three installation paths with rootless Podman.
Make sure that Docker stays unavailable during each path. Fail the test if it uses a Docker CLI, daemon, socket, or fallback.
Verify these rootless Podman conditions:
The unprivileged runtime user owns the selected socket.
podman info reports rootless operation.
The OpenShell gateway reports the Podman compute driver.
Each sandbox operation uses the same Podman endpoint.
Each registered agent activates.
All required policy, MCP, credential, inference, and lifecycle tests pass.
Restart the Podman API service. Restart the OpenShell gateway. Restart both services together.
After each restart, connect to the existing sandbox. Verify its full container ID and durable marker.
Use one host reboot in one clean product-path test. If a reboot is not possible, restart the user session and all user services.
Install and onboard a second time. Make sure that the second operation creates no duplicate gateway, container, network, volume, secret, socket, or configuration.
Create ambiguous and foreign-workspace containers. Make sure that NemoClaw does not change these containers.
Before each destructive operation, verify these values:
Labels
Workspace and namespace names
Full container ID
Socket owner
Process identity
After destroy and uninstallation, verify that no NemoClaw-owned resources remain.
Include containers, networks, volumes, secrets, gateway processes, and obsolete socket configuration in this verification.
Run the supported platform matrix. Put the OpenShell version, Podman version, socket authority, test path, agents, restart phases, and cleanup result in each receipt.
Keepalive test
Add one live test with the name openshell-00101-keepalive.
This test applies only to #8590. Do not add it to default, scheduled, nightly, or full-E2E tests.
Start this test manually with a trusted exact SHA.
Run the test on the selector-PR head. Run it again on the final release-candidate SHA.
Use a real OpenShell v0.0.101 sandbox. Put the middleware HTTP/2 connection behind a controlled proxy.
Configure the proxy to close a connection after 15 seconds without data.
Complete one middleware operation. Keep the connection idle for 35 to 40 seconds. Complete a second operation in the same sandbox.
The second operation must succeed. Do not create a new sandbox.
Verify the original sandbox identity. Verify its durable marker.
Do one sensitivity test with OpenShell v0.0.99. The controlled proxy must cause the known stale-channel failure.
Use the v0.0.99 failure only to verify the test. Do not include it as successful v0.0.101 evidence.
Keep this test optional after #8590 is complete. A maintainer must approve a general gate separately.
6. Enforce the gates and prepare the release
Test a missing receipt.
Test a stale receipt.
Test a SHA mismatch.
Test a version mismatch.
Test a skipped, canceled, and failed result.
Make sure that each negative case stops the selector gate.
Test the same negative cases for the release gate.
Update the migration, troubleshooting, security, and compatibility documents.
Link the final receipt from this epic or the release checklist.
Do not create the tag until the final receipt passes.
Rejected alternatives
Test only v0.0.99 to v0.0.101
This test does not represent the public upgrade path. Users will upgrade from v0.0.85.
Use only the keepalive unit test
The failure occurs across the gateway, supervisor, and middleware transport. A live test is necessary.
Problem
OpenShell
v0.0.101is the latest published release.Work in #8497, #8523, and #8583 found compatibility problems with OpenShell
v0.0.99. Earlier tests did not find these problems.The problems affected these functions:
OpenShell
v0.0.101has nine commits more thanv0.0.99. The source comparison has 170 changed paths.OpenShell
v0.0.101includes the HTTP/2 keepalive correction from NVIDIA/OpenShell#2608. This correction applies to the supervisor middleware channel.The release also changes these areas:
NemoClaw does not enable these new functions by default. The security review must confirm this condition.
The next NemoClaw tag will include both OpenShell upgrades. Users will upgrade from OpenShell
v0.0.85directly tov0.0.101.The
v0.0.99tov0.0.101test is necessary. This test does not replace thev0.0.85tov0.0.101test.Objective
Qualify and select OpenShell
v0.0.101.Use these types of evidence:
Keep the documented behavior for these functions:
The middleware channel must continue to operate after idle, suspend, resume, reconnect, and reopen events.
Use the final commit from #8583 as the repository baseline. Use the last public NemoClaw tag as the user baseline.
Mandatory merge and release gates
Do not merge the selector PR until all required live E2E tests pass on its exact head SHA.
Do not create the NemoClaw tag until the final release candidate passes the required release tests.
Use these gate rules:
Implementation method
This method applies only to #8590. It does not make a general rule for other changes.
Use two stable candidate revisions. Use a third revision only for a new blocker or a required base update.
1. Freeze and divide the scope
2. Make an invariant table
Before you change code, make one invariant table.
Put this information in the table:
Read all applicable path instructions. Search for every consumer of each changed contract.
Include these paths in the search:
When a review finds one problem, inspect all related consumers. Do not correct only the reported line.
Record the producer and consumer search for each changed shared contract.
A shared contract is complete only when all listed consumers have passing tests.
Parallel work
Use maximum safe parallelism after the invariant table is complete.
Use all available agent slots when independent work exists.
Assign one integration owner before agents change files.
This owner controls shared contracts, release-candidate assembly, candidate commits, candidate pushes, and qualification evidence.
Assign each agent one bounded workstream.
Use these workstreams when applicable:
Run independent reviews and test design while implementation work continues.
Do not assign overlapping file ownership without integration-owner approval.
Do not let separate agents change the same shared contract concurrently.
Only the integration owner assembles release candidates, pushes candidate branches, and starts qualification evidence runs.
Each agent must report changed files, tests, risks, and unresolved questions.
If an agent finds a new shared contract, return that decision to the integration owner.
Integrate all completed work in one local batch.
Run one cross-workstream review after integration.
3. Use shared boundaries
Use one shared implementation when multiple consumers use the same contract.
Use shared implementations for these boundaries when applicable:
Do not duplicate constants, parsers, or sanitization logic without an approved technical reason.
4. Complete the test matrix
Add these test cases for each changed behavior when applicable:
Test behavior through a public boundary. Do not use source text as behavior evidence.
Put a secret marker in controlled external output. Make sure that no log or artifact contains the marker.
Cause each applicable process failure. Make sure that no child process or service remains.
Before Candidate 1, preflight the qualification system.
5. Review the frozen diff
Run separate review passes before Candidate 1.
Use independent review agents. Run all independent review subjects in parallel.
Use these review subjects:
Resolve all valid major and blocking findings in one local batch.
Record minor suggestions. Change code only when a suggestion corrects a real risk or a required behavior.
Classify each failure before you change code.
Use one of these classes:
Compare the failed lane with current base evidence.
Do not add a base-wide correction to an upgrade change.
Run these repository checks before Candidate 1:
After the final base update, run the complete candidate preflight.
A required base update invalidates the preflight. Run the complete preflight again.
Run the applicable local tests and repository checks. Complete this work before you push Candidate 1.
6. Test Candidate 1
Create Candidate 1 as one stable, signed, and verified head.
7. Test Candidate 2
Apply the complete correction batch locally.
Do not change code for an informational result that does not identify a real defect.
8. Control an additional revision
Use an additional revision only when Candidate 2 has a new blocker or needs a required base update.
Work plan
1. Record the baselines
v0.0.99baseline.v0.0.85identities from that tag.v0.0.99...v0.0.101source boundary.v0.0.85...v0.0.101user boundary.2. Establish release trust
v0.0.101tag and release.3. Review the changes
v0.0.99...v0.0.101source change.v0.0.85...v0.0.101user change.v0.0.101.v0.0.99manifest as a substitute.4. Prepare the selector PR
v0.0.101.v0.0.101.5. Do the exact-head qualification
Test these installation paths with published artifacts:
v0.0.101on a clean host.v0.0.99tov0.0.101.v0.0.85tov0.0.101.Use released baseline state and released sandbox images for the upgrade tests.
For each applicable path, do these tests:
openshell-00101-keepalivetest.After all release changes are complete, test the exact final release-candidate SHA.
Run the clean
v0.0.101installation again. Run the directv0.0.85tov0.0.101upgrade again.Tests for the previous regressions
These tests apply only to #8590. Run them on the selector-PR head and the final release-candidate SHA.
Do not add these tests to these test groups:
A maintainer must make a separate decision before a test becomes a general gate.
Do these regression tests:
v0.0.99problems.v0.0.101.v0.0.99component in av0.0.101component set.80/443and the named mail and local-tool routes.v0.0.101configuration with the approved baseline.Keep an optional test or fixture only for #8590. A separate maintainer decision is necessary before broader use.
Rootless Podman tests
Use two different proofs. The controlled contract proof does not replace the clean product-path proof.
For the controlled proof:
podman-cpu-lifecycleto use the exact OpenShellv0.0.101artifacts.For the clean product-path proof:
podman system serviceoutside the product bootstrap.Run all three installation paths with rootless Podman.
Make sure that Docker stays unavailable during each path. Fail the test if it uses a Docker CLI, daemon, socket, or fallback.
Verify these rootless Podman conditions:
podman inforeports rootless operation.Restart the Podman API service. Restart the OpenShell gateway. Restart both services together.
After each restart, connect to the existing sandbox. Verify its full container ID and durable marker.
Use one host reboot in one clean product-path test. If a reboot is not possible, restart the user session and all user services.
Install and onboard a second time. Make sure that the second operation creates no duplicate gateway, container, network, volume, secret, socket, or configuration.
Create ambiguous and foreign-workspace containers. Make sure that NemoClaw does not change these containers.
Before each destructive operation, verify these values:
After destroy and uninstallation, verify that no NemoClaw-owned resources remain.
Include containers, networks, volumes, secrets, gateway processes, and obsolete socket configuration in this verification.
Run the supported platform matrix. Put the OpenShell version, Podman version, socket authority, test path, agents, restart phases, and cleanup result in each receipt.
Keepalive test
Add one live test with the name
openshell-00101-keepalive.This test applies only to #8590. Do not add it to default, scheduled, nightly, or full-E2E tests.
Start this test manually with a trusted exact SHA.
Run the test on the selector-PR head. Run it again on the final release-candidate SHA.
Use a real OpenShell
v0.0.101sandbox. Put the middleware HTTP/2 connection behind a controlled proxy.Configure the proxy to close a connection after 15 seconds without data.
Complete one middleware operation. Keep the connection idle for 35 to 40 seconds. Complete a second operation in the same sandbox.
The second operation must succeed. Do not create a new sandbox.
Verify the original sandbox identity. Verify its durable marker.
Do one sensitivity test with OpenShell
v0.0.99. The controlled proxy must cause the known stale-channel failure.Use the
v0.0.99failure only to verify the test. Do not include it as successfulv0.0.101evidence.Keep this test optional after #8590 is complete. A maintainer must approve a general gate separately.
6. Enforce the gates and prepare the release
Rejected alternatives
Test only
v0.0.99tov0.0.101This test does not represent the public upgrade path. Users will upgrade from
v0.0.85.Use only the keepalive unit test
The failure occurs across the gateway, supervisor, and middleware transport. A live test is necessary.
Use only the checklist from #8497
The checklist did not stop the
v0.0.99selector merge. Automated gate evidence is necessary.Use mocked output or hand-created containers
These resources reproduce NemoClaw assumptions. They do not prove the behavior of the released runtime.
Limits
v0.0.101contains it.v0.0.99results asv0.0.101evidence.v0.0.85tov0.0.101test.Acceptance criteria
Implementation control
Baselines and release trust
v0.0.99baseline is recorded.v0.0.85user baseline is recorded.v0.0.101provenance is approved.v0.0.101child-visible credential manifest is generated and approved.v0.0.101release.General compatibility
v0.0.101installation passes.v0.0.99tov0.0.101upgrade passes.v0.0.85tov0.0.101upgrade passes.Tests for the previous regressions
Rootless Podman
podman-cpu-lifecycleuses exact OpenShellv0.0.101artifacts.Keepalive
openshell-00101-keepalivetest passes on both exact SHAs.v0.0.99sensitivity test reproduces the stale-channel failure.Enforcement and release
Child issues and dependency waves
#8590 remains the integration owner.
Use one integration-owner thread and up to three independent child implementation threads.
Each child owns one branch, worktree, and pull request during implementation.
The integration owner controls shared contracts, release candidates, and qualification runs.
Do not start a child before its listed dependencies are ready.
All children remain assigned to the integration owner until dispatch.
The integration owner reassigns one child when its implementation thread starts.
Do not let child issues change the same shared contract concurrently.
Each child reports changed files, tests, risks, and unresolved questions before handoff.
Wave 1: parallel preparation
Start independent Wave 1 work in parallel.
#8598 records the final #8583 baseline when it becomes available.
Wave 2: parallel compatibility and regression work
Start Wave 2 after #8599 freezes the changed-contract inventory.
Use the ownership rules in each child issue.
#8603 and #8605 coordinate shared identity expectations with #8604.
#8605 consumes policy behavior from #8602.
Wave 3: selector candidate
Start Wave 3 after all required Wave 1 and Wave 2 acceptance criteria pass.
Wave 4: selector qualification
Use the exact candidate from #8606.
Return each candidate blocker to its owning child issue.
Assemble and qualify a new candidate after all corrections pass.
Wave 5: final release qualification
Start Wave 5 after #8606 merges and #8607 publishes a passing receipt.
Required order
v0.0.101release trust identities.Public references
Category
Feature
Checklist