Skip to content

Commit f3fcc75

Browse files
authored
Merge branch 'main' into tmutch/test-release-canary-skill
2 parents e76a6e4 + 2a065a5 commit f3fcc75

110 files changed

Lines changed: 6872 additions & 3276 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/build-from-issue/SKILL.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ In the prompt, instruct the reviewer to:
148148
- **Medium**: Multiple files/components, some design decisions, but well-scoped
149149
- **High**: Cross-cutting changes, architectural decisions needed, significant unknowns
150150
8. Call out risks, unknowns, and decisions that need stakeholder input.
151+
9. Assess **LSM compatibility** — if the change touches process identity, `/proc` filesystem access, binary execution, or inter-process visibility, flag whether it will behave differently on hosts running SELinux (enforcing) or AppArmor. In particular, tests that fork+exec into system binaries will fail on SELinux-enforcing hosts due to cross-label `/proc/<pid>/exe` access restrictions.
151152

152153
### A2: Post the Plan Comment
153154

‎.agents/skills/create-spike/SKILL.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ The prompt to the reviewer **must** instruct it to:
9191

9292
9. **Check architecture docs** in the `architecture/` directory for relevant documentation about the affected subsystems.
9393

94-
10. **Determine the issue type:** `feat`, `fix`, `refactor`, `chore`, `perf`, or `docs`.
94+
10. **Assess Linux Security Module (LSM) impact.** If the change involves process identity, `/proc` filesystem access, file labeling, binary execution, or inter-process visibility, call out whether it will behave differently on hosts running SELinux (enforcing) or AppArmor. For example: reading `/proc/<pid>/exe` across an SELinux domain boundary returns ENOENT, not EACCES. Tests that fork+exec into system binaries (different SELinux label) will fail on enforcing hosts. Flag any LSM-sensitive code paths and recommend mitigations.
95+
96+
11. **Determine the issue type:** `feat`, `fix`, `refactor`, `chore`, `perf`, or `docs`.
9597

9698
### What makes a good investigation prompt
9799

‎.cargo/config.toml‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
[env]
5+
# z3-sys bindgen needs the z3 include path. On some distros (e.g. RHEL/Fedora)
6+
# the header lives in /usr/include/z3/ rather than /usr/include/. The extra -I
7+
# is harmless on systems where the path doesn't exist.
8+
BINDGEN_EXTRA_CLANG_ARGS = "-I/usr/include/z3"

‎.claude/agents/principal-engineer-reviewer.md‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,36 @@ applies to every PR — use judgment.
146146
- **Supply chain:** Do new dependencies introduce known vulnerabilities or
147147
unmaintained transitive dependencies?
148148

149+
### Linux Security Module (LSM) compatibility
150+
151+
OpenShell runs on hosts with SELinux or AppArmor in enforcing mode.
152+
Review changes that interact with the `/proc` filesystem, process
153+
identity, binary execution, or inter-process visibility for
154+
LSM-related issues:
155+
156+
- **`/proc/<pid>/exe` across domain boundaries:** On SELinux-enforcing
157+
hosts, readlink on `/proc/<pid>/exe` returns ENOENT (not EACCES) when
158+
the target process has a different SELinux label than the caller.
159+
This affects any code that resolves binary identity after fork+exec
160+
into a differently-labeled binary (e.g., system binaries under
161+
`bin_t` vs. build artifacts under `user_home_t`).
162+
163+
- **Tests that fork+exec into system binaries:** Tests that fork a child
164+
and exec into `/bin/sleep`, `/usr/bin/cat`, or similar will fail on
165+
SELinux-enforcing hosts because the child transitions to a different
166+
domain, making its `/proc` entries unreadable to the parent. Flag
167+
these tests and recommend either using a same-label helper binary or
168+
skipping on enforcing hosts with a TODO.
169+
170+
- **File labeling and Landlock interaction:** New files created in
171+
non-standard paths may inherit unexpected SELinux labels. Verify that
172+
Landlock and SELinux policies do not conflict.
173+
174+
- **Socket and IPC visibility:** SELinux can restrict `/proc/<pid>/fd`
175+
and `/proc/<pid>/net` visibility across domain boundaries. Code that
176+
scans these paths for socket ownership should handle access failures
177+
gracefully.
178+
149179
## Principles
150180

151181
- Don't nitpick style unless it harms readability. Trust `rustfmt` and the
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: PR Merge Base
2+
description: Resolve and fetch the merge-base commit needed to diff a copy-pr-bot pull-request/<N> push against the PR base branch.
3+
4+
inputs:
5+
gh_token:
6+
description: GitHub token for PR and compare API calls.
7+
required: true
8+
9+
outputs:
10+
base_sha:
11+
description: Merge-base commit SHA for pull-request/<N> refs, or empty for other refs.
12+
value: ${{ steps.merge-base.outputs.base_sha }}
13+
14+
runs:
15+
using: composite
16+
steps:
17+
- id: merge-base
18+
shell: bash
19+
env:
20+
GH_TOKEN: ${{ inputs.gh_token }}
21+
GH_REPO: ${{ github.repository }}
22+
REF_NAME: ${{ github.ref_name }}
23+
GITHUB_SHA_VALUE: ${{ github.sha }}
24+
run: |
25+
set -euo pipefail
26+
27+
if [[ "$REF_NAME" =~ ^pull-request/([0-9]+)$ ]]; then
28+
pr_number="${BASH_REMATCH[1]}"
29+
base_ref=$(gh pr view "$pr_number" --repo "$GH_REPO" --json baseRefName -q '.baseRefName')
30+
# The mirrored branch is a push ref, so changed-files needs the true merge-base
31+
# to diff the PR head against its base branch.
32+
base_sha=$(gh api "repos/$GH_REPO/compare/$base_ref...$GITHUB_SHA_VALUE" --jq '.merge_base_commit.sha')
33+
git fetch --no-tags --depth=1 origin "$base_sha"
34+
echo "base_sha=$base_sha" >> "$GITHUB_OUTPUT"
35+
else
36+
echo "base_sha=" >> "$GITHUB_OUTPUT"
37+
fi

‎.github/workflows/branch-checks.yml‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
outputs:
3131
should_run: ${{ steps.gate.outputs.should_run }}
3232
steps:
33-
- uses: actions/checkout@v6
33+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3434

3535
- id: gate
3636
uses: ./.github/actions/pr-gate
@@ -46,7 +46,7 @@ jobs:
4646
username: ${{ github.actor }}
4747
password: ${{ secrets.GITHUB_TOKEN }}
4848
steps:
49-
- uses: actions/checkout@v6
49+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
5050

5151
- name: Mark workspace as safe for git
5252
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
@@ -70,7 +70,7 @@ jobs:
7070
username: ${{ github.actor }}
7171
password: ${{ secrets.GITHUB_TOKEN }}
7272
steps:
73-
- uses: actions/checkout@v6
73+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
7474

7575
- name: Install tools
7676
run: mise install --locked
@@ -95,7 +95,7 @@ jobs:
9595
username: ${{ github.actor }}
9696
password: ${{ secrets.GITHUB_TOKEN }}
9797
steps:
98-
- uses: actions/checkout@v6
98+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
9999

100100
- name: Install tools
101101
run: mise install --locked
@@ -148,7 +148,7 @@ jobs:
148148
username: ${{ github.actor }}
149149
password: ${{ secrets.GITHUB_TOKEN }}
150150
steps:
151-
- uses: actions/checkout@v6
151+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
152152

153153
- name: Install tools
154154
run: mise install --locked
@@ -173,7 +173,7 @@ jobs:
173173
username: ${{ github.actor }}
174174
password: ${{ secrets.GITHUB_TOKEN }}
175175
steps:
176-
- uses: actions/checkout@v6
176+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
177177

178178
- name: Install tools
179179
run: mise install --locked

‎.github/workflows/branch-docs.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
runs-on: ubuntu-latest
2020
steps:
2121
- name: Checkout repository
22-
uses: actions/checkout@v6
22+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2323

2424
- name: Check Fern preview availability
2525
id: fern-preview
@@ -34,7 +34,7 @@ jobs:
3434
fi
3535
3636
- name: Setup Node.js
37-
uses: actions/setup-node@v6
37+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
3838
with:
3939
node-version: "24"
4040

‎.github/workflows/branch-e2e.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
outputs:
1919
should_run: ${{ steps.gate.outputs.should_run }}
2020
steps:
21-
- uses: actions/checkout@v6
21+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2222
- id: gate
2323
uses: ./.github/actions/pr-gate
2424
with:

‎.github/workflows/ci-image.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ jobs:
3535
runs-on: ${{ matrix.runner }}
3636
timeout-minutes: 60
3737
steps:
38-
- uses: actions/checkout@v6
38+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3939

4040
- name: Log in to GitHub Container Registry
41-
uses: docker/login-action@v4
41+
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
4242
with:
4343
registry: ${{ env.REGISTRY }}
4444
username: ${{ github.actor }}
@@ -91,7 +91,7 @@ jobs:
9191
timeout-minutes: 10
9292
steps:
9393
- name: Log in to GitHub Container Registry
94-
uses: docker/login-action@v4
94+
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
9595
with:
9696
registry: ${{ env.REGISTRY }}
9797
username: ${{ github.actor }}

‎.github/workflows/deb-package.yml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,24 @@ jobs:
4242
username: ${{ github.actor }}
4343
password: ${{ secrets.GITHUB_TOKEN }}
4444
steps:
45-
- uses: actions/checkout@v6
45+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
4646
with:
4747
ref: ${{ inputs['checkout-ref'] }}
4848

4949
- name: Download CLI artifact
50-
uses: actions/download-artifact@v4
50+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
5151
with:
5252
name: cli-linux-${{ matrix.arch }}
5353
path: package-input/
5454

5555
- name: Download gateway artifact
56-
uses: actions/download-artifact@v4
56+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
5757
with:
5858
name: gateway-binary-linux-${{ matrix.arch }}
5959
path: package-input/
6060

6161
- name: Download VM driver artifact
62-
uses: actions/download-artifact@v4
62+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
6363
with:
6464
name: driver-vm-linux-${{ matrix.arch }}
6565
path: package-input/
@@ -85,7 +85,7 @@ jobs:
8585
tasks/scripts/package-deb.sh
8686
8787
- name: Upload Debian package artifact
88-
uses: actions/upload-artifact@v7
88+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
8989
with:
9090
name: deb-linux-${{ matrix.arch }}
9191
path: artifacts/*.deb

0 commit comments

Comments
 (0)