feat(policy): implement hot-reloading for workspace policies

This change eliminates the need for a CLI restart when a user accepts new or
changed project-level policies. Workspace rules are now dynamically injected
into the active PolicyEngine instance.

Key improvements:
- Added Config.loadWorkspacePolicies() to handle mid-session rule injection.
- Fully encapsulated acceptance and integrity logic within PolicyUpdateDialog.
- Integrated centralized keybindings (Command.ESCAPE) for dialog dismissal.
- Refactored PolicyIntegrityManager tests to use a real temporary directory
  instead of filesystem mocks for improved reliability.
- Updated copyright headers to 2026 across affected files.
- Added UI snapshot tests for the policy update dialog.

Addresses review feedback from PR #18682.
This commit is contained in:
Abhijit Balaji
2026-02-18 12:54:47 -08:00
parent 8feff1cc9b
commit 662654c5d2
13 changed files with 248 additions and 269 deletions
@@ -167,16 +167,12 @@ export const DialogManager = ({
/>
);
}
if (
uiState.isPolicyUpdateDialogOpen &&
uiState.policyUpdateConfirmationRequest
) {
if (uiState.isPolicyUpdateDialogOpen) {
return (
<PolicyUpdateDialog
onSelect={uiActions.handlePolicyUpdateSelect}
scope={uiState.policyUpdateConfirmationRequest.scope}
identifier={uiState.policyUpdateConfirmationRequest.policyDir}
isRestarting={uiState.isRestartingPolicyUpdate}
config={config}
request={uiState.policyUpdateConfirmationRequest!}
onClose={() => uiActions.setIsPolicyUpdateDialogOpen(false)}
/>
);
}