Add class allow-list migration controls (cherry-pick #4888) - #4905
Merged
Conversation
- support `"*"` in `class_allow_list` to allow all component classes, ignore remaining entries, and record an audit event - add `class_list_enforcement_mode` with `enforce` (default) and `warn` behavior - include the enforcement mode in provisioned client and server resource templates - document 2.7-to-2.8 migration options in the 2.8 release notes, including unchanged BYOC behavior - add unit coverage for wildcard, warn/enforce modes, site configuration filtering, and provisioning defaults NVFLARE 2.8 adds component class authorization for non-BYOC jobs. Applications migrating from 2.7 need a secure default plus explicit transition options while they inventory and configure application classes. BYOC-enabled users and jobs continue to bypass the built-in class allow-list check, preserving their 2.7 behavior. - `./runtest.sh -s` - 152 tests passed, 1 skipped across targeted and related unit suites - `git diff --check` The full strict Sphinx build parsed the new release-note content but continues to report 585 pre-existing documentation warnings elsewhere in the repository. --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit c3daf63)
Contributor
Greptile SummaryThis PR adds migration controls for component class allow-listing. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (3): Last reviewed commit: "Merge branch 'main' into main-class-allo..." | Re-trigger Greptile |
nvidianz
requested review from
IsaacYangSLA,
YuanTingHsieh,
chesterxgchen and
pcnudde
July 14, 2026 21:50
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #4905 +/- ##
==========================================
+ Coverage 61.72% 61.78% +0.05%
==========================================
Files 985 985
Lines 95681 95805 +124
==========================================
+ Hits 59062 59196 +134
+ Misses 36619 36609 -10
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
pcnudde
approved these changes
Jul 15, 2026
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.
Description
Cherry-pick of #4888 (merged to
2.8as c3daf63) ontomain, bringing the class allow-list migration controls forward:"*"inclass_allow_listto allow all component classes, ignore remaining entries, and record an audit eventclass_list_enforcement_modewithenforce(default) andwarnbehaviorclass_allow_listConflict resolutions vs
main(which had diverged via #4841):master_template.yml: kept main's{~~class_allow_list~~}placeholder (filled fromDEFAULT_CLASS_ALLOW_LISTby the static file builder) and added only the newclass_list_enforcement_modeline to both client and server resource blocksdefault_component_policy.py: kept main's copy (identical list); updated its docstring since the authorizer now does use it as the implicit defaultstatic_file_builder_test.py: kept main'sDEFAULT_CLASS_ALLOW_LIST-based assertion instead of the PR's inline list; the new enforcement-mode assertion is includedunsafe_component_detection.rst: adopted the PR's default-with-audit semantics, keeping main's provisioning andSimEnvsentencesNote: this intentionally changes main's #4841 behavior for unconfigured sites from "fail with an explicit setup error" to "use the curated built-in default and record an audit event", matching 2.8. Main's no-fallback tests were superseded by the PR's
test_uses_default_allow_list_*tests.Types of changes
./runtest.sh.Validation: 155 passed, 1 skipped across all unit suites referencing the policy/authorizer; flake8 and black clean on changed files.