{"record":{"id":"748f7fd7b9525816","repo":"zeroclaw-labs/zeroclaw","slug":"address-address-sets-bits-beyond-len","errorCode":null,"errorMessage":"address '{address}' sets bits beyond /{len}","messagePattern":"address '(.+?)' sets bits beyond /(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-infra/src/net_guard.rs","lineNumber":636,"sourceCode":"            .ok_or_else(|| anyhow::Error::msg(\"missing '/<prefix-length>'\"))?;\n\n        let network = address\n            .parse::<std::net::Ipv6Addr>()\n            .map_err(|e| anyhow::Error::msg(format!(\"'{address}' is not an IPv6 address: {e}\")))?;\n        let len = length\n            .parse::<u8>()\n            .map_err(|e| anyhow::Error::msg(format!(\"'{length}' is not a prefix length: {e}\")))?;\n\n        if !RFC6052_PREFIX_LENGTHS.contains(&len) {\n            anyhow::bail!(\n                \"prefix length /{len} is not one of the RFC 6052 lengths /32, /40, /48, /56, /64, /96\"\n            );\n        }\n\n        // `len` is at most 96 here, so the shift is always in range.\n        let host_bits = u128::MAX >> len;\n        if u128::from_be_bytes(network.octets()) & host_bits != 0 {\n            anyhow::bail!(\"address '{address}' sets bits beyond /{len}\");\n        }\n\n        Ok(Self { network, len })\n    }\n\n    /// The prefix length in bits.\n    #[must_use]\n    pub const fn prefix_len(&self) -> u8 {\n        self.len\n    }\n\n    /// The prefix network address, with all bits beyond [`Self::prefix_len`]\n    /// zero.\n    #[must_use]\n    pub const fn network(&self) -> std::net::Ipv6Addr {\n        self.network\n    }\n","sourceCodeStart":618,"sourceCodeEnd":654,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-infra/src/net_guard.rs#L618-L654","documentation":"Error \"address '{address}' sets bits beyond /{len}\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-infra/src/net_guard.rs:636 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Clear the bits beyond the prefix length in the NAT64 address so it is a proper network prefix."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}