> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-docs-sync-code-change-6bb10a4.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# IPolicyRegistry.updateComposite

> Generated B20 reference for updateComposite(uint64,uint64[]).

## Signature

```solidity theme={null}
function updateComposite(uint64 policyId, uint64[] calldata childPolicyIds) external;
```

| Field               | Value                              |
| ------------------- | ---------------------------------- |
| Selector            | `0xbfe142c0`                       |
| Canonical signature | `updateComposite(uint64,uint64[])` |

## Description

Replaces a composite policy's entire child set with `childPolicyIds`. No partial update or clear-the-list operation is supported.

The new child set must contain between `MIN_COMPOSITE_CHILD_POLICIES` (`2`) and `MAX_COMPOSITE_CHILD_POLICIES` (`4`) existing simple policies, subject to the same validation rules as `createCompositePolicy`. Authorization evaluates each child's current membership live on every call — the update takes effect immediately.

## Revert conditions

The canonical revert order is:

1. `PolicyNotFound` — `policyId` does not exist.
2. `IncompatiblePolicyType` — `policyId` is a simple policy, not a `UNION` or `INTERSECT` composite.
3. `Unauthorized` — caller is not the current admin. A composite whose admin has been renounced (`address(0)`) can never be updated.
4. `ChildPoliciesOutsideOfRange` — `childPolicyIds.length` is outside `[2, 4]`.
5. `PolicyNotFound` — a child policy ID does not exist.
6. `InvalidChildPolicy` — a child policy is itself a composite or a built-in sentinel (`ALWAYS_ALLOW` or `ALWAYS_BLOCK`).

## Events emitted

Emits only `CompositePolicyUpdated(policyId, updater, childPolicyIds)`. The admin does not change, so no `PolicyAdminUpdated` event is emitted.

## Access control

Callable by the current policy admin for the target composite policy.

## Policy interaction

This is part of the singleton PolicyRegistry surface used by B20 policy scopes. A composite policy ID is passed to a B20 policy slot as an opaque `uint64`, identical to a simple policy ID — no B20 contract changes are required.

## Example

```solidity theme={null}
IPolicyRegistry(target).updateComposite(arg0, arg1);
```
