Skip to content

Commit 3025cce

Browse files
authored
Merge branch 'main' into agent/fix-docker-authority-term-9584
2 parents ef6855a + 03f5744 commit 3025cce

451 files changed

Lines changed: 43044 additions & 9622 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

.agents/skills/nemoclaw-maintainer-fix-e2e-failures/SKILL.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ Continuously inspect automatic E2E results for `main`. Coordinate ownership and
1616
2. Keep release operations out of scope. Never change, retag, publish, or otherwise touch a release, tag, or release artifact during this workflow. Route release work to the existing release workflow.
1717
3. Confirm maintainer authorization. Merge only when the request grants it. Otherwise, leave the PR `approval-ready` and continue the loop.
1818
4. Check Git and GitHub access. Follow [Git and GitHub Access Hard Stop](../_shared/git-github-hard-stop.md) on access failure.
19-
5. Fetch trusted `origin/main`. Read its PR-limit policy with `git show origin/main:.github/workflows/pr-limit.yaml`. For a non-exempt author, do not create a claim that would exceed the 10-open-PR limit.
2019

2120
Do not declare success or end the loop because the queue is empty or the newest run passes. Wait for the next automatic `main` result.
2221

.github/actions/build-base-image-platform/action.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44
name: build-base-image-platform
55
description: Build and publish one immutable base image digest for a platform.
66

7+
outputs:
8+
digest:
9+
description: Exact digest for the requested platform.
10+
value: ${{ steps.build.outputs.digest }}
11+
amd64-digest:
12+
description: Exact amd64 digest when this action built the amd64 lane.
13+
value: ${{ steps.job-output.outputs.amd64_digest }}
14+
arm64-digest:
15+
description: Exact arm64 digest when this action built the arm64 lane.
16+
value: ${{ steps.job-output.outputs.arm64_digest }}
17+
718
inputs:
819
agent:
920
description: Agent identifier used for build arguments and artifact names.
@@ -129,6 +140,7 @@ runs:
129140
'test -x /usr/bin/dos2unix; test "$(command -v dos2unix)" = /usr/bin/dos2unix; dos2unix --version >/dev/null'
130141
131142
- name: Export platform digest
143+
id: job-output
132144
shell: bash
133145
env:
134146
ARCH: ${{ inputs.arch }}
@@ -145,6 +157,7 @@ runs:
145157
fi
146158
mkdir -p "$RUNNER_TEMP/digests"
147159
touch "$RUNNER_TEMP/digests/${ARCH}-${DIGEST#sha256:}"
160+
printf '%s_digest=%s\n' "$ARCH" "$DIGEST" >> "$GITHUB_OUTPUT"
148161
149162
- name: Upload platform digest
150163
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1

.github/actions/publish-base-image-manifest/action.yaml

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,21 @@
44
name: publish-base-image-manifest
55
description: Validate platform digests and publish one multi-platform base image manifest.
66

7+
outputs:
8+
contract-base64:
9+
description: Exact validated base-image contract for dependent jobs.
10+
value: ${{ steps.contract-output.outputs.contract_base64 }}
11+
712
inputs:
813
agent:
914
description: Agent identifier stored in the managed base image contract.
1015
required: true
16+
amd64-digest:
17+
description: Exact amd64 platform digest from the producer job.
18+
required: true
19+
arm64-digest:
20+
description: Exact arm64 platform digest from the producer job.
21+
required: true
1122
display-name:
1223
description: Agent name used in validation errors.
1324
required: true
@@ -27,12 +38,23 @@ inputs:
2738
runs:
2839
using: composite
2940
steps:
30-
- name: Download platform digests
31-
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
32-
with:
33-
pattern: ${{ inputs.agent }}-base-digest-${{ github.run_id }}-${{ github.run_attempt }}-*
34-
path: ${{ runner.temp }}/digests
35-
merge-multiple: true
41+
- name: Restore exact platform digests
42+
shell: bash
43+
env:
44+
AMD64_DIGEST: ${{ inputs.amd64-digest }}
45+
ARM64_DIGEST: ${{ inputs.arm64-digest }}
46+
run: |
47+
set -euo pipefail
48+
for digest in "$AMD64_DIGEST" "$ARM64_DIGEST"; do
49+
[[ "$digest" =~ ^sha256:[0-9a-f]{64}$ ]] || {
50+
echo "ERROR: base-image producer output has an invalid digest." >&2
51+
exit 1
52+
}
53+
done
54+
digest_root="$RUNNER_TEMP/digests"
55+
install -d -m 0700 "$digest_root"
56+
touch "$digest_root/amd64-${AMD64_DIGEST#sha256:}"
57+
touch "$digest_root/arm64-${ARM64_DIGEST#sha256:}"
3658
3759
- name: Set up Docker Buildx
3860
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
@@ -65,6 +87,22 @@ runs:
6587
IMAGE: ${{ inputs.registry }}/${{ inputs.image }}
6688
TAGS: ${{ steps.meta.outputs.tags }}
6789
run: bash "$GITHUB_ACTION_PATH/publish.sh"
90+
- name: Export managed base image contract
91+
id: contract-output
92+
shell: bash
93+
run: |
94+
set -euo pipefail
95+
contract="$RUNNER_TEMP/managed-base-contract/contract.json"
96+
if [ ! -f "$contract" ] || [ -L "$contract" ]; then
97+
echo "ERROR: managed base image contract is missing or is a symbolic link." >&2
98+
exit 1
99+
fi
100+
contract_size="$(wc -c < "$contract" | tr -d '[:space:]')"
101+
if [[ ! "$contract_size" =~ ^[1-9][0-9]{0,5}$ ]] || [ "$contract_size" -gt 65536 ]; then
102+
echo "ERROR: managed base image contract is empty or oversized." >&2
103+
exit 1
104+
fi
105+
printf 'contract_base64=%s\n' "$(base64 -w 0 "$contract")" >> "$GITHUB_OUTPUT"
68106
- name: Upload managed base image contract
69107
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
70108
with:

.github/pr-limits.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"apurvvkumaria": "10",
3+
"chengjiew": "10",
4+
"cjagwani": "10",
5+
"cv": "10",
6+
"dongni-yang": "10",
7+
"ericksoa": "10",
8+
"jyaunches": "10",
9+
"laitingsheng": "10",
10+
"prekshivyas": "10",
11+
"rluo8": "10",
12+
"rsliter": "10",
13+
"sandl99": "10",
14+
"senthilr-nv": "10",
15+
"tedy-y": "10",
16+
"tonyluo-nv": "10",
17+
"wscurran": "10",
18+
"yimoj": "10",
19+
"*": "5"
20+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
name: Build base image platform
5+
6+
on:
7+
workflow_call:
8+
inputs:
9+
agent:
10+
description: Agent identifier for the base-image build.
11+
required: true
12+
type: string
13+
arch:
14+
description: Artifact architecture identifier.
15+
required: true
16+
type: string
17+
platform:
18+
description: Docker platform to build.
19+
required: true
20+
type: string
21+
runner:
22+
description: GitHub-hosted runner for the target architecture.
23+
required: true
24+
type: string
25+
dockerfile:
26+
description: Path to the base-image Dockerfile.
27+
required: true
28+
type: string
29+
image:
30+
description: Image repository relative to GHCR.
31+
required: true
32+
type: string
33+
openclaw-version:
34+
description: Optional OpenClaw version build argument.
35+
required: false
36+
type: string
37+
default: ""
38+
outputs:
39+
digest:
40+
description: Exact digest for the requested platform.
41+
value: ${{ jobs.build.outputs.digest }}
42+
secrets:
43+
registry_password:
44+
description: GHCR publication credential.
45+
required: true
46+
47+
permissions:
48+
contents: read
49+
packages: write
50+
51+
jobs:
52+
build:
53+
name: Build ${{ inputs.agent }} base image (${{ inputs.arch }})
54+
runs-on: ${{ inputs.runner }}
55+
timeout-minutes: 60
56+
permissions:
57+
contents: read
58+
packages: write
59+
outputs:
60+
digest: ${{ steps.platform.outputs.digest }}
61+
steps:
62+
- name: Checkout
63+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
64+
with:
65+
persist-credentials: false
66+
67+
- name: Build and publish platform digest
68+
id: platform
69+
uses: ./.github/actions/build-base-image-platform
70+
with:
71+
agent: ${{ inputs.agent }}
72+
arch: ${{ inputs.arch }}
73+
platform: ${{ inputs.platform }}
74+
dockerfile: ${{ inputs.dockerfile }}
75+
image: ${{ inputs.image }}
76+
registry: ghcr.io
77+
registry-username: ${{ github.actor }}
78+
registry-password: ${{ secrets.registry_password }}
79+
openclaw-version: ${{ inputs.openclaw-version }}
80+
metadata-tags: |
81+
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
82+
type=ref,event=tag
83+
type=sha,prefix=,format=short

0 commit comments

Comments
 (0)