Skip to content

sync: incubation to stable - #229

Merged
ruivieira merged 83 commits into
stablefrom
incubation
Oct 15, 2026
Merged

ruivieira merged 83 commits into
stablefrom
incubation

Conversation

@github-actions

Copy link
Copy Markdown

sync-branches: New code has just landed in incubation, so let's bring stable up to speed!

ruivieira and others added 30 commits September 24, 2026 17:38
* feat(tls): add proxy profile argument resolver

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* feat(tls): wire proxy profile arguments into workloads

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* fix(tls): retain cipher suites above minimum version

* docs(tls): explain adherence fallback

* test(e2e): wait for TAS deployment

* test(e2e): provide bound TAS test storage

* test(e2e): avoid asserting synthetic TAS deployment

---------

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
…-explainability#943)

* feat(evalhub): support system collection curation overrides

Render typed curation order overrides from the EvalHub CR into per-instance system collection ConfigMaps.\n\nAssisted-by: Codex

Signed-off-by: Lior Aronovich <lioraronpr@gmail.com>

* fix(evalhub): validate collection overrides consistently

Ensure invalid and tenant collection overrides cannot be silently accepted.

Assisted-by: Codex
Signed-off-by: Lior Aronovich <lioraronpr@gmail.com>

* fix(evalhub): limit overrides to v1

Keep collection overrides out of the unsupported v1alpha1 API and conversion path.

Assisted-by: Codex
Signed-off-by: Lior Aronovich <lioraronpr@gmail.com>

---------

Signed-off-by: Lior Aronovich <lioraronpr@gmail.com>
* feat(tls): wire proxy profile arguments into workloads

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* test(e2e): wait for TAS deployment

* test(e2e): provide bound TAS test storage

* test(e2e): avoid asserting synthetic TAS deployment

* feat(tls): refresh workloads on profile adherence changes

* fix(tls): retain proxy args on transient profile fetch failures

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

---------

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
* feat(tls): wire proxy profile arguments into workloads

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* test(e2e): wait for TAS deployment

* test(e2e): provide bound TAS test storage

* test(e2e): avoid asserting synthetic TAS deployment

* fix(tls): read adherence and detect FIPS mode

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

---------

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
…evalhub-inspect-primary-score

chore(evalhub): sync inspect provider changes
[pull] main from trustyai-explainability:main
The MCP Gateway integration created a dependency on Inference Payload Processing's (IPP) NeMo BBR plugins which will soon be replaced. If `MCPGateway` is defined on the `NemoGuardrailsPodTemplate` without a custom deployment of the BBR plugin, it will cause theNeMo Guardrails server deployment to fail.

Fix: remove `controllers/nemo_guardrails/envoy_filter.go`, `controllers/nemo_guardrails/mcp_gateway.go`, `controllers/nemo_guardrails/mcp_gateway_test.go`, `controllers/nemo_guardrails/templates/envoy-filter.tmpl.yaml` and related changes on other files.

This reverts commit 9b9abea.
…inability#969)

Assisted-by: Codex

Signed-off-by: Lior Aronovich <lioraronpr@gmail.com>
…explainability#971)

* fix(evalhub): detect FailedMount as evaluation job failure

* fix(evalhub): ignore stale FailedMount events

Require the newest FailedMount/FailedAttachVolume Event to be within
the scheduling grace period so a transient mount warning cannot fail a
job that later succeeds during a slow image pull.

Assisted-by: Cursor
Signed-off-by: Sobha Cheruku <scheruku@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(evalhub): bounded requeue for late FailedMount events

Keep rechecking volume-mount-stuck pods until volumeMountWatchMaxAge so a
FailedMount that arrives after the first post-grace check is still reported.

Assisted-by: Cursor
Signed-off-by: Sobha Cheruku <scheruku@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(evalhub): keep events list in module RBAC markers

Add list to the trustyai-operator-module kubebuilder events markers so
make manifests-tom does not drop the permission added for FailedMount
detection.

Assisted-by: Cursor
Signed-off-by: Sobha Cheruku <scheruku@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: Sobha Cheruku <scheruku@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
[pull] main from trustyai-explainability:main
…explainability#902)

* chore(gorch): Remove GuardrailsOrchestrator ecosystem from operator

Signed-off-by: Rob Geada <rob@geada.net>

* fix: module sync

Signed-off-by: Rob Geada <rob@geada.net>

* fix: image substitution on module kustomize

Signed-off-by: Rob Geada <rob@geada.net>

* fix: Add handling of removed/legacy services from operator main.go

Signed-off-by: Rob Geada <rob@geada.net>

* fix: Fix legacy service support, revert erroneous manifest changes

Signed-off-by: Rob Geada <rob@geada.net>

---------

Signed-off-by: Rob Geada <rob@geada.net>
…xplainability#975)

* bump(evalhub): update GuideLLM to v0.6.1 (RHOAIENG-95788)

Signed-off-by: Jooyeon Mok <jmok@redhat.com>

* fix(evalhub): sync GuideLLM image in module templates (RHOAIENG-95788)

Signed-off-by: Jooyeon Mok <jmok@redhat.com>

---------

Signed-off-by: Jooyeon Mok <jmok@redhat.com>
Signed-off-by: Jooyeon Mok <jmok@redhat.com>
…explainability#902)

* chore(gorch): Remove GuardrailsOrchestrator ecosystem from operator

Signed-off-by: Rob Geada <rob@geada.net>

* fix: module sync

Signed-off-by: Rob Geada <rob@geada.net>

* fix: image substitution on module kustomize

Signed-off-by: Rob Geada <rob@geada.net>

* fix: Add handling of removed/legacy services from operator main.go

Signed-off-by: Rob Geada <rob@geada.net>

* fix: Fix legacy service support, revert erroneous manifest changes

Signed-off-by: Rob Geada <rob@geada.net>

---------

Signed-off-by: Rob Geada <rob@geada.net>
…xplainability#975)

* bump(evalhub): update GuideLLM to v0.6.1 (RHOAIENG-95788)

Signed-off-by: Jooyeon Mok <jmok@redhat.com>

* fix(evalhub): sync GuideLLM image in module templates (RHOAIENG-95788)

Signed-off-by: Jooyeon Mok <jmok@redhat.com>

---------

Signed-off-by: Jooyeon Mok <jmok@redhat.com>
)

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
trustyai-explainability#991)

Add the IFBench image parameter to the base kustomization.
Update IFBench and LightEval images to v0.6.3 across base, ODH,
and RHOAI configurations and mirrored manifest templates.

Includes the IFBench non-root NLTK fix and LightEval per-example
result export support.

Validation: ODH and RHOAI kustomize builds and git diff --check passed.

Signed-off-by: Jooyeon Mok <jmok@redhat.com>
trustyai-explainability#991)

Add the IFBench image parameter to the base kustomization.
Update IFBench and LightEval images to v0.6.3 across base, ODH,
and RHOAI configurations and mirrored manifest templates.

Includes the IFBench non-root NLTK fix and LightEval per-example
result export support.

Validation: ODH and RHOAI kustomize builds and git diff --check passed.

Signed-off-by: Jooyeon Mok <jmok@redhat.com>
(cherry picked from commit 2b7c396)
Signed-off-by: Julian Payne <julpayne@redhat.com>
…in-to-odh

sync: main with trustyai-explainability:main
…explainability#981)

* feat(networkpolicy): add shared operand policy foundations

Add typed egress validation, collision-safe workload identity, authority and ownership guards, complete-set reconciliation/status reporting, and UID-precondition cleanup. Include fake-client and local API serialization/race tests and integration/evidence documentation.

Refs trustyai-explainability#956

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* fix(networkpolicy): accept older owner reference versions

* feat(networkpolicy): authorize reviewed namespace-only ingress peers

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* fix(networkpolicy): accept positive Exists namespace selectors

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* docs(networkpolicy): clarify positive namespace selectors

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* fix(networkpolicy): require target selector to match identity

* fix(networkpolicy): reject universal namespace selectors

* fix(networkpolicy): resolve owner GVK from scheme

* fix(networkpolicy): canonicalize namespace selectors

* fix(networkpolicy): avoid mutating owner TypeMeta

* docs(networkpolicy): attach reconcile godoc correctly

---------

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
…ute when auth==true

Signed-off-by: Christina Xu <chrxu@redhat.com>
Signed-off-by: Jooyeon Mok <jmok@redhat.com>
Signed-off-by: Jooyeon Mok <jmok@redhat.com>
…lhub-collection-classification

fix(evalhub): sync collection classification metadata
RobGeada and others added 27 commits October 14, 2026 14:26
trustyai-explainability#995)

* feat(nemo): segregate NeMo admin endpoints into separate auth provider

Signed-off-by: Rob Geada <rob@geada.net>

* feat: NeMo Admin auth address review comments

Signed-off-by: Rob Geada <rob@geada.net>

* feat: NeMo Admin auth address review comments

Signed-off-by: Rob Geada <rob@geada.net>

* fix kube-rbac owner service name

Signed-off-by: Rob Geada <rob@geada.net>

---------

Signed-off-by: Rob Geada <rob@geada.net>
…1006)

Bumps golang.org/x/net from v0.58.0 to v0.60.0 in the main module and in
the trustyai-operator-module subproject, so both resolve the same x/net
version and the repo-wide fs security scan stays green.

Only the transitive golang.org/x family moves with it (crypto, sys, term,
text, mod, sync). No code changes.
… main (trustyai-explainability#1015)

* ci(gitleaks): allowlist generic-api-key false positive in gorch tls.go

The Gitleaks workflow scans full history and fails on every branch and
PR with a single generic-api-key finding at controllers/gorch/tls.go:13
(introduced in f7cb3c7; the file was since removed from main in
7f6270c):

    utils.MountSecret(deployment, tlsSecretToMount,
                      tlsSecretToMount+"-vol", "/etc/tls/"+tlsSecretToMount, []int{0})

tlsSecretToMount is a Go variable holding a Kubernetes Secret name, not
a secret value, so this is a false positive. Since the file no longer
exists at the tip, an inline gitleaks:allow comment cannot suppress the
historical finding; instead add a root .gitleaks.toml that keeps the
default rules ([extend] useDefault = true) and allowlists the path.

Verified with the workflow's pinned gitleaks 8.28.0 against a fresh
clone of this repo: baseline reports the tls.go finding; with the
config, gitleaks reports no leaks.

* test(lmes): budget watch-driven drift repair above suite default

The "repairs policy deletion/drift and Pod identity drift for a retained
completed job" spec flakes in CI: its Eventually assertions for Pod
relabeling, policy spec repair and policy recreation share the suite's
10s defaultTimeout, but under runner load (five envtest suites share
one machine) informer event delivery can lag direct-client calls by
more than 10s. In the 2026-10-14 main run (job 116020699805) the last
reconcile before the failure was at 18:15:04 and the next pair arrived
at 18:15:14 on the 10s PodCheckingInterval requeue; the watch events
never surfaced in between while the spec's own client polls kept
succeeding, and the repair landed right at the 10.001s deadline.

Budget those three assertions with a spec-scoped watchRepairTimeout of
30s, matching the re-run path's existing 30s budget in this suite.
Direct-client waits keep the suite default. The controller itself
repairs correctly; only the wait budget is too tight under load.

Closes trustyai-explainability#1011

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* ci(test): run controller test packages serially on the runner

The widened 30s budget was not enough on its own: this PR's first CI
run (38660769323) failed the same spec with zero reconciles for the
job during the whole 30s window. With go test ./... defaulting to
-p GOMAXPROCS (4 on the runner), four envtest suites - each with its
own kube-apiserver, etcd and manager - run concurrently on the
runner's shared vCPUs. In both observed failures the apiserver kept
serving the spec's direct client reads while watch event delivery
stalled: ~10s on the Oct 14 main run (job 116020699805, repair landed
just past the deadline) and 30s+ on the PR run. Completed LMEvalJobs
have no requeue backstop (handleComplete drops the pullingJobs key),
so watch delivery is the spec's only repair trigger, and an informer
stall means an unbounded wait whatever the Eventually budget.

Run the test packages serially (-p 1) in the controller-tests
workflow so each suite's apiserver gets the runner to itself; keep
the 30s watch-repair budget from the previous commit as defense in
depth for the runner's residual scheduling noise. Local serial run of
the full suite: 16/16 packages pass in 2m53s.

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* ci(gitleaks): suppress the false positive by fingerprint, not path

Review feedback on trustyai-explainability#1015: the .gitleaks.toml path allowlist for
controllers/gorch/tls.go would also mask any future real finding in
that path. Replace it with a .gitleaksignore entry pinned to the exact
finding (commit f7cb3c7, file, rule, start line), so only the known
historical false positive is suppressed.

Note the fingerprint's last component is the finding's start line
(13): the scan report redacts it to "***", so a fingerprint
copy-pasted from the report never matches. Verified with the
workflow-pinned gitleaks 8.28.0 against a fresh clone of main at
258b3a9: the false positive is suppressed, a new secret planted at
the same path is still reported, and the ignore file itself is not
flagged.

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>

* fix: Update .gitleaksignore

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Signed-off-by: Rui Vieira <ruidevieira@googlemail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
… with trustworthiness domains

- Introduced a new ConfigMap for the MTEB provider with comprehensive benchmark configurations.
- Updated the Nemo Guardrails provider to include trustworthiness domains and evaluation targets for various safety tasks.
- Enhanced the RAGAS provider by adding grounded document understanding domains and relevant tasks.
- Modified the Ruler provider to incorporate grounded document understanding domains and long context understanding tasks across multiple metrics.

Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
…e overlays

Signed-off-by: Julian Payne <julpayne@redhat.com>
…uration

Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
- Increased curation_order for various collections to 10 for better organization.
- Adjusted pass criteria thresholds for model validation and instruction following collections.
- Updated primary metrics to reflect changes in evaluation standards, including renaming metrics for clarity.
- Enhanced documentation within collection YAML files to provide clearer guidance on evaluation processes and expectations.
- Consolidated implementation plan references to streamline documentation and reduce redundancy.

Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
Signed-off-by: Julian Payne <julpayne@redhat.com>
…ability/build/sync-providers-collections

build: add MTEB provider configuration and enhance existing providers
Sync changes from upstream to midstream
…ai-explainability#1017)

Upgrading from RHOAI 3.5 to 3.6 leaves the DataScienceCluster stuck:
the 3.5 TrustyAI CR stored spec.eval.lmeval.permitOnline and
permitCodeExecution as the strings "allow"/"deny", but the modularized
3.6 operator declares the same field paths as booleans. The updated CRD
rejects the stored values, so every server-side apply against the live
object fails with "expected boolean, got &{deny}". The operator cannot
migrate the object itself because its informer decodes TrustyAI CRs
into the typed Go struct, so the legacy strings break the cache before
any reconciler could rewrite them.

Restore the 3.5 schema (string enum allow/deny, default "deny") for
both fields so stored 3.5 values remain valid. The internal contract is
unchanged: buildDSCConfigMap still writes "true"/"false" into the DSC
ConfigMap consumed by the lmes controller, derived as
permit == "allow".

Refs: https://redhat.atlassian.net/browse/RHAI-10010
The EvalHub API lists Kueue LocalQueues in each tenant namespace to
resolve queue-backed hardware profiles for GET /api/v1/info, but no
ClusterRole bound in tenant namespaces granted it, so the endpoint
returned HTTP 500 (localqueues.kueue.x-k8s.io is forbidden) and
queue-backed profiles never appeared.

Grant exactly the list verb on kueue.x-k8s.io/localqueues in the
evalhub-hardware-profiles-reader ClusterRole. The operator already binds
that ClusterRole to the API service account in every tenant namespace,
so the existing RoleBinding wiring picks up the new rule with no
controller changes.

- add (kueue.x-k8s.io, localqueues) to the conftest ClusterRole
  allowlist in policy/clusterrole.rego
- add policy/evalhub_hardware_profiles_reader.rego enforcing
  LocalQueue list-only on that role, with unit tests
- add a Go manifest test asserting minimal verbs in both manifest
  copies (config component and module manifests-template)
Signed-off-by: Jooyeon Mok <jmok@redhat.com>
…oaieng-100718-localqueues-rbac

fix(evalhub): grant API LocalQueue list for tenant hardware profiles
* Add spec.allowedConsumers with from Same, Selector, or All. The CRD rejects an empty selector and a selector combined with Same or All.
…s don't publish routes

Signed-off-by: Christina Xu <chrxu@redhat.com>
…spect-image-v0.6.11

fix(evalhub): bump Inspect adapter to v0.6.11
Sync changes from upstream to midstream
@ruivieira
ruivieira merged commit 309bf1a into stable Oct 15, 2026
22 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.