Skip to content

Sync develop → main for v1.7.1 chart release (egress-enforcement preflight helm test, inert) - #254

Merged
saadqbal merged 5 commits into
mainfrom
sync/develop-to-main-v1.7.1
Jun 15, 2026
Merged

Sync develop → main for v1.7.1 chart release (egress-enforcement preflight helm test, inert)#254
saadqbal merged 5 commits into
mainfrom
sync/develop-to-main-v1.7.1

Conversation

@saadqbal

@saadqbalsaadqbal commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Release chart v1.7.1 to main. All changes are additive and inert — no behavioural change on the fleet at upgrade time.

Contents (main 1.7.0 → develop 1.7.1)

Release type

Phase-1-class: inert. The enforcement check ships dormant (lockdown default-off) and is a helm test hook, so the fleet auto-upgrade to 1.7.1 changes nothing operationally — it just makes helm test <release> available to operators who flip the lockdown.

After merge

Publish GitHub Release v1.7.1 tagged on main → the release workflow packages the chart to gh-pages → fleet auto-upgrades at :23.

Rolls under the §8.2 egress epic (client-runtime#102, client-runtime#104).

🤖 Generated with Claude Code


Note

Low Risk
Additive chart release: enforcement Job is gated off by default and only runs on explicit helm test; PVC suites are test-only with no production manifest changes.

Overview
Releases the client Helm chart as v1.7.1 (Chart.yaml version/appVersion bump).

Egress lockdown verification (#104): When networkPolicy.training.allowExternalHttps is false and a probe host is set, a new helm.sh/hook: test Job runs a training-labelled curl probe against :443 and passes only if TCP egress is blocked (curl exit 7/28); a successful connect fails the test with explicit CNI guidance. The template does not render with default values or when enforcementProbeHost is empty, so install/upgrade and auto-upgrade stay unchanged.

Values/schema: Adds networkPolicy.training.enforcementProbeHost (default 1.1.1.1 in values.yaml) for operators who enable the §8.2 lockdown.

Tests only: New helm-unittest suites for the egress check Job, logs-pvc, and mysql-storage-pvc templates (PVC/PV naming, keep policy, hostPath vs dynamic paths)—no runtime template changes beyond the new check.

Reviewed by Cursor Bugbot for commit d70e7ff. Bugbot is set up for automated code reviews on this repo. Configure here.

saadqbaland others added 3 commits June 12, 2026 15:55
…250)
The mysql-storage-pvc template (PVC + bare-metal hostPath PV backing the
per-cluster MySQL state store) had no dedicated suite. Add one covering:
- dynamic-PVC-only path (hostPath.enabled=false, managed default)
- hostPath PV+PVC pair, claimRef binding, fixed release-scoped path
- the helm.sh/resource-policy:keep annotation protecting the state store
- access-mode defaulting, pvc size, and storageClass wiring
Tests-only; no source/template/values changes. Security invariants unchanged.
Co-authored-by: Claude <noreply@anthropic.com>
The logs-pvc template (PV + PVC for client logs) had no dedicated
helm-unittest suite. Adds tests/logs_pvc_test.yaml covering the
dynamic-provisioning PVC path and the hostPath PV+PVC path.
Co-authored-by: Claude <noreply@anthropic.com>
feat(egress-proxy): deploy-time egress-enforcement pre-flight (non-blocking) [client-runtime#104]
@saadqbalsaadqbal added the skip-fr-gate Bypass FR gate for this PR (use only for bootstrap or emergencies — visible in audit) label Jun 12, 2026
@saadqbalsaadqbal self-assigned this Jun 12, 2026
Comment threadclient/templates/egress-enforcement-check.yaml Outdated
…P code [#104] (#255)
Bugbot (PR #254): the check treated curl HTTP code 000 as proof of a block, but a
TCP connection that succeeds (egress OPEN) then fails TLS verification also yields
000 — so `helm test` could pass on a non-enforcing CNI when probing an IP whose
cert doesn't validate (the default 1.1.1.1 without -k). It conflated "TLS failed"
with "egress blocked", defeating the check.
Key the verdict off TCP reachability via curl's exit code instead of the HTTP
status, and add -k so TLS is explicitly irrelevant: exit 28 (timeout) / 7 (connect
failed) => egress blocked => test PASSES (exit 0); any other outcome (0 success, or
a TLS-/HTTP-layer error such as 35/52/60 — all of which require the TCP connect to
have already succeeded) => egress reached => NOT enforced => test FAILS (exit 1).
Tests assert the verdict keys on the exit code (rc=$?, -k) and guard against a
regression to the old http_code/000 logic. helm-unittest 248/248; lint clean.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 9edd87e. Configure here.

Comment threadclient/templates/egress-enforcement-check.yaml
…connect succeeded" [#104] (#256)
Bugbot (PR #254): the non-enforcement WARNING ("...reached :443 ... the TCP connect
succeeded") was emitted for every non-{7,28} curl exit code, including exit 6 (DNS
resolution failure) where no TCP connection was ever attempted — so the failure
output could contradict what actually happened and mislead troubleshooting.
Split the verdict into a case:
7|28 => TCP never established => egress blocked (pass, exit 0)
6 => INCONCLUSIVE: could not resolve host, no TCP attempted => fail (exit 1)
with an accurate message (never claim "enforced" on a DNS failure)
else (0, or TLS-/HTTP-layer errors 35/52/56/60 that all require a completed TCP
connect) => host reached => NOT enforced (exit 1)
Default probe host is an IP, so exit 6 only arises for a hostname probe on a cluster
with broken DNS. helm-unittest 248/248; lint clean.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@saadqbal
saadqbal merged commit 8b15c98 into mainJun 15, 2026
33 checks passed
@saadqbal
saadqbal deleted the sync/develop-to-main-v1.7.1 branch July 9, 2026 11:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-fr-gateBypass FR gate for this PR (use only for bootstrap or emergencies — visible in audit)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@saadqbal@divyasinghds@aptracebloc@LukasWodka