The Airgap Native Package Manager for Kubernetes
This report summarizes scanner evidence for zarf-dev/zarf, a Go project with 2,079 GitHub stars. SynthScan examined 170,705 lines of code across 1449 source files, recording 78 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 0.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 66 finding(s).
Are imports declared and package/API names verified? 8 finding(s).
Are wrappers, guards, and repeated structures necessary? 5 finding(s).
Which changes need focused human review? 78 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 78 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | adr/0020-package-sources.md | 41 | // | COMMENT |
| LOW | hack/check-vex-orphans.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | hack/empty-config.toml | 1 | # This is here so it can be used during certain Zarf commands | COMMENT |
| LOW | examples/longhorn/values.yaml | 181 | nodeSelector: {} | COMMENT |
| LOW | examples/longhorn/values.yaml | 201 | nodeSelector: {} | COMMENT |
| LOW | examples/longhorn/values.yaml | 221 | # label-key2: "label-value2" | COMMENT |
| LOW | examples/longhorn/values.yaml | 241 | priorityClass: ~ | COMMENT |
| LOW | examples/longhorn/values.yaml | 261 | # - key: "key" | COMMENT |
| LOW | examples/longhorn/values.yaml | 281 | ## Set this to true in order to enable TLS on the ingress record | COMMENT |
| LOW | examples/longhorn/values.yaml | 301 | ## If tls is set to true, annotation ingress.kubernetes.io/secure-backends: "true" will automatically be set | COMMENT |
| LOW | packages/init/v1alpha1/zarf-registry/chart/values.yaml | 101 | # caBundle: | | COMMENT |
| LOW | site/src/env.d.ts | 1 | /// <reference path="../.astro/types.d.ts" /> | COMMENT |
| LOW | site/src/plugins/remark-link-rewrite.ts | 1 | // Remark plugin for archived docs staged under a version subtree | COMMENT |
| LOW | src/cmd/tools_trustedroot.go | 21 | Short: lang.CmdToolsTrustedRootShort, | COMMENT |
| LOW | src/cmd/tools_trustedroot_test.go | 21 | "CTFE": "CTFESpecs", | COMMENT |
| LOW | …/packages/42-values/schema-merge/override-invalid.yaml | 1 | # replicas: 7 violates the parent schema's maximum of 5. | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 221 | require.NoError(t, err, stdOut, stdErr) | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 241 | // | | |-- 4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 301 | for _, e := range entries { | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 321 | // | | | `-- 1 | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 341 | // | | | | `-- README.md | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 361 | // | | |-- coffee-ipsum.txt | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 381 | // | | `-- README.md | COMMENT |
| LOW | src/test/e2e/05_tarball_test.go | 401 | // | | |-- d37d27b92cce4fb1383d5fbe32540382ea3d9662c7be3555f5a0f6a044099e1b | COMMENT |
| LOW | src/internal/agent/hooks/common_test.go | 141 | require.Equal(t, tt.expected, mediaType) | COMMENT |
| LOW | src/internal/api/v1beta1/roundtrip_test.go | 401 | // - package.apiVersion and package.kind are canonicalized to the target API. | COMMENT |
| LOW | src/internal/api/v1alpha1/roundtrip_test.go | 301 | } | COMMENT |
| LOW | src/internal/api/v1alpha1/migrate.go | 81 | // migrateScriptsToActions converts the deprecated scripts to the new actions | COMMENT |
| LOW | src/api/v1alpha1/package.go | 241 | // Any migrations that have been run on this package. | COMMENT |
| LOW | src/api/v1alpha1/component.go | 281 | KustomizeAllowAnyDirectory bool `json:"kustomizeAllowAnyDirectory,omitempty"` | COMMENT |
| LOW | src/pkg/archive/archive.go | 381 | // | COMMENT |
| LOW | src/pkg/value/testdata/valid/empty.yaml | 1 | # Empty file | COMMENT |
| LOW | src/pkg/template/template.go | 261 | // This is designed to be called from a template. | COMMENT |
| LOW | src/pkg/template/template.go | 301 | // fromYAML converts a YAML document into a map[string]interface{}. | COMMENT |
| LOW | src/pkg/template/template.go | 321 | // YAML documents. Additionally, because its intended use is within templates | COMMENT |
| LOW | src/pkg/template/template.go | 401 | // JSON documents. Additionally, because its intended use is within templates | COMMENT |
| LOW | …kager/testdata/find-images/helm-chart/chart/Chart.yaml | 1 | apiVersion: v2 | COMMENT |
| LOW | …kager/testdata/find-images/helm-chart/chart/Chart.yaml | 21 | # incremented each time you make changes to the application. Versions are not expected to | COMMENT |
| LOW | src/pkg/feature/feature.go | 61 | // GA features have been fully released and are available for production usage. | COMMENT |
| LOW | src/pkg/ocischeme/ocischeme.go | 1 | // SPDX-License-Identifier: Apache-2.0 | COMMENT |
| LOW | src/pkg/ocischeme/ocischeme.go | 41 | // http.ErrSchemeMismatch. A caller-supplied ProbeOptions.Transport that retries | COMMENT |
| LOW | src/pkg/ocischeme/ocischeme.go | 181 | // server speaking plaintext HTTP on that port: crypto/tls first surfaces this as a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/release.yml | 192 | # Create the GitHub release notes, upload artifact backups to S3, publish homebrew recipe | COMMENT |
| MEDIUM | .github/workflows/publish-application-packages.yml | 38 | # Create the dos-games package with the cosign signature, publish to ghcr and copy the tags to allow 'uname -m' | COMMENT |
| MEDIUM | src/test/packages/36-health-check-crd/zarf.yaml | 26 | # Create a CR, | COMMENT |
| MEDIUM | src/pkg/packager/testdata/load-package/split/zarf.yaml | 9 | # This file is autogenerated by the test | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/pkg/packager/generate_schema.go | 66 | // Step 1: Copy package defaults | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 72 | // Step 2: Collect chart value schemas | COMMENT |
| LOW | src/pkg/packager/generate_schema.go | 182 | // Step 3: Merge inferred and chart schemas | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 199 | // Step 4: Merge and reconcile any existing schema | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 206 | // Step 5: Save the resulting schema when requested. | COMMENT |
| LOW | src/pkg/packager/load/import.go | 552 | // kustomizations can use non-standard urls, so we need to check if the composed path exists on the local filesystem | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/pkg/packager/generate_schema.go | 66 | // Step 1: Copy package defaults | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 72 | // Step 2: Collect chart value schemas | COMMENT |
| LOW | src/pkg/packager/generate_schema.go | 182 | // Step 3: Merge inferred and chart schemas | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 199 | // Step 4: Merge and reconcile any existing schema | COMMENT |
| LOW⚡ | src/pkg/packager/generate_schema.go | 206 | // Step 5: Save the resulting schema when requested. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/nightly-scan-cve.yml | 33 | ## ── Tier 1: govulncheck ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/nightly-scan-cve.yml | 47 | ## ── Tier 2: grype on the built binary ─────────────────────────────────── | COMMENT |
| MEDIUM | site/public/tutorials/k3s_init.html | 52 | <b style="color:#555555;"></b>─────────────────────────────────────────────────────────────────────────────────────── | CODE |
| MEDIUM | site/public/tutorials/k3s_init.html | 95 | <b style="color:#555555;"></b>─────────────────────────────────────────────────────────────────────────────────────── | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/cmd/package_test.go | 952 | identity: "user@example.com", | CODE |
| LOW⚡ | src/cmd/package_test.go | 962 | identity: "user@example.com", | CODE |
| LOW⚡ | src/cmd/package_test.go | 968 | identity: "user@example.com", | CODE |
| LOW | src/internal/packager/helm/post-render_test.go | 482 | cleaned = regexp.MustCompile(`{{[^}]*}}`).ReplaceAllString(cleaned, "placeholder") | CODE |
| LOW | src/pkg/logger/logger_test.go | 122 | Format: "^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ lorem ipsum dolor sit amet 243897 )*&($#", | CODE |
| LOW | src/pkg/logger/logger_test.go | 122 | Format: "^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ lorem ipsum dolor sit amet 243897 )*&($#", | CODE |
| LOW | src/pkg/packager/layout/package_test.go | 1743 | AggregateChecksum: "placeholder", | CODE |
| LOW | src/pkg/packager/layout/package_test.go | 2111 | AggregateChecksum: "placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | site/package-lock.json | 8753 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| MEDIUM | src/test/common.go | 26 | // ZarfE2ETest Struct holding common fields most of the tests will utilize. | COMMENT |
| MEDIUM | src/pkg/utils/bytes.go | 70 | // NOTE(mkcp): Negative bytes are nonsense, but it's more robust for inputs without erroring. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/init/v1alpha1/gitea/gitea-values.yaml | 24 | # Note that the init script checks to see if the IP & port of the database service is accessible, so make sure you | COMMENT |
| LOW | src/cmd/viper.go | 210 | // Don't forget to read config either from cfgFile or from home directory! | COMMENT |
| MEDIUM | …/packages/23-data-injections/manifests/deployment.yaml | 19 | # The main container can hot-load files from the filesystem, but if your application cannot, this example shows ho | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hack/check-vex-orphans.sh | 14 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/longhorn/values.yaml | 281 | ## Set this to true in order to enable TLS on the ingress record | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | site/src/plugins/remark-link-rewrite.ts | 53 | export function rewriteVersionedAssetImport(spec: string, versionSlug: string): string | null { | CODE |