From 360bed3084f1a4483341c5215d7fd03000f3af6a Mon Sep 17 00:00:00 2001 From: Robert B Gordon Date: Mon, 29 Jun 2026 18:59:43 -0500 Subject: [PATCH 1/3] Add stage-only merge guard and contributing guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a CI workflow (enforce-stage-only.yml) that fails any PR into `main` whose source branch isn't `stage`, intended as a required status check via branch protection. Add CONTRIBUTING.md documenting the feature → stage → main release workflow, branch roles, and the enforcement rules protecting the public `main` branch. --- .github/workflows/enforce-stage-only.yml | 18 ++++++++++++++ CONTRIBUTING.md | 31 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 .github/workflows/enforce-stage-only.yml create mode 100644 CONTRIBUTING.md diff --git a/.github/workflows/enforce-stage-only.yml b/.github/workflows/enforce-stage-only.yml new file mode 100644 index 0000000..cbd381f --- /dev/null +++ b/.github/workflows/enforce-stage-only.yml @@ -0,0 +1,18 @@ +name: Enforce stage-only merges to main +# Guards the publish branch: the ONLY branch allowed to open a PR into `main` +# is `stage`. Make `source-branch-guard` a required status check on `main` +# (already configured via branch protection) so this cannot be bypassed. +on: + pull_request: + branches: [main] +jobs: + source-branch-guard: + runs-on: ubuntu-latest + steps: + - name: Require PR source to be stage + run: | + if [ "${{ github.head_ref }}" != "stage" ]; then + echo "::error::PRs into 'main' must come from 'stage' (got '${{ github.head_ref }}'). Land your change on 'stage' first, then merge stage -> main." + exit 1 + fi + echo "OK: source branch is 'stage'." diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f4255d4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing + +## Branching & release workflow + +This repo publishes **publicly**. The `main` branch is the public release branch — do **not** commit to it directly. + +``` +feature branch ──► stage ──► (PR) ──► main + (your work) (test) (public release) +``` + +| Branch | Role | What publishing does | +|--------|------|----------------------| +| `stage` | Integration & testing | `release.yml` publishes charts as `-stage.N` | +| `main` | Public release | `release.yml` publishes the real chart versions | + +### How to land a change + +1. Branch off `stage`, do your work, open a PR **into `stage`**. +2. Merge to `stage`. The release workflow publishes a `-stage.N` chart you can test against. +3. When it's good, open a PR **from `stage` into `main`** and merge it. That is the *only* way to release publicly. + +### Enforcement (so we can't forget) + +`main` is protected: + +- **Direct pushes are blocked** — everything goes through a PR. +- **Only `stage` may be merged into `main`.** A required status check (`source-branch-guard`, see `.github/workflows/enforce-stage-only.yml`) fails any PR into `main` whose source branch isn't `stage`. +- Force-pushes and branch deletion are blocked, and the rules apply to admins too. + +If you find yourself wanting to push to `main` directly: don't. Land it on `stage`, then merge `stage` → `main`. From a1fa9b338adfb2492e9f09b8ac701ed023316bc9 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Mon, 6 Jul 2026 12:09:34 -0500 Subject: [PATCH 2/3] Fill in README with dstl8 intro and chart usage Add a welcoming overview of Dstl8, links to dstl8.ai, controltheory.com, the docs site, and the dstl8 CLI repo, plus a description of the aigent-ds and aigent-cluster charts and how to install them via the ct-helm repo. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 00ce23c..0d0e63d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,108 @@ -# helm-charts -Repo for publicly available helm charts. +# ControlTheory Helm Charts + +Public Helm charts for deploying the **ControlTheory agent** into your +Kubernetes cluster, so runtime telemetry flows into [Dstl8](https://dstl8.ai). + +> Published as a Helm repository at **[control-theory.github.io/helm-charts](https://control-theory.github.io/helm-charts)**. + +## What is Dstl8? + +**Dstl8** is continuous runtime feedback for developers. It distills, detects, +correlates, and explains problems across your full deployment chain — +Kubernetes, Docker, AWS, Vercel, Supabase, Railway, OpenTelemetry, and more — +so you stay out of debug rabbit holes. Powered by Möbius agents, an MCP server, +and the Dstl8 CLI, that context streams back into Claude Code, Cursor, and the +rest of your dev flow. + +- Website — **[dstl8.ai](https://dstl8.ai)** · [controltheory.com](https://www.controltheory.com) +- Documentation — **[docs.controltheory.com](https://docs.controltheory.com/controltheory-documentation/dstl8-docs)** +- Dstl8 CLI — **[github.com/control-theory/dstl8](https://github.com/control-theory/dstl8)** + +## Getting started + +New to Dstl8? Start here — you don't need this repo to begin. + +1. **Sign up** and grab the Dstl8 CLI: + ```bash + brew install control-theory/dstl8/dstl8 + dstl8 signup + ``` +2. **Add a source** so logs start flowing. The CLI wizard covers Kubernetes, + CloudWatch, Vercel, Supabase, OTLP, GitHub, and more: + ```bash + dstl8 sources add kubernetes + ``` +3. **Connect your AI agent** over MCP: + ```bash + dstl8 install claude-code + ``` + +Full walkthrough in the [Dstl8 CLI repo](https://github.com/control-theory/dstl8) +and the [docs](https://docs.controltheory.com/controltheory-documentation/dstl8-docs). + +## The charts + +This repository publishes the charts that deploy the ControlTheory agent on +Kubernetes: + +| Chart | What it deploys | +|-------|-----------------| +| **aigent-ds** | The aigent DaemonSet — per-node log collection | +| **aigent-cluster** | The cluster agent — captures Kubernetes events | + +The charts are driven by tokens and endpoints that Dstl8 generates for you. + +## Installing + +The easiest path is to **add a Kubernetes source in the +[Dstl8 app](https://dstl8.ai)** — it hands you a ready-to-run install command +(via [install.controltheory.com](https://install.controltheory.com)) that wires +up both charts for you. See the +[installation docs](https://docs.controltheory.com/controltheory-documentation/dstl8-docs) +for details. + +To use the charts directly with Helm, add the repo: + +```bash +helm repo add ct-helm https://control-theory.github.io/helm-charts +helm repo update ct-helm +``` + +Then install the chart(s) with the values Dstl8 provides: + +```bash +helm upgrade --install aigent-ds ct-helm/aigent-ds \ + --namespace controltheory --create-namespace \ + --set daemonset.org_dns_id= \ + --set daemonset.controlplane.admission_token= \ + --set daemonset.org_api_endpoint= \ + --set daemonset.cluster_name= \ + --set daemonset.deployment_env= + +helm upgrade --install aigent-cluster ct-helm/aigent-cluster \ + --namespace controltheory --create-namespace \ + --set deployment.org_dns_id= \ + --set deployment.controlplane.admission_token= \ + --set deployment.org_api_endpoint= \ + --set deployment.cluster_name= \ + --set deployment.deployment_env= +``` + +See each chart's `values.yaml` for the full set of configurable values. + +## Contributing + +Charts are published from this repo via GitHub Pages. Changes are tested on +`stage` (published as `-stage.N` versions) and released through `main` — see +[CONTRIBUTING.md](CONTRIBUTING.md) for the branching and release workflow. + +## Community & support + +- [Discord](https://discord.gg/nRBUFYByta) +- [Issues](https://github.com/control-theory/dstl8/issues) + +## License + +These Helm charts are MIT licensed. The ControlTheory agent and Dstl8 binaries +themselves are proprietary, owned by ControlTheory, Inc., and governed by the +[ControlTheory Terms of Service](https://www.controltheory.com/terms-of-service/). From 5892f0b9bcc730a73d22d7d39c7e8e7faef29bc4 Mon Sep 17 00:00:00 2001 From: Robert B Gordon Date: Sat, 11 Jul 2026 12:04:14 -0500 Subject: [PATCH 3/3] bump to new aigent version --- charts/aigent-cluster/Chart.yaml | 4 ++-- charts/aigent-ds/Chart.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/charts/aigent-cluster/Chart.yaml b/charts/aigent-cluster/Chart.yaml index c2d2970..9fa1085 100644 --- a/charts/aigent-cluster/Chart.yaml +++ b/charts/aigent-cluster/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: aigent-cluster description: ControlTheory AIgent Cluster - captures k8s events type: application -version: 0.3.33 -appVersion: "v1.3.33" +version: 0.3.34 +appVersion: "v1.3.34" diff --git a/charts/aigent-ds/Chart.yaml b/charts/aigent-ds/Chart.yaml index 8628277..707073c 100644 --- a/charts/aigent-ds/Chart.yaml +++ b/charts/aigent-ds/Chart.yaml @@ -2,5 +2,5 @@ apiVersion: v2 name: aigent-ds description: ControlTheory AIgent DaemonSet - AI-powered log aggregation per node type: application -version: 0.3.33 -appVersion: "v1.3.33" +version: 0.3.34 +appVersion: "v1.3.34"