Skip to content

Commit 48efd61

Browse files
authored
Merge branch 'main' into fix/portable-default-policy-finality-9206
2 parents 82d2b63 + e231409 commit 48efd61

130 files changed

Lines changed: 7268 additions & 1217 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/_shared/code-change-considerations.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,22 @@ recording them here.
1717

1818
- What accepted outcome and current consumer require the change?
1919
- What current code owns the behavior, and can that owner be extended directly?
20+
- What current code, branch, parameter, owner, fixture, or file becomes unnecessary and can be
21+
deleted or merged in this change?
2022
- Would the change duplicate an existing structure or create another source of truth?
23+
- Can the completed source-and-test change be neutral or negative in total lines? If not, what
24+
current correctness, security, or accepted-scope contract requires the growth?
25+
- If the change adds a helper, abstraction, configuration, registry, fallback, or compatibility
26+
path, which current consumers adopt it now, what old structure does it remove, and is the whole
27+
result smaller or simpler?
2128
- What state, success, failure, and partial-failure behavior must remain coherent?
2229
- What ordering or concurrency can change the result or bypass a guarantee?
2330
- How do absent values, defaults, retries, recovery, and cleanup behave?
2431
- Which alternate entry, error, cached, resumed, or compatibility paths can bypass the change?
2532
- Can code or configuration be removed, or can an existing or native mechanism replace new code?
2633
- What shortest stable test proves the changed behavior, including the relevant negative path?
34+
- Can that evidence extend or consolidate current fixtures, matrices, and assertions instead of
35+
creating another test owner or a one-use test helper?
2736
- Does a real process, network, filesystem, container, hardware, or service boundary require deeper
2837
runtime or end-to-end evidence?
2938
- Which active issues, pull requests, or recent changes overlap, conflict, or affect delivery order?

.agents/skills/nemoclaw-contributor-implement-issue/SKILL.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,25 @@ checked for that operation or failure class and the sensitive-workflow state out
8080
hold. Then make the direct change in the current behavior owner. Do not add speculative abstractions,
8181
configuration, compatibility, migration, or fallback behavior.
8282

83+
Optimize the complete source-and-test change for deletion and consolidation. Compare a direct edit,
84+
reuse of an existing owner, and a refactor of current related code. Prefer a neutral or negative
85+
total line delta. Add a helper, abstraction, configuration surface, registry, fallback, or
86+
compatibility path only when current consumers adopt it in this change and the complete result
87+
removes more owners, concepts, branches, or lines than it adds. Possible future reuse is not enough.
88+
When a current correctness, security, or accepted-scope contract requires growth, keep the design
89+
direct and record why deletion or reuse cannot satisfy it.
90+
8391
Add focused evidence as applicable:
8492

8593
- positive behavior that must succeed;
8694
- negative or denied behavior that must fail;
8795
- error, interruption, recovery, or cleanup behavior;
8896
- boundary values, ambiguous state, and alternate entry paths.
8997

98+
Preserve semantic regression coverage, not every existing fixture or assertion block. Extend or
99+
table-drive current coverage when that keeps one setup and one behavior owner. Do not create a
100+
one-use test helper, parallel matrix, or second test file merely to shorten an individual test.
101+
90102
State why an evidence category does not apply when omission could hide risk. Use runtime or end-to-end
91103
evidence only when the real process, filesystem, network, container, hardware, workflow, or service
92104
boundary owns the behavior. Run focused tests after the final behavior-affecting edit and record the
@@ -103,6 +115,11 @@ Consideration and all nine Security Rubric categories to the completed behavior.
103115
security control and focused negative evidence that proves forbidden behavior remains denied. If no
104116
security control changed, state why and cite the reviewed trust boundaries.
105117

118+
Record the reduction case for the completed design: the current code, owners, branches, parameters,
119+
fixtures, or files deleted or consolidated and the total source-and-test line direction. If the
120+
change grew, identify the current contract that requires that growth. Remove review-driven machinery
121+
when a direct solution is smaller; do not add another layer to compensate for an avoidable layer.
122+
106123
Confirm that allowed, denied, error, and boundary behavior remains coherent across failure, retry,
107124
cleanup, cached, resumed, and compatibility paths that apply.
108125
Re-check the recorded operation and failure class, sibling paths, and sensitive-workflow state
@@ -121,6 +138,7 @@ Use this structure:
121138
- Accepted scope authority:
122139
- Delivered capability:
123140
- Changed behavior:
141+
- Simplification result: <deleted or consolidated structure, total line direction, and required-growth justification when applicable>
124142
- Deferred scope:
125143

126144
## Changed files

.github/workflows/managed-images.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,46 @@ jobs:
169169
printf 'NemoClaw source commit: %s\n' "$STAGING_QA_SOURCE_SHA"
170170
} >> "$GITHUB_STEP_SUMMARY"
171171
172+
# NemoPatch exact Deep Agents candidate-base boundary.
173+
# Preserve the recorded staging tree and replace only the dependency inputs
174+
# that the candidate base image owns.
175+
- name: Overlay exact PR dependency inputs on staging QA base
176+
shell: bash
177+
run: |
178+
set -euo pipefail
179+
candidate_root="$GITHUB_WORKSPACE/candidate"
180+
staging_root="$GITHUB_WORKSPACE/staging-qa-base-source"
181+
for relative in \
182+
agents/langchain-deepagents-code/Dockerfile.base \
183+
agents/langchain-deepagents-code/requirements.lock
184+
do
185+
source_file="$candidate_root/$relative"
186+
destination_file="$staging_root/$relative"
187+
if [ ! -f "$source_file" ] || [ -L "$source_file" ] || [ ! -f "$destination_file" ] || [ -L "$destination_file" ]; then
188+
echo "ERROR: staging QA dependency input is missing, unsafe, or changed shape: $relative" >&2
189+
exit 1
190+
fi
191+
install -m 0644 "$source_file" "$destination_file"
192+
done
193+
for support_relative in \
194+
scripts/lib/bundled-npm-package.mts \
195+
scripts/security/patches/perl-5.44.0-net-ping-capability-tests.patch
196+
do
197+
support_source="$candidate_root/$support_relative"
198+
support_parent="$staging_root/$(dirname "$support_relative")"
199+
support_destination="$staging_root/$support_relative"
200+
if [ ! -f "$support_source" ] || [ -L "$support_source" ] || [ ! -d "$support_parent" ] || [ -L "$support_parent" ] || [ -L "$support_destination" ]; then
201+
echo "ERROR: staging QA Dockerfile support file is missing, unsafe, or changed shape: $support_relative" >&2
202+
exit 1
203+
fi
204+
if [ -e "$support_destination" ] && [ ! -f "$support_destination" ]; then
205+
echo "ERROR: staging QA Dockerfile support destination changed shape: $support_relative" >&2
206+
exit 1
207+
fi
208+
install -m 0644 "$support_source" "$support_destination"
209+
done
210+
printf '\nCandidate dependency inputs: %s\n' "$CANDIDATE_SHA" >> "$GITHUB_STEP_SUMMARY"
211+
172212
- name: Reproduce staging discovery permission drift
173213
shell: bash
174214
working-directory: candidate
@@ -406,6 +446,11 @@ jobs:
406446
with:
407447
node-version: 22.19.0
408448

449+
- name: Validate exact Deep Agents PR base build args
450+
if: matrix.agent == 'langchain-deepagents-code'
451+
shell: bash
452+
run: scripts/check-production-build-args.sh -f agents/langchain-deepagents-code/Dockerfile.base
453+
409454
- name: Resolve exact linux/amd64 PR base
410455
id: base
411456
shell: bash

.github/workflows/podman-cpu-proof.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ on:
2828
- "src/lib/onboard/runtime-provider/container-state-mutation.ts"
2929
- "src/lib/onboard/runtime-provider/docker-state-mutation.ts"
3030
- "src/lib/onboard/experimental/portable-host-preparation*.ts"
31+
- "src/lib/onboard/experimental/portable-profile.ts"
3132
- "src/lib/onboard/runtime-provider/podman*.ts"
3233
- "scripts/install-openshell.sh"
3334
- "scripts/checks/run-portable-cpu-delegation-proof.mts"
@@ -334,6 +335,21 @@ jobs:
334335
printf 'XDG_RUNTIME_DIR=%s\n' "$runtime_dir"
335336
} >>"$GITHUB_ENV"
336337
338+
- name: Configure exact Portable host gateway alias
339+
shell: bash
340+
run: |
341+
set -euo pipefail
342+
portable_host_gateway_ip="$(
343+
node --input-type=module --eval '
344+
const { PORTABLE_HOST_GATEWAY_IP } =
345+
await import("./dist/lib/onboard/docker-driver-platform.js");
346+
process.stdout.write(PORTABLE_HOST_GATEWAY_IP);
347+
'
348+
)"
349+
sudo ip address replace "$portable_host_gateway_ip/32" dev lo
350+
ip -o -4 address show dev lo | awk '{print $4}' | grep -Fx "$portable_host_gateway_ip/32"
351+
printf 'E2E_PORTABLE_HOST_GATEWAY_IP=%s\n' "$portable_host_gateway_ip" >>"$GITHUB_ENV"
352+
337353
- name: Start the exact connected gateway required by portable retirement
338354
shell: bash
339355
run: |
@@ -458,6 +474,18 @@ jobs:
458474
esac
459475
done < <(podman --url "$endpoint" secret ls --format '{{.Name}}' 2>/dev/null || true)
460476
podman --url "$endpoint" network rm openshell-docker 2>/dev/null || true
477+
# gateway-alias-cleanup
478+
portable_host_gateway_ip=""
479+
if portable_host_gateway_ip="$(
480+
node --input-type=module --eval '
481+
const { PORTABLE_HOST_GATEWAY_IP } =
482+
await import("./dist/lib/onboard/docker-driver-platform.js");
483+
process.stdout.write(PORTABLE_HOST_GATEWAY_IP);
484+
'
485+
)" && [ -n "$portable_host_gateway_ip" ] \
486+
&& [ "${E2E_PORTABLE_HOST_GATEWAY_IP:-}" = "$portable_host_gateway_ip" ]; then
487+
sudo ip address delete "$portable_host_gateway_ip/32" dev lo 2>/dev/null || true
488+
fi
461489
service_pid="${E2E_PODMAN_SERVICE_PID:-}"
462490
if [[ "$service_pid" =~ ^[1-9][0-9]*$ ]]; then
463491
kill "$service_pid" 2>/dev/null || true

agents/langchain-deepagents-code/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ RUN test -f /usr/local/bin/nemoclaw-managed-bootstrap \
232232
&& cmp -s /usr/local/lib/nemoclaw/dcode-launcher.sh /usr/local/lib/nemoclaw/dcode-managed-exec \
233233
&& chmod -R a+rX /opt/nemoclaw-blueprint \
234234
&& test "$(find /opt/nemoclaw-deepagents-profile-plugin -type f -print | LC_ALL=C sort)" = "$(printf '%s\n' '/opt/nemoclaw-deepagents-profile-plugin/pyproject.toml' '/opt/nemoclaw-deepagents-profile-plugin/src/nemoclaw_deepagents_profile/__init__.py')" \
235-
&& printf '%s %s\n' '8fe85c62293c74147848732dc56c33e8ab60133fa41c071da4328ac60f2bf44f' '/opt/nemoclaw-deepagents-profile-plugin/src/nemoclaw_deepagents_profile/__init__.py' '7ba7b77bd6f889cc861eddbe3e38fc1f4433a85b7bc2a9b516e19a19a37a7686' '/opt/nemoclaw-deepagents-profile-plugin/pyproject.toml' | sha256sum -c - \
235+
&& printf '%s %s\n' '6bb8dc8108c5dd7e7f71c39aacfb0da07d285b7a324eecd691177a9ca460cfc0' '/opt/nemoclaw-deepagents-profile-plugin/src/nemoclaw_deepagents_profile/__init__.py' '7be3f7972d7cd78d3ddaf66e2ff8b07a5e6af3611034b956cf0475ba78f5a576' '/opt/nemoclaw-deepagents-profile-plugin/pyproject.toml' | sha256sum -c - \
236236
&& /opt/venv/bin/pip3 install --no-index --no-cache-dir --no-deps --no-build-isolation /opt/nemoclaw-deepagents-profile-plugin \
237237
&& /opt/venv/bin/python3 -I -c 'import nemoclaw_deepagents_profile; print("NEMOCLAW_DCODE_PROFILE_" + "IMPORT_GATE", flush=True); import deepagents; import deepagents_code' \
238238
&& /opt/venv/bin/pip3 check \

agents/langchain-deepagents-code/Dockerfile.base

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ RUN python3 -m venv --copies "$VIRTUAL_ENV" \
339339
-r /tmp/deepagents-code-requirements.lock \
340340
&& "$VIRTUAL_ENV/bin/pip3" check \
341341
&& "$VIRTUAL_ENV/bin/python3" -I -c \
342-
"from importlib.metadata import version; expected = {'aiohttp': '3.14.3', 'cryptography': '50.0.0', 'deepagents-code': '0.1.34', 'langgraph-checkpoint-sqlite': '3.1.1', 'mcp': '1.28.1', 'pillow': '12.3.0', 'pyasn1': '0.6.4', 'uv': '0.11.33'}; actual = {name: version(name) for name in expected}; assert actual == expected, actual" \
342+
"from importlib.metadata import version; expected = {'aiohttp': '3.14.3', 'cryptography': '50.0.0', 'deepagents-code': '0.1.55', 'langgraph-checkpoint-sqlite': '3.1.1', 'mcp': '1.28.1', 'pillow': '12.3.0', 'pyasn1': '0.6.4', 'uv': '0.11.33'}; actual = {name: version(name) for name in expected}; assert actual == expected, actual" \
343343
&& ln -sf "$VIRTUAL_ENV/bin/dcode" /usr/local/bin/dcode \
344344
&& ln -sf "$VIRTUAL_ENV/bin/deepagents-code" /usr/local/bin/deepagents-code \
345345
&& rm -f /tmp/deepagents-code-requirements.lock \

agents/langchain-deepagents-code/dcode-wrapper.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ if [ "${1:-}" = "--nemoclaw-mcp-capability" ] && [ "$#" -eq 1 ]; then
1111
exit 0
1212
fi
1313

14-
unset BASH_ENV ENV OPENAI_PROXY
14+
unset BASH_ENV ENV OPENAI_PROXY DEEPAGENTS_CODE_APPROVAL_MODE DEEPAGENTS_CODE_STARTUP_MODE
1515
while IFS= read -r _nemoclaw_auto_approval_env; do
1616
unset "$_nemoclaw_auto_approval_env"
1717
done < <(compgen -A variable NEMOCLAW_DCODE_AUTO_APPROVAL || true)
@@ -637,7 +637,7 @@ try:
637637
except Exception:
638638
sys.exit(1)
639639
# Schema pin: detection assumes a truthy top-level "credentials" key,
640-
# matching the auth.json shape in deepagents-code==0.1.34. Nested or
640+
# matching the auth.json shape reviewed for deepagents-code==0.1.55. Nested or
641641
# renamed shapes ({"auth":{...}}, {"state":{"credentials":...}}, top-level
642642
# list) are not detected. When bumping the upstream pin, re-review this
643643
# assumption against the new auth.json schema.

0 commit comments

Comments
 (0)