Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
9509683
chore(deps): lock file maintenance
renovate[bot] Sep 3, 2026
52d1fc9
chore(deps): update golang:1.26.6-alpine3.23 docker digest to e57c41c
renovate[bot] Sep 4, 2026
9181803
chore(chart): pin the 2.1.0 image to its multi-arch digest
scttbnsn Sep 4, 2026
123da9a
Merge pull request #430 from CodesWhat/chore/chart-pin-2.1.0
scttbnsn Sep 4, 2026
e463103
docs(security): roll the support window to 2.1.x and 2.0.x
scttbnsn Sep 4, 2026
a150865
build(deps): bump golang.org/x/crypto to v0.56.0 for GO-2026-6354 and…
scttbnsn Sep 4, 2026
478525d
docs(config): drop the preset claim from the RedactHostTopology comment
scttbnsn Sep 4, 2026
ca69c15
fix(responsefilter): redact image inspect like container inspect
scttbnsn Sep 4, 2026
9d92e84
Merge pull request #432 from CodesWhat/build/x-crypto-0.56.0
scttbnsn Sep 4, 2026
bff9b2f
Merge remote-tracking branch 'origin/dev/v2.1' into docs/security-sup…
scttbnsn Sep 4, 2026
d1cfddc
fix(isolation): strip conditional headers and fail closed on 304
scttbnsn Sep 4, 2026
11be2d0
Merge remote-tracking branch 'origin/dev/v2.1' into docs/redact-host-…
scttbnsn Sep 4, 2026
1d02835
fix(isolation): stop HEAD leaking upstream length and etag on filtere…
scttbnsn Sep 4, 2026
678bece
fix(filter): make glob and regex agree on trailing slashes
scttbnsn Sep 4, 2026
35a0c4f
Merge remote-tracking branch 'origin/dev/v2.1' into fix/image-inspect…
scttbnsn Sep 4, 2026
9de25ed
Merge remote-tracking branch 'origin/dev/v2.1' into fix/glob-trailing…
scttbnsn Sep 4, 2026
c37a4db
fix(visibility): reject unterminated arrays and trailing bytes
scttbnsn Sep 4, 2026
6fa6731
Merge remote-tracking branch 'origin/dev/v2.1' into fix/read-side-con…
scttbnsn Sep 4, 2026
6470c3e
docs(podman): say the cleaned view must allow the SCP route too
scttbnsn Sep 4, 2026
7bd48e0
fix(responsefilter): only refuse 304 on GET and HEAD
scttbnsn Sep 4, 2026
bf4eeb7
Merge pull request #431 from CodesWhat/docs/security-support-window
scttbnsn Sep 4, 2026
325301d
Merge pull request #433 from CodesWhat/docs/redact-host-topology-comment
scttbnsn Sep 4, 2026
c10605a
chore(deps): update non-major (github-actions)
renovate[bot] Sep 4, 2026
e555624
Merge pull request #434 from CodesWhat/fix/image-inspect-redaction
scttbnsn Sep 4, 2026
0c52f55
Merge pull request #435 from CodesWhat/fix/glob-trailing-slash
scttbnsn Sep 4, 2026
c86429f
Merge remote-tracking branch 'origin/dev/v2.1' into fix/read-side-con…
scttbnsn Sep 4, 2026
b08784d
fix(isolation): refuse 304 on the HEAD paths too
scttbnsn Sep 4, 2026
d44ca5d
Merge pull request #436 from CodesWhat/fix/read-side-conditional-and-…
scttbnsn Sep 4, 2026
830b2ef
docs(changelog): drop the local planning path from the 1.x entry
scttbnsn Sep 4, 2026
9564fb0
docs(security): move the 2026-07 security pass out of the tracked tree
scttbnsn Sep 4, 2026
47bf3a9
docs(release): name 2.1.0-rc.2 as the promoted 2.1.0 candidate
scttbnsn Sep 4, 2026
ee557a2
test(cis): align conformance comments with the benchmark numbering in…
scttbnsn Sep 4, 2026
201aee1
fix(isolation): refuse compat /secrets on a Podman upstream
scttbnsn Sep 4, 2026
9f81c59
fix(health): honor the cache TTL when the watchdog is off
scttbnsn Sep 4, 2026
176c47d
ci(lefthook): run the zizmor gate when only its config changes
scttbnsn Sep 4, 2026
a087070
test(cmd): isolate env, fix wording and drop the wall-clock budget fr…
scttbnsn Sep 4, 2026
96a281c
fix(compat): leave the BuildKit tunnel ack unset under request_body.b…
scttbnsn Sep 4, 2026
bf2edaa
Merge pull request #438 from CodesWhat/docs/changelog-planning-link
scttbnsn Sep 4, 2026
f7bb579
Merge pull request #439 from CodesWhat/docs/move-security-pass-report
scttbnsn Sep 4, 2026
cf00361
Merge pull request #440 from CodesWhat/test/cis-comment-drift
scttbnsn Sep 4, 2026
7151a9b
fix(isolation): suppress G101 on the Podman secret-list reason codes …
scttbnsn Sep 4, 2026
a438baa
Merge remote-tracking branch 'origin/dev/v2.1' into fix/compat-secret…
scttbnsn Sep 4, 2026
3b8a575
Merge remote-tracking branch 'origin/dev/v2.1' into docs/ga-promotes-rc2
scttbnsn Sep 4, 2026
912266e
Merge remote-tracking branch 'origin/dev/v2.1' into fix/health-cache-ttl
scttbnsn Sep 4, 2026
46575fa
Merge pull request #441 from CodesWhat/ci/zizmor-hook-glob
scttbnsn Sep 4, 2026
f894219
Merge pull request #398 from CodesWhat/renovate/non-major-github-actions
scttbnsn Sep 4, 2026
7472614
Merge pull request #437 from CodesWhat/docs/ga-promotes-rc2
scttbnsn Sep 4, 2026
4bdb9ba
test(filter): pin the regex source explicitly instead of deriving it …
scttbnsn Sep 4, 2026
7c54a7f
Merge pull request #442 from CodesWhat/test/review-hygiene
scttbnsn Sep 4, 2026
b30f053
Merge pull request #444 from CodesWhat/fix/compat-buildkit-autoack
scttbnsn Sep 4, 2026
bf987a7
Merge remote-tracking branch 'origin/dev/v2.1' into fix/compat-secret…
scttbnsn Sep 4, 2026
0061111
Merge remote-tracking branch 'origin/dev/v2.1' into fix/health-cache-ttl
scttbnsn Sep 4, 2026
c36d8a9
fix(filter): widen the literal-prefix gate for stacked /** patterns
scttbnsn Sep 4, 2026
95af649
fix(filter): a rootless rule pattern no longer matches a rooted path
scttbnsn Sep 4, 2026
1954c50
test: add the five seams the mutation run could not reach
scttbnsn Sep 4, 2026
5077836
test(filter): make the gzip-bomb limit a var so the test can shrink t…
scttbnsn Sep 4, 2026
c88c8e2
test(responsefilter): share the array-termination table with visibility
scttbnsn Sep 4, 2026
da4d359
chore(renovate): give knip its own PR outside the npm non-major group
scttbnsn Sep 4, 2026
c71dab8
fix(cmd): cover the libpod image-SCP route view in the validator
scttbnsn Sep 4, 2026
2abbeef
refactor(glob): share the /** token test between the regex and prefix…
scttbnsn Sep 4, 2026
11e3d1a
Merge pull request #443 from CodesWhat/fix/compat-secrets-podman
scttbnsn Sep 5, 2026
1391e64
Merge remote-tracking branch 'origin/dev/v2.1' into fix/health-cache-ttl
scttbnsn Sep 5, 2026
d9e05a4
Merge pull request #396 from CodesWhat/renovate/golang-1.26.6-alpine3.23
scttbnsn Sep 5, 2026
e14d8dd
Merge pull request #346 from CodesWhat/renovate/lock-file-maintenance
scttbnsn Sep 5, 2026
8ed5729
Merge pull request #445 from CodesWhat/fix/health-cache-ttl
scttbnsn Sep 5, 2026
7ebd8db
Merge remote-tracking branch 'origin/dev/v2.1' into fix/literal-prefi…
scttbnsn Sep 5, 2026
433efe3
Merge pull request #446 from CodesWhat/fix/literal-prefix-stacked-dou…
scttbnsn Sep 5, 2026
5a8c40f
Merge remote-tracking branch 'origin/dev/v2.1' into fix/validator-scp…
scttbnsn Sep 5, 2026
cf268e2
Merge pull request #447 from CodesWhat/fix/validator-scp-dual-view
scttbnsn Sep 5, 2026
b0f5513
Merge remote-tracking branch 'origin/dev/v2.1' into fix/rootless-patt…
scttbnsn Sep 5, 2026
b3d8f88
Merge pull request #448 from CodesWhat/fix/rootless-pattern-leading-s…
scttbnsn Sep 5, 2026
0ef5446
Merge remote-tracking branch 'origin/dev/v2.1' into test/mutation-seams
scttbnsn Sep 5, 2026
68f8fad
Merge pull request #449 from CodesWhat/test/mutation-seams
scttbnsn Sep 5, 2026
b11fda1
Merge remote-tracking branch 'origin/dev/v2.1' into test/gzip-bomb-li…
scttbnsn Sep 5, 2026
b32d640
Merge pull request #450 from CodesWhat/test/gzip-bomb-limit-var
scttbnsn Sep 5, 2026
e92fc84
Merge remote-tracking branch 'origin/dev/v2.1' into fix/responsefilte…
scttbnsn Sep 5, 2026
8b61e7f
Merge pull request #451 from CodesWhat/fix/responsefilter-trailing-bytes
scttbnsn Sep 5, 2026
3fe9485
Merge remote-tracking branch 'origin/dev/v2.1' into chore/renovate-sp…
scttbnsn Sep 5, 2026
1f29a6f
Merge pull request #452 from CodesWhat/chore/renovate-split-knip
scttbnsn Sep 5, 2026
6904422
test(cmd): add FuzzCatalogReachability for the read-exfiltration vali…
scttbnsn Sep 4, 2026
d1a8c80
Merge pull request #453 from CodesWhat/test/fuzz-catalog-reachability
scttbnsn Sep 5, 2026
fa6980b
build(deps): drop dead js-yaml override
scttbnsn Sep 5, 2026
2d7496f
ci(release): gate stable tags on SECURITY.md's supported-versions table
scttbnsn Sep 5, 2026
8805e46
fix(responsefilter): gate inspect routes on the options that modify them
scttbnsn Sep 5, 2026
dd1fd4b
docs(config): fix compat-vs-rules sentence to match code and migratio…
scttbnsn Sep 5, 2026
a1a7a47
docs(watchtower): document fork compatibility and the update-route grant
scttbnsn Sep 5, 2026
4157b22
Merge pull request #454 from CodesWhat/build/drop-dead-js-yaml-override
scttbnsn Sep 5, 2026
4646e43
Merge remote-tracking branch 'origin/dev/v2.1' into ci/security-windo…
scttbnsn Sep 5, 2026
119a363
docs(compare): correct Tecnativa granular write-ops cell
scttbnsn Sep 5, 2026
b0c4ae8
fix(filter): check local-driver bind volumes against the bind allowlist
scttbnsn Sep 5, 2026
db24791
docs(migration): list LinuxServer vars sockguard ignores
scttbnsn Sep 5, 2026
d582f6a
fix(clientacl): read the LRU value under the lock
scttbnsn Sep 5, 2026
13826a7
fix(cmd): warn when a config reload duration is malformed
scttbnsn Sep 5, 2026
939d3b1
fix(cmd): warn when the main listener is plaintext TCP
scttbnsn Sep 5, 2026
6b1da2c
Merge pull request #455 from CodesWhat/ci/security-window-release-gate
scttbnsn Sep 5, 2026
2556083
Merge remote-tracking branch 'origin/dev/v2.1' into docs/compat-rules…
scttbnsn Sep 5, 2026
8567a85
fix(responsefilter): decode gzip responses instead of 502ing on them
scttbnsn Sep 5, 2026
e0cce24
fix(filter): stop the literal-prefix gate at a replacement rune
scttbnsn Sep 5, 2026
a54d7de
Merge pull request #456 from CodesWhat/docs/compat-rules-sentence-wat…
scttbnsn Sep 5, 2026
6bd2739
Merge remote-tracking branch 'origin/dev/v2.1' into docs/linuxserver-…
scttbnsn Sep 5, 2026
0be19c6
test(ownership): cover the two missing libpod list routes in the comp…
scttbnsn Sep 5, 2026
97a348f
test(proxy): pin /events and container logs follow as timeout-exempt …
scttbnsn Sep 5, 2026
7456570
Merge pull request #457 from CodesWhat/docs/linuxserver-unsupported-v…
scttbnsn Sep 5, 2026
7a836b5
fix(filter): inspect PUT /volumes/{name} cluster volume updates
scttbnsn Sep 5, 2026
46d09a7
Merge remote-tracking branch 'origin/dev/v2.1' into fix/volume-mount-…
scttbnsn Sep 5, 2026
6e7d6ec
fix(filter): reject an unrooted request target before rule evaluation
scttbnsn Sep 5, 2026
34ce632
Merge pull request #458 from CodesWhat/fix/volume-mount-inline-bind
scttbnsn Sep 5, 2026
59148ca
Merge remote-tracking branch 'origin/dev/v2.1' into fix/literal-prefi…
scttbnsn Sep 5, 2026
74323ad
Merge pull request #459 from CodesWhat/fix/literal-prefix-utf8
scttbnsn Sep 5, 2026
40e2993
Merge remote-tracking branch 'origin/dev/v2.1' into fix/lru-lock-relo…
scttbnsn Sep 5, 2026
b0e76d5
Merge pull request #460 from CodesWhat/fix/lru-lock-reload-warn-plain…
scttbnsn Sep 5, 2026
3655f0a
Merge remote-tracking branch 'origin/dev/v2.1' into fix/responsefilte…
scttbnsn Sep 5, 2026
b3c69fd
Merge pull request #461 from CodesWhat/fix/responsefilter-option-disp…
scttbnsn Sep 5, 2026
4e62db7
Merge remote-tracking branch 'origin/dev/v2.1' into fix/responsefilte…
scttbnsn Sep 5, 2026
c29929a
Merge pull request #462 from CodesWhat/fix/responsefilter-content-enc…
scttbnsn Sep 5, 2026
3bd736b
Merge remote-tracking branch 'origin/dev/v2.1' into test/libpod-list-…
scttbnsn Sep 5, 2026
c50ec35
fix(filter): check service mount local-driver binds against the allow…
scttbnsn Sep 5, 2026
d80cc2c
Merge pull request #463 from CodesWhat/test/libpod-list-compose-and-s…
scttbnsn Sep 5, 2026
4567a20
Merge remote-tracking branch 'origin/dev/v2.1' into fix/request-targe…
scttbnsn Sep 5, 2026
bdfdd00
Merge pull request #464 from CodesWhat/fix/request-target-canonical
scttbnsn Sep 5, 2026
6d09795
ci(verify): skip the image build and fuzz matrix on docs-only PRs
scttbnsn Sep 5, 2026
0980755
Merge remote-tracking branch 'origin/dev/v2.1' into fix/service-mount…
scttbnsn Sep 5, 2026
345be29
docs(compare): pin competitor comparison claims to a checked-at version
scttbnsn Sep 5, 2026
fed2580
docs(claude): fix stale fuzz target name in CLAUDE.md command list
scttbnsn Sep 5, 2026
0485c3a
Merge pull request #465 from CodesWhat/fix/service-mount-inline-bind
scttbnsn Sep 5, 2026
2a166d7
Merge remote-tracking branch 'origin/dev/v2.1' into ci/docs-only-skip…
scttbnsn Sep 5, 2026
0e18d14
Merge remote-tracking branch 'origin/dev/v2.1' into fix/volume-update…
scttbnsn Sep 5, 2026
b8a0e52
ci(qlty): adopt the org repository-run qlty gate
scttbnsn Sep 5, 2026
9fa0041
Merge pull request #466 from CodesWhat/ci/docs-only-skip-heavy-jobs
scttbnsn Sep 5, 2026
35e3756
Merge remote-tracking branch 'origin/dev/v2.1' into docs/pin-comparis…
scttbnsn Sep 5, 2026
549e3ca
feat(config): make the shutdown grace period configurable
scttbnsn Sep 5, 2026
f05b778
feat(config): warn at startup on unrecognized SOCKGUARD_* env vars
scttbnsn Sep 5, 2026
6652607
Merge pull request #467 from CodesWhat/docs/pin-comparison-upstream-v…
scttbnsn Sep 5, 2026
714a0b3
Merge remote-tracking branch 'origin/dev/v2.1' into fix/volume-update…
scttbnsn Sep 5, 2026
7c82201
Merge pull request #468 from CodesWhat/fix/volume-update-inspection
scttbnsn Sep 5, 2026
efb4d48
ci(release): run the release jobs with egress-policy block
scttbnsn Sep 5, 2026
52bed06
Merge remote-tracking branch 'origin/dev/v2.1' into feat/shutdown-gra…
scttbnsn Sep 5, 2026
d6573a7
Merge remote-tracking branch 'origin/dev/v2.1' into feat/warn-unknown…
scttbnsn Sep 5, 2026
7004eb1
Merge remote-tracking branch 'origin/dev/v2.1' into ci/adopt-org-qlty…
scttbnsn Sep 5, 2026
bf9061b
feat(filter): pin the libpod update field set against Podman's Update…
scttbnsn Sep 5, 2026
d4686a8
docs(podman): record why libpod container update allows unknown body …
scttbnsn Sep 5, 2026
dff94d4
feat(cmd): add a verify runtime self-check subcommand
scttbnsn Sep 5, 2026
215b2d3
Merge pull request #469 from CodesWhat/feat/warn-unknown-sockguard-env
scttbnsn Sep 5, 2026
60cd092
Merge remote-tracking branch 'origin/dev/v2.1' into ci/adopt-org-qlty…
scttbnsn Sep 5, 2026
0569014
ci(fuzz): register FuzzValidateServerShutdownGrace in the nightly and…
scttbnsn Sep 5, 2026
9a33f43
Merge pull request #470 from CodesWhat/ci/adopt-org-qlty-gate
scttbnsn Sep 5, 2026
a0f5ae4
Merge remote-tracking branch 'origin/dev/v2.1' into ci/release-egress…
scttbnsn Sep 5, 2026
45f895b
Merge pull request #471 from CodesWhat/ci/release-egress-policy-block
scttbnsn Sep 5, 2026
9fb4959
Merge remote-tracking branch 'origin/dev/v2.1' into feat/shutdown-gra…
scttbnsn Sep 5, 2026
3c81258
Merge pull request #472 from CodesWhat/feat/shutdown-grace-config
scttbnsn Sep 5, 2026
5da1a9b
Merge remote-tracking branch 'origin/dev/v2.1' into test/libpod-updat…
scttbnsn Sep 5, 2026
9e5bff4
Merge pull request #473 from CodesWhat/test/libpod-update-field-drift
scttbnsn Sep 5, 2026
fab6fc4
Merge remote-tracking branch 'origin/dev/v2.1' into feat/verify-subco…
scttbnsn Sep 5, 2026
26ecc31
Merge pull request #474 from CodesWhat/feat/verify-subcommand
scttbnsn Sep 5, 2026
146f18e
perf(cmd): walk live NFA states in the catalog reachability search
scttbnsn Sep 5, 2026
b69f6f6
test(cmd): benchmark and bound the long-pattern reachability search
scttbnsn Sep 5, 2026
c17e56f
refactor(clientacl): group evaluateLabelACL's params into a request s…
scttbnsn Sep 5, 2026
996ecf9
refactor(differential): move differential package under app/internal
scttbnsn Sep 5, 2026
4267968
Merge pull request #475 from CodesWhat/refactor/label-acl-request-struct
scttbnsn Sep 5, 2026
4fc4250
Merge remote-tracking branch 'origin/dev/v2.1' into refactor/differen…
scttbnsn Sep 5, 2026
3fc4fc5
Merge pull request #476 from CodesWhat/refactor/differential-under-in…
scttbnsn Sep 5, 2026
7895161
Merge remote-tracking branch 'origin/dev/v2.1' into perf/catalog-reac…
scttbnsn Sep 5, 2026
ac673d7
refactor(apipath): dedupe isNodeUpdatePath and isLibpodPath into apipath
scttbnsn Sep 5, 2026
88e06f3
refactor(ownership): collapse nine near-identical path identifier ext…
scttbnsn Sep 5, 2026
7306545
Merge pull request #477 from CodesWhat/perf/catalog-reachability-long…
scttbnsn Sep 5, 2026
1cc2b98
Merge remote-tracking branch 'origin/dev/v2.1' into refactor/canonica…
scttbnsn Sep 5, 2026
49aff62
perf(metrics): route Docker paths without allocating
scttbnsn Sep 5, 2026
9db817a
Merge pull request #478 from CodesWhat/refactor/canonical-path-classi…
scttbnsn Sep 5, 2026
8a03913
perf(responsefilter): read response bodies into a pooled buffer
scttbnsn Sep 5, 2026
278dd3d
perf(health): read the cached upstream verdict without a lock
scttbnsn Sep 5, 2026
5d787fe
perf(filter): parse each request's query once and share it
scttbnsn Sep 5, 2026
68fe1b5
test(filter): pin the shared request query parse
scttbnsn Sep 5, 2026
e29e8dd
Merge remote-tracking branch 'origin/dev/v2.1' into perf/share-query-…
scttbnsn Sep 5, 2026
a1b84ab
perf(visibility): append injected label filters instead of re-encoding
scttbnsn Sep 5, 2026
1a5d2b6
Merge pull request #479 from CodesWhat/perf/share-query-parse-across-…
scttbnsn Sep 5, 2026
093227d
Merge remote-tracking branch 'origin/dev/v2.1' into perf/route-catego…
scttbnsn Sep 5, 2026
08fddff
Merge pull request #480 from CodesWhat/perf/route-category-health-cac…
scttbnsn Sep 5, 2026
4a3aac7
refactor(filter): move request classification into the apipath leaf
scttbnsn Sep 5, 2026
84869b6
Merge remote-tracking branch 'origin/dev/v2.1' into refactor/request-…
scttbnsn Sep 5, 2026
0984145
perf(responsefilter): keep untouched list fields as raw JSON
scttbnsn Sep 5, 2026
e595594
Merge pull request #481 from CodesWhat/refactor/request-classificatio…
scttbnsn Sep 5, 2026
3936dff
Merge remote-tracking branch 'origin/dev/v2.1' into perf/responsefilt…
scttbnsn Sep 5, 2026
b4eba9f
perf(filter): recycle the container-create decode target
scttbnsn Sep 5, 2026
8f1e297
Merge pull request #482 from CodesWhat/perf/responsefilter-pooled-rea…
scttbnsn Sep 5, 2026
d0894d1
Merge remote-tracking branch 'origin/dev/v2.1' into perf/container-cr…
scttbnsn Sep 5, 2026
19eead2
perf(ownership): decode a create body once when stamping the owner label
scttbnsn Sep 5, 2026
60cf77d
Merge pull request #483 from CodesWhat/perf/container-create-targeted…
scttbnsn Sep 5, 2026
00d1590
Merge remote-tracking branch 'origin/dev/v2.1' into perf/ownership-la…
scttbnsn Sep 5, 2026
803888c
Merge pull request #484 from CodesWhat/perf/ownership-label-injection…
scttbnsn Sep 5, 2026
89db91c
ci(gitleaks): allowlist the response-filter fixture secrets
scttbnsn Sep 6, 2026
ea051d0
Merge pull request #485 from CodesWhat/ci/gitleaks-allow-responsefilt…
scttbnsn Sep 6, 2026
a31018a
chore(release): prepare 2.2.0 release metadata
scttbnsn Sep 6, 2026
0ba3066
Merge pull request #486 from CodesWhat/chore/release-2.2.0-metadata
scttbnsn Sep 6, 2026
94e9d66
fix(cmd): tighten the catalog reachability budget so long patterns st…
scttbnsn Sep 6, 2026
273ab98
Merge pull request #487 from CodesWhat/fix/catalog-reachability-budge…
scttbnsn Sep 6, 2026
a17d8fc
chore(sync): reconcile main promotion topology
scttbnsn Sep 6, 2026
9138f28
test(cmd): clear SOCKGUARD_* before asserting clean pre-validation st…
scttbnsn Sep 6, 2026
742d12e
Merge pull request #489 from CodesWhat/fix/serve-env-injectable
scttbnsn Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ reviews:
- path: "app/internal/**"
instructions: |
Request-filtering engine with a default-deny posture. Any change to rule matching, path parsing, or method filtering is security-sensitive — flag anything that could widen what reaches the Docker socket.
- path: "app/differential/**"
- path: "app/internal/differential/**"
instructions: |
Differential test harness comparing behavior against Tecnativa. Don't suggest refactors here.
- path: "app/integration/**"
Expand Down
183 changes: 170 additions & 13 deletions .github/workflows/ci-verify.yml

Large diffs are not rendered by default.

78 changes: 74 additions & 4 deletions .github/workflows/quality-api-version-watch.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: "Quality: Engine API Version Watch (monthly)"
name: "Quality: Upstream API Watch (monthly)"
run-name: >-
${{
github.event_name == 'schedule' && 'Quality: Engine API Version Watch — Monthly schedule' ||
format('Quality: Engine API Version Watch — Manual by {0}', github.actor)
github.event_name == 'schedule' && 'Quality: Upstream API Watch — Monthly schedule' ||
format('Quality: Upstream API Watch — Manual by {0}', github.actor)
}}

# Sockguard's request/response inspectors are validated against a specific
Expand All @@ -23,6 +23,17 @@ run-name: >-
# that number moves past the pinned ceiling. A maintainer then reviews the
# new API's changelog entry, updates the pin, and files any follow-up
# filter work the release needs.
#
# The second job watches the other daemon the same way. Podman's native
# POST /libpod/containers/{name}/update decodes handlers.UpdateEntities, and
# sockguard's inspector allows an UpdateEntities root key it does not
# recognize on purpose (deny-on-unknown would refuse working requests on
# every Podman minor that adds a field, including fields Podman itself
# discards). That posture is only safe if somebody notices when the upstream
# body grows, so app/testdata/podman-api/update-entities-root-fields.json
# pins the field set the inspector was reviewed against and this job
# re-derives it from Podman's source at `main`. A new field lands as a red
# monthly check instead of as an uninspected key nobody is looking for.

on:
workflow_dispatch: {}
Expand All @@ -47,7 +58,7 @@ jobs:
# this job makes is curl against docs.docker.com — a single, stable
# vendor host.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down Expand Up @@ -129,3 +140,62 @@ jobs:

echo "Engine API ceiling ${PINNED} still covers the latest documented version ${LATEST}."
echo "**Result: within pinned ceiling.**" >> "$GITHUB_STEP_SUMMARY"

check-libpod-update-fields:
name: "Check libpod UpdateEntities root fields"
runs-on: ubuntu-24.04
timeout-minutes: 15

steps:
# Audit rather than block, unlike the job above: this one needs the Go
# toolchain, the module proxy and the Actions cache on top of
# raw.githubusercontent.com, and that endpoint set has not been
# enumerated for the egress rollout yet. Same posture the other Go jobs
# in this repo hold at stage 1.
- name: Harden Runner
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version-file: go.mod
cache-dependency-path: go.sum

# The test parses Podman's own declarations with go/ast and diffs the
# flattened root key set against the committed snapshot, so a moved
# embedded struct or a changed json tag is resolved the way
# encoding/json resolves it rather than grepped for. It skips itself
# without the ref, which is how the rest of the suite stays offline.
- name: Compare snapshot against Podman main
id: drift
working-directory: app
env:
SOCKGUARD_TEST_PODMAN_UPSTREAM_REF: main
run: go test ./internal/filter/ -run TestLibpodContainerUpdateSnapshotMatchesUpstreamPodman -count=1 -v

- name: Summarize
if: always()
env:
STATUS: ${{ steps.drift.outcome }}
run: |
{
echo "### libpod UpdateEntities root fields"
echo ""
echo "- Pinned set: \`app/testdata/podman-api/update-entities-root-fields.json\`"
echo "- Checked against: \`containers/podman@main\`"
echo "- Result: ${STATUS}"
if [ "${STATUS}" != "success" ]; then
echo ""
echo "Podman's update body no longer matches the pinned field set."
echo "The step log names every field that moved. Add each new one to a"
echo "gate list in \`app/internal/filter/libpod_container_update.go\`,"
echo "refresh the snapshot, and re-run the offline drift test."
fi
} >> "$GITHUB_STEP_SUMMARY"
6 changes: 4 additions & 2 deletions .github/workflows/quality-fuzz-monthly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ jobs:
- { name: FuzzProxyHeadersAndBody, pkg: ./internal/proxy/ }
- { name: FuzzHijackHeadersAndBody, pkg: ./internal/proxy/ }
- { name: FuzzHijackBidirectionalStream, pkg: ./internal/proxy/ }
- { name: FuzzPathRoutingDifferential, pkg: ./differential/ }
- { name: FuzzPathRoutingDifferential, pkg: ./internal/differential/ }
- { name: FuzzVisibilityFilter, pkg: ./internal/visibility/ }
- { name: FuzzOwnershipMutateBody, pkg: ./internal/ownership/ }
- { name: FuzzOwnershipMutateServiceBody, pkg: ./internal/ownership/ }
Expand All @@ -105,6 +105,8 @@ jobs:
- { name: FuzzClassify, pkg: ./internal/upstreamflavor/ }
- { name: FuzzConfigured, pkg: ./internal/upstreamflavor/ }
- { name: FuzzPodmanEventLabelFilter, pkg: ./internal/visibility/ }
- { name: FuzzCatalogReachability, pkg: ./internal/cmd/ }
- { name: FuzzValidateServerShutdownGrace, pkg: ./internal/config/ }

steps:
# Stays audit for stage 1: this job already has an open, in-repo
Expand All @@ -115,7 +117,7 @@ jobs:
# with the otherwise-identical quality-fuzz-nightly.yml job.
- name: Harden Runner
if: ${{ inputs.skip_harden_runner != true }}
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down
31 changes: 19 additions & 12 deletions .github/workflows/quality-fuzz-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ run-name: >-
# Tier 2 of the fuzz strategy. Tier 1 lives in `ci-verify.yml`'s reusable
# `go-ci` fuzz matrix and gives most fuzzers a 60-second budget on every
# PR/push to main so obvious regressions fail fast, except FuzzLoadYAML,
# FuzzHijackBidirectionalStream, and FuzzValidateUpstreamHijackInactivityTimeout,
# which are heavy enough that they reach hosted CI only in this nightly tier
# and the monthly tier below (FuzzLoadYAML and FuzzHijackBidirectionalStream
# also run in the local pre-push smoke test in `lefthook.yml`). This workflow is
# FuzzHijackBidirectionalStream, FuzzValidateUpstreamHijackInactivityTimeout,
# and FuzzValidateServerShutdownGrace, which are heavy enough that they reach
# hosted CI only in this nightly tier and the monthly tier below (FuzzLoadYAML
# and FuzzHijackBidirectionalStream also run in the local pre-push smoke test
# in `lefthook.yml`), and
# FuzzCatalogReachability, whose value is in long coverage-guided runs against
# the startup validator's bounded route search rather than in a 60-second
# regression smoke. This workflow is
# where the deep coverage work
# happens: 15 minutes per fuzzer by default (overridable via
# `workflow_dispatch` input up to the job `timeout-minutes` cap), every
Expand Down Expand Up @@ -62,18 +66,19 @@ jobs:
strategy:
fail-fast: false
# The org is on the Free plan: 20 concurrent jobs across every repo.
# This matrix is 22 on its own, and portwing's Deep Fuzz is also
# `30 9 * * *` and asks for 7 at the same minute, so 29 jobs contend
# This matrix is 28 on its own, and portwing's Deep Fuzz is also
# `30 9 * * *` and asks for 7 at the same minute, so 35 jobs contend
# for 20 slots. Jobs admitted over the ceiling get starved (`execs`
# flatlining at 0/sec) and then reclaimed with
# "The runner has received a shutdown signal", exit 143, which reads
# as a fuzz failure but is an instrument failure: no `--- FAIL`, no
# crasher written to testdata. That killed 8, 2 and 7 jobs on the
# nights of 2026-08-24/25/26 and 4 on 08-27. The one night it went
# 22/22 (08-28) was the night GitHub deferred the schedule to 20:56
# UTC, clear of the collision. 12 leaves portwing's 7 intact inside
# the ceiling with a slot to spare. Do not raise this past 13 while
# the plan is Free and portwing shares the minute.
# green end to end (08-28, when the matrix was 22) was the night
# GitHub deferred the schedule to 20:56 UTC, clear of the collision.
# 12 leaves portwing's 7 intact inside the ceiling with a slot to
# spare. Do not raise this past 13 while the plan is Free and
# portwing shares the minute.
max-parallel: 12
matrix:
fuzzer:
Expand All @@ -98,11 +103,13 @@ jobs:
- { name: FuzzProxyHeadersAndBody, pkg: ./internal/proxy/ }
- { name: FuzzHijackHeadersAndBody, pkg: ./internal/proxy/ }
- { name: FuzzHijackBidirectionalStream, pkg: ./internal/proxy/ }
- { name: FuzzPathRoutingDifferential, pkg: ./differential/ }
- { name: FuzzPathRoutingDifferential, pkg: ./internal/differential/ }
- { name: FuzzVisibilityFilter, pkg: ./internal/visibility/ }
- { name: FuzzClassify, pkg: ./internal/upstreamflavor/ }
- { name: FuzzConfigured, pkg: ./internal/upstreamflavor/ }
- { name: FuzzPodmanEventLabelFilter, pkg: ./internal/visibility/ }
- { name: FuzzCatalogReachability, pkg: ./internal/cmd/ }
- { name: FuzzValidateServerShutdownGrace, pkg: ./internal/config/ }

steps:
# Stage 1 of the harden-runner egress rollout: pure Go build/fuzz, no
Expand All @@ -113,7 +120,7 @@ jobs:
# the extra defensive hosts rather than a minimal guess). proxy.golang.org
# serves module zips via signed redirects to storage.googleapis.com.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quality-go-bench-monthly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
# Docker. Same endpoint set as quality-fuzz-nightly.yml — see that
# file's comment for the reasoning on each host.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quality-integration-engines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
# the busybox sentinel image from Docker Hub — same variable-CDN
# reasoning as quality-integration.yml. Revisit in stage 2.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/quality-integration-podman.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
# whichever Ubuntu archive mirror the runner region picks — not a
# fixed, documented endpoint set. Revisit in stage 2.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down Expand Up @@ -235,7 +235,7 @@ jobs:
# Stays audit for stage 1: same apt-get/mirror reasoning as the
# rootful leg above. Revisit in stage 2.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quality-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
# Docker Hub, whose CDN endpoints (production.cloudflare.docker.com
# and friends) aren't a fixed, documented set. Revisit in stage 2.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/quality-mutation-monthly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
count: ${{ steps.matrix.outputs.count }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down Expand Up @@ -100,7 +100,7 @@ jobs:
# This job holds contents: read and no persisted credential; the
# write-capable update-badge job stays on block.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
disable-sudo: true
Expand Down Expand Up @@ -187,7 +187,7 @@ jobs:
# Stage 1 of the harden-runner egress rollout: only downloads
# artifacts — all GitHub-internal traffic.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down Expand Up @@ -390,7 +390,7 @@ jobs:
steps:
# Pushes one commit back to origin — GitHub-internal traffic only.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quality-soak-weekly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
# 10–24 minutes (step-security/harden-runner#679). Audit mode retains
# runtime telemetry while allowing the four-hour gate to finish.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1; step-security/harden-runner#679
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0; step-security/harden-runner#679
with:
egress-policy: audit
disable-sudo: true
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/quality-tri-tool-conformance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
# Stage 1 of the harden-runner egress rollout: no Docker in this leg,
# just the route-normalizer self-test against the checked-out repo.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down Expand Up @@ -99,7 +99,7 @@ jobs:
# current-standard rows can each resolve to different registry hosts —
# not a fixed endpoint set. Revisit in stage 2.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit

Expand Down Expand Up @@ -166,7 +166,7 @@ jobs:
# artifacts and aggregates JSON locally — all GitHub-internal traffic,
# no checkout even needed.
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
allowed-endpoints: >
Expand Down
22 changes: 20 additions & 2 deletions .github/workflows/release-cut.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,28 @@ jobs:
actions: read
contents: write # Push the annotated release tag
steps:
# PKG-1: block mode. Every host here showed up in this job's harden-runner
# audit log for the v2.1.0, v2.1.0-rc.2 and v2.1.0-rc.1 cuts, except the
# two Node download hosts, which a warm tool cache hides until the day
# the runner image stops shipping Node 24.
# github.com: Checkout, and Create and push release tag
# api.github.com: the curl loop in ./.github/actions/verify-ci-success
# raw.githubusercontent.com: Setup Node's actions/node-versions manifest
# objects.githubusercontent.com: Setup Node's toolchain tarball on a cold
# tool cache, the legacy redirect twin of the host below
# release-assets.githubusercontent.com: that same tarball, current host
# *.actions.githubusercontent.com: Actions runtime and log upload
- name: Harden Runner
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: audit
egress-policy: block
allowed-endpoints: >
github.com:443
api.github.com:443
raw.githubusercontent.com:443
objects.githubusercontent.com:443
release-assets.githubusercontent.com:443
*.actions.githubusercontent.com:443

- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down
Loading
Loading