# Access profile wire
This leaf owns the canonical byte representation of profile mutations. It has no persistence or retained state. The unchanged canonical profile value codec and its public value identities are reexported from `kcode-k1-access-profile-codec`.
## Public API
The crate reexports `encode_profile`, `decode_profile`, `AuthorizationProfile`, its subject and identifier types, and `ProfileName`. It exposes `OperationId`, `ProfileOperation`, `ProfileMutation`, `encode_operation`, and `parse_operation`.
`ProfileMutation` has the original `Create`, `Replace`, and `Delete` variants plus:
```rust
CreateNamed { owner: UserId, name: ProfileName, profile: AuthorizationProfile }
Rename { profile_id: ProfileId, actor: UserId, name: ProfileName }
```
`ProfileMutation` and `ProfileOperation` implement `Clone`, `Debug`, `Eq`, and `PartialEq`. The reexports retain the exact identities of their defining crates: profile codec identities come through the codec, `ProfileId` comes through values, and `ProfileName` comes through records.
## Mutation bytes
All mutations begin `[1][action][operation_id:16]`. The original actions and bytes are unchanged: Create is action `1` followed by `[owner:12][profile...]`; Replace is action `2` followed by `[profile_id:12][actor:12][profile...]`; Delete is action `3` followed by `[profile_id:12][actor:12]` and is exactly 42 bytes.
CreateNamed is action `4` followed by `[owner:12][name_length:u32 big-endian][name UTF-8 bytes][profile...]`. Rename is action `5` followed by `[profile_id:12][actor:12][name_length:u32 big-endian][name UTF-8 bytes]`. Name bytes are neither trimmed nor normalized. Parsing rejects truncated names, invalid UTF-8, `ProfileName` validation failures, and trailing Rename bytes.
The crate is synchronous and has no I/O, persistence, migration or legacy decoder, state, authorization decisions, People HTTP behavior, or generic schema framework.