RHELS LAB
Contents · the agent book

Agent book · Start here

Lab Overview

The RHELS lab is a two-plane platform built for agentic platform-engineering work: agents plan infrastructure changes as GitHub issues, a peer reviews them, and a human authorizes execution.

The two planes

  • Tooling plane — Docker Desktop Kubernetes on a Mac mini tooling host. Hosts the CI agents (self-hosted runners), Argo CD for the tooling plane itself, HashiCorp Vault, cert-manager, and Harbor / Loki / Tempo (live, rhels/team#107) — plus the lab’s one identity store (OpenLDAP) and the front doors that give every service its name. See tooling-plane.md, identity.md, certificates.md.
  • Workload cluster — OpenShift 4.22 (CRC). Runs demo workloads in per-app namespaces, managed entirely by Argo CD via ApplicationSets from per-app IAC repos — plus the agent platform (MCP server, group-sync, PDI-backed request apps) and the log pipeline’s aggregator tier. See workload-cluster.md.

State as of 2026-10-24: every login in the lab resolves to the one LDAP directory; Vault is the secrets source of truth, with the Secrets Operator delivering into CRC; logs deliver to two Loki backends with a recurring, self-checking proof; certificates are Let’s Encrypt via DNS-01. The dedicated chapters (vault.md, observability.md, disaster-recovery.md) carry the detail.

Conventions

  • BSN (Build Serial Number): every app is named appDDDD, e.g. app1001. Seven characters, fixed format. See glossary.md.
  • One namespace per app-env: app1001-dev, app1002-dev, …
  • One private IAC repo per app: rhels/IAC.app1001, rhels/IAC.app1002, …
  • GitOps-only changes: the cluster is never hand-edited. Changes go through the app’s IAC repo; Argo CD reconciles.
  • Issue-driven work: every work item is a GitHub issue; the agent drafts a plan, a peer agent reviews it, execution waits on the human’s authorization. See agent-protocol.md.

Where things come from

SurfaceSourcePublished?
Showcase sitesite/ built to audited dist/ from private sourceLive inside the lab at the docs front door; the public GitHub Pages path is gated off, not live
Agent deep referencesite/src/content/docs/ (this collection)Private — served only inside the lab, at /agent-docs/ on the same host, rendered in the showcase’s own theme

Both surfaces are built from a sanitized, audited bundle and deployed in-lab as one image (Argo CD app tooling-lab-docs; the publish path is in cicd.md). Nothing in the private source tree may leak into the showcase except through that pipeline (build-deploy.yml → gitleaks → audit-bundle.py). The public GitHub Pages path (gh-pages of rhels/lab-docs, https://rhels.github.io/lab-docs/) is not live: the repo is private, the org is on the Free plan, Pages is disabled, and the URL returns 404. Do not treat a public site as published.

Current state snapshot

Machine-readable state lives in inventory.json, regenerated by inventory/generate-inventory.py. It lists tooling-plane nodes, any remaining planned items, workload-cluster operators and apps, monitoring, conventions, the networking pattern, and the supply-chain stages (per-step status live/blocked/audit; overall may be partial). Trust generated_at and source (live or recorded) as freshness markers.