Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
3b24d55
feat: TLS proxy resolver (#947)
ruivieira Sep 24, 2026
241a339
feat(evalhub): support system collection curation overrides (#943)
lioraron Sep 24, 2026
8d3daa0
feat: TLS profile propagation (#948)
ruivieira Sep 25, 2026
b14bda7
feat: TLS FIPS adherence (#951)
ruivieira Sep 25, 2026
c0b8912
chore(evalhub): sync inspect provider changes
scheruku-rh Sep 28, 2026
deeef32
Merge pull request #968 from scheruku-rh/sync/evalhub-inspect-primary…
ppadashe-psp Sep 28, 2026
2623485
Merge pull request #221 from trustyai-explainability/main
ruivieira Sep 28, 2026
e63a31e
fix(nemo_guardrails):Revert MCP Gateway integration with NeMo Guardrails
christinaexyou Aug 12, 2026
f923b3e
test(evalhub): cover collection ConfigMap propagation (#969)
lioraron Sep 29, 2026
0572d1b
fix(evalhub): detect FailedMount as evaluation job failure (#971)
scheruku-rh Sep 29, 2026
9d8d4d2
Merge pull request #223 from trustyai-explainability/main
ruivieira Sep 30, 2026
7f6270c
maintenance: Delete FMS Guardrails ecosystem from operator (#902)
RobGeada Sep 30, 2026
014e3c5
bump(evalhub): update GuideLLM to v0.6.1 (RHOAIENG-95788) (#975)
j-mok-dev Oct 1, 2026
17f14eb
fix(evalhub): use versioned RULER provider image (#917)
j-mok-dev Oct 1, 2026
cd2073b
fix(evalhub): bump RAGAS adapter to v0.6.2 (RHOAIENG-94564)
j-mok-dev Oct 1, 2026
9850a41
fix(nemo_guardrails): readiness should follow rollout status
christinaexyou Sep 28, 2026
d81d8d3
maintenance: Delete FMS Guardrails ecosystem from operator (#902)
RobGeada Sep 30, 2026
c4c07c9
bump(evalhub): update GuideLLM to v0.6.1 (RHOAIENG-95788) (#975)
j-mok-dev Oct 1, 2026
40e14b2
fix(evalhub): use versioned RULER provider image (#917)
j-mok-dev Oct 1, 2026
351deb3
fix(nemo_guardrails): readiness should follow rollout status
christinaexyou Sep 28, 2026
4ae58dc
fix(tests): update urllib3 minimum to 2.8.0 (#979)
ruivieira Oct 6, 2026
2b7c396
fix(evalhub): wire IFBench image parameter and bump adapters to v0.6.…
j-mok-dev Oct 6, 2026
6a02561
fix(evalhub): wire IFBench image parameter and bump adapters to v0.6.…
j-mok-dev Oct 6, 2026
ba83ae5
fix(evalhub): authorize service info endpoint
julpayne Oct 6, 2026
f83e1d4
Merge pull request #224 from scheruku-rh/sync/cherry-pick-upstream-ma…
m-misiura Oct 6, 2026
51a8f86
feat(networkpolicy): add shared operand policy foundations (#981)
ruivieira Oct 6, 2026
b7ada7b
feat(guardrails): set Status.Endpoint to the NeMo service internal ro…
christinaexyou Oct 2, 2026
d81fae4
fix(evalhub): expose runnable JSONSchemaBench split IDs
j-mok-dev Oct 6, 2026
478ad5e
fix(evalhub): sync collection classification metadata
j-mok-dev Oct 6, 2026
ec68589
Merge pull request #998 from j-mok-dev/fix/evalhub-collection-classif…
ppadashe-psp Oct 7, 2026
8343aba
Merge pull request #976 from j-mok-dev/bump/rhoaieng-94564-ragas-v0.6.2
ppadashe-psp Oct 7, 2026
d114c46
Merge pull request #997 from j-mok-dev/fix/jsonschema-benchmark-splits
ppadashe-psp Oct 7, 2026
88a07e0
Merge branch 'main' of trustyai-explainability/trustyai-service-opera…
scheruku-rh Oct 7, 2026
f9e9792
Merge pull request #226 from scheruku-rh/sync/merge-explainability-ma…
RobGeada Oct 7, 2026
e92a6c5
fix(hle): Update primary metric for HLE
j-mok-dev Oct 7, 2026
6ffc7c5
feat(evalhub): package FollowBench provider and collection
kahilam Oct 7, 2026
09ce1e2
Merge pull request #1001 from kahilam/feat/evalhub-followbench-config
ppadashe-psp Oct 8, 2026
b6d9faa
feat(lmes): reconcile per-job ingress and explicit egress policies (#…
ruivieira Oct 8, 2026
466ce52
feat(evalhub): reconcile API ingress network policy (#983)
ruivieira Oct 8, 2026
ebf8020
Merge pull request #999 from j-mok-dev/fix/hle-primary-metric
ppadashe-psp Oct 8, 2026
3d6e05b
fix(evalhub): update RULER and base LM Evaluation Harness images (#996)
j-mok-dev Oct 8, 2026
2f29152
fix(evalhub): include curated collections in default selection (#1000)
j-mok-dev Oct 8, 2026
45ac053
fix(evalhub): pass scheme to LabelOwnedNetworkPolicyDeployment (#1002)
ruivieira Oct 8, 2026
60cd309
fix(evalhub): update Inspect adapter image to v0.6.8
j-mok-dev Oct 9, 2026
dd499de
fix(evalhub): update Inspect adapter image to v0.6.9
j-mok-dev Oct 9, 2026
36c7ad7
Merge pull request #1003 from j-mok-dev/fix/inspect-image-v0.6.8
ppadashe-psp Oct 9, 2026
359bc8e
feat(evalhub): add ToolEval community provider ConfigMap (#992)
scheruku-rh Oct 9, 2026
72b468d
Merge pull request #227 from trustyai-explainability/main
RobGeada Oct 9, 2026
639411f
feat(evalhub): add Job NetworkPolicy permissions (#985)
ruivieira Oct 11, 2026
eaa7f7d
test(evalhub): cover info authorization and document upgrades
julpayne Oct 12, 2026
5388128
Merge pull request #994 from trustyai-explainability/fix/evalhub-info…
julpayne Oct 12, 2026
b4e177c
Merge pull request #228 from trustyai-explainability/main
ruivieira Oct 12, 2026
75439f9
Merge pull request #222 from opendatahub-io/main
SudipSinha Oct 12, 2026
3bcbf0a
feat(lmes): support pod resource claims (#988)
ruivieira Oct 12, 2026
4fa5c74
fix(evalhub): increase Garak memory defaults (#1004)
ABeltramo Oct 12, 2026
b872681
fix(evalhub): authorize Dashboard eval-hub-ui peer in API NetworkPoli…
ruivieira Oct 14, 2026
43ac8f6
feat(nemo): segregate NeMo admin endpoints into separate auth provide…
RobGeada Oct 14, 2026
258b3a9
fix(deps): bump golang.org/x/net to v0.60.0 (#1006)
ruivieira Oct 14, 2026
d0d8082
fix(ci): clear gitleaks false positive and lmes drift-repair flake on…
ruivieira Oct 15, 2026
2a8b822
build: add MTEB provider configuration and enhance existing providers…
julpayne Oct 14, 2026
6cf5499
fix(evalhub): sync module manifests
julpayne Oct 14, 2026
53b2508
feat(evalhub): add databench and mteb provider images to configuration
julpayne Oct 14, 2026
9aa73e1
feat(evalhub): add databench and mteb provider images to configuration
julpayne Oct 14, 2026
6e67df9
fix(docs): update links to params.env files in README.md
julpayne Oct 14, 2026
b517a6e
fix(params.env): update ruler image version to v0.6.10 across multipl…
julpayne Oct 14, 2026
cd4d5ed
feat(evalhub): expand default providers and collections in CRD config…
julpayne Oct 14, 2026
744f197
fix(evalhub): correct default provider names in CRD configuration
julpayne Oct 14, 2026
65a5dcc
feat: update evaluation configurations across multiple collections
julpayne Oct 14, 2026
4d99e39
test(evalhub): align fixtures with default providers and collections
julpayne Oct 15, 2026
e0128d1
fix(evalhub): add FollowBench image to ODH overlay
julpayne Oct 15, 2026
bd7c1f7
Merge pull request #1013 from trustyai-explainability/build/sync-prov…
ppadashe-psp Oct 15, 2026
36c4335
Merge pull request #230 from trustyai-explainability/main
ruivieira Oct 15, 2026
be637ed
fix(module): restore 3.5 string enum for LMEval permit fields (#1017)
ruivieira Oct 15, 2026
68d0063
fix(evalhub): grant API LocalQueue list for tenant hardware profiles
ruivieira Oct 15, 2026
a36d2bc
fix(evalhub): bump Inspect adapter to v0.6.11
j-mok-dev Oct 15, 2026
ae24f3e
fix(evalhub): grant module LocalQueue list permission
ruivieira Oct 15, 2026
ea50b13
Merge pull request #1019 from ruivieira/fix/rhoaieng-100718-localqueu…
sheltoncyril Oct 15, 2026
164a721
feat(nemo_guardrails): declare which namespaces may attach a consumer
christinaexyou Sep 29, 2026
1497074
fix(guardrails): allow empty arrays as valid spec.allowedConsumers an…
christinaexyou Oct 2, 2026
07c77d3
fix(guardrails): Enforce exposeRoute: false so invalid selector field…
christinaexyou Oct 14, 2026
d569e6b
Merge pull request #1018 from j-mok-dev/fix/inspect-image-v0.6.11
julpayne Oct 15, 2026
c517af6
Merge pull request #232 from trustyai-explainability/main
ruivieira Oct 15, 2026
18e8252
Merge pull request #231 from opendatahub-io/main
ruivieira Oct 15, 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
4 changes: 0 additions & 4 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@
/controllers/lmes/ @ruivieira
/api/lmes/ @ruivieira

# Guardrails Orchestrator
/controllers/gorch/ @RobGeada @christinaexyou @m-misiura
/api/gorch/ @RobGeada @christinaexyou @m-misiura

# NeMo Guardrails
/controllers/nemo_guardrails/ @RobGeada @m-misiura @christinaexyou
/api/nemo_guardrails/ @RobGeada @m-misiura @christinaexyou
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/controller-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
# Retain legacy coverage and exercise DRA Pods on the GA baseline.
envtest-k8s-version: ["1.29.0", "1.34.0"]

steps:
- name: Checkout code
Expand All @@ -16,4 +20,4 @@ jobs:
go-version-file: "go.mod"

- name: Test
run: make test
run: make test ENVTEST_K8S_VERSION=${{ matrix.envtest-k8s-version }} GO_TEST_FLAGS="-p 1"
1 change: 0 additions & 1 deletion .github/workflows/operator-chaos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ jobs:
config/components/tas/crd
config/components/evalhub/crd
config/components/lmes/crd
config/components/gorch/crd
config/components/nemo-guardrails/crd
sparse-checkout-cone-mode: false

Expand Down
7 changes: 6 additions & 1 deletion .gitleaksignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
# Known false positive: generic-api-key detection on the TLS mount helper.
# Known false positive: the historical generic-api-key match on the TLS
# mount helper (commit f7cb3c7e) is a Go variable holding a Kubernetes
# Secret name, not a secret value. Pinned by commit/file/rule/start-line
# so any other finding in this path stays detectable. Note the last
# component is the finding start line (13). `--redact` masks secret text,
# but the fingerprint still contains this line number.
f7cb3c7ec00372121ab8c4d46a7424634f29d3b4:controllers/gorch/tls.go:generic-api-key:13
55 changes: 5 additions & 50 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## Overview

The TrustyAI Service Operator is a Kubernetes operator that manages the lifecycle of AI/ML trust, safety, and evaluation services on OpenShift AI. It deploys and configures five distinct service types — model explainability (TAS), LLM evaluation (LMES), evaluation hub (EvalHub), guardrails orchestration (GORCH), and NeMo Guardrails — through a single operator binary with dynamic controller registration.
The TrustyAI Service Operator is a Kubernetes operator that manages the lifecycle of AI/ML trust, safety, and evaluation services on OpenShift AI. It deploys and configures fourgi distinct service types — model explainability (TAS), LLM evaluation (LMES), evaluation hub (EvalHub), and NeMo Guardrails — through a single operator binary with dynamic controller registration.

Built with kubebuilder v4 and controller-runtime v0.17.0 in Go 1.24, the operator uses a plugin-based architecture where controllers are selectively enabled via a startup flag (`--enable-services`). Each controller watches its own CRD and reconciles the desired state by creating Deployments, Services, Routes, ConfigMaps, RBAC resources, and monitoring infrastructure.

Expand Down Expand Up @@ -61,12 +61,6 @@ flowchart TB
evalhub_metrics["Metrics server\n(port 8081, plain HTTP)"]
end

subgraph gorch_pod["Guardrails Orchestrator Pod(s)"]
gorch_svc["Orchestrator\n(guardrail chains)"]
gorch_gw["Gateway sidecar\n(optional)"]
gorch_det["Built-in detectors\n(optional)"]
end

subgraph nemo_pod["NeMo Guardrails Pod(s)"]
nemo_svc["NeMo Guardrails Server\n(NVIDIA NeMo)"]
end
Expand All @@ -75,13 +69,11 @@ flowchart TB
manager -->|"creates/manages"| tas_pod
manager -->|"creates/manages"| lmes_pod
manager -->|"creates/manages"| evalhub_pod
manager -->|"creates/manages"| gorch_pod
manager -->|"creates/manages"| nemo_pod

tas_svc -->|"HTTP/gRPC"| model_endpoints["KServe InferenceServices"]
lmes_main -->|"evaluates"| model_endpoints
evalhub_svc -->|"submits LMEvalJobs"| k8s_api
gorch_svc -->|"intercepts inference"| model_endpoints
nemo_svc -->|"guards inference"| model_endpoints

evalhub_svc -->|"SQLite / PostgreSQL"| db["Database"]
Expand Down Expand Up @@ -123,11 +115,6 @@ flowchart LR
evalhub_roles["tenant_roles.go\n(single-mode RBAC)"]
end

subgraph gorch_ctrl["gorch/"]
gorch_rec["GuardrailsOrchestratorReconciler"]
gorch_autoconfig["auto_config.go\n(service discovery)"]
end

subgraph nemo_ctrl["nemo_guardrails/"]
nemo_rec["NemoGuardrailsReconciler"]
nemo_ca["ca_bundle.go\n(certificate aggregation)"]
Expand All @@ -147,7 +134,6 @@ flowchart LR
tas_types["tas/v1, v1alpha1\nTrustyAIService"]
lmes_types["lmes/v1alpha1\nLMEvalJob"]
evalhub_types["evalhub/v1, v1alpha1\nEvalHub"]
gorch_types["gorch/v1alpha1\nGuardrailsOrchestrator"]
nemo_types["nemo_guardrails/v1alpha1\nNemoGuardrails"]
common["common/\nCondition, helpers"]
end
Expand All @@ -156,7 +142,6 @@ flowchart LR
registry --> tas_rec
registry --> lmes_rec
registry --> evalhub_rec
registry --> gorch_rec
registry --> nemo_rec
registry --> job_mgr_rec
```
Expand Down Expand Up @@ -188,9 +173,9 @@ flowchart TB

| Mode | Enabled Services | Use Case | Overlay |
|------|-----------------|----------|---------|
| **ODH (full)** | TAS, LMES, GORCH, NEMO_GUARDRAILS, EVALHUB | Open Data Hub — all AI trust services | `config/overlays/odh/` |
| **RHOAI (full)** | TAS, LMES, GORCH, NEMO_GUARDRAILS, EVALHUB | Red Hat OpenShift AI — production | `config/overlays/rhoai/` |
| **ODH + Kueue** | TAS, LMES, GORCH, NEMO_GUARDRAILS, EVALHUB, JOB_MGR | Full + job queuing via Kueue | `config/overlays/odh-kueue/` |
| **ODH (full)** | TAS, LMES, NEMO_GUARDRAILS, EVALHUB | Open Data Hub — all AI trust services | `config/overlays/odh/` |
| **RHOAI (full)** | TAS, LMES, NEMO_GUARDRAILS, EVALHUB | Red Hat OpenShift AI — production | `config/overlays/rhoai/` |
| **ODH + Kueue** | TAS, LMES, NEMO_GUARDRAILS, EVALHUB, JOB_MGR | Full + job queuing via Kueue | `config/overlays/odh-kueue/` |
| **LMES only** | LMES | LLM evaluation workloads only | `config/overlays/lmes/` |
| **EvalHub only** | EVALHUB | Evaluation hub service only | `config/overlays/evalhub-only/` |
| **NeMo only** | NEMO_GUARDRAILS | NeMo Guardrails only | `config/overlays/mcp-guardrails/` |
Expand All @@ -202,7 +187,6 @@ flowchart TB
| **TAS** | Optional (3 modes) | -- | Yes (ServiceMonitor) | Yes | Optional (PVC or DB) |
| **LMES** | -- | Optional (via JOB_MGR) | -- | -- | -- |
| **EvalHub** | -- | Optional (workload monitoring) | Yes | Yes | Required (SQLite or PostgreSQL) |
| **GORCH** | Optional (auto-config) | -- | Yes | Yes | -- |
| **NeMo Guardrails** | -- | -- | -- | Yes | -- |
| **JOB_MGR** | -- | Required | -- | -- | -- |

Expand All @@ -211,7 +195,6 @@ flowchart TB
KServe is **not a mandatory dependency**. The operator behaves as follows:

- **TAS controller**: Watches InferenceService objects. If none exist in the namespace, reconciliation continues without error. When InferenceServices are present, TAS patches them with payload-processing endpoints based on the deployment mode annotation.
- **GORCH controller**: Uses InferenceServices for auto-configuration (discovering generator and detector services). Falls back to manual ConfigMap-based configuration if KServe is unavailable.
- **LMES, EvalHub, NeMo**: No KServe dependency.

## Data and Message Flow
Expand Down Expand Up @@ -349,31 +332,6 @@ sequenceDiagram
EH->>K8sAPI: Update status (Ready, URL, active providers)
```

### Guardrails Auto-Configuration

```mermaid
sequenceDiagram
participant User
participant K8sAPI as Kubernetes API
participant GORCH as GORCH Controller
participant ISvcs as InferenceServices

User->>K8sAPI: Create GuardrailsOrchestrator CR (autoConfig)
K8sAPI->>GORCH: Watch event

GORCH->>K8sAPI: List InferenceServices in namespace
GORCH->>ISvcs: Find generator (by name from spec)
GORCH->>ISvcs: Find detectors (by label match)

GORCH->>K8sAPI: Generate orchestrator ConfigMap (endpoints)
GORCH->>K8sAPI: Generate gateway ConfigMap (if enabled)

GORCH->>K8sAPI: Create Deployment (orchestrator + gateway + detectors)
GORCH->>K8sAPI: Create Service + Route

GORCH->>K8sAPI: Update autoConfigState in status
```

## Dependencies

### Mandatory
Expand All @@ -385,7 +343,7 @@ sequenceDiagram

### Optional

- **KServe** v0.12.1 — enables TAS inference service patching and GORCH auto-configuration
- **KServe** v0.12.1 — enables TAS inference service patching
- **Kueue** v0.6.2 — enables job queuing for LMEvalJobs (requires JOB_MGR service)
- **Istio** — enables DestinationRule/VirtualService creation for service mesh traffic management (TAS with RawDeployment mode)
- **OpenShift Routes** — enables external HTTP/HTTPS access via Routes (gracefully skipped on vanilla Kubernetes)
Expand Down Expand Up @@ -419,7 +377,6 @@ flowchart TB
tas_cr["TrustyAIService CR"] --> tas_deploy["TAS Deployment\n+ kube-rbac-proxy"]
lmes_cr["LMEvalJob CR"] --> lmes_pods["Eval Pod(s)\n+ driver sidecar"]
evalhub_cr["EvalHub CR"] --> evalhub_deploy["EvalHub Deployment"]
gorch_cr["GuardrailsOrchestrator CR"] --> gorch_deploy["Orchestrator Deployment\n+ gateway + detectors"]
nemo_cr["NemoGuardrails CR"] --> nemo_deploy["NeMo Deployment"]
end

Expand Down Expand Up @@ -468,14 +425,12 @@ trustyai-service-operator/
│ ├── lmes/v1alpha1/ # LMEvalJob types
│ ├── evalhub/v1/ # EvalHub v1 (storage version)
│ ├── evalhub/v1alpha1/ # EvalHub v1alpha1
│ ├── gorch/v1alpha1/ # GuardrailsOrchestrator types
│ └── nemo_guardrails/v1alpha1/ # NemoGuardrails types
├── controllers/
│ ├── controllers.go # Service registry (init-based registration)
│ ├── tas/ # TAS reconciler (KServe, TLS, storage)
│ ├── lmes/ # LMES reconciler (pod lifecycle, state machine)
│ ├── evalhub/ # EvalHub reconciler (providers, tenancy, DB)
│ ├── gorch/ # GORCH reconciler (auto-config, detectors)
│ ├── nemo_guardrails/ # NeMo reconciler (CA bundles)
│ ├── job_mgr/ # Kueue job manager
│ ├── utils/ # Shared reconciliation helpers
Expand Down
6 changes: 2 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ func init() {
| `TAS` | `controllers/tas/` | `TrustyAIService` (v1alpha1, v1) |
| `LMES` | `controllers/lmes/` | `LMEvalJob` (v1alpha1) |
| `EVALHUB` | `controllers/evalhub/` | `EvalHub` (v1alpha1, v1) |
| `GORCH` | `controllers/gorch/` | `GuardrailsOrchestrator` (v1alpha1) |
| `NEMO_GUARDRAILS` | `controllers/nemo_guardrails/` | `NemoGuardrail` (v1alpha1) |
| `JOB_MGR` | `controllers/job_mgr/` | (watches external jobs) |

Expand All @@ -104,7 +103,6 @@ api/ # CRD type definitions (kubebuilder markers)
tas/v1alpha1/, tas/v1/ # TrustyAIService (with version conversion)
lmes/v1alpha1/ # LMEvalJob
evalhub/v1alpha1/, evalhub/v1/ # EvalHub (v1 is storage version)
gorch/v1alpha1/ # GuardrailsOrchestrator
nemo_guardrails/v1alpha1/ # NemoGuardrail
common/ # Shared types (Condition, CABundle)
controllers/
Expand Down Expand Up @@ -191,7 +189,7 @@ Tenant ConfigMap changes trigger reconciliation via a ConfigMap watch (`tenantCo

Registers all API groups in order:
- Kubernetes core (`clientgoscheme`)
- TrustyAI: `tasv1alpha1`, `tasv1`, `lmesv1alpha1`, `evalhubv1alpha1`, `evalhubv1`, `gorchv1alpha1`, `nemoguardrailsv1alpha1`
- TrustyAI: `tasv1alpha1`, `tasv1`, `lmesv1alpha1`, `evalhubv1alpha1`, `evalhubv1`, `nemoguardrailsv1alpha1`
- External: `monitoringv1` (Prometheus), `kservev1alpha1`/`v1beta1`, `routev1` (OpenShift), `apiextensionsv1`, `kueuev1beta1`

### Key Dependencies
Expand Down Expand Up @@ -263,7 +261,7 @@ make policy-check # Full check against all overlays

**Current policies:**
- `policy/rbac.rego` — closed allowlist of expected `ClusterRoleBinding` resources. Any CRB not in `expected_crbs` or binding the wrong `ClusterRole` is denied.
- `policy/clusterrole.rego` — inspects ClusterRole **contents**: (1) closed allowlist of permitted `(apiGroup, resource)` pairs, (2) denylist blocking wildcards, secrets write, privilege escalation verbs. Manager roles that legitimately need secrets or CRB write (TAS, GORCH, nemo-guardrails, evalhub) are exempt by name suffix — see `policy/README.md` for the full exemption list.
- `policy/clusterrole.rego` — inspects ClusterRole **contents**: (1) closed allowlist of permitted `(apiGroup, resource)` pairs, (2) denylist blocking wildcards, secrets write, privilege escalation verbs. Manager roles that legitimately need secrets or CRB write (TAS, nemo-guardrails, evalhub) are exempt by name suffix — see `policy/README.md` for the full exemption list.

**When adding RBAC resources:**
- If you add a new `ClusterRoleBinding` (e.g. in a component's `rbac/` directory), you must add its post-kustomize name and expected `ClusterRole` to `expected_crbs` in `policy/rbac.rego`.
Expand Down
84 changes: 0 additions & 84 deletions Dockerfile.orchestrator

This file was deleted.

8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ SHELL = /usr/bin/env bash -o pipefail
all: build

##@ General
# GO_TEST_FLAGS are passed to `go test` by the test target. CI pins -p 1 so
# only one envtest suite (kube-apiserver + etcd + manager) runs at a time:
# parallel suites oversubscribe the runner's shared vCPUs and stall the
# apiserver's watch event delivery, which the lmes drift-repair spec depends
# on (see #1011).
GO_TEST_FLAGS ?=

# The help target prints out all targets with their descriptions organized
# beneath their categories. The categories are represented by '##@' and the
Expand Down Expand Up @@ -134,7 +140,7 @@ vet: ## Run go vet against code.

.PHONY: test
test: manifests generate fmt vet envtest ## Run tests.
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out -v
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test $(GO_TEST_FLAGS) ./... -coverprofile cover.out -v

##@ Policy

Expand Down
9 changes: 0 additions & 9 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,6 @@ resources:
defaulting: true
validation: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: opendatahub.io
group: trustyai
kind: GuardrailsOrchestrator
path: github.com/trustyai-explainability/trustyai-service-operator/api/gorch/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
Expand Down
Loading
Loading