Repository navigation
feat(gate): hold a release whose native Client serves its protected path to anyone - #89
Merged
Merged
Conversation
…ath to anyone Before the barrier opens, the gate requests the inputs' protectedPath anonymously from protectedBy's Canary service: a 2xx is E_CLIENT_OPEN and holds the release, no answer holds it, and any other answer passes. Vendors deploy-kit at main with #630. Closes #86.
ExtraToast
enabled auto-merge (squash)
October 26, 2026 08:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #86.
Problem
A native Client signs people in itself, and the model cannot see whether its image enforces that. deploy-kit's
E_CLIENT_OPEN(chapter 17) is the proof the release asks for. Before any member is promoted, the gate requests the Client's protected path anonymously, and a 2xx holds the release. The inputs have carried the path since deploy-kit#597, and since deploy-kit#630 also the member that serves it. Nothing asked yet.Change
mainat 3afe557, with #630:releaseGate.protectedBybesideprotectedPath. The generated types follow.may-promote, once the barrier is open and the inputs carryprotectedPath, the gate asksprotectedByfor it: once, at its Canary service, with no credentials and no redirect followed. The request goes through the analysis traffic from feat(gate): send the gate's own requests to the new copy on each analysis iteration #82.E_CLIENT_OPEN: <process> serves <path> to anyone (<status>).401, a redirect or a404included:… and <process> refuses <path> to a stranger (<status>).protectedBymember that did not change in the release is not asked: its image was asked when it last did. Its Canary service has no new copy behind it anyway.503, with nothing sent.confirm-promotionrow and a new bullet say so.To know
protectedPath, andmay-promoteanswers as before.TestMayPromote's helpermidReleasenow takes gate options, so a test can hand it a fake traffic source.Checks
clientopen_test.go:401,302,404,200,204, and no answer, each with the one URL asked,http://auth-api-canary.auth-system.svc.cluster.local:8080/api/me;go test ./...passes, envtest included;internal/gateis at 97.7% coverage.golangci-lint: 0 issues.