Repository navigation
feat(protected_environments): remove deploy groups - #663
Open
sjungwon03 wants to merge 2 commits into
Open
sjungwon03 wants to merge 2 commits into
sjungwon03 wants to merge 2 commits into
Conversation
Allow obsolete group deployment access to be removed while retaining environment protection and every other grant. Require complete preflight, exact-name consent and matching response/read-back evidence, including for the final deploy grant. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Record the review entry point for the protected environment deployment group removal slice. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
sjungwon03-ai
approved these changes
Oct 18, 2026
sjungwon03-ai
left a comment
Member
There was a problem hiding this comment.
Review summary
Verdict: Approved
- Reviewed: protected-environment deploy-group removal API, controller, dialog safeguards, and tests
- Checks: all reported GitHub checks passed
9 tasks done
This branch has not been deployed
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.
Summary
Project protected environments can now remove one existing group-based deploy grant. The dialog identifies the grant and membership, shows existing deploy/approval access, warns about deployment loss and last-grant impact, and requires exact-name confirmation and acknowledgement reset by edits.
Complete inventory/detail preflight rejects stale, missing, ambiguous and invalid targets. One PUT sends only the selected grant ID and
_destroy: true. The response and authoritative read-back must equal the prior model with just that grant removed, preserving the protected environment, every other deploy grant and all approval rules/counts. Uncertain writes require fresh inspection/confirmation; an already-removed grant cannot be submitted again. Pending inputs/dismissal and account replacement are isolated.Closes #662
Validation
dart format --output=none --set-exit-if-changed .flutter analyzereports no issuesbuild_runneris not applicableChecklist
devand links one issue withCloses #Screenshots
Fixture-only captures show the confirmation portion of the scrollable dialog.
Notes for reviewers
The documented deploy-record removal uses PUT with the existing record ID and
_destroy: true. This slice does not call environment unprotection. The write disables redirects and OAuth replay and checks HTTP status before strict full-rule parsing. Empty deploy access is accepted when the last grant is removed; partial or absent protection rules cannot confirm success.Selectable records require positive stable group/grant IDs, no user selector and explicit direct/inherited membership. Reported role metadata is allowed on group grants. Unknown membership and group-level rules remain read-only; no role-only/user grant, group membership or project-sharing mutation is added.
Premium/Ultimate, enabled CI/CD and management permission are server requirements. The endpoint has no atomic compare-and-set, so another actor can change protection between preflight and read-back. Preservation covers modelled fields, and no live role/tier/self-hosted version matrix was validated. See implementation and evidence.