Spec
docs/design/specs/2026-09-02-codeanalyzer-iac-helm.md in codellm-devkit/.github (design commit 087b9d0).
Summary
Create one typed codeanalyzer-iac backend for the IaC umbrella, with compiled dialect frontends and Helm first. It supports two entry modes: one or more filesystem assets under a stable workspace root, or an existing Neo4j application populated with complete can://artifact/<app>/... source nodes.
The backend progressively enriches the existing source-bearing :Artifact node:
Artifact → IaCArtifact → HelmArtifact → HelmChart | HelmValues | HelmTemplate | ...
It does not replace, re-key, or delete the neutral artifact. Contained Helm semantics and render results use canonical can://iac/... IDs; alternative logical names are first-class aliases.
Affected repositories
codeanalyzer-schema — additive schema-v2 IaC artifact facets, contained node/edge contracts, Neo4j catalog fixtures
- new
codeanalyzer-iac — Go CLI/backend, filesystem and graph ingestion, Helm L1–L3, JSON and Neo4j projection
codellm-devkit docs — support matrix, CLI and graph-query guide
.github — coordinating design and epic
Python/TypeScript/Java analyzers retain their existing responsibilities. Their shared integration point is the neutral artifact ID plus complete source; no language-specific analyzer gains Helm logic.
Locked contract
- One backend for Helm, Terraform/OpenTofu, Ansible, Dockerfile/Compose, Packer, Kubernetes/Kustomize, CloudFormation/SAM, ARM/Bicep, Pulumi/CDKs, Chef/Puppet/Salt, Nomad, Vagrant, and later dialects; only Helm is implemented in this train.
- Existing
:Artifact is the canonical source node. IaC kinds are same-node labels/facets, not replacement nodes.
- One IaC source dialect per artifact; generated/cross-dialect meaning is represented by contained nodes and edges.
- No concrete
IaCEntity catch-all and no generic entities[] bag; each dialect has typed named containment.
- Canonical whole-file IDs remain
can://artifact/...; semantic aliases are :IdentityAlias:IaCAlias nodes with exactly one IAC_ALIAS_OF target.
- Helm API v1/v2, chart metadata, dependencies, values/config keys, value-reference sites, named templates/calls, CRDs, locks, and deterministic diagnostics are typed.
- Every chart gets a deterministic default render. An optional typed
--config artifact adds named profiles and ordered Helm value layers.
- Rendered Kubernetes objects are render-scoped
KubernetesResource nodes targeting stable KubernetesResourceAddress nodes.
- No cluster access, install/upgrade, dependency download, registry access, plugin execution, or secret amplification.
- JSON and Neo4j are projections of one model and must have exact parity. Reconciliation is idempotent and never deletes shared
Artifact, ConfigKey, or Package nodes.
Delivery slices
- Shared IaC contract and conformance fixtures in
codeanalyzer-schema.
codeanalyzer-iac 0.1.0: foundation, both ingestion modes, Helm L1 source model and L2 resolution.
codeanalyzer-iac 0.2.0: typed config artifacts, render profiles, Helm L3 evaluation, Kubernetes outputs.
- User documentation after released behavior exists.
Child issues are filed per pull request, just in time. No SDK facade is in this train.
Definition of done
- The spec is reviewed and any amendment is committed before implementation.
- Shared JSON and Neo4j contracts are generated and validated from one model.
- Filesystem and graph ingestion produce identical IaC facts for the same source set.
- L1 ⊆ L2 ⊆ L3 and repeated runs are deterministic/idempotent.
- Existing foreign labels, properties, edges, and neutral source nodes survive enrichment and eager cleanup.
- Helm source, resolution, render, failure, security, and no-network fixtures pass.
- 0.1.0 and 0.2.0 release slices and the documentation update are complete.
Spec
docs/design/specs/2026-09-02-codeanalyzer-iac-helm.mdincodellm-devkit/.github(design commit087b9d0).Summary
Create one typed
codeanalyzer-iacbackend for the IaC umbrella, with compiled dialect frontends and Helm first. It supports two entry modes: one or more filesystem assets under a stable workspace root, or an existing Neo4j application populated with completecan://artifact/<app>/...source nodes.The backend progressively enriches the existing source-bearing
:Artifactnode:Artifact → IaCArtifact → HelmArtifact → HelmChart | HelmValues | HelmTemplate | ...It does not replace, re-key, or delete the neutral artifact. Contained Helm semantics and render results use canonical
can://iac/...IDs; alternative logical names are first-class aliases.Affected repositories
codeanalyzer-schema— additive schema-v2 IaC artifact facets, contained node/edge contracts, Neo4j catalog fixturescodeanalyzer-iac— Go CLI/backend, filesystem and graph ingestion, Helm L1–L3, JSON and Neo4j projectioncodellm-devkitdocs — support matrix, CLI and graph-query guide.github— coordinating design and epicPython/TypeScript/Java analyzers retain their existing responsibilities. Their shared integration point is the neutral artifact ID plus complete source; no language-specific analyzer gains Helm logic.
Locked contract
:Artifactis the canonical source node. IaC kinds are same-node labels/facets, not replacement nodes.IaCEntitycatch-all and no genericentities[]bag; each dialect has typed named containment.can://artifact/...; semantic aliases are:IdentityAlias:IaCAliasnodes with exactly oneIAC_ALIAS_OFtarget.--configartifact adds named profiles and ordered Helm value layers.KubernetesResourcenodes targeting stableKubernetesResourceAddressnodes.Artifact,ConfigKey, orPackagenodes.Delivery slices
codeanalyzer-schema.codeanalyzer-iac0.1.0: foundation, both ingestion modes, Helm L1 source model and L2 resolution.codeanalyzer-iac0.2.0: typed config artifacts, render profiles, Helm L3 evaluation, Kubernetes outputs.Child issues are filed per pull request, just in time. No SDK facade is in this train.
Definition of done