`Registry.sol` generate clone `Anchor.sol` never work. Profile owner cannot use their `Anchor` wallet
Add this test to `Registry.t.sol` test file to reproduce the issue.\\n```\\n    function test_Audit_createProfile() public {\\n        // create profile\\n        bytes32 newProfileId = registry().createProfile(nonce, name, metadata, profile1_owner(), profile1_members());\\n        Registry.Profile memory profile = registry().getProfileById(newProfileId);\\n        Anchor _anchor = Anchor(payable(profile.anchor));\\n\\n        console.log("registry address: %s", address(registry()));\\n        console.log("anchor address: %s", profile.anchor);\\n        console.log("anchor.registry: %s", address(_anchor.registry()));\\n\\n        emit log_named_bytes32("profile.id", profile.id);\\n        emit log_named_bytes32("anchor.profile.id", _anchor.profileId());\\n\\n        Anchor _anchor_proxy = Anchor(payable(address( _anchor.registry())));\\n        assertEq(address(registry()),address(_anchor.registry()) ,"wrong anchor registry");\\n    }\\n```\\n\\nWhat happen with `Anchor.sol` is it expect `msg.sender` is `Registry` contract. But in reality `msg.sender` is a proxy contract generated by Solady during `CREATE3` operation.\\n```\\n    constructor(bytes32 _profileId) {\\n        registry = Registry(msg.sender);//@audit H Registry address here is not Registry. msg.sender is a proxy contract. Create3 deploy 2 contract. one is proxy. other is actual bytecode.\\n        profileId = _profileId;\\n    }\\n```\\n\\nThis can be seen with Solady comment for proxy contract. `msg.sender` above is middleman proxy contract. Not `Registry` contract. Solady generate 2 contract during CREATE3 operation. One is proxy contract. Second is actual bytecode.
Move `msg.sender` into constructor parameter\\n```\\nFile: allo-v2\\contracts\\core\\Registry.sol\\n            bytes memory creationCode = abi.encodePacked(type(Anchor).creationCode, abi.encode(_profileId, address(this))); //@audit fix creation code\\n\\n            // Use CREATE3 to deploy the anchor contract\\n            anchor = CREATE3.deploy(salt, creationCode, 0); \\nFile: allo-v2\\contracts\\core\\Anchor.sol\\n    constructor(bytes32 _profileId, address _registry) {\\n        registry = Registry(_registry);\\n        profileId = _profileId;\\n    }\\n```\\n
`Anchor.execute()` function will not work because `registry` address point to empty proxy contract and not actual `Registry` so all call will revert.\\n```\\nFile: allo-v2\\contracts\\core\\Anchor.sol\\n    function execute(address _target, uint256 _value, bytes memory _data) external returns (bytes memory) {\\n        // Check if the caller is the owner of the profile and revert if not\\n        if (!registry.isOwnerOfProfile(profileId, msg.sender)) revert UNAUTHORIZED();\\n```\\n\\nProfile owner cannot use their wallet `Anchor`. All funds send to this `Anchor` contract will be lost forever.
```\\n    function test_Audit_createProfile() public {\\n        // create profile\\n        bytes32 newProfileId = registry().createProfile(nonce, name, metadata, profile1_owner(), profile1_members());\\n        Registry.Profile memory profile = registry().getProfileById(newProfileId);\\n        Anchor _anchor = Anchor(payable(profile.anchor));\\n\\n        console.log("registry address: %s", address(registry()));\\n        console.log("anchor address: %s", profile.anchor);\\n        console.log("anchor.registry: %s", address(_anchor.registry()));\\n\\n        emit log_named_bytes32("profile.id", profile.id);\\n        emit log_named_bytes32("anchor.profile.id", _anchor.profileId());\\n\\n        Anchor _anchor_proxy = Anchor(payable(address( _anchor.registry())));\\n        assertEq(address(registry()),address(_anchor.registry()) ,"wrong anchor registry");\\n    }\\n```\\n