Skip to content

chore(release): promote dev/v2.0 to main for v2.1.0 - #426

Closed
scttbnsn wants to merge 464 commits into
mainfrom
dev/v2.0
Closed

chore(release): promote dev/v2.0 to main for v2.1.0#426
scttbnsn wants to merge 464 commits into
mainfrom
dev/v2.0

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Promotes the v2.1.0 release line to main. Everything on dev/v2.0 since v2.0.0 landed through reviewed PRs: the libpod write-inspection and owner-isolation fail-closed chain (#384, #386, #389, #390, #395, #394), the docs alignment pass (#422, #423), the read-side hardening from the adversarial review (#424), and the release metadata (#425).

v2.1.0-rc.1 is cut from the same tree so the tri-tool conformance gate can run against a published image before this merges. Proxy behaviour is identical between rc.1 and the GA tag; the GA delta is release metadata only.

Merge as a merge commit, not a squash, so the reconcile ancestry holds.

fix(upstream): deprecate unverified TLS connections
fix(configs): stop three presets opting into read exfiltration
google.golang.org/grpc v1.82.1 is vulnerable to heap exhaustion from
HTTP/2 DATA frame fragmentation, fixed upstream in 1.83.1. The pin is an
indirect requirement reached through sigstore-go's Rekor client on the
opt-in image_trust path, never the core proxy path.

Grype matches on module version rather than reachability, so the finding
failed both the "Security: Grype & Govulncheck" job and "CI: Verify"'s
Docker Build on every branch that ran them, including main at v2.0.0.
That is what was reddening Renovate PR #398, not anything the PR changed.

govulncheck reports zero reachable vulnerabilities either side of the
bump. go build, go vet and go test ./... are green on v1.83.2.
Four independent breaks, all in workflows that only run on a schedule, so
none of them gates a PR and all of them had been red for weeks.

- ci(quality): run Gremlins from the module root. The module moved to the
  repo root and this workflow kept working-directory: app plus
  ./internal/<pkg> package paths. gremlins unleash resolves the module
  from the cwd rather than walking up for go.mod, so all six shards failed
  in ~1s with "not in a Go module". Reproduced locally: ./internal/filter
  does not resolve from the root, ./app/internal/filter does.
- ci(quality): let the badge job take its own skip-and-warn path. The step
  inherits -e from GitHub's default bash -e {0}, and set -uo pipefail does
  not clear it, so an unparseable report aborted the step before the
  warn-and-continue branch below could run. || true on both assignments
  also fixes a latent pipefail + head -1 SIGPIPE case that returns 141
  from a pipeline which had already parsed the value.
- ci(quality): anchor the Engine API scrape to the version heading. The
  bare v1.NN match picks up SVG path coordinates (v1.875, v1.125) from the
  page's inline icons, which is why the 2026-09-01 run demanded a bump to
  Engine API 1.875. Verified against the live page: the anchored pattern
  yields 1.55, matching the existing pin. A three-digit minor now fails
  loudly instead of becoming an alert.
- ci(security): pin the ZAP baseline job to ubuntu-24.04, the last
  ubuntu-latest of 38 jobs.

The pinned ceiling in app/testdata/docker-api/max-supported-version.txt is
correct at 1.55 and is deliberately not touched.
zizmor started reporting two self-repository findings on release-cut.yml
and release-from-tag.yml, which blocks every push from the repo. Neither
workflow changed; the audit is new.

Two separate problems fell out of chasing it.

- ci(quality): pass --config to zizmor explicitly. Auto-discovery resolves
  the config relative to the repository root, and in a linked worktree that
  resolves to the main checkout. A push from .claude/worktrees/<name> was
  auditing the branch's workflows against the main checkout's
  .github/zizmor.yml, so editing the config on a branch had no effect on
  that branch's own pre-push run. This repo keeps four worktrees, so that
  is the normal case, not an edge one.
- ci(quality): ignore self-repository for the two release workflows.
  zizmor wants `uses: $/.github/actions/verify-ci-success` over the
  workspace-relative form, and it is right: GitHub shipped $/ on
  2026-07-30, it resolves to the running commit, and both call sites are
  already checked out at that ref, so the swap is a behavioural no-op. But
  actionlint 1.7.12, the current release and the one behind the pinned
  raven-actions/actionlint gate, rejects it with "invalid format because
  ref is missing". Verified both directions locally: applying the fix
  makes zizmor clean and actionlint fail, reverting it flips them back.
  Reding a required check to satisfy a low-severity style preference is
  the wrong trade, so it waits for actionlint support. The condition to
  revisit is written next to the ignore.

zizmor is a local pre-push hook only; no CI job runs it.
Prerequisite carried from the CI-quality-fixes branch so this branch can
push at all. zizmor 1.30.0's new self-repository audit reports two low
findings on release-cut.yml and release-from-tag.yml, exits 12, and refuses
every push from the repo. Neither workflow changed.

- Pass --config to zizmor explicitly. Auto-discovery resolves the config
  relative to the repository root, which in a linked worktree is the main
  checkout, so a push from .claude/worktrees/<name> audits the branch's
  workflows against a different branch's config.
- Ignore self-repository for the two release workflows. zizmor's suggested
  `uses: $/...` is officially correct and behaviourally identical here, but
  actionlint 1.7.12 rejects it as "invalid format because ref is missing"
  and actionlint is a required check. The revisit condition is recorded
  next to the ignore.

Duplicated deliberately: this same commit is on
fix/red-scheduled-quality-workflows, which carries the CHANGELOG entry for
it. Whichever lands first, the other rebases to nothing.
- fix(ci): match the exact `v1.NN API changes` heading, not any
  `v1.NN API` / `API v1.NN` pair, so meta tags such as
  `<meta content="API v1.125">` can't outsort the real version
- fix(ci): `|| true` on the extraction pipeline so a no-hit scrape
  reaches the step's own ::error diagnostic instead of aborting
  under `set -e` before it, the same bug class fixed in the badge
  job on this branch
- fix(ci): reject minors >= 100 rather than > 999; two-digit minors
  are the only plausible shape and a three-digit one is markup
- chore(ci): scope the zizmor self-repository ignore to the two
  `uses:` lines (release-cut.yml:61, release-from-tag.yml:155) so
  any other workspace-relative reference in either file still fires
The monthly Gremlins matrix hardcoded filter, proxy, config, httpjson,
logging and cmd, so the 97.8% badge described a sixth of app/internal.
The matrix now comes from scripts/ci/mutation-matrix.sh at run time:
every package with both source and tests, minus the testcert/testhelp
fixtures, 34 legs today. The badge job reads its expected-report count
from the same discover step, so the count and the matrix cannot drift,
and the sync test runs the script instead of counting YAML entries.

Matrix and package values move into env so the run scripts carry no
inline expressions. The badge job summary gains a per-package
killed/lived/efficacy table. Pushing a mutation/* branch runs this file
from that branch, which workflow_dispatch cannot do until the file is
on main; badge commits stay gated to the default branch. max-parallel
matches the nightly fuzz ceiling so a leg is never lost to runner
concurrency, and the concurrency group includes the ref so a branch run
cannot cancel the monthly one.

- ci(quality): derive the Gremlins matrix from a discover job
- test(ci): check discover wiring and run the matrix script
- docs(changelog): record the widened matrix and the expected score drop
Prerequisite carried from the CI-quality-fixes branch so this branch can
push at all. zizmor 1.30.0's new self-repository audit reports two low
findings on release-cut.yml and release-from-tag.yml, exits 12, and refuses
every push from the repo. Neither workflow changed.

- Pass --config to zizmor explicitly. Auto-discovery resolves the config
  relative to the repository root, which in a linked worktree is the main
  checkout, so a push from .claude/worktrees/<name> audits the branch's
  workflows against a different branch's config.
- Ignore self-repository for the two release workflows. zizmor's suggested
  `uses: $/...` is officially correct and behaviourally identical here, but
  actionlint 1.7.12 rejects it as "invalid format because ref is missing"
  and actionlint is a required check. The revisit condition is recorded
  next to the ignore.

Duplicated deliberately: this same commit is on
fix/red-scheduled-quality-workflows, which carries the CHANGELOG entry for
it. Whichever lands first, the other rebases to nothing.

(cherry picked from commit 7f330ec)
Run 33650478849 expanded zero Gremlins legs: the script's JSON carried a
top-level count beside include, and strategy.matrix reads any key other
than include/exclude as a dimension, so the job failed to expand and the
badge step saw 0 of 34 reports. The script now emits only include, the
discover step derives count from its length, and the sync test asserts
the matrix JSON has exactly one key.
… migration pages

G6: registry allowlist doc no longer claims push is checked, only pull.
G11: presets.mdx documents Homarr's undocumented removeAll gap and opt-in snippet.
G18: migration.mdx notes ALLOW_* works independent of POST, unlike real Tecnativa.
G20: configuration.mdx gets a Multiple Listeners section for listeners/allowed_profiles/mount_on.
G21: configuration.mdx corrects socket_mode to cover both 0600 and 0660.
G22: admin.mdx corrects the disabled-admin response from 404 to default-deny 403.
G23: configuration.mdx lists all ten granular ALLOW_* compat vars, not five.
G24: configuration.mdx documents the five serve override flags next to Precedence.
G25: configuration.mdx's audit-log sample gets the four trace-correlation fields.
G26: migration.mdx's CetusGuard table gets the backend-TLS row and repeated -frontend-addr note.
G27: migration.mdx's CetusGuard section notes the TLS 1.2->1.3 cutover requirement.
G38: CLAUDE.md scopes the stdlib-only claim to execution, not package linkage.
G41: migration.mdx fixes the config path and names the granular endpoint-config gates.
G42: presets.mdx corrects the drydock preset's Denies/Allows lines.
G43: drydock-with-compose.yaml and presets.mdx document the post_start exec denial.
G45: drydock.yaml's distribution-grant comment is reattributed away from drydock.
fix(ownership): deny unresolved resource targets
fix(responsefilter): unify response JSON encoding
fix(filter): guard container process-list reads
… a JSON array

flushFiltered forwarded any 2xx body it could not open as a JSON array
verbatim, so a JSON object, string, null, or an HTML error page reached the
client with none of its contents ever checked against the name/image pattern
axes. The one shape the pattern filter cannot walk is the one it was never
able to prove safe, which is the wrong direction to fail in.

It now returns an error the way flushSystemDataUsage already does for an
undecodable /system/df body, and filterResponseThroughWriter turns that into
the same generic 502 under visibility_policy_lookup_failed, regardless of
rollout mode.

The response filter is also gated to GET, matching the GET /system/df
interception. A HEAD carries no body, so intercepting one would hand the new
decode guard an empty buffer and answer 502 for a request that has nothing
to filter.
…odies

Both response filters that rewrite a body set Content-Length and stopped
there, so the daemon's ETag, Content-Encoding, Content-Range, Digest,
Last-Modified and Trailer announcement went out describing the upstream body
the filter had just replaced. A caching client keyed on that validator can
serve the unfiltered list back on a later request, and the ETag by itself is
a fingerprint of the resources the policy hid.

Both now call ClearUpstreamRepresentationHeaders before setting the length,
the same call the 502 paths beside them already make: visibility's
commitFilteredBody, which both flushFiltered and flushSystemDataUsage commit
through, and ownership's flushOwned for GET /system/df.
… inspect

redact_mount_paths already covered ResolvConfPath, HostnamePath, HostsPath and
Podman's Rootfs/StaticDir/OCIConfigPath/ConmonPidFile/PidFile, but left two
host-path families on the same response. LogPath is
/var/lib/docker/containers/{id}/{id}-json.log on dockerd and
/var/lib/containers/storage/overlay-containers/{id}/userdata/ctr.log on
Podman, and GraphDriver.Data is the whole storage layout: LowerDir, MergedDir,
UpperDir and WorkDir on overlay2, Dataset and Mountpoint on zfs, RootDir on
vfs. One inspect handed a caller the graph root, the storage driver and
whether the daemon runs rootful, after the operator had already decided that
caller may not see Mounts[].Source.

Every value under GraphDriver.Data is masked rather than a known-path
allowlist, so a driver that publishes a new key is covered the day it ships.
The key set survives so a client's decoder still sees the shape it expects,
and GraphDriver.Name stays: it names the driver, not a path. A GraphDriver or
Data of an unexpected type is refused like every other shape mismatch here.

Both fields reach the libpod container inspect through the same handler, so
Podman's native shape is covered too.
The reported bypass does not reproduce on this branch. glob.ToRegexString
already emits "(?s:.*)" for "**" and "(/(?s:.*))?" for "/**", so a mid-path
"**" deny like /containers/**/exec matches a path carrying the newline
net/http decodes out of %0A, and the broader allow below it is not borrowed.
Nothing about the matchers changed here; these are the regressions that were
missing.

TestMidPathDoubleStarDenyMatchesDecodedControlBytes drives the regex fallback
with decoded newline, CR, CRLF, NUL and U+2028 in the path. Dropping the "s"
flag from either group fails four of its cases.

TestPathMatcherKindsAgreeWithRegexFallback is the differential the fast paths
never had: over 400 normalized paths built from a hostile segment alphabet
(decoded control bytes, a surviving %2F, multi-byte and invalid UTF-8, the
glob metacharacters as literal content), every literal, match-all,
trailing-deep and segment-glob matcher has to return exactly what the regex
the same pattern compiles to returns. Each pattern is also checked for
matching neither nothing nor everything, so agreement cannot be vacuous.

The corpus is normalized through NormalizePath because that is the only thing
a compiled rule is handed. The libpod image-SCP route view is the one caller
that keeps a trailing slash, and the two sides genuinely disagree there; the
test says so and does not pretend to settle it.
The comment said buildAdminValidator mirrors the offline `sockguard validate`
pipeline, named validateAndCompileRules, and promised an operator's CI gate
and the running proxy reach the same verdict for the same YAML. It calls
validateAndCompileRulesStructural, which skips every filesystem dereference,
so a candidate naming TLS material that is missing, unreadable, or not PEM
passes the endpoint and fails the CLI. The body comment right below it always
said so; the doc comment contradicted it.
Three Security entries (the non-array list body refusal, the representation
headers on a rewritten body, and LogPath / GraphDriver.Data under
redact_mount_paths), one Tests entry for the matcher differential, and one
Documentation entry for the admin validator comment. Filed under Security
rather than Fixed because every neighbour in that section is the same kind of
change: a read-side disclosure or a fail-open closed.
…tion

fix(libpod)!: isolate unsafe stats and image batch reads
…-changelog-website

# Conflicts:
#	CHANGELOG.md
#	README.md
docs(site): align the docs pages with dev/v2.0
…bsite

docs: align README, CHANGELOG and website with dev/v2.0
fix(visibility): fail closed on non-array list bodies and finish read-side redaction
docs(release): prepare v2.1.0 GA surfaces
@scttbnsn

scttbnsn commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

Deployment failed for project sockguard-website with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/codeswhat?upgradeToPro=build-rate-limit

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 356 files, which is 256 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: c26da00b-c6aa-4d6e-b9c7-3b9b1a1f75d5

📥 Commits

Reviewing files that changed from the base of the PR and between 392a531 and fd900c2.

⛔ Files ignored due to path filters (2)
  • CHANGELOG.md is excluded by !CHANGELOG.md
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (356)
  • .github/workflows/ci-verify.yml
  • .github/workflows/quality-api-version-watch.yml
  • .github/workflows/quality-fuzz-monthly.yml
  • .github/workflows/quality-fuzz-nightly.yml
  • .github/workflows/quality-mutation-monthly.yml
  • .github/workflows/quality-tri-tool-conformance.yml
  • .github/workflows/release-from-tag.yml
  • .github/workflows/security-grype.yml
  • .github/workflows/security-scorecard.yml
  • .github/workflows/security-zap-baseline.yml
  • .github/zizmor.yml
  • .nvmrc
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • app/configs/cis-docker-benchmark.yaml
  • app/configs/discovery.yaml
  • app/configs/diun.yaml
  • app/configs/drydock-with-build.yaml
  • app/configs/drydock-with-compose.yaml
  • app/configs/drydock-with-mediated-build.yaml
  • app/configs/drydock-with-selfupdate.yaml
  • app/configs/drydock.yaml
  • app/configs/github-actions-runner.yaml
  • app/configs/gitlab-runner.yaml
  • app/configs/homarr.yaml
  • app/configs/homepage.yaml
  • app/configs/multi-listener.yaml
  • app/configs/podman-readonly.yaml
  • app/configs/portainer.yaml
  • app/configs/portwing-with-build.yaml
  • app/configs/portwing-with-compose.yaml
  • app/configs/portwing-with-exec.yaml
  • app/configs/portwing-with-mediated-build.yaml
  • app/configs/portwing.yaml
  • app/configs/traefik.yaml
  • app/configs/watchtower.yaml
  • app/differential/classifier.go
  • app/differential/path_evasion_extended_test.go
  • app/integration/cis_docker_benchmark_conformance_test.go
  • app/integration/drydock_preset_conformance_test.go
  • app/integration/github_actions_runner_conformance_test.go
  • app/integration/gitlab_runner_conformance_test.go
  • app/integration/multi_listener_integration_test.go
  • app/integration/podman_libpod_system_df_test.go
  • app/integration/portwing_preset_conformance_test.go
  • app/internal/admin/admin_test.go
  • app/internal/admin/policy_version_test.go
  • app/internal/buildkitproxy/bridge.go
  • app/internal/buildkitproxy/bridge_backpressure_test.go
  • app/internal/buildkitproxy/bridge_dos_test.go
  • app/internal/buildkitproxy/bridge_leak_test.go
  • app/internal/buildkitproxy/bridge_sessionmediated_test.go
  • app/internal/buildkitproxy/bridge_test.go
  • app/internal/buildkitproxy/controlinfo.go
  • app/internal/buildkitproxy/controlinfo_test.go
  • app/internal/buildkitproxy/descriptor_manifest_test.go
  • app/internal/buildkitproxy/filesync_test.go
  • app/internal/buildkitproxy/grpcstatus.go
  • app/internal/buildkitproxy/grpcstatus_test.go
  • app/internal/buildkitproxy/leak_helpers_test.go
  • app/internal/buildkitproxy/limits_test.go
  • app/internal/buildkitproxy/mediator.go
  • app/internal/buildkitproxy/mediator_test.go
  • app/internal/buildkitproxy/registry.go
  • app/internal/buildkitproxy/registry_test.go
  • app/internal/buildkitproxy/session_test.go
  • app/internal/buildkitproxy/solve_test.go
  • app/internal/buildkitproxy/streamframing_test.go
  • app/internal/buildkitproxy/streammediation_test.go
  • app/internal/buildkitproxy/testhelpers_test.go
  • app/internal/buildkitproxy/upgrade.go
  • app/internal/buildkitproxy/upgrade_test.go
  • app/internal/clientacl/cache.go
  • app/internal/clientacl/cache_test.go
  • app/internal/clientacl/coverage_gaps_test.go
  • app/internal/clientacl/middleware.go
  • app/internal/clientacl/peercred_linux_test.go
  • app/internal/cmd/coverage_gaps_test.go
  • app/internal/cmd/match.go
  • app/internal/cmd/match_test.go
  • app/internal/cmd/mutant_kill_test.go
  • app/internal/cmd/rule_reachability.go
  • app/internal/cmd/rules.go
  • app/internal/cmd/rules_libpod_image_write_test.go
  • app/internal/cmd/rules_read_exfil_refusal_test.go
  • app/internal/cmd/rules_test.go
  • app/internal/cmd/serve.go
  • app/internal/cmd/serve_admin_validate_oracle_test.go
  • app/internal/cmd/serve_chain_test.go
  • app/internal/cmd/serve_deps.go
  • app/internal/cmd/serve_deps_gaps_test.go
  • app/internal/cmd/serve_gaps_test.go
  • app/internal/cmd/serve_libpod_integration_test.go
  • app/internal/cmd/serve_listeners_gaps_test.go
  • app/internal/cmd/serve_local_endpoint_posture_test.go
  • app/internal/cmd/serve_policy_bundle_test.go
  • app/internal/cmd/serve_reload.go
  • app/internal/cmd/serve_reload_flags_test.go
  • app/internal/cmd/serve_reload_test.go
  • app/internal/cmd/serve_resource_limit_test.go
  • app/internal/cmd/serve_run_test.go
  • app/internal/cmd/serve_test.go
  • app/internal/cmd/serve_test_helpers_test.go
  • app/internal/cmd/serve_upstream_timeout_test.go
  • app/internal/cmd/serve_warn_test.go
  • app/internal/cmd/upstream.go
  • app/internal/cmd/upstream_flavor_test.go
  • app/internal/cmd/upstream_test.go
  • app/internal/cmd/upstream_tls_config_test.go
  • app/internal/cmd/upstream_tls_deprecation_test.go
  • app/internal/config/compat.go
  • app/internal/config/compat_container_remove_test.go
  • app/internal/config/compat_test.go
  • app/internal/config/compose_example_sync_test.go
  • app/internal/config/config.go
  • app/internal/config/container_remove_config_test.go
  • app/internal/config/coverage_gap_test.go
  • app/internal/config/filter_options.go
  • app/internal/config/filter_options_test.go
  • app/internal/config/listeners_fuzz_test.go
  • app/internal/config/listeners_test.go
  • app/internal/config/load.go
  • app/internal/config/load_test.go
  • app/internal/config/mutation_test.go
  • app/internal/config/network_endpoint_config_test.go
  • app/internal/config/preset_test.go
  • app/internal/config/tls.go
  • app/internal/config/upstream_hijack_inactivity_timeout_test.go
  • app/internal/config/validate.go
  • app/internal/config/validate_gaps_test.go
  • app/internal/config/validate_structural_test.go
  • app/internal/config/validate_test.go
  • app/internal/dockerfileinspect/dockerfileinspect_test.go
  • app/internal/dockerfilters/dockerfilters.go
  • app/internal/dockerfilters/dockerfilters_test.go
  • app/internal/dockerfilters/injected.go
  • app/internal/dockerfilters/injected_test.go
  • app/internal/dockerresource/labels_test.go
  • app/internal/filter/bench_test.go
  • app/internal/filter/build.go
  • app/internal/filter/container_archive.go
  • app/internal/filter/container_archive_test.go
  • app/internal/filter/container_create_test.go
  • app/internal/filter/container_remove.go
  • app/internal/filter/container_remove_preset_conformance_test.go
  • app/internal/filter/container_remove_test.go
  • app/internal/filter/container_update.go
  • app/internal/filter/container_update_test.go
  • app/internal/filter/diun_preset_conformance_test.go
  • app/internal/filter/drydock_preset_conformance_test.go
  • app/internal/filter/exec_test.go
  • app/internal/filter/fuzz_test.go
  • app/internal/filter/glob_test.go
  • app/internal/filter/homarr_preset_conformance_test.go
  • app/internal/filter/image_load.go
  • app/internal/filter/image_load_test.go
  • app/internal/filter/image_pull.go
  • app/internal/filter/json_mutate_test.go
  • app/internal/filter/libpod_container_create_test.go
  • app/internal/filter/libpod_container_update.go
  • app/internal/filter/libpod_container_write_test.go
  • app/internal/filter/libpod_image_pull_test.go
  • app/internal/filter/libpod_image_write_test.go
  • app/internal/filter/libpod_network.go
  • app/internal/filter/libpod_network_connect_test.go
  • app/internal/filter/libpod_network_test.go
  • app/internal/filter/libpod_network_update_test.go
  • app/internal/filter/libpod_normalize.go
  • app/internal/filter/libpod_normalize_test.go
  • app/internal/filter/libpod_unscopeable_reads.go
  • app/internal/filter/libpod_unscopeable_reads_test.go
  • app/internal/filter/libpod_unscopeable_writes.go
  • app/internal/filter/libpod_unscopeable_writes_test.go
  • app/internal/filter/middleware.go
  • app/internal/filter/middleware_method_dispatch_test.go
  • app/internal/filter/middleware_test.go
  • app/internal/filter/mutation_kill_test.go
  • app/internal/filter/mutation_test.go
  • app/internal/filter/network.go
  • app/internal/filter/network_test.go
  • app/internal/filter/norace_test.go
  • app/internal/filter/podman_readonly_preset_conformance_test.go
  • app/internal/filter/portwing_compose_preset_conformance_test.go
  • app/internal/filter/portwing_preset_conformance_test.go
  • app/internal/filter/preset_unscopeable_reads_test.go
  • app/internal/filter/race_test.go
  • app/internal/filter/registry_auth_test.go
  • app/internal/filter/resource_limit_guard.go
  • app/internal/filter/resource_limit_guard_test.go
  • app/internal/filter/rules.go
  • app/internal/filter/rules_matcher_differential_test.go
  • app/internal/filter/rules_test.go
  • app/internal/filter/security_test.go
  • app/internal/filter/swarm.go
  • app/internal/filter/swarm_test.go
  • app/internal/filter/traefik_homepage_preset_conformance_test.go
  • app/internal/filter/watchtower_preset_conformance_test.go
  • app/internal/glob/glob.go
  • app/internal/glob/glob_test.go
  • app/internal/health/health_test.go
  • app/internal/health/readiness_test.go
  • app/internal/imagefetch/imagefetch_test.go
  • app/internal/imagefetch/input_limits_test.go
  • app/internal/imageselector/query.go
  • app/internal/imageselector/query_test.go
  • app/internal/imagetrust/imagetrust_test.go
  • app/internal/imagetrust/verify_candidates_mode_test.go
  • app/internal/inspectcache/cache_test.go
  • app/internal/logging/access_test.go
  • app/internal/logging/audit_test.go
  • app/internal/logging/resource_policy_test.go
  • app/internal/metrics/metrics.go
  • app/internal/metrics/metrics_test.go
  • app/internal/ownership/commit.go
  • app/internal/ownership/commit_test.go
  • app/internal/ownership/coverage_gap_test.go
  • app/internal/ownership/identifier_collection_test.go
  • app/internal/ownership/image_batch.go
  • app/internal/ownership/image_batch_test.go
  • app/internal/ownership/image_effects.go
  • app/internal/ownership/image_effects_test.go
  • app/internal/ownership/label_filter_compose_test.go
  • app/internal/ownership/libpod_coverage_test.go
  • app/internal/ownership/libpod_paths.go
  • app/internal/ownership/libpod_test.go
  • app/internal/ownership/middleware.go
  • app/internal/ownership/middleware_test.go
  • app/internal/ownership/paths.go
  • app/internal/ownership/system_data_usage.go
  • app/internal/ownership/system_data_usage_test.go
  • app/internal/policybundle/policybundle_test.go
  • app/internal/proxy/hijack.go
  • app/internal/proxy/hijack_responsefilter_disjoint_test.go
  • app/internal/proxy/hijack_test.go
  • app/internal/proxy/proxy_test.go
  • app/internal/proxy/timeout.go
  • app/internal/proxy/timeout_test.go
  • app/internal/ratelimit/middleware_test.go
  • app/internal/ratelimit/priority_test.go
  • app/internal/ratelimit/ratelimit_test.go
  • app/internal/reload/diff.go
  • app/internal/reload/inode_unix_test.go
  • app/internal/reload/reload_test.go
  • app/internal/reload/upstream_flavor_test.go
  • app/internal/responsefilter/filter.go
  • app/internal/responsefilter/filter_coverage_test.go
  • app/internal/responsefilter/filter_test.go
  • app/internal/responsefilter/fuzz_test.go
  • app/internal/responsefilter/libpod_filter.go
  • app/internal/responsefilter/libpod_filter_test.go
  • app/internal/responsefilter/libpod_system_data_usage_test.go
  • app/internal/responsefilter/system_data_usage_filter.go
  • app/internal/responsefilter/system_data_usage_filter_test.go
  • app/internal/responsefilter/system_data_usage_legacy_shape_test.go
  • app/internal/sigverify/sigverify_test.go
  • app/internal/upstream/docker_env_test.go
  • app/internal/upstream/endpoint.go
  • app/internal/upstream/mutual_tls_test.go
  • app/internal/upstream/resolver.go
  • app/internal/upstream/upstream_test.go
  • app/internal/upstreamflavor/flavor.go
  • app/internal/upstreamflavor/flavor_test.go
  • app/internal/upstreamflavor/fuzz_test.go
  • app/internal/visibility/fuzz_test.go
  • app/internal/visibility/image_export.go
  • app/internal/visibility/image_export_test.go
  • app/internal/visibility/libpod_coverage_test.go
  • app/internal/visibility/libpod_events.go
  • app/internal/visibility/libpod_fuzz_test.go
  • app/internal/visibility/libpod_paths.go
  • app/internal/visibility/libpod_test.go
  • app/internal/visibility/meta_cache_test.go
  • app/internal/visibility/middleware.go
  • app/internal/visibility/middleware_filter_writer_test.go
  • app/internal/visibility/middleware_test.go
  • app/internal/visibility/podman_events.go
  • app/internal/visibility/podman_events_fuzz_test.go
  • app/internal/visibility/podman_events_test.go
  • app/internal/visibility/system_data_usage.go
  • app/internal/visibility/system_data_usage_test.go
  • chart/sockguard/Chart.yaml
  • docs/content/docs/admin.mdx
  • docs/content/docs/cis-docker-benchmark.mdx
  • docs/content/docs/configuration.mdx
  • docs/content/docs/getting-started.mdx
  • docs/content/docs/index.mdx
  • docs/content/docs/migration.mdx
  • docs/content/docs/multi-host.mdx
  • docs/content/docs/observability.mdx
  • docs/content/docs/podman.mdx
  • docs/content/docs/presets.mdx
  • docs/content/docs/roadmap.mdx
  • docs/content/docs/security.mdx
  • docs/content/docs/verification.mdx
  • docs/src/lib/analytics-client.ts
  • docs/src/lib/analytics-contract.ts
  • examples/compose/cis-docker-benchmark/sockguard.yaml
  • examples/compose/drydock/sockguard.yaml
  • examples/compose/github-actions-runner/sockguard.yaml
  • examples/compose/gitlab-runner/sockguard.yaml
  • examples/compose/multi-host/sockguard.yaml
  • examples/compose/portainer/sockguard.yaml
  • examples/compose/portwing/sockguard.yaml
  • examples/compose/traefik/README.md
  • examples/compose/traefik/docker-compose.yml
  • examples/compose/traefik/sockguard.yaml
  • examples/compose/tri-tool/sockguard-with-exec.yaml
  • examples/compose/tri-tool/sockguard.yaml
  • examples/compose/watchtower/README.md
  • examples/compose/watchtower/docker-compose.yml
  • examples/compose/watchtower/sockguard.yaml
  • go.mod
  • knip.json
  • lefthook.yml
  • scripts/analytics-client.test.mjs
  • scripts/analytics-contract.test.mjs
  • scripts/check-conflict-markers.mjs
  • scripts/check-conflict-markers.test.mjs
  • scripts/ci/mutation-matrix.sh
  • scripts/engine-api-latest.sh
  • scripts/engine-api-latest.test.mjs
  • scripts/homebrew-release.test.mjs
  • scripts/mutation-badge-matrix.test.mjs
  • scripts/release-metadata.test.mjs
  • scripts/reusable-ci-config.test.mjs
  • scripts/tri-tool-conformance-run-matrix.test.mjs
  • scripts/tri-tool-conformance/README.md
  • scripts/tri-tool-conformance/controller-clock-offset.cjs
  • scripts/tri-tool-conformance/controller-header-proxy.cjs
  • scripts/tri-tool-conformance/lib.sh
  • scripts/tri-tool-conformance/normalize-routes.jq
  • scripts/tri-tool-conformance/run-matrix.sh
  • scripts/tri-tool-conformance/testdata/access-log-fixture.jsonl
  • scripts/workflow-fuzz-budget.test.mjs
  • website/src/app/data/comparison-rows.ts
  • website/src/app/data/faq.ts
  • website/src/app/data/features.ts
  • website/src/app/page-data.test.mjs
  • website/src/app/sitemap.test.mjs
  • website/src/app/sitemap.ts
  • website/src/components/compare-matrix.tsx
  • website/src/components/compare-section.tsx
  • website/src/components/github-badges.tsx
  • website/src/lib/analytics-client.ts
  • website/src/lib/analytics-contract.test.mjs
  • website/src/lib/analytics-contract.ts
  • website/src/lib/comparison-route-data/11notes.tsx
  • website/src/lib/comparison-route-data/cetusguard.tsx
  • website/src/lib/comparison-route-data/linuxserver.tsx
  • website/src/lib/comparison-route-data/tecnativa.tsx
  • website/src/lib/comparison-route-data/wollomatic.tsx
  • website/src/lib/site-config.ts
  • website/src/lib/site-content.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review skipped: 356 files exceed the limit of 100.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@scttbnsn

scttbnsn commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Superseded: v2.1.0 cuts from dev/v2.1 (release-cut refuses a 2.1 prerelease from dev/v2.0), so the promotion PR comes from that branch instead. Same tree.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants