Platform Chart (charts/lfx-platform)
June 22, 2026 · View on GitHub
This file documents the platform/umbrella chart composition that this repo
owns. For local bring-up commands see local-platform-getting-started.md.
For service-local chart conventions see service-chart-patterns.md.
Chart composition
charts/lfx-platform/ is an umbrella chart that aggregates platform
infrastructure subcharts and pins LFX service subcharts to their OCI chart
versions. See Chart.yaml for the authoritative list. As of writing it
includes:
- Infrastructure subcharts:
traefik(Gateway API ingress)openfga+fga-operatorheimdall(auth/authz middleware)nats+nack(JetStream + KV operator)opensearchmailpit,authelia(local-only auth surface)external-secretscert-manager+trust-manager
- LFX service subcharts pinned to GHCR OCI versions:
lfx-v2-query-servicelfx-v2-project-servicelfx-v2-fga-synclfx-v2-access-checklfx-v2-indexer-servicelfx-v2-committee-servicelfx-v2-meeting-servicelfx-v2-mailing-list-servicelfx-v2-auth-servicelfx-v2-voting-servicelfx-v2-survey-servicelfx-v2-email-servicelfx-v2-invite-servicelfx-v1-sync-helperlfx-v2-forwards-servicelfx-v2-member-servicelfx-v2-newsletter-servicelfx-v2-persona-service
Service subchart versions in Chart.yaml are platform-side defaults.
Deployed dev/staging/prod chart pins are owned by lfx-v2-argocd's
ApplicationSets, not by this chart.
Repo-owned templates
This repo also ships templates rendered directly by the umbrella chart:
charts/lfx-platform/templates/
├── gateway.yaml # Shared Gateway API Gateway
├── openfga/
│ ├── model.yaml # Shared OpenFGA authorization model
│ └── db-secrets.yaml
├── heimdall/ # Shared Heimdall middleware + signer cert/bundle
├── authelia/ # Local-only auth
├── mailpit/ # Local-only email capture
├── swagger_ui/ # Aggregated OpenAPI viewer (incl. its RuleSet)
└── whoami/ # Diagnostic (incl. its RuleSet)
The OpenFGA model is the single most important shared template: every
service's RuleSet openfga_check calls authorize against the types,
relations, and inheritance defined in
charts/lfx-platform/files/model.fga (injected into the Kubernetes
AuthorizationModelRequest by charts/lfx-platform/templates/openfga/model.yaml).
OpenFGA model: worked edit
Scenario: add a new relation auditor to type committee.
-
Edit
charts/lfx-platform/files/model.fgaand add the relation (including any inheritance fromprojectper the existing convention). Then bump the version incharts/lfx-platform/templates/openfga/model.yaml. -
Update
@fgadoc:jtbdannotations on the new relation so the rendered permissions table reflects the actual job-to-be-done. -
Re-render
PERMISSIONS.md:# follow .agents/skills/render-permissions/SKILL.md -
If a service emits or consumes this relation, update that service's
ruleset.yaml(object: "committee:..."+relation: auditor) and its FGA-sync message shape. Coordinate withlfx-v2-fga-syncif the generic handler expectations change, and withlfx-v2-query-serviceif query-time filtering changes. -
Re-run
helm dependency update charts/lfx-platformonly if a subchart version changed — model edits alone do not require it.
helm dependency update failure modes
Common failures and how to read them:
Error: no repository definition for ...— a subchart repo isn't registered in your local Helm config. Either add it withhelm repo addusing the URL fromChart.yaml, or rely on the OCI/HTTPS URLs already inlined in dependencyrepository:entries (Helm 3.8+ supports both).failed to download ... from oci://— usually a transient registry blip or, for private images, missinghelm registry login ghcr.io. Retry after login.version "~X.Y.Z" not found— the subchart was yanked or the upstream range no longer matches. Bump the constraint inChart.yamland re-run.Chart.lockdrift — if multiple developers rundependency updatein parallel and commit lock files, expect merge conflicts. Resolve by re-runninghelm dependency update charts/lfx-platformand committing the regeneratedChart.lock.- Service subchart not pulling — check the
condition:flag inChart.yamlagainstvalues.yaml/ your local override. Ifenabledis false the subchart is skipped silently.
Worked example: editing a service-subchart pin
Scenario: bump the platform's default lfx-v2-meeting-service chart pin
from ~0.8.0 to ~0.9.0.
-
Edit
charts/lfx-platform/Chart.yaml:- name: lfx-v2-meeting-service repository: oci://ghcr.io/linuxfoundation/lfx-v2-meeting-service/chart version: ~0.9.0 condition: lfx-v2-meeting-service.enabled -
Run
helm dependency update charts/lfx-platform. ConfirmChart.lockupdates andcharts/lfx-platform/charts/lfx-v2-meeting-service-*.tgzrefreshes. -
Re-test local install per
local-platform-getting-started.md. -
If staging/prod should follow, open a matching PR in
lfx-v2-argocdto bump the chart pin inapps/<env>/lfx-v2-applications.yaml. This repo only changes the local/default; deployed environments are not affected byChart.yamlchanges alone.
Validation commands
Use the repo's existing workflow docs (.github/workflows/) and this
docs/ guidance as the source of truth. Common quick checks:
helm dependency update charts/lfx-platform
helm template lfx-platform charts/lfx-platform --values charts/lfx-platform/values.local.yaml | less
helm lint charts/lfx-platform
Do not invent additional Helm or cluster commands from central guidance.
Boundary
This repo owns the shared platform chart and the shared OpenFGA model.
Service-local routes, env vars, probes, RuleSets, KV buckets, and
ExternalSecret template shape stay in the owning service repo. Deployed
environment values, chart pins, image tags, and ApplicationSets stay in
lfx-v2-argocd. See
/lfx-skills:lfx and its deployment-routing.md reference
for the cross-repo split.