Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
2e2d516
feat(observability): add enforcement correlation primitives
afourniernv Oct 26, 2026
b1c4745
feat(observability): correlate inspected HTTP requests with one audit…
afourniernv Nov 6, 2026
cc4acdc
fix(isolation): enforce workload identity invariants on deserialize (…
EmilienM Nov 6, 2026
7e8f7ae
chore(observability): refresh HTTP correlation review on merged main
afourniernv Nov 6, 2026
2856eef
fix(server): bound Postgres pool waits and retry startup connect (#5244)
FrostGod Nov 6, 2026
e4dd312
feat(helm): expose priorityClassName and topologySpreadConstraints (#…
bjw123 Nov 6, 2026
53bf840
feat(cli): forward TRACEPARENT/TRACESTATE to gateway for CI trace con…
crm00re Nov 6, 2026
00f7ba7
fix(tui): show MCP tool selectors in the policy viewer (#5345)
shiju-nv Nov 6, 2026
cb836ea
fix(ci): enable OTLP export only when a collector is requested (#5348)
krishicks Nov 6, 2026
af8182f
perf(identity): bound per-connect procfs work in binary identity reso…
EmilienM Nov 6, 2026
af02016
fix(cli): accept allow-encoded-slash in policy update (#4968)
ericcurtin Nov 8, 2026
9525bec
docs: correct security boundaries and runtime guidance (#5331)
alangou Nov 9, 2026
68b6104
chore(server): remove unused registration hooks (#5382)
elezar Nov 9, 2026
a28f59b
fix(sandbox): document unsafe blocks and enforce SAFETY comments with…
EmilienM Nov 9, 2026
5e3cb25
fix(deps): update h2 and defer SQLite until SQLx release (#5392)
alangou Nov 9, 2026
56d2350
fix(network): suppress SigV4 signing diagnostics (#4558)
alangou Nov 9, 2026
00222c2
fix(python): add opt-in sandbox delete timeout (#4697)
ericcurtin Nov 9, 2026
9e004a7
ci(e2e): run the tmachine conformance rows with the prebuilt openshel…
elezar Nov 9, 2026
9cf85f9
ci(e2e): start Linux and tmachine jobs without waiting on macOS or pa…
matthewgrossman Nov 9, 2026
4f79018
chore(python): deprecate the Python SDK in core (#5350)
pimlock Nov 10, 2026
9977edc
fix(cli): renew client credentials OIDC tokens (#4389)
ericcurtin Nov 10, 2026
4a009c3
fix(cli): use a POSIX path probe in sandbox download (#5420)
ericcurtin Nov 10, 2026
3228860
docs: update OpenShell naming and announce CNCF transition (#5441)
drew Nov 10, 2026
569f03a
fix(vm): record kernel provenance in runtime tarballs (#4650)
ericcurtin Nov 10, 2026
569a5a0
feat(kubernetes): configure supervisor pod RuntimeClass (#5349)
ericcurtin Nov 10, 2026
ed2d522
fix(server): tombstone deleted sandboxes in log and event buses (#5428)
EmilienM Nov 10, 2026
044683e
fix(sdk/ts): revoke forward tokens on close (#5079)
ericcurtin Nov 10, 2026
d87392e
docs(observability): document log retention per driver (#4901)
ericcurtin Nov 10, 2026
4d62992
refactor(testkit): type the cleanup hook keys (#5240)
elezar Nov 10, 2026
9524011
ci(e2e): build the tmachine suite bundles once per run (#5432)
matthewgrossman Nov 10, 2026
4453e51
fix(docker): warn on unsupported Docker Engine versions (#5369)
ericcurtin Nov 10, 2026
c4a158c
fix(cli): fail status for an unregistered named gateway (#5379)
ericcurtin Nov 10, 2026
2840748
fix(server): allocate sandbox stream buffers lazily and share events …
FrostGod Nov 10, 2026
cfb45c0
fix(install): silence awk escape warnings in RPM asset lookup (#4845)
ericcurtin Nov 10, 2026
c8fa729
chore(deps): drop unused regorus yaml feature (#4882)
ericcurtin Nov 10, 2026
be23fbc
fix(gateway): warn in preflight when unauthenticated users are allowe…
ericcurtin Nov 10, 2026
f62fa13
feat(gateway-interceptors): intercept sandbox start, stop, suspend, a…
ericcurtin Nov 10, 2026
eee2b9f
test(conformance): port the credential gating e2e tests (#5318)
matthewgrossman Nov 10, 2026
7873aaa
fix(server): budget SSH relays and service forwards separately (#5063)
ericcurtin Nov 10, 2026
f3d9765
fix(tmachine): restore package-installed Podman qualification (#4289)
elezar Nov 10, 2026
22209de
feat(compute)!: configure provisioning and bootstrap timeouts (#5321)
shiju-nv Nov 10, 2026
d2192b8
test(e2e): join shared-supervisor-ha helm overlays without image-tag …
ChristianZaccaria Nov 10, 2026
0603b15
chore(build): lint raw TcpStream::connect (#5280)
ericcurtin Nov 10, 2026
bfa68b2
fix(server): keep completed stops stable across delayed driver watche…
shiju-nv Nov 10, 2026
981d64f
feat(observability): join HTTP receipts to consolidated audit records
afourniernv Nov 10, 2026
5cf099b
fix(observability): retain terminal blocks after response fail-open
afourniernv Nov 10, 2026
81c9f05
chore(observability): preserve correlation review history
afourniernv Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .agents/skills/helm-dev-environment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,9 @@ task running while using those endpoints.
### Viewing local traces

The gateway exports OTLP/gRPC to
`http://openshell-collector.observability.svc.cluster.local:4317` through the
default Skaffold values. Forward OTLP/gRPC and the trace UI to the host:
`http://openshell-collector.observability.svc.cluster.local:4317` through
`ci/values-local-tracing.yaml`, which only `skaffold.yaml` layers. The Kubernetes
E2E wrapper omits it, so E2E clusters export no traces. Forward OTLP/gRPC and the trace UI to the host:

```bash
mise run helm:k3s:forward
Expand All @@ -278,9 +279,10 @@ Kubernetes compute-driver spans under their distinct service names, along with
Agent Sandbox controller reconciliation spans linked through the Sandbox
trace-context annotation. The same command exposes OTLP/gRPC on
`http://127.0.0.1:4317` and, when deployed, the Kubernetes gateway on
`http://127.0.0.1:8090`. The local `gateway:docker`, `gateway:podman`, and
`gateway:vm` tasks detect the collector listener at startup and enable trace
export, OCSF log export, and the agent trace relay only while it is reachable.
`http://127.0.0.1:8090`. The local `gateway`, `gateway:docker`,
`gateway:podman`, and `gateway:vm` tasks enable trace export, OCSF log export,
and the agent trace relay only when `OPENSHELL_DEV_OTLP_ENDPOINT` is set, for
example `OPENSHELL_DEV_OTLP_ENDPOINT=http://127.0.0.1:4317`.
Spans an agent exports from inside a sandbox arrive through the supervisor's
relay with `openshell.telemetry.source=agent` and share `openshell.sandbox.id`
with that sandbox's supervisor spans.
Expand Down Expand Up @@ -642,6 +644,7 @@ for dependencies still declared in `Chart.yaml`.
| `deploy/helm/openshell/skaffold.yaml` | Skaffold config — images, Helm releases, values overlays |
| `deploy/helm/openshell/values.yaml` | Default Helm values |
| `deploy/helm/openshell/ci/values-skaffold.yaml` | Dev overrides (image pull policy, TLS disabled for local Skaffold) |
| `deploy/helm/openshell/ci/values-local-tracing.yaml` | OTLP export to the `helm:k3s:create` collector (Skaffold only) |
| `deploy/helm/openshell/ci/values-cert-manager.yaml` | cert-manager PKI overlay (opt-in; disables pkiInitJob) |
| `deploy/helm/openshell/ci/values-gateway.yaml` | Envoy Gateway GRPCRoute + Gateway overlay |
| `deploy/helm/openshell/ci/values-high-availability.yaml` | HA test overlay (`replicaCount: 2` with external PostgreSQL Secret) |
Expand Down
3 changes: 1 addition & 2 deletions .agents/skills/release-captain/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,7 @@ git worktree remove --force "$wt"
```

4. **Watch and verify.** Check that `Select Qualified Prerelease` names the
approved candidate, the GitHub Release has assets, no job failed, and the
wheel reached PyPI:
approved candidate, the GitHub Release has assets and no job failed:

```shell
gh run watch <run-id> --exit-status
Expand Down
19 changes: 4 additions & 15 deletions .agents/skills/release-openshell/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ Release creates `vX.Y.Z` at that exact commit, then rebuilds and publishes all
stable artifacts without rerunning qualification. Embedded versions change, so
stable artifacts are not byte-identical to the qualified prerelease. An existing
stable tag may be retried only if it already points to the selected commit. A retry
publishes only missing artifacts; published images, charts, release assets, npm,
and PyPI versions are kept, while the snap is uploaded again.
publishes only missing artifacts; published images, charts, release assets, and
npm versions are kept, while the snap is uploaded again.
Stable images are saved as OCI archives during the build and pushed under the
stable version tags during publication. Their SBOMs are verified before updating
`latest`; the qualified prerelease's commit-SHA image tags remain unchanged.
Expand Down Expand Up @@ -84,17 +84,6 @@ immutable version and advance latest only for a newer version.

Watch the stable release run and report its result.

## PyPI publishing
## Python SDK

Stable releases publish the Python wheel to PyPI from `wheel-publish.yml`, which the `publish-pypi` job in `release-publish.yml` calls after the GitHub Release is created. The workflow downloads the wheel from the stable GitHub Release, not a run's build artifact, and checks the stable tag's source commit and the wheel's release checksum. It uses Trusted Publishing with the `pypi` GitHub environment. PyPI matches the workflow file that contains the publishing job, so configure the `openshell` PyPI project's GitHub publisher with owner `NVIDIA`, repository `OpenShell`, workflow `wheel-publish.yml`, and environment `pypi`. No PyPI API token or GitLab trigger credentials are required.

The environment must allow the branch used to dispatch Release or `wheel-publish.yml`. For a support release, explicitly allow its support branch before dispatching. Required reviewers, if configured, must approve the PyPI job. An existing wheel on PyPI is skipped; PyPI does not allow replacing a published wheel.

If a stable release did not reach PyPI, publish the wheel without rerunning Release:

```shell
gh workflow run wheel-publish.yml -R NVIDIA/OpenShell --ref main \
-f release-tag=vX.Y.Z -f source-sha=<tag commit> -f python-version=X.Y.Z
```

Development and prerelease wheels remain GitHub Release assets and do not publish to PyPI.
Core no longer builds or publishes the Python SDK for releases. The stable, prerelease, and rolling `dev` GitHub Releases carry no wheel, and nothing in core publishes to PyPI. `openshell` `0.1.7` is the last core-built wheel. From `0.1.8` on, [ai-openshell/sdk-python](https://github.com/ai-openshell/sdk-python) publishes `openshell` on the same day as each stable core release, once its update PR for the core tag merges.
54 changes: 54 additions & 0 deletions .github/workflows/branch-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,9 @@ jobs:
- name: Test
run: mise run test:python

- name: Test Python scripts
run: mise run test:python-scripts

- name: Test local gateway configuration helpers
run: |
bash tasks/scripts/test-gateway-pull-policy.sh
Expand Down Expand Up @@ -638,6 +641,41 @@ jobs:
echo "$changed"
exit 1

python-sdk-freeze:
# The Python SDK moved to ai-openshell/sdk-python (#5287), which imported it
# at v0.1.7. Its files stay only until core removes them, so PRs must not
# add or change them. Deleting files is allowed (the removal PR). The paths
# are the ones the import moved: all of python/ plus the two SDK build
# scripts. The shared root pyproject.toml and uv.lock stay editable.
# Merge queue runs skip this job; the PR already passed it on its mirror.
name: Python SDK Freeze
needs: pr_metadata
if: needs.pr_metadata.outputs.should_run == 'true' && github.event_name == 'push'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false

- name: Reject changes to the Python SDK
env:
BASE_SHA: ${{ needs.pr_metadata.outputs.base_sha }}
run: |
set -euo pipefail
changed=$(git diff --name-only --diff-filter=d "${BASE_SHA}...HEAD" -- \
python \
tasks/scripts/generate_python_proto.py)
if [ -z "$changed" ]; then
echo "No added or changed Python SDK files."
exit 0
fi
echo "::error title=Python SDK moved::The Python SDK moved to https://github.com/ai-openshell/sdk-python. Drop the Python SDK changes from this PR and open SDK changes there. Regenerated bindings are not needed here; sdk-python regenerates them from core releases."
echo "Changed Python SDK files:"
echo "$changed"
exit 1

markdown:
name: Markdown
needs: pr_metadata
Expand Down Expand Up @@ -687,3 +725,19 @@ jobs:
run: |
OPENSHELL_NPM_VERSION="$(uv run python tasks/scripts/release.py get-version --npm)" \
mise run sdk:ts:publish

install-script:
name: install.sh
needs: pr_metadata
if: needs.pr_metadata.outputs.should_run == 'true'
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

# The RPM lookup test uses gawk when present; gawk warns on bad escapes.
- name: Install gawk
run: sudo apt-get install -y --no-install-recommends gawk

- name: Test install.sh
run: tasks/scripts/test-install-sh.sh
Loading
Loading