Repository navigation
feat(protected_environments): replace approval groups - #657
Merged
Merged
Conversation
Let maintainers replace one approver group while keeping its record identity, approval count, membership and other protection grants. Allow only the selected display description to follow the new group and require matching authoritative confirmation after a single non-replayed request. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Preserve both approval group operations and their detail actions after the approved membership slice reached dev. Regenerate localization from combined sources and verify the complete app and API suites in the integrated tree. Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
Record the concrete review artifact while keeping the approval and CI boundary explicit. 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 approval-group replacement flow, transport, and test coverage
- Checks: CI passed (Flutter quality gate, iOS SDK validation, policy, and triage)
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-environment approval rules can now replace their group by
exact shared group ID. Select an existing group-only rule, enter a different
positive group ID and the exact environment name, and acknowledge the change.
Unknown membership, user/role rules, unchanged or already represented groups,
and group-level rules cannot be edited.
Complete inventory/detail preflight precedes one non-replayed, non-redirected
PUT containing only the existing rule ID and new group ID. Response and strict
read-back preserve stable identity, approval count, membership, every other
approval/deploy record and legacy count. Only the selected group's display
description may change with its identity; both confirmed snapshots must agree
on that description too. Uncertainty requires inspection and fresh confirmation;
account replacement isolates late results.
Closes #656
Validation
dart format --output=none --set-exit-if-changed .(1,004 files, no changes); CI English policy passesflutter analyze --no-pubreports no issuesdevintegrated; app/API suites rerun: app 4,790; API 3,309. Other package suites pass: design system 135; models 204; secure storage 5 (8,443 total).flutter gen-l10n; models unchangedpreservation; invalid/unchanged/duplicate groups, stale/ambiguous rules,
description-aware comparison, uncertainty, overlap and account replacement.
Checklist
dev; independent branch fromorigin/dev, then integrated the approved membership slice from currentdevCloses #656Screenshots
Synthetic widget captures with real local fonts, scrolled to confirmation:
Notes for reviewers
GitLab requires Premium/Ultimate, project CI/CD, management permission and
sharing with the new group. The app does not enumerate approvers or guarantee
the approval count can be satisfied. Group-level writes, user/role conversion,
and group discovery remain separate work. The approved membership-editing slice
from PR #655 is integrated from
dev; both features are tested together.Group descriptions are derived display metadata: changing the group can update
only the selected rule's description. No description is used as identity or
permission evidence. The new response and authoritative read-back must otherwise
exactly agree. The endpoint provides no atomic compare-and-set; another actor
can change the rule between requests. Preservation covers reported/modelled
fields, not unknown server metadata. Existing browsing and other writes are
unchanged; the existing strict approval-group reader is reused.
References: protected-environment update,
implementation notes.