You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Updated the agent workflows to no longer automatically hand off to eachother or run e2e tests thanks to the new AI credit structure. Fix an issue where the Binary Scan Findings table would render versions that didn't have vulnerabilities
Copy file name to clipboardExpand all lines: .github/agents/developer.agent.md
+7-36Lines changed: 7 additions & 36 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,20 +16,6 @@ You are an expert Go developer specializing in Kubernetes controller development
16
16
17
17
All changes must be made in a feature or fix branch. Open a pull request to merge changes into `main` after review.
18
18
19
-
## CRITICAL: E2e Test Policy
20
-
21
-
**ALL e2e test failures MUST be debugged and fixed before handing off to Code Review — no exceptions.**
22
-
23
-
- Run the full `make test-e2e` suite for every affected service, not just tests you believe are related to your changes
24
-
- If any test fails, you MUST investigate and fix it, even if the failure appears unrelated to your change — code changes can have sweeping, non-obvious side effects and you must never assume a failure is pre-existing or out of scope
25
-
- Do NOT declare a test "pre-existing" and skip it — prove it was already failing on the base branch before dismissing it, and even then, fix it if you can
26
-
- Do NOT hand off to Code Review with any failing tests; a green test suite is a hard gate
27
-
28
-
## Critical: Documentation Agent Handoff
29
-
You **MUST** hand off to the OpenDepot Documentation agent after Code Review approval AND Security Review approval with a summary of all changes that require documentation updates. This ensures the docs stay up to date with code changes.
30
-
31
-
Failing to hand off to the Documentation agent risks leaving the docs outdated, which can cause confusion for users and developers alike. Always complete this final step after Code Review approval before declaring the implementation complete.
32
-
33
19
## CRITICAL: Helm Chart Versioning Policy
34
20
35
21
-**Chart-only changes:**
@@ -44,8 +30,8 @@ Failing to hand off to the Documentation agent risks leaving the docs outdated,
44
30
## Starting Point
45
31
46
32
Before writing any code:
47
-
1. Check `.session-memory/plan.md` with the memory tool — if a plan exists from the planner agent, follow it precisely
48
-
2. If no plan exists, research the relevant code yourself before beginning
33
+
1. Check for the `plan.md` with the memory tool — if a plan exists from the planner agent, follow it precisely
34
+
2. If no plan exists, ask the user for the plan.
49
35
3. Build a todo list of all implementation steps and track progress
50
36
51
37
## Coding Conventions
@@ -122,7 +108,6 @@ Follow these patterns exactly as they exist in the codebase:
122
108
- Tests use Ginkgo v2 (`Describe`, `Context`, `It`, `BeforeEach`, `AfterEach`)
123
109
- Assertions use Gomega (`Expect(...).To(...)`, `Eventually(...).Should(...)`)
124
110
- E2e tests live at `services/<name>/test/e2e/e2e_test.go`
125
-
- Before running `make test-e2e`, verify `services/<name>/hack/boilerplate.go.txt` exists — if missing, copy it from `api/v1alpha1/hack/boilerplate.go.txt`. Its absence causes `make generate` to fail with a misleading error before any tests run.
126
111
127
112
**Helm chart** (`chart/opendepot/`):
128
113
- CRD manifests live in `chart/opendepot/crds/` — regenerate with `make manifests` in the affected service, the make command will place them in the correct location
@@ -135,37 +120,23 @@ Follow these patterns exactly as they exist in the codebase:
135
120
**You must satisfy ALL of these before declaring implementation complete:**
136
121
137
122
1.**E2e tests updated** — If the change affects controller behavior, CRD fields, or API responses, update `services/<name>/test/e2e/e2e_test.go` with appropriate test coverage for the new behavior
138
-
2.**Full e2e suite passes** — Run `make test-e2e` in the affected service directory (e.g., `cd services/version && make test-e2e`). This spins up a Kind cluster; ensure Docker is running. Every test in the suite must pass — not just tests you believe are related to your change
139
-
3.**All failures debugged and fixed** — If any test fails for any reason, debug and fix it. Do not skip failures or declare them out of scope. See the CRITICAL E2e Test Policy above
140
-
4.**No regressions** — All previously passing tests must still pass
141
-
5.**Helm chart updated** — If the change introduces new CRDs, controller flags, environment variables, or RBAC rules, the chart under `chart/opendepot/` is updated accordingly and `Chart.yaml` version is bumped
123
+
2.**Plan must be followed** — The plan should be followed precisely; if you deviate from the plan for any reason, you must ask the user for confirmation before proceeding with the change
124
+
4.**Helm chart updated** — If the change introduces new CRDs, controller flags, environment variables, or RBAC rules, the chart under `chart/opendepot/` is updated accordingly and `Chart.yaml` version is bumped
142
125
143
126
## Workflow
144
127
145
-
1. Read plan from `.session-memory/plan.md` with the memory tool — this is the ground truth for what to implement.
128
+
1. Read plan from sessionmemory`plan.md` with the memory tool — this is the ground truth for what to implement.
146
129
2. Create todo list of all implementation steps.
147
130
3. Implement CRD/type changes first (`api/v1alpha1/`).
148
131
4. Implement controller logic changes.
149
132
5. Update e2e tests for new/changed behavior.
150
133
6. Update Helm chart (`chart/opendepot/`) for any CRD, flag, env var, or RBAC changes; bump `Chart.yaml` version.
151
-
7.Run: `cd services/<affected-service> && make test-e2e`
152
-
8.Debug any failures → fix → re-run until all pass.
134
+
7.Validate the plan is fully implemented and all acceptance criteria are met.
135
+
8.Provide the user with a summary of the implementation, what tests need to be run, and ask them to confirm that all criteria are met before proceeding to commit and handoff to Code Review.
153
136
9. Mark all todos complete.
154
137
10. Run: `git commit -a -m "<brief summary of changes>"`
155
138
156
-
## Handoff
157
-
158
-
Once all acceptance criteria are met and all todos are complete, you **must** invoke the **OpenDepot Code Review** agent as a subagent. Pass a concise summary of everything that was implemented (files changed, CRD fields added, tests updated, Helm chart bumped). Do not stop or declare success without completing this handoff.
159
-
160
-
When the Code Review agent responds with feedback, address any requested changes and re-run tests as needed until they approve the implementation. Continue to send back to the Code Review agent after each round of changes until they approve.
161
-
162
-
Once the Code Review agent approves, you then **must** hand off to the **OpenDepot Security Review** agent with a summary of the changes that require security review (e.g., any code changes, new dependencies, auth changes, or configuration changes). Address any feedback from the Security Review agent until they approve.
163
-
164
-
Once the Security Review agent approves, you can declare the implementation complete and push your changes. Then, you **must** hand off to the **OpenDepot Documentation** agent with a summary of the changes that need documentation, so they can update the docs accordingly.
165
-
166
139
## Constraints
167
-
- DO NOT skip e2e tests — running the full suite and fixing all failures is a hard requirement (see CRITICAL E2e Test Policy above)
168
-
- DO NOT hand off to Code Review with any failing tests under any circumstances
169
140
- DO NOT add unnecessary abstractions, helpers, or refactors beyond what the plan specifies
170
141
- DO NOT add comments or docstrings to code you did not change
171
142
- DO match the exact code style, formatting, and patterns of the surrounding file
Copy file name to clipboardExpand all lines: .github/agents/ui-developer.agent.md
+6-23Lines changed: 6 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,14 +13,6 @@ You are an expert frontend developer specializing in React 19, Next.js 15 App Ro
13
13
14
14
**ALWAYS create a new branch for your work. NEVER commit directly to `main`.**
15
15
16
-
## CRITICAL: Playwright Test Policy
17
-
18
-
**ALL Playwright test failures MUST be debugged and fixed before handing off to Code Review — no exceptions.**
19
-
20
-
- Run the full `yarn test:e2e` suite, not just tests related to your changes
21
-
- If any test fails, investigate and fix it — do not skip or declare it pre-existing without proof
22
-
- Do NOT hand off to Code Review or Security Review with any failing tests
23
-
24
16
## CRITICAL: Server API Contract
25
17
26
18
When adding a new UI feature that requires a new server endpoint:
@@ -107,46 +99,37 @@ services/ui/
107
99
- Tests use `PLAYWRIGHT_BASE_URL=http://localhost:3000`
108
100
- Dev server must be running before tests: `SESSION_PASSWORD="dev-password-32-chars-or-longer!!" yarn dev`
109
101
- Tests live in `test/e2e/` — add coverage for any new page or significant interaction
110
-
- Run tests: `PLAYWRIGHT_BASE_URL=http://localhost:3000 yarn test:e2e`
111
102
112
103
## Starting Point
113
104
114
105
Before writing any code:
115
-
1. Check `.session-memory/plan.md` with the memory tool — if a plan exists, follow it precisely
116
-
2. If no plan exists, read the relevant existing components and pages before beginning
106
+
1. Check `plan.md` with the memory tool — if a plan exists, follow it precisely
107
+
2. If no plan exists, request the plan from the user. Never make up your own plan. Always follow the user's plan exactly as given, even if you think of a more efficient way to do it. If you have questions about the plan, ask the user for clarification before proceeding.
117
108
3. Build a todo list of all implementation steps and track progress
118
109
119
110
## Acceptance Criteria
120
111
121
112
Before handing off to Code Review:
122
113
123
114
1.**`yarn build` passes** — zero TypeScript errors, no missing imports
124
-
2.**All Playwright tests pass** — run the full suite; fix every failure
125
115
3.**Brand palette respected** — no new colours outside the approved palette
126
116
4.**No regressions** — existing pages still render; auth flow still works
127
117
5.**Responsive** — test at `xs` (375 px) and `sm+` (768 px+) breakpoints using the browser tools
128
118
129
119
## Workflow
130
120
131
-
1. Read plan from `.session-memory/plan.md`
121
+
1. Read plan from `plan.md`
132
122
2. Create a todo list
133
123
3. Implement component / page changes
134
124
4. Update `src/lib/api.ts` types if server response shape changed
135
125
5. Add or update Playwright tests
136
126
6. Run `yarn build` — fix all errors
137
-
7. Start dev server, run `yarn test:e2e` — fix all failures
138
-
8. Commit: `git commit -a -m "<type>(ui): <summary>"`
139
-
9. Hand off to **OpenDepot Code Review** with a summary of all changes
140
-
141
-
## Handoff
142
-
143
-
Once all acceptance criteria are met, invoke **OpenDepot Code Review** as a subagent with a concise summary of every file changed, component added, and test updated.
144
-
145
-
After Code Review approval, invoke **OpenDepot Documentation** with a summary of any user-facing changes, new pages, new configuration variables, or API changes that need to be documented.
127
+
7. Commit: `git commit -a -m "<type>(ui): <summary>"`
128
+
8. Hand off to user with a summary of the changes and any notes for the Code Review agent (e.g., "Requires new server endpoint at /opendepot/ui/v1/new-endpoint, response shape is { ... }")
146
129
147
130
## Constraints
148
131
149
-
- DO NOT modify Go server code — note any required server changes in the Code Review handoff instead
132
+
- DO NOT modify Go server code — note any required server changes in the Code Review handoff summary instead
150
133
- DO NOT modify Helm chart templates — flag them for the Developer agent
151
134
- DO NOT introduce new npm dependencies without justification; prefer MUI and built-in browser APIs
152
135
- DO NOT use `any` TypeScript type — define proper interfaces in `src/lib/api.ts`
Copy file name to clipboardExpand all lines: docs/architecture.md
+10-2Lines changed: 10 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,15 +7,15 @@ tags:
7
7
8
8
# Architecture
9
9
10
-
OpenDepot consists of four Kubernetes controllers, a server, and an optional UI frontend, all deployed via the Helm chart.
10
+
OpenDepot consists of four Kubernetes controllers, a server, a bundled Valkey stats store, and an optional UI frontend, all deployed via the Helm chart.
11
11
12
12
## Event Flow
13
13
14
14
1.**Depot controller** watches `Depot` resources, queries the GitHub Releases API for modules matching version constraints, queries the HashiCorp Releases API for providers matching version constraints, and creates or updates `Module` and `Provider` resources
15
15
2.**Module controller** watches `Module` resources, creates a `Version` resource for each version listed in `spec.versions`, generates unique filenames, and tracks the latest version
16
16
3.**Provider controller** watches `Provider` resources, creates a `Version` resource for each version and OS/architecture combination in `spec.versions`, and tracks the latest version
17
17
4.**Version controller** watches `Version` resources, fetches module source from GitHub or provider binaries via the OpenTofu registry download API, computes SHA256 checksums, generates GPG signatures (for providers), and uploads archives to the configured storage backend
18
-
5.**Server** handles OpenTofu/Terraform read requests, queries Kubernetes for `Module`, `Provider`, `Version`, and (when OIDC is enabled) `GroupBinding` resources, and serves or redirects artifact downloads
18
+
5.**Server** handles OpenTofu/Terraform read requests, queries Kubernetes for `Module`, `Provider`, `Version`, and (when OIDC is enabled) `GroupBinding` resources, serves or redirects artifact downloads, and records download events in the bundled Valkey stats store
19
19
6.**Registry Explorer UI** (optional, `ui.enabled: true`) — a Next.js frontend with an NGINX sidecar that provides a browsable registry explorer. NGINX splits traffic between the UI and the server using path-based routing
To prevent unauthenticated users from easily enumerating provider and module artifacts, files are stored with UUID7-based filenames.
132
132
133
+
### Valkey Stats Store
134
+
135
+
A [Valkey](https://valkey.io/) (Redis-compatible) instance deployed automatically alongside the server via the official `valkey-io/valkey-helm` subchart. The server records download events in Valkey using a scoped key namespace (`stats:*`) and reads aggregate counts for the Registry Explorer Stats page.
136
+
137
+
Valkey runs as a StatefulSet with a PVC for persistence by default (`valkey.dataStorage.enabled: true`). Disable persistence for local development or ephemeral environments where no StorageClass is available.
138
+
139
+
Optional ACL password authentication can be enabled via `valkey.auth.enabled: true`. When enabled, the server reads the password from the `OPENDEPOT_VALKEY_PASSWORD` environment variable, injected via a Kubernetes `secretKeyRef`. See [Valkey Stats Store](../getting-started/installation.md#valkey-stats-store) for the full configuration reference.
140
+
133
141
### Registry Explorer UI
134
142
135
143
An optional Next.js frontend deployed when `ui.enabled: true`. The UI pod runs two processes:
0 commit comments