{
  "schemaVersion": 1,
  "generator": "Tree-sitter Rust module traversal",
  "scope": "Declared modules, public syntax, and implementation methods; feature conditions retained. Not compiler-resolved rustdoc.",
  "packages": [
    {
      "name": "l1fe-weave-cli",
      "version": "0.1.0",
      "source": "sigil/weave/tools/weave",
      "manifestSha256": "3b4bee1f6362bd3e41325bccfccbbac585b54af1c3efc4cf3400c91b4c19abae",
      "features": {
        "default": [
          "tui"
        ],
        "tui": [],
        "mock": []
      },
      "publish": true,
      "url": "/reference/rust/l1fe-weave-cli",
      "modules": [
        {
          "module": "cli",
          "source": "sigil/weave/tools/weave/src/cli.rs",
          "sha256": "deaba87e2fa537e8dd6365cb2bcbf04b9d7a63ad32273a6a5d15ea7de75df088",
          "attributes": "",
          "items": [
            {
              "name": "cli::Cli",
              "kind": "struct_item",
              "signature": "pub struct Cli {\n/// Launch TUI mode\n\n#[arg(short, long)]\npub tui: bool,\n/// Agent DID to use for operations\n\n#[arg(long, env = \"WEAVE_AGENT_DID\")]\npub agent: Option<String>,\n/// Organization DID\n\n#[arg(long, env = \"WEAVE_ORG_DID\")]\npub org: Option<String>,\n/// Configuration file path\n\n#[arg(short, long, env = \"WEAVE_CONFIG\")]\npub config: Option<PathBuf>,\n/// Verbosity level\n\n#[arg(short, long, action = clap::ArgAction::Count)]\npub verbose: u8,\n/// Subcommand to execute\n\n#[command(subcommand)]\npub command: Option<Command>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Parser)]\n#[command(\n    name = \"weave\",\n    about = \"The Weave CLI - Comprehensive data management for the agent-based web\",\n    version,\n    author,\n    long_about = None,\n)]",
              "line": 15
            },
            {
              "name": "cli::Command",
              "kind": "enum_item",
              "signature": "pub enum Command {\n    /// Strand operations\n    #[command(subcommand)]\n    Strand(StrandCommand),\n\n    /// Locus file system operations\n    #[command(subcommand)]\n    Locus(LocusCommand),\n\n    /// Lens database operations\n    #[command(subcommand)]\n    Lens(LensCommand),\n\n    /// Nexus view operations\n    #[command(subcommand)]\n    Nexus(NexusCommand),\n\n    /// DHT operations\n    #[command(subcommand)]\n    Dht(DhtCommand),\n\n    /// AgentFS operations\n    #[command(subcommand)]\n    Agentfs(AgentFsCommand),\n\n    /// Mirror/sync operations\n    #[command(subcommand)]\n    Mirror(MirrorCommand),\n\n    /// Configuration management\n    #[command(subcommand)]\n    Config(ConfigCommand),\n\n    /// Forum tuple space operations\n    #[command(subcommand)]\n    Forum(ForumCommand),\n\n    /// Gnosis knowledge graph operations\n    #[command(subcommand)]\n    Gnosis(GnosisCommand),\n\n    /// Basis vector store operations\n    #[command(subcommand)]\n    Basis(BasisCommand),\n\n    /// dSocial commands over WOVEN\n    #[command(subcommand)]\n    Dsocial(DsocialCommand),\n\n    /// Weft sharded blob publish/fetch (live DHT via weft_store)\n    #[command(subcommand)]\n    Weft(WeftCommand),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 42
            },
            {
              "name": "cli::StrandCommand",
              "kind": "enum_item",
              "signature": "pub enum StrandCommand {\n    /// Create a new strand\n    Create {\n        /// Name for the strand\n        #[arg(short, long)]\n        name: Option<String>,\n\n        /// Agent DID (overrides global)\n        #[arg(long)]\n        agent: Option<String>,\n    },\n\n    /// Append to a strand\n    Append {\n        /// Strand DID\n        strand: String,\n\n        /// Data to append (or read from stdin)\n        data: Option<String>,\n\n        /// Read data from file\n        #[arg(short, long)]\n        file: Option<PathBuf>,\n    },\n\n    /// Read from a strand\n    Read {\n        /// Strand DID\n        strand: String,\n\n        /// Start index\n        #[arg(short, long)]\n        start: Option<u64>,\n\n        /// Length to read\n        #[arg(short, long)]\n        length: Option<u64>,\n    },\n\n    /// List strands\n    List {\n        /// Filter by agent\n        #[arg(long)]\n        agent: Option<String>,\n    },\n\n    /// Replicate a strand\n    Replicate {\n        /// Source strand DID\n        source: String,\n\n        /// Target location\n        #[arg(short, long)]\n        target: Option<String>,\n\n        /// Sparse replication\n        #[arg(long)]\n        sparse: bool,\n\n        /// Hex-encoded 32-byte writer public key (required for remote sparse open\n        /// when the source strand is not already local)\n        #[arg(long)]\n        source_pubkey: Option<String>,\n\n        /// Seconds to wait for dial / discovery / session evidence\n        #[arg(long, default_value_t = 8)]\n        wait_secs: u64,\n    },\n}",
              "docs": "Strand subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 98
            },
            {
              "name": "cli::DsocialCommand",
              "kind": "enum_item",
              "signature": "pub enum DsocialCommand {\n    /// Publish or update a profile\n    Profile {\n        /// Display name\n        display_name: String,\n\n        /// Optional bio\n        #[arg(long)]\n        bio: Option<String>,\n\n        /// Optional avatar Locus reference\n        #[arg(long)]\n        avatar: Option<String>,\n\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// WOVEN space\n        #[arg(long, default_value = \"woven://dsocial/global\")]\n        space: String,\n    },\n\n    /// Publish a post\n    Post {\n        /// Post text\n        text: String,\n\n        /// Attachment Locus reference\n        #[arg(long = \"attachment\")]\n        attachments: Vec<String>,\n\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// WOVEN space\n        #[arg(long, default_value = \"woven://dsocial/global\")]\n        space: String,\n    },\n\n    /// Reply to an event\n    Reply {\n        /// Parent WOVEN event ref\n        parent: String,\n\n        /// Reply text\n        text: String,\n\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// WOVEN space\n        #[arg(long, default_value = \"woven://dsocial/global\")]\n        space: String,\n    },\n\n    /// Follow a DID\n    Follow {\n        /// Target DID\n        target: String,\n\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// WOVEN space\n        #[arg(long, default_value = \"woven://dsocial/global\")]\n        space: String,\n    },\n\n    /// React to an event\n    React {\n        /// Target WOVEN event ref\n        target: String,\n\n        /// Reaction value\n        #[arg(default_value = \"+\")]\n        reaction: String,\n\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// WOVEN space\n        #[arg(long, default_value = \"woven://dsocial/global\")]\n        space: String,\n    },\n\n    /// Read a local dSocial feed\n    Feed {\n        /// Strand name\n        #[arg(long, default_value = \"dsocial\")]\n        strand: String,\n\n        /// Optional WOVEN space filter\n        #[arg(long)]\n        space: Option<String>,\n\n        /// Optional event kind filter\n        #[arg(long)]\n        kind: Option<String>,\n\n        /// Optional author filter\n        #[arg(long)]\n        author: Option<String>,\n\n        /// Maximum entries to print\n        #[arg(short, long)]\n        limit: Option<usize>,\n    },\n}",
              "docs": "dSocial subcommands backed by WOVEN events",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 170
            },
            {
              "name": "cli::LocusCommand",
              "kind": "enum_item",
              "signature": "pub enum LocusCommand {\n    /// Create directory\n    Mkdir {\n        /// Path to create\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n\n        /// Create parent directories\n        #[arg(short, long)]\n        parents: bool,\n    },\n\n    /// Write file\n    Write {\n        /// File path\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n\n        /// Data to write (or read from stdin)\n        data: Option<String>,\n\n        /// Read from file\n        #[arg(short, long)]\n        file: Option<PathBuf>,\n    },\n\n    /// Read file\n    Read {\n        /// File path\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n    },\n\n    /// Delete file or directory\n    Rm {\n        /// Path to delete\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n\n        /// Recursive delete\n        #[arg(short, long)]\n        recursive: bool,\n    },\n\n    /// List directory\n    Ls {\n        /// Directory path\n        #[arg(default_value = \"/\")]\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n\n        /// Long format\n        #[arg(short, long)]\n        long: bool,\n\n        /// Show hidden files\n        #[arg(short = 'a', long)]\n        all: bool,\n    },\n\n    /// Get file statistics\n    Stat {\n        /// File path\n        path: String,\n\n        /// Drive DID\n        #[arg(long)]\n        drive: String,\n    },\n}",
              "docs": "Locus file system subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 286
            },
            {
              "name": "cli::LensCommand",
              "kind": "enum_item",
              "signature": "pub enum LensCommand {\n    /// Put key-value pair\n    Put {\n        /// Key\n        key: String,\n\n        /// Value\n        value: String,\n\n        /// Database DID\n        #[arg(long)]\n        db: String,\n    },\n\n    /// Get value by key\n    Get {\n        /// Key\n        key: String,\n\n        /// Database DID\n        #[arg(long)]\n        db: String,\n    },\n\n    /// Delete key\n    Del {\n        /// Key\n        key: String,\n\n        /// Database DID\n        #[arg(long)]\n        db: String,\n    },\n\n    /// Range query\n    Range {\n        /// Start key\n        #[arg(long)]\n        start: Option<String>,\n\n        /// End key\n        #[arg(long)]\n        end: Option<String>,\n\n        /// Database DID\n        #[arg(long)]\n        db: String,\n\n        /// Limit results\n        #[arg(short, long)]\n        limit: Option<usize>,\n    },\n\n    /// List sub-databases\n    List {\n        /// Parent database DID\n        #[arg(long)]\n        db: String,\n    },\n}",
              "docs": "Lens database subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 374
            },
            {
              "name": "cli::NexusCommand",
              "kind": "enum_item",
              "signature": "pub enum NexusCommand {\n    /// Create a nexus view\n    Create {\n        /// View name\n        name: String,\n\n        /// Input strands (comma-separated)\n        #[arg(long)]\n        inputs: String,\n\n        /// Ordering strategy\n        #[arg(long, default_value = \"timestamp\")]\n        ordering: String,\n    },\n\n    /// Add input to nexus\n    AddInput {\n        /// Nexus DID\n        nexus: String,\n\n        /// Strand DID to add\n        strand: String,\n    },\n\n    /// View nexus entries\n    View {\n        /// Nexus DID\n        nexus: String,\n\n        /// Start index\n        #[arg(short, long)]\n        start: Option<u64>,\n\n        /// Number of entries\n        #[arg(short, long)]\n        limit: Option<usize>,\n    },\n}",
              "docs": "Nexus view subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 437
            },
            {
              "name": "cli::DhtCommand",
              "kind": "enum_item",
              "signature": "pub enum DhtCommand {\n    /// Join the DHT network\n    Join {\n        /// Bootstrap nodes\n        #[arg(long)]\n        bootstrap: Vec<String>,\n\n        /// Local port\n        #[arg(short, long)]\n        port: Option<u16>,\n    },\n\n    /// Get DHT statistics\n    Stats,\n\n    /// List connected peers\n    Peers,\n\n    /// Announce content\n    Announce {\n        /// Content DID\n        did: String,\n    },\n\n    /// Find content\n    Find {\n        /// Content DID\n        did: String,\n    },\n}",
              "docs": "DHT subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 478
            },
            {
              "name": "cli::WeftCommand",
              "kind": "enum_item",
              "signature": "pub enum WeftCommand {\n    /// Publish bytes (literal) or a file path into live Weft DHT records\n    Publish {\n        /// Literal payload or file path\n        input: String,\n\n        /// Bootstrap nodes (optional; node config used if empty)\n        #[arg(long)]\n        bootstrap: Vec<String>,\n\n        /// Chunk size override\n        #[arg(long)]\n        chunk_size: Option<usize>,\n    },\n\n    /// Discover + fetch a Weft payload by root / weft-id (hex)\n    Fetch {\n        /// Weft root / weft-id (hex)\n        weft_id: String,\n\n        /// Output path\n        #[arg(short, long)]\n        out: Option<PathBuf>,\n\n        /// Bootstrap nodes (optional)\n        #[arg(long)]\n        bootstrap: Vec<String>,\n    },\n}",
              "docs": "Weft subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 511
            },
            {
              "name": "cli::AgentFsCommand",
              "kind": "enum_item",
              "signature": "pub enum AgentFsCommand {\n    /// Initialize AgentFS\n    Init {\n        /// Root directory\n        path: PathBuf,\n\n        /// Agent DID\n        #[arg(long)]\n        agent: Option<String>,\n    },\n\n    /// Mount AgentFS\n    Mount {\n        /// Root directory\n        path: PathBuf,\n\n        /// Mount point\n        #[arg(short, long)]\n        mount: Option<PathBuf>,\n    },\n\n    /// Sync with remote Locus\n    Sync {\n        /// Local path\n        local: PathBuf,\n\n        /// Remote Locus DID\n        remote: String,\n\n        /// Sync direction\n        #[arg(short, long, default_value = \"bidirectional\")]\n        direction: SyncDirection,\n    },\n\n    /// Check and report inconsistencies\n    Fsck {\n        /// Root directory\n        path: PathBuf,\n    },\n}",
              "docs": "AgentFS subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 543
            },
            {
              "name": "cli::MirrorCommand",
              "kind": "enum_item",
              "signature": "pub enum MirrorCommand {\n    /// Start mirroring\n    Start {\n        /// Source (local path or DID)\n        source: String,\n\n        /// Target (local path or DID)\n        target: String,\n\n        /// Watch for changes\n        #[arg(short, long)]\n        watch: bool,\n\n        /// Sparse replication\n        #[arg(long)]\n        sparse: bool,\n    },\n\n    /// Show mirror status\n    Status {\n        /// Mirror ID\n        #[arg(long)]\n        id: Option<String>,\n    },\n\n    /// Stop mirroring\n    Stop {\n        /// Mirror ID\n        id: String,\n    },\n}",
              "docs": "Mirror subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 586
            },
            {
              "name": "cli::ConfigCommand",
              "kind": "enum_item",
              "signature": "pub enum ConfigCommand {\n    /// Show current configuration\n    Show,\n\n    /// Set configuration value\n    Set {\n        /// Key\n        key: String,\n\n        /// Value\n        value: String,\n    },\n\n    /// Get configuration value\n    Get {\n        /// Key\n        key: String,\n    },\n\n    /// Initialize configuration\n    Init {\n        /// Force overwrite\n        #[arg(short, long)]\n        force: bool,\n    },\n}",
              "docs": "Config subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 620
            },
            {
              "name": "cli::SyncDirection",
              "kind": "enum_item",
              "signature": "pub enum SyncDirection {\n    Push,\n    Pull,\n    Bidirectional,\n}",
              "docs": "Sync direction for AgentFS",
              "attributes": "#[derive(Debug, Clone, Copy, ValueEnum)]",
              "line": 649
            },
            {
              "name": "cli::ForumCommand",
              "kind": "enum_item",
              "signature": "pub enum ForumCommand {\n    /// Write a tuple to the space\n    Write {\n        /// Tuple data\n        tuple: String,\n    },\n    /// Read a tuple from the space\n    Read {\n        /// Tuple pattern\n        pattern: String,\n    },\n    /// Take a tuple from the space\n    Take {\n        /// Tuple pattern\n        pattern: String,\n    },\n}",
              "docs": "Forum tuple space subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 657
            },
            {
              "name": "cli::GnosisCommand",
              "kind": "enum_item",
              "signature": "pub enum GnosisCommand {\n    /// Add a triple to the graph\n    Add {\n        /// Subject\n        subject: String,\n        /// Predicate\n        predicate: String,\n        /// Object\n        object: String,\n    },\n    /// Query the graph\n    Query {\n        /// Subject\n        #[arg(long)]\n        subject: Option<String>,\n        /// Predicate\n        #[arg(long)]\n        predicate: Option<String>,\n        /// Object\n        #[arg(long)]\n        object: Option<String>,\n    },\n    /// Get neighbors of a node\n    Neighbors {\n        /// Node ID\n        node_id: String,\n    },\n}",
              "docs": "Gnosis knowledge graph subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 677
            },
            {
              "name": "cli::BasisCommand",
              "kind": "enum_item",
              "signature": "pub enum BasisCommand {\n    /// Add a vector to the store\n    Add {\n        /// Vector ID\n        #[arg(long)]\n        id: Option<String>,\n        /// Vector data (comma-separated floats)\n        vector: String,\n    },\n    /// Search for nearest neighbors\n    Search {\n        /// Query vector (comma-separated floats)\n        vector: String,\n        /// Number of neighbors to return\n        #[arg(short, long, default_value = \"10\")]\n        k: usize,\n    },\n    /// Remove a vector from the store\n    Remove {\n        /// Vector ID\n        id: String,\n    },\n}",
              "docs": "Basis vector store subcommands",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 708
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands",
          "source": "sigil/weave/tools/weave/src/commands/mod.rs",
          "sha256": "be26f15143ce520af6d831391df0a83f3296246a4b2d98b9ee2435f30c89bf47",
          "attributes": "",
          "items": [
            {
              "name": "commands::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(command: Command, config: &WeaveConfig, node: &WeaveNode) -> Result<()>;",
              "docs": "Execute a command",
              "attributes": "",
              "line": 23
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::agentfs",
          "source": "sigil/weave/tools/weave/src/commands/agentfs.rs",
          "sha256": "2160cc6652b83ff369f93a4bdc4a36df67cb92df27f37df76b189d1b100f4d7b",
          "attributes": "",
          "items": [
            {
              "name": "commands::agentfs::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: AgentFsCommand, config: WeaveConfig) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::basis",
          "source": "sigil/weave/tools/weave/src/commands/basis.rs",
          "sha256": "c5fdf79be6abd5aa97463ae599cbcafe190fa7a675ac716f987b858337161a14",
          "attributes": "",
          "items": [
            {
              "name": "commands::basis::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(command: BasisCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::config_cmd",
          "source": "sigil/weave/tools/weave/src/commands/config_cmd.rs",
          "sha256": "c61c05c781c219a6f79a31d87531ed38322e6f2f4e56b519a14bf4b7c25947e7",
          "attributes": "",
          "items": [
            {
              "name": "commands::config_cmd::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: ConfigCommand, mut config: WeaveConfig) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::dht",
          "source": "sigil/weave/tools/weave/src/commands/dht.rs",
          "sha256": "68353ea510718d31c74b6bcc012c24da39f0cce0dfdda3df708f9562aa9798cf",
          "attributes": "",
          "items": [
            {
              "name": "commands::dht::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: DhtCommand, config: &WeaveConfig, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::dsocial",
          "source": "sigil/weave/tools/weave/src/commands/dsocial.rs",
          "sha256": "d751afe669903fc32712ed9066925c6df42e74893b5eafd395548ffa0e750483",
          "attributes": "",
          "items": [
            {
              "name": "commands::dsocial::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: DsocialCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::forum",
          "source": "sigil/weave/tools/weave/src/commands/forum.rs",
          "sha256": "bd36653c92ecd9916d6154bc49361600dde788710000f46cd082ca27f45e38a4",
          "attributes": "",
          "items": [
            {
              "name": "commands::forum::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(command: ForumCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::gnosis",
          "source": "sigil/weave/tools/weave/src/commands/gnosis.rs",
          "sha256": "e093d6485f945fc8a9f41392d193f7861df73c9eac90b74d3c821e0467c6f17c",
          "attributes": "",
          "items": [
            {
              "name": "commands::gnosis::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(command: GnosisCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::lens",
          "source": "sigil/weave/tools/weave/src/commands/lens.rs",
          "sha256": "51808034ed067f7e55107fd3c396dcd88b2dbc033c67fdb28c168b6d13a9579e",
          "attributes": "",
          "items": [
            {
              "name": "commands::lens::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: LensCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::locus",
          "source": "sigil/weave/tools/weave/src/commands/locus.rs",
          "sha256": "660a90ca6eeac98d8acca866e193cdacf4fb7f146cc06e419f049886b452ae1f",
          "attributes": "",
          "items": [
            {
              "name": "commands::locus::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: LocusCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::mirror",
          "source": "sigil/weave/tools/weave/src/commands/mirror.rs",
          "sha256": "118ba0b27e11c931089dfcee296c512f4a3bc60b962bf34d0b5b351d7e9234c3",
          "attributes": "",
          "items": [
            {
              "name": "commands::mirror::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: MirrorCommand, config: WeaveConfig) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::nexus",
          "source": "sigil/weave/tools/weave/src/commands/nexus.rs",
          "sha256": "7b82d71a87df46026d50d5a25b059ce28bbd06db12f4ad3aa77cf94bfa0e953e",
          "attributes": "",
          "items": [
            {
              "name": "commands::nexus::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: NexusCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 7
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::strand",
          "source": "sigil/weave/tools/weave/src/commands/strand.rs",
          "sha256": "570a1a58c887258a1045e55513bb40216ff2981c5d42f8f082899660c988433f",
          "attributes": "",
          "items": [
            {
              "name": "commands::strand::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: StrandCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::weft",
          "source": "sigil/weave/tools/weave/src/commands/weft.rs",
          "sha256": "980570766fc0d67075bbce3b9ea56bacb68e0975da8d5065bf560ffac35dd247",
          "attributes": "",
          "items": [
            {
              "name": "commands::weft::execute",
              "kind": "function_item",
              "signature": "pub async fn execute(cmd: WeftCommand, node: &WeaveNode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/tools/weave/src/config.rs",
          "sha256": "55179e773ff9267226624727f32ccb2ff5056dbc84fd1d8b1f10b907464381cf",
          "attributes": "",
          "items": [
            {
              "name": "config::WeaveConfig",
              "kind": "struct_item",
              "signature": "pub struct WeaveConfig {\n/// Default agent DID\n\npub default_agent: Option<String>,\n/// Default organization DID\n\npub default_org: Option<String>,\n/// DHT bootstrap nodes\n\npub dht_bootstrap: Vec<String>,\n/// Default storage paths\n\npub storage: StorageConfig,\n/// TUI configuration\n\npub tui: TuiConfig,\n/// Network configuration\n\npub network: NetworkConfig\n}",
              "docs": "Weave configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "config::StorageConfig",
              "kind": "struct_item",
              "signature": "pub struct StorageConfig {\n/// AgentFS root directory\n\npub agentfs_root: PathBuf,\n/// Strand storage directory\n\npub strand_dir: PathBuf,\n/// Lens database directory\n\npub lens_dir: PathBuf,\n/// Locus file system directory\n\npub locus_dir: PathBuf,\n/// Nexus view directory\n\npub nexus_dir: PathBuf,\n/// Cache directory\n\npub cache_dir: PathBuf\n}",
              "docs": "Storage configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "config::TuiConfig",
              "kind": "struct_item",
              "signature": "pub struct TuiConfig {\n/// Refresh interval in milliseconds\n\npub refresh_interval: u64,\n/// Show hidden files\n\npub show_hidden: bool,\n/// Default theme\n\npub theme: String\n}",
              "docs": "TUI configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 56
            },
            {
              "name": "config::NetworkConfig",
              "kind": "struct_item",
              "signature": "pub struct NetworkConfig {\n/// Local DHT port\n\npub dht_port: u16,\n/// Swarm listen addresses\n\npub listen_addrs: Vec<String>,\n/// Enable NAT traversal\n\npub enable_nat: bool\n}",
              "docs": "Network configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 69
            },
            {
              "name": "config::WeaveConfig::config_path",
              "kind": "function_item",
              "signature": "pub fn config_path() -> Result<PathBuf>;",
              "docs": "Get configuration file path",
              "attributes": "",
              "line": 137
            },
            {
              "name": "config::WeaveConfig::default_live_bootstrap",
              "kind": "function_item",
              "signature": "pub fn default_live_bootstrap() -> Vec<String>;",
              "docs": "Live dns4 multiaddrs for dht{1,2,3}.weave.earth (primary trio).",
              "attributes": "",
              "line": 143
            },
            {
              "name": "config::WeaveConfig::bootstrap_from_env",
              "kind": "function_item",
              "signature": "pub fn bootstrap_from_env() -> Option<Vec<String>>;",
              "docs": "Parse `WEAVE_DHT_BOOTSTRAP` (comma / whitespace / newline separated multiaddrs).",
              "attributes": "",
              "line": 155
            },
            {
              "name": "config::WeaveConfig::resolve_bootstrap",
              "kind": "function_item",
              "signature": "pub fn resolve_bootstrap(&self, override_peers: &[String]) -> Vec<String>;",
              "docs": "Resolve bootstrap peers: explicit override > WEAVE_DHT_BOOTSTRAP > config/default.",
              "attributes": "",
              "line": 171
            },
            {
              "name": "config::WeaveConfig::load",
              "kind": "function_item",
              "signature": "pub async fn load() -> Result<Self>;",
              "docs": "Load configuration from file",
              "attributes": "",
              "line": 185
            },
            {
              "name": "config::WeaveConfig::save",
              "kind": "function_item",
              "signature": "pub async fn save(&self) -> Result<()>;",
              "docs": "Save configuration to file",
              "attributes": "",
              "line": 207
            },
            {
              "name": "config::WeaveConfig::init",
              "kind": "function_item",
              "signature": "pub async fn init(force: bool) -> Result<Self>;",
              "docs": "Initialize configuration with defaults",
              "attributes": "",
              "line": 227
            },
            {
              "name": "config::WeaveConfig::set",
              "kind": "function_item",
              "signature": "pub fn set(&mut self, key: &str, value: &str) -> Result<()>;",
              "docs": "Set a configuration value",
              "attributes": "",
              "line": 241
            },
            {
              "name": "config::WeaveConfig::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, key: &str) -> Result<String>;",
              "docs": "Get a configuration value",
              "attributes": "",
              "line": 261
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui",
          "source": "sigil/weave/tools/weave/src/tui/mod.rs",
          "sha256": "824cecbe13861242f0a30d98a48e43c23ac4eb120898f7ef5fa4227fb192e6f9",
          "attributes": "",
          "items": [
            {
              "name": "tui::run",
              "kind": "function_item",
              "signature": "pub async fn run(config: WeaveConfig) -> Result<()>;",
              "docs": "Run the TUI application",
              "attributes": "",
              "line": 23
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::activity",
          "source": "sigil/weave/tools/weave/src/tui/activity.rs",
          "sha256": "b0f9baa1dc5b244bfbc8498c46fc8318551d03a807feb4f71ea95d8fece4c174",
          "attributes": "",
          "items": [
            {
              "name": "tui::activity::draw",
              "kind": "function_item",
              "signature": "pub fn draw(f: &mut Frame, app: &App, area: Rect);",
              "docs": "",
              "attributes": "",
              "line": 30
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::app",
          "source": "sigil/weave/tools/weave/src/tui/app.rs",
          "sha256": "3dcbcc0bd686b233f4bc9df609d6e9bf64d6d5e5267413eba1376b2868d068da",
          "attributes": "",
          "items": [
            {
              "name": "tui::app::Tab",
              "kind": "enum_item",
              "signature": "pub enum Tab {\n    Dashboard,\n    Drives,\n    Peers,\n    Activity,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 8
            },
            {
              "name": "tui::app::App",
              "kind": "struct_item",
              "signature": "pub struct App {\npub config: WeaveConfig,\npub current_tab: Tab,\npub should_quit: bool,\n// Tab-specific state\npub selected_drive: Option<String>,\npub selected_peer: Option<String>,\npub activity_filter: String,\n// Dynamic peers (fed by background task or external source)\npub peers: Vec<PeerInfo>\n}",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "tui::app::App::new",
              "kind": "function_item",
              "signature": "pub fn new(config: WeaveConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "tui::app::App::next_tab",
              "kind": "function_item",
              "signature": "pub fn next_tab(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "tui::app::App::previous_tab",
              "kind": "function_item",
              "signature": "pub fn previous_tab(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "tui::app::App::handle_key",
              "kind": "function_item",
              "signature": "pub async fn handle_key(&mut self, key: KeyCode) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "tui::app::App::update",
              "kind": "function_item",
              "signature": "pub async fn update(&mut self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "tui::app::PeerStatus",
              "kind": "enum_item",
              "signature": "pub enum PeerStatus {\n    Connected,\n    Disconnected,\n    Unknown,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 129
            },
            {
              "name": "tui::app::PeerStatus::is_connected",
              "kind": "function_item",
              "signature": "pub fn is_connected(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 136
            },
            {
              "name": "tui::app::PeerInfo",
              "kind": "struct_item",
              "signature": "pub struct PeerInfo {\npub status: PeerStatus,\npub peer_id: String,\npub address: Option<String>,\npub latency_ms: Option<u64>,\npub up_bps: Option<u64>,\npub down_bps: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 142
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::dashboard",
          "source": "sigil/weave/tools/weave/src/tui/dashboard.rs",
          "sha256": "6527b45eed1633b3b1eae9711af07eecfb7850e5e6734fa6d3a64f27aaa3ad6d",
          "attributes": "",
          "items": [
            {
              "name": "tui::dashboard::draw",
              "kind": "function_item",
              "signature": "pub fn draw(f: &mut Frame, app: &App, area: Rect);",
              "docs": "",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::drives",
          "source": "sigil/weave/tools/weave/src/tui/drives.rs",
          "sha256": "3b06ffb83efc73ee464d779a888a20bd69a174ddfef78c71b575113176ae0e5c",
          "attributes": "",
          "items": [
            {
              "name": "tui::drives::draw",
              "kind": "function_item",
              "signature": "pub fn draw(f: &mut Frame, app: &App, area: Rect);",
              "docs": "",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::peers",
          "source": "sigil/weave/tools/weave/src/tui/peers.rs",
          "sha256": "3bb821071de6c56e9aad42630d6b7374d581758a18ab0f85a036feafb86514b3",
          "attributes": "",
          "items": [
            {
              "name": "tui::peers::draw",
              "kind": "function_item",
              "signature": "pub fn draw(f: &mut Frame, app: &App, area: Rect);",
              "docs": "",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tui::ui",
          "source": "sigil/weave/tools/weave/src/tui/ui.rs",
          "sha256": "df391c718831eccc8d36478288f69d89a3930d5e6f1990213c82f3593ed0a347",
          "attributes": "",
          "items": [
            {
              "name": "tui::ui::draw",
              "kind": "function_item",
              "signature": "pub fn draw(f: &mut Frame, app: &App);",
              "docs": "",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        },
        {
          "module": "utils",
          "source": "sigil/weave/tools/weave/src/utils.rs",
          "sha256": "1ba1efc2aed25d1b7a8b73202b34a118206ead56f94e4dbb90fb51ffdbb8ca7d",
          "attributes": "",
          "items": [
            {
              "name": "utils::format_file_size",
              "kind": "function_item",
              "signature": "pub fn format_file_size(size: u64) -> String;",
              "docs": "Format a file size in human-readable format",
              "attributes": "",
              "line": 6
            },
            {
              "name": "utils::truncate_did",
              "kind": "function_item",
              "signature": "pub fn truncate_did(did: &str, max_len: usize) -> String;",
              "docs": "Truncate a DID for display",
              "attributes": "",
              "line": 11
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-identity-mock",
      "version": "0.1.0",
      "source": "sigil/weave/tools/adapters/mock",
      "manifestSha256": "993532fd5f6ebba986ff3bdd944d0afde5255967c0167b624deb5593e174065e",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-identity-mock",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/adapters/mock/src/lib.rs",
          "sha256": "9d54eda254e53bfb0baa8cc43a7e4d00c88f445130bef89d79d70cdaa4390415",
          "attributes": "",
          "items": [
            {
              "name": "::MockAdapter",
              "kind": "struct_item",
              "signature": "pub struct MockAdapter {\n\n}",
              "docs": "Mock adapter for testing",
              "attributes": "",
              "line": 41
            },
            {
              "name": "::MockAdapter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new mock adapter",
              "attributes": "",
              "line": 54
            },
            {
              "name": "::MockAdapter::set_verification_result",
              "kind": "function_item",
              "signature": "pub fn set_verification_result(&self, identity_id: &str, result: bool);",
              "docs": "Set the verification result for a specific identity",
              "attributes": "",
              "line": 64
            },
            {
              "name": "::MockAdapter::create_mock_identity",
              "kind": "function_item",
              "signature": "pub async fn create_mock_identity(\n        &self,\n        identifier: &str,\n        identity_type: &str,\n        parent: Option<String>,\n    ) -> Result<Identity>;",
              "docs": "Create a mock identity with specific properties",
              "attributes": "",
              "line": 70
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-identity-simple",
      "version": "0.1.0",
      "source": "sigil/weave/tools/adapters/simple",
      "manifestSha256": "58ca9b017727fbddadf2b905f96fe4204ed21d7e4673c745d36328fde3b16e11",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-identity-simple",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/adapters/simple/src/lib.rs",
          "sha256": "80cf5493eff54714c18f6698a01975e454b70ed732699377b803b767222d61b1",
          "attributes": "",
          "items": [
            {
              "name": "::SimpleAdapter",
              "kind": "struct_item",
              "signature": "pub struct SimpleAdapter {\n\n}",
              "docs": "Simple Ed25519-based identity adapter",
              "attributes": "",
              "line": 49
            },
            {
              "name": "::SimpleAdapter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new SimpleAdapter instance",
              "attributes": "",
              "line": 60
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "schema-check",
      "version": "0.1.1",
      "source": "sigil/weave/tools/schema-check",
      "manifestSha256": "33300419e7e1992a78fec59b37dc7556d7c610de78ec6c5709be3d0121ed4368",
      "features": {},
      "publish": true,
      "url": "/reference/rust/schema-check",
      "modules": []
    },
    {
      "name": "strand-migrate",
      "version": "0.1.0",
      "source": "sigil/weave/tools/strand-migrate",
      "manifestSha256": "d2521d1e4d01b671fc1cc8d28baf4a2df8861bc55ca6913fbcc9dc1b0e078797",
      "features": {},
      "publish": true,
      "url": "/reference/rust/strand-migrate",
      "modules": []
    },
    {
      "name": "strand-blobs-cli",
      "version": "0.1.0",
      "source": "sigil/weave/tools/strand-blobs-cli",
      "manifestSha256": "1eecac45fd7585048f08a8a101a081db938e767b9e676c8f6be820abe219672a",
      "features": {},
      "publish": true,
      "url": "/reference/rust/strand-blobs-cli",
      "modules": []
    },
    {
      "name": "dbrowser",
      "version": "0.1.0",
      "source": "sigil/weave/tools/dbrowser/src-tauri",
      "manifestSha256": "44d7482456b09d13d6a3c41c4c6c8b615417da0506cd5e8279d36177f55bcd2f",
      "features": {},
      "publish": false,
      "url": "/reference/rust/dbrowser",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/lib.rs",
          "sha256": "0dc9d0ed8a8d2b74398d62d63ff27d49b036da6f36c81b5601a98dbb1f17ec33",
          "attributes": "",
          "items": [
            {
              "name": "commands",
              "kind": "module",
              "signature": "pub mod commands;",
              "docs": "dBrowser \u2014 Decentralized Web Browser on the Weave P2P Network.\n\nTauri application backend providing P2P file browsing, Locus filesystem\naccess, and protocol resolution for weave:// and hns:// URLs.",
              "attributes": "",
              "line": 6
            },
            {
              "name": "menu",
              "kind": "module",
              "signature": "pub mod menu;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "protocol",
              "kind": "module",
              "signature": "pub mod protocol;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "state",
              "kind": "module",
              "signature": "pub mod state;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "::run",
              "kind": "function_item",
              "signature": "pub fn run();",
              "docs": "Build and run the Tauri application.",
              "attributes": "#[cfg_attr(mobile, tauri::mobile_entry_point)]",
              "line": 16
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/mod.rs",
          "sha256": "5de3b7b6f1ded3099cd4b79c4ab29fc1ef48ec5220eebd22ed86080340235e8a",
          "attributes": "",
          "items": [
            {
              "name": "commands::adblock",
              "kind": "module",
              "signature": "pub mod adblock;",
              "docs": "Tauri command modules \u2014 each maps to frontend `invoke()` calls.",
              "attributes": "",
              "line": 3
            },
            {
              "name": "commands::agent",
              "kind": "module",
              "signature": "pub mod agent;",
              "docs": "",
              "attributes": "",
              "line": 4
            },
            {
              "name": "commands::browser",
              "kind": "module",
              "signature": "pub mod browser;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "commands::dns",
              "kind": "module",
              "signature": "pub mod dns;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "commands::downloads",
              "kind": "module",
              "signature": "pub mod downloads;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "commands::files",
              "kind": "module",
              "signature": "pub mod files;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "commands::inference",
              "kind": "module",
              "signature": "pub mod inference;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "commands::node",
              "kind": "module",
              "signature": "pub mod node;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "commands::omega",
              "kind": "module",
              "signature": "pub mod omega;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "commands::search",
              "kind": "module",
              "signature": "pub mod search;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "commands::spaces",
              "kind": "module",
              "signature": "pub mod spaces;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "commands::tls",
              "kind": "module",
              "signature": "pub mod tls;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "commands::traces",
              "kind": "module",
              "signature": "pub mod traces;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "commands::window",
              "kind": "module",
              "signature": "pub mod window;",
              "docs": "",
              "attributes": "",
              "line": 16
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::adblock",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/adblock.rs",
          "sha256": "bc93c1eff9adf51777627a7007aa53346862ea5ee27331301915e04803ad8a78",
          "attributes": "",
          "items": [
            {
              "name": "commands::adblock::WebviewEvalInput",
              "kind": "struct_item",
              "signature": "pub struct WebviewEvalInput {\npub label: String,\npub script: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 12
            },
            {
              "name": "commands::adblock::webview_eval",
              "kind": "function_item",
              "signature": "pub fn webview_eval(app: AppHandle, input: WebviewEvalInput) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 18
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::agent",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/agent.rs",
          "sha256": "6ee2d8639ddd6a5415fdcac059de018d938bb1627c55a6b0b9e3b684ecfca8cd",
          "attributes": "",
          "items": [
            {
              "name": "commands::agent::AgentMessage",
              "kind": "struct_item",
              "signature": "pub struct AgentMessage {\n/// Unique message identifier.\n\npub id: String,\n/// Role: \"user\" or \"assistant\".\n\npub role: String,\n/// Message content (may contain markdown for assistant messages).\n\npub content: String,\n/// Unix timestamp in milliseconds.\n\npub timestamp: u64\n}",
              "docs": "A chat message in the agent conversation.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "commands::agent::AgentAction",
              "kind": "struct_item",
              "signature": "pub struct AgentAction {\n/// Unique action identifier.\n\npub id: String,\n/// Action type: \"navigate\", \"click\", \"dns_update\", \"file_op\", \"search\".\n\npub action_type: String,\n/// Human-readable description of the proposed action.\n\npub description: String,\n/// Status: \"pending\", \"approved\", \"rejected\", \"executed\", \"failed\".\n\npub status: String,\n/// Execution result (populated after approval and dispatch).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub result: Option<String>\n}",
              "docs": "An action proposed by the agent that requires user approval.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 61
            },
            {
              "name": "commands::agent::AgentStatus",
              "kind": "struct_item",
              "signature": "pub struct AgentStatus {\n/// Whether the agent is connected and ready.\n\npub connected: bool,\n/// Agent display name.\n\npub name: String,\n/// Current model being used.\n\npub model: String\n}",
              "docs": "Agent connection status.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 77
            },
            {
              "name": "commands::agent::AgentInferenceConfig",
              "kind": "struct_item",
              "signature": "pub struct AgentInferenceConfig {\npub base_url: String,\npub model: String,\npub authorization: String,\npub provider_id: String\n}",
              "docs": "User-scoped inference settings passed from the browser shell.",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 88
            },
            {
              "name": "commands::agent::AgentResponse",
              "kind": "struct_item",
              "signature": "pub struct AgentResponse {\n/// The assistant's reply message.\n\npub message: AgentMessage,\n/// Any actions the agent proposes (may be empty).\n\npub actions: Vec<AgentAction>\n}",
              "docs": "Response from sending a message to the agent.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 97
            },
            {
              "name": "commands::agent::AuditRecord",
              "kind": "struct_item",
              "signature": "pub struct AuditRecord {\n/// Monotonic sequence number.\n\npub seq: u64,\n/// SHA-256 hash of the previous record (hex). Empty for the first record.\n\npub prev_hash: String,\n/// SHA-256 hash of this record's content (hex).\n\npub hash: String,\n/// Unix timestamp in milliseconds.\n\npub timestamp: u64,\n/// The action ID this record refers to.\n\npub action_id: String,\n/// The action type.\n\npub action_type: String,\n/// The decision: \"approved\", \"rejected\".\n\npub decision: String,\n/// The DID of the user who made the decision.\n\npub decided_by: String,\n/// Execution outcome (if approved and dispatched).\n\npub outcome: Option<String>\n}",
              "docs": "A hash-chained audit record for agent action approvals.\n\nEach record includes the hash of the previous record, forming a\ntamper-evident chain. If any record is modified, the chain breaks.",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 141
            },
            {
              "name": "commands::agent::AuditLog",
              "kind": "struct_item",
              "signature": "pub struct AuditLog {\n\n}",
              "docs": "Thread-safe audit log.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "commands::agent::agent_send_message",
              "kind": "function_item",
              "signature": "pub async fn agent_send_message(\n    message: String,\n    inference: AgentInferenceConfig,\n    state: State<'_, AppState>,\n) -> Result<AgentResponse, String>;",
              "docs": "Send a message to Hans through Chutes.\n\nThe message is sent to the user-authorized Chutes model. The response may\ninclude proposed actions that require user approval before execution.",
              "attributes": "#[tauri::command]",
              "line": 407
            },
            {
              "name": "commands::agent::agent_get_status",
              "kind": "function_item",
              "signature": "pub async fn agent_get_status() -> Result<AgentStatus, String>;",
              "docs": "Get the current agent connection status.\n\nReturns the current agent identity. Chutes auth lives in the frontend\nbecause the token belongs to the signed-in user.",
              "attributes": "#[tauri::command]",
              "line": 562
            },
            {
              "name": "commands::agent::agent_approve_action",
              "kind": "function_item",
              "signature": "pub async fn agent_approve_action(\n    id: String,\n    state: State<'_, AppState>,\n) -> Result<AgentAction, String>;",
              "docs": "Approve a pending agent action by its ID.\n\nLooks up the action in the pending store, dispatches it to the\nappropriate handler, and records the decision in the audit log.\nReturns the updated action with execution results.",
              "attributes": "#[tauri::command]",
              "line": 578
            },
            {
              "name": "commands::agent::agent_reject_action",
              "kind": "function_item",
              "signature": "pub async fn agent_reject_action(\n    id: String,\n    state: State<'_, AppState>,\n) -> Result<AgentAction, String>;",
              "docs": "Reject a pending agent action by its ID.\n\nRemoves the action from the pending store and records the rejection\nin the audit log.",
              "attributes": "#[tauri::command]",
              "line": 633
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::browser",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/browser.rs",
          "sha256": "af0e2808bf1ea1c3ce8d48441757d77152cf04892ecdf07101f446b64e1153f8",
          "attributes": "",
          "items": [
            {
              "name": "commands::browser::NavigationResult",
              "kind": "struct_item",
              "signature": "pub struct NavigationResult {\n/// The resolved URL to load.\n\npub url: String,\n/// The detected protocol scheme.\n\npub scheme: String\n}",
              "docs": "Result of navigating to a URL.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 29
            },
            {
              "name": "commands::browser::Web3GatewayCandidate",
              "kind": "struct_item",
              "signature": "pub struct Web3GatewayCandidate {\npub label: String,\npub url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 37
            },
            {
              "name": "commands::browser::Web3DomainResolution",
              "kind": "struct_item",
              "signature": "pub struct Web3DomainResolution {\npub domain: String,\npub path: String,\npub status: String,\npub system_id: Option<String>,\npub system_name: Option<String>,\npub reason: String,\npub url: Option<String>,\npub gateway_candidates: Vec<Web3GatewayCandidate>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 43
            },
            {
              "name": "commands::browser::BrowserObservationRequest",
              "kind": "struct_item",
              "signature": "pub struct BrowserObservationRequest {\npub url: String,\npub html: String,\npub profile_id: Option<String>,\npub tab_id: Option<String>,\npub frame_id: Option<String>,\npub navigation_id: Option<String>,\npub generation: Option<u64>,\npub timestamp_ms: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 55
            },
            {
              "name": "commands::browser::BrowserObserveUrlRequest",
              "kind": "struct_item",
              "signature": "pub struct BrowserObserveUrlRequest {\npub url: String,\npub profile_id: Option<String>,\npub tab_id: Option<String>,\npub frame_id: Option<String>,\npub navigation_id: Option<String>,\npub generation: Option<u64>,\npub timestamp_ms: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 67
            },
            {
              "name": "commands::browser::BrowserLiveObservationRequest",
              "kind": "struct_item",
              "signature": "pub struct BrowserLiveObservationRequest {\npub label: String,\npub url: String,\npub profile_id: Option<String>,\npub tab_id: Option<String>,\npub frame_id: Option<String>,\npub navigation_id: Option<String>,\npub generation: Option<u64>,\npub timestamp_ms: Option<u64>,\npub timeout_ms: Option<u64>,\npub max_html_chars: Option<usize>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 78
            },
            {
              "name": "commands::browser::BrowserLiveObservationSnapshot",
              "kind": "struct_item",
              "signature": "pub struct BrowserLiveObservationSnapshot {\npub nonce: String,\npub url: String,\npub title: String,\npub html: String,\npub html_truncated: bool,\npub collected_at_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]",
              "line": 92
            },
            {
              "name": "commands::browser::BrowserLiveObservationAck",
              "kind": "struct_item",
              "signature": "pub struct BrowserLiveObservationAck {\npub accepted: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 102
            },
            {
              "name": "commands::browser::BrowserObservationBridge",
              "kind": "struct_item",
              "signature": "pub struct BrowserObservationBridge {\n\n}",
              "docs": "One-shot bridge for live renderer observations.\n\nThe frontend asks Rust to observe a specific native child webview. Rust\ninjects a nonce-bearing script into that webview, and only the matching\nnonce can deliver a DOM snapshot back to the waiting request.",
              "attributes": "#[derive(Default)]",
              "line": 112
            },
            {
              "name": "commands::browser::navigate",
              "kind": "function_item",
              "signature": "pub async fn navigate(url: String) -> Result<NavigationResult, String>;",
              "docs": "Navigate to a URL. Detects the protocol scheme and performs any\nnecessary backend resolution for weave:// and hns:// URLs.",
              "attributes": "#[tauri::command]",
              "line": 159
            },
            {
              "name": "commands::browser::BrowserPageWebviewCreateInput",
              "kind": "struct_item",
              "signature": "pub struct BrowserPageWebviewCreateInput {\npub label: String,\npub url: String,\npub x: f64,\npub y: f64,\npub width: f64,\npub height: f64,\npub accept_first_mouse: bool,\npub drag_drop_enabled: bool,\npub focus: bool,\npub user_agent: String,\npub incognito: bool,\npub data_store_identifier: Option<Vec<u8>>,\npub javascript_disabled: bool,\npub zoom_hotkeys_enabled: bool,\npub allow_link_preview: bool,\npub devtools: bool,\npub initialization_script: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 169
            },
            {
              "name": "commands::browser::create_browser_page_webview",
              "kind": "function_item",
              "signature": "pub fn create_browser_page_webview(\n    app: AppHandle,\n    input: BrowserPageWebviewCreateInput,\n) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 190
            },
            {
              "name": "commands::browser::observe_html",
              "kind": "function_item",
              "signature": "pub fn observe_html(input: BrowserObservationRequest) -> Result<ObservationFrame, String>;",
              "docs": "Build an agent-native semantic observation frame from page HTML.",
              "attributes": "#[tauri::command]",
              "line": 244
            },
            {
              "name": "commands::browser::observe_url",
              "kind": "function_item",
              "signature": "pub async fn observe_url(input: BrowserObserveUrlRequest) -> Result<ObservationFrame, String>;",
              "docs": "Fetch a URL through the shared engine and observe the returned HTML.",
              "attributes": "#[tauri::command]",
              "line": 266
            },
            {
              "name": "commands::browser::observe_live_webview",
              "kind": "function_item",
              "signature": "pub async fn observe_live_webview(\n    app: AppHandle,\n    bridge: State<'_, BrowserObservationBridge>,\n    input: BrowserLiveObservationRequest,\n) -> Result<ObservationFrame, String>;",
              "docs": "Observe the live DOM from a native child webview when the renderer permits\ninjected scripts to call Tauri IPC. The frontend falls back to `observe_url`\nif this command times out or the page blocks the capture path.",
              "attributes": "#[tauri::command]",
              "line": 309
            },
            {
              "name": "commands::browser::submit_observation_snapshot",
              "kind": "function_item",
              "signature": "pub fn submit_observation_snapshot(\n    bridge: State<'_, BrowserObservationBridge>,\n    input: BrowserLiveObservationSnapshot,\n) -> Result<BrowserLiveObservationAck, String>;",
              "docs": "Receive a single live observation snapshot from an injected webview script.",
              "attributes": "#[tauri::command]",
              "line": 376
            },
            {
              "name": "commands::browser::resolve_url",
              "kind": "function_item",
              "signature": "pub async fn resolve_url(state: State<'_, AppState>, url: String) -> Result<String, String>;",
              "docs": "Resolve a URL and return information about its protocol type.\n\nFor `weave://` URLs, delegates to [`protocol::resolve_weave_url`] to\nread the target file from the Locus distributed filesystem.\nFor `hns://` URLs, delegates to [`protocol::resolve_hns_url`] for\nHandshake decentralised DNS resolution (currently a placeholder).\nStandard `https://` URLs are returned with an informational message.\n\nUses `block_in_place` so that the `!Send` Locus/Lens futures run on the\ncurrent thread without crossing an async task boundary.",
              "attributes": "#[tauri::command]",
              "line": 394
            },
            {
              "name": "commands::browser::fetch_weave_content",
              "kind": "function_item",
              "signature": "pub async fn fetch_weave_content(\n    state: State<'_, AppState>,\n    url: String,\n) -> Result<String, String>;",
              "docs": "Fetch the raw content of a `weave://` URL as a UTF-8 string.\n\nUnlike [`resolve_url`] which returns a human-readable description, this\ncommand returns the actual file bytes decoded as UTF-8, suitable for\nrendering directly in the frontend.",
              "attributes": "#[tauri::command]",
              "line": 442
            },
            {
              "name": "commands::browser::fetch_weave_file",
              "kind": "function_item",
              "signature": "pub async fn fetch_weave_file(state: State<'_, AppState>, url: String) -> Result<Vec<u8>, String>;",
              "docs": "Fetch the raw bytes of a `weave://` URL for browser-side artifact rendering.",
              "attributes": "#[tauri::command]",
              "line": 459
            },
            {
              "name": "commands::browser::resolve_web3_domain",
              "kind": "function_item",
              "signature": "pub async fn resolve_web3_domain(input: String) -> Result<Web3DomainResolution, String>;",
              "docs": "Resolve a Web3 domain into a browser-loadable URL, or into a typed\nno-record state that the frontend can render without showing gateway\nerror pages.",
              "attributes": "#[tauri::command]",
              "line": 473
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::dns",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/dns.rs",
          "sha256": "59107853bbf8c2857a1d572465397179add827c03d7881a24d76a6822e33ef99",
          "attributes": "",
          "items": [
            {
              "name": "commands::dns::DnsRecord",
              "kind": "struct_item",
              "signature": "pub struct DnsRecord {\n/// Unique identifier for the record (UUID string).\n\npub id: String,\n/// Record type: A, AAAA, TXT, CNAME, NS.\n\npub record_type: String,\n/// Record name (subdomain or \"@\" for root).\n\npub name: String,\n/// Record value (IP address, hostname, text, etc.).\n\npub value: String,\n/// Time-to-live in seconds.\n\npub ttl: u32\n}",
              "docs": "A single DNS resource record.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "commands::dns::DomainLookup",
              "kind": "struct_item",
              "signature": "pub struct DomainLookup {\n/// The queried domain name.\n\npub domain: String,\n/// Whether the domain is registered on the DHT.\n\npub registered: bool,\n/// Current owner DID (if registered).\n\npub owner: Option<String>,\n/// DNS records associated with this domain.\n\npub records: Vec<DnsRecord>\n}",
              "docs": "Result of a domain lookup.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 46
            },
            {
              "name": "commands::dns::DomainSearchResult",
              "kind": "struct_item",
              "signature": "pub struct DomainSearchResult {\n/// The domain name.\n\npub name: String,\n/// Whether the domain is available for registration.\n\npub available: bool,\n/// Current bid price in HNS (if in auction).\n\npub price_hns: Option<f64>\n}",
              "docs": "Result of a domain availability search.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 59
            },
            {
              "name": "commands::dns::lookup_domain",
              "kind": "function_item",
              "signature": "pub async fn lookup_domain(\n    name: String,\n    state: State<'_, AppState>,\n) -> Result<DomainLookup, String>;",
              "docs": "Look up a domain by querying the Weave DHT for its DNS records.\n\nReturns the domain's registration status, owner DID, and resource\nrecords if found. Returns unregistered status if no records exist.",
              "attributes": "#[tauri::command]",
              "line": 195
            },
            {
              "name": "commands::dns::update_records",
              "kind": "function_item",
              "signature": "pub async fn update_records(\n    domain: String,\n    records: Vec<DnsRecord>,\n    state: State<'_, AppState>,\n) -> Result<Vec<DnsRecord>, String>;",
              "docs": "Update DNS records for a domain by publishing to the Weave DHT.\n\nThe caller's node DID is recorded as the domain owner. Records are\nserialized to JSON and stored under the `/dns/<domain>` key.",
              "attributes": "#[tauri::command]",
              "line": 254
            },
            {
              "name": "commands::dns::search_domains",
              "kind": "function_item",
              "signature": "pub async fn search_domains(\n    query: String,\n    state: State<'_, AppState>,\n) -> Result<Vec<DomainSearchResult>, String>;",
              "docs": "Search for domain availability by probing the DHT.\n\nChecks a set of candidate names derived from the query. Each name\nis looked up on the DHT to determine availability.",
              "attributes": "#[tauri::command]",
              "line": 325
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::downloads",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/downloads.rs",
          "sha256": "09bd9748fd7a9db5f4e602159cdae04f9c0da90611cc6adda94d5de780d46579",
          "attributes": "",
          "items": [
            {
              "name": "commands::downloads::DownloadOpenResult",
              "kind": "struct_item",
              "signature": "pub struct DownloadOpenResult {\npub path: String\n}",
              "docs": "Information returned to the frontend when a download is opened.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 76
            },
            {
              "name": "commands::downloads::PrepareDownloadInput",
              "kind": "struct_item",
              "signature": "pub struct PrepareDownloadInput {\npub filename: String,\n/// Optional caller-supplied folder override (absolute path).\n\npub folder: Option<String>\n}",
              "docs": "Prepare a downloads-folder file: resolve destination, create the\nfolder if needed, return the absolute path. Idempotent.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 83
            },
            {
              "name": "commands::downloads::download_prepare",
              "kind": "function_item",
              "signature": "pub fn download_prepare(input: PrepareDownloadInput) -> Result<String, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 90
            },
            {
              "name": "commands::downloads::AppendChunkInput",
              "kind": "struct_item",
              "signature": "pub struct AppendChunkInput {\npub path: String,\npub data: Vec<u8>\n}",
              "docs": "Append a chunk of bytes to an in-progress download path.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 114
            },
            {
              "name": "commands::downloads::download_append_chunk",
              "kind": "function_item",
              "signature": "pub fn download_append_chunk(input: AppendChunkInput) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 120
            },
            {
              "name": "commands::downloads::CancelDownloadInput",
              "kind": "struct_item",
              "signature": "pub struct CancelDownloadInput {\npub path: String\n}",
              "docs": "Cancel an in-progress download by deleting the partial file.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 132
            },
            {
              "name": "commands::downloads::download_cancel",
              "kind": "function_item",
              "signature": "pub fn download_cancel(input: CancelDownloadInput) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 137
            },
            {
              "name": "commands::downloads::RevealDownloadInput",
              "kind": "struct_item",
              "signature": "pub struct RevealDownloadInput {\npub path: String\n}",
              "docs": "Reveal a completed download in Finder.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 146
            },
            {
              "name": "commands::downloads::download_reveal",
              "kind": "function_item",
              "signature": "pub fn download_reveal(_app: AppHandle, input: RevealDownloadInput) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 151
            },
            {
              "name": "commands::downloads::OpenDownloadInput",
              "kind": "struct_item",
              "signature": "pub struct OpenDownloadInput {\npub path: String\n}",
              "docs": "Open a completed download with the system default application.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 177
            },
            {
              "name": "commands::downloads::download_open",
              "kind": "function_item",
              "signature": "pub fn download_open(\n    _app: AppHandle,\n    input: OpenDownloadInput,\n) -> Result<DownloadOpenResult, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 182
            },
            {
              "name": "commands::downloads::download_default_folder",
              "kind": "function_item",
              "signature": "pub fn download_default_folder() -> String;",
              "docs": "Resolve the default downloads directory for the user.",
              "attributes": "#[tauri::command]",
              "line": 205
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::files",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/files.rs",
          "sha256": "c75acc02561045871381dfa04f76934c484ebbf76b1f0215a99da7a96757b76a",
          "attributes": "",
          "items": [
            {
              "name": "commands::files::FileMetadata",
              "kind": "struct_item",
              "signature": "pub struct FileMetadata {\n/// Size in bytes.\n\npub size: u64,\n/// Last modified time as Unix timestamp seconds, if available.\n\npub modified: Option<u64>,\n/// Whether this path is a directory.\n\npub is_directory: bool\n}",
              "docs": "Metadata for a single file (returned by `get_file_metadata`).",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 21
            },
            {
              "name": "commands::files::FileVisibility",
              "kind": "enum_item",
              "signature": "pub enum FileVisibility {\n    /// Local/private by default. Peers should not treat this path as public content.\n    Private,\n    /// Explicitly pinned as public content.\n    Public,\n}",
              "docs": "Visibility policy for a file or directory shared through dBrowser.",
              "attributes": "#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 33
            },
            {
              "name": "commands::files::SharePolicyEntry",
              "kind": "struct_item",
              "signature": "pub struct SharePolicyEntry {\n/// Drive name.\n\npub drive: String,\n/// Absolute path inside the drive.\n\npub path: String,\n/// Current visibility.\n\npub visibility: FileVisibility,\n/// Whether this path has been explicitly pinned for public discovery.\n\npub pinned_publicly: bool,\n/// Public Locus drive used for explicit pins.\n\npub public_drive: Option<String>,\n/// Public `weave://` URL for this pin.\n\npub public_url: Option<String>,\n/// Last policy update time as Unix timestamp seconds.\n\npub updated_at: u64\n}",
              "docs": "Persisted public/private policy for one path inside a drive.",
              "attributes": "#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]",
              "line": 48
            },
            {
              "name": "commands::files::FileEntry",
              "kind": "struct_item",
              "signature": "pub struct FileEntry {\n/// The entry name (file or directory name).\n\npub name: String,\n/// Whether this entry is a directory.\n\npub is_directory: bool,\n/// Size in bytes (0 for directories).\n\npub size: u64,\n/// Last modified time as Unix timestamp seconds, if available.\n\npub modified: Option<u64>,\n/// Detected file type category.\n\npub file_type: String,\n/// Public/private policy.\n\npub visibility: FileVisibility,\n/// Whether this entry has been explicitly pinned for public discovery.\n\npub pinned_publicly: bool,\n/// Public `weave://` URL when this entry is pinned.\n\npub public_url: Option<String>\n}",
              "docs": "A single file or directory entry.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 82
            },
            {
              "name": "commands::files::SigilStorageNetwork",
              "kind": "struct_item",
              "signature": "pub struct SigilStorageNetwork {\npub id: String,\npub label: String,\npub chain_id: String,\npub rpc_url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 102
            },
            {
              "name": "commands::files::SigilStorageProviderRecord",
              "kind": "struct_item",
              "signature": "pub struct SigilStorageProviderRecord {\npub provider_did: String,\npub capacity_gib: u64,\n#[serde(default)]\npub regions: Vec<String>,\npub price_per_gib_epoch: u64,\npub retrieval_price_per_gib: u64,\npub replication_guarantee: u16,\npub stake: u64,\n#[serde(default)]\npub provider_pubkey: Vec<u8>,\npub status: String,\npub registered_at_height: u64,\npub updated_at_height: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize, Serialize)]",
              "line": 110
            },
            {
              "name": "commands::files::SigilStoragePinReceipt",
              "kind": "struct_item",
              "signature": "pub struct SigilStoragePinReceipt {\npub status: String,\npub scope: String,\npub drive: String,\npub path: String,\npub network_id: String,\npub chain_id: String,\npub rpc_url: String,\npub owner_did: String,\npub request_id: String,\npub weft_root_cid: String,\npub manifest_cid: String,\npub dht_records_published: usize,\npub provider_count: usize,\npub local_receipt_path: String,\npub unsigned_transaction: Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 127
            },
            {
              "name": "commands::files::list_files",
              "kind": "function_item",
              "signature": "pub fn list_files(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<Vec<FileEntry>, String>;",
              "docs": "List files and directories at a path within a drive.\n\nUses the Locus drive when available, otherwise falls back to\n`~/.dbrowser/sites/{drive}/{path}` on disk.",
              "attributes": "#[tauri::command]",
              "line": 1258
            },
            {
              "name": "commands::files::get_share_policy",
              "kind": "function_item",
              "signature": "pub fn get_share_policy(drive: String, path: String) -> Result<SharePolicyEntry, String>;",
              "docs": "Return the explicit or default public/private policy for a path.",
              "attributes": "#[tauri::command]",
              "line": 1276
            },
            {
              "name": "commands::files::list_share_policies",
              "kind": "function_item",
              "signature": "pub fn list_share_policies() -> Result<Vec<SharePolicyEntry>, String>;",
              "docs": "Return every explicit share policy entry.",
              "attributes": "#[tauri::command]",
              "line": 1282
            },
            {
              "name": "commands::files::set_share_policy",
              "kind": "function_item",
              "signature": "pub fn set_share_policy(\n    drive: String,\n    path: String,\n    visibility: FileVisibility,\n    state: State<'_, AppState>,\n) -> Result<SharePolicyEntry, String>;",
              "docs": "Set a path's share policy explicitly.",
              "attributes": "#[tauri::command]",
              "line": 1302
            },
            {
              "name": "commands::files::pin_public_file",
              "kind": "function_item",
              "signature": "pub fn pin_public_file(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<SharePolicyEntry, String>;",
              "docs": "Mark a path as publicly pinned.",
              "attributes": "#[tauri::command]",
              "line": 1315
            },
            {
              "name": "commands::files::unpin_public_file",
              "kind": "function_item",
              "signature": "pub fn unpin_public_file(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<SharePolicyEntry, String>;",
              "docs": "Return a path to private status.",
              "attributes": "#[tauri::command]",
              "line": 1327
            },
            {
              "name": "commands::files::list_sigil_storage_providers",
              "kind": "function_item",
              "signature": "pub async fn list_sigil_storage_providers(\n    network_id: Option<String>,\n    rpc_url: Option<String>,\n) -> Result<Vec<SigilStorageProviderRecord>, String>;",
              "docs": "Return active Sigil storage providers for the selected network.",
              "attributes": "#[tauri::command]",
              "line": 1339
            },
            {
              "name": "commands::files::pin_sigil_storage_file",
              "kind": "function_item",
              "signature": "pub fn pin_sigil_storage_file(\n    drive: String,\n    path: String,\n    network_id: Option<String>,\n    rpc_url: Option<String>,\n    duration_epochs: u64,\n    replication_factor: u16,\n    max_price_per_gib_epoch: u64,\n    escrowed_amount: u64,\n    state: State<'_, AppState>,\n) -> Result<SigilStoragePinReceipt, String>;",
              "docs": "Stage a file into Weft and prepare an unsigned Sigil StoragePinRequest.",
              "attributes": "#[allow(clippy::too_many_arguments)]\n#[tauri::command]",
              "line": 1361
            },
            {
              "name": "commands::files::pin_sigil_storage_drive",
              "kind": "function_item",
              "signature": "pub fn pin_sigil_storage_drive(\n    drive: String,\n    network_id: Option<String>,\n    rpc_url: Option<String>,\n    duration_epochs: u64,\n    replication_factor: u16,\n    max_price_per_gib_epoch: u64,\n    escrowed_amount: u64,\n    state: State<'_, AppState>,\n) -> Result<SigilStoragePinReceipt, String>;",
              "docs": "Stage a deterministic whole-drive snapshot into Weft and prepare a pin request.",
              "attributes": "#[allow(clippy::too_many_arguments)]\n#[tauri::command]",
              "line": 1402
            },
            {
              "name": "commands::files::submit_sigil_storage_signed_transaction",
              "kind": "function_item",
              "signature": "pub async fn submit_sigil_storage_signed_transaction(\n    network_id: Option<String>,\n    rpc_url: Option<String>,\n    signed_transaction: Value,\n) -> Result<Value, String>;",
              "docs": "Submit a wallet-signed Sigil transaction through the selected network RPC.",
              "attributes": "#[tauri::command]",
              "line": 1437
            },
            {
              "name": "commands::files::read_file",
              "kind": "function_item",
              "signature": "pub fn read_file(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<Vec<u8>, String>;",
              "docs": "Read a file from a drive, returning its raw bytes.\n\nUses the Locus drive when available, otherwise falls back to disk.",
              "attributes": "#[tauri::command]",
              "line": 1450
            },
            {
              "name": "commands::files::write_file",
              "kind": "function_item",
              "signature": "pub fn write_file(\n    drive: String,\n    path: String,\n    data: Vec<u8>,\n    state: State<'_, AppState>,\n) -> Result<(), String>;",
              "docs": "Write data to a file in a drive.\n\nUses the Locus drive when available (with `create_parents`), otherwise\nfalls back to `~/.dbrowser/sites/{drive}/{path}` on disk.",
              "attributes": "#[tauri::command]",
              "line": 1485
            },
            {
              "name": "commands::files::share_folder",
              "kind": "function_item",
              "signature": "pub fn share_folder(path: String, state: State<'_, AppState>) -> Result<String, String>;",
              "docs": "Share a local folder by indexing its contents into a new private Locus drive\nand returning its local `weave://` URL.\n\nFalls back to copying into `~/.dbrowser/sites/` when the Locus drive\ncannot be created.",
              "attributes": "#[tauri::command]",
              "line": 1566
            },
            {
              "name": "commands::files::create_folder",
              "kind": "function_item",
              "signature": "pub fn create_folder(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<(), String>;",
              "docs": "Create a folder within a drive.",
              "attributes": "#[tauri::command]",
              "line": 1601
            },
            {
              "name": "commands::files::delete_file",
              "kind": "function_item",
              "signature": "pub fn delete_file(drive: String, path: String, state: State<'_, AppState>) -> Result<(), String>;",
              "docs": "Delete a file or directory within a drive.",
              "attributes": "#[tauri::command]",
              "line": 1632
            },
            {
              "name": "commands::files::rename_file",
              "kind": "function_item",
              "signature": "pub fn rename_file(\n    drive: String,\n    old_path: String,\n    new_path: String,\n    state: State<'_, AppState>,\n) -> Result<(), String>;",
              "docs": "Rename (move) a file or directory within a drive.\n\nLocus does not expose a native rename operation, so this performs a\nread-then-write-then-delete sequence for files. For directories the\noperation is not supported on Locus drives (only on legacy FS).",
              "attributes": "#[tauri::command]",
              "line": 1680
            },
            {
              "name": "commands::files::get_file_metadata",
              "kind": "function_item",
              "signature": "pub fn get_file_metadata(\n    drive: String,\n    path: String,\n    state: State<'_, AppState>,\n) -> Result<FileMetadata, String>;",
              "docs": "Get metadata for a specific file or directory within a drive.",
              "attributes": "#[tauri::command]",
              "line": 1737
            },
            {
              "name": "commands::files::mount_folder",
              "kind": "function_item",
              "signature": "pub fn mount_folder(\n    source_path: String,\n    drive_name: String,\n    state: State<'_, AppState>,\n) -> Result<String, String>;",
              "docs": "Mount an external directory as a Locus drive.\n\n1. Creates a new Locus drive via the WeaveNode.\n2. Recursively indexes the source directory contents into the drive.\n3. Keeps the drive private until a file is explicitly pinned publicly.\n4. Returns the local `weave://` URL with the drive name.\n\nFalls back to a filesystem symlink when the Locus drive cannot be created.",
              "attributes": "#[tauri::command]",
              "line": 1789
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::inference",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/inference.rs",
          "sha256": "ccd2e9e93079393a9090ddb074fec62362b62cf582f8da00674325da0968520e",
          "attributes": "",
          "items": [
            {
              "name": "commands::inference::ChutesLoopbackInput",
              "kind": "struct_item",
              "signature": "pub struct ChutesLoopbackInput {\npub auth_base_url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 26
            },
            {
              "name": "commands::inference::ChutesLoopbackStarted",
              "kind": "struct_item",
              "signature": "pub struct ChutesLoopbackStarted {\npub redirect_uri: String,\npub already_running: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 31
            },
            {
              "name": "commands::inference::OpenExternalUrlInput",
              "kind": "struct_item",
              "signature": "pub struct OpenExternalUrlInput {\npub url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 37
            },
            {
              "name": "commands::inference::OpenExternalUrlResult",
              "kind": "struct_item",
              "signature": "pub struct OpenExternalUrlResult {\npub url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 42
            },
            {
              "name": "commands::inference::ChutesOAuthToken",
              "kind": "struct_item",
              "signature": "pub struct ChutesOAuthToken {\npub access_token: String,\n#[serde(default)]\npub refresh_token: String,\n#[serde(default)]\npub expires_in: u64,\n#[serde(default = \"default_token_type\")]\npub token_type: String,\n#[serde(default)]\npub scope: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]",
              "line": 47
            },
            {
              "name": "commands::inference::chutes_open_external_url",
              "kind": "function_item",
              "signature": "pub fn chutes_open_external_url(\n    input: OpenExternalUrlInput,\n) -> Result<OpenExternalUrlResult, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 69
            },
            {
              "name": "commands::inference::chutes_take_loopback_token",
              "kind": "function_item",
              "signature": "pub fn chutes_take_loopback_token() -> Result<Option<ChutesOAuthToken>, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 78
            },
            {
              "name": "commands::inference::chutes_start_loopback_callback",
              "kind": "function_item",
              "signature": "pub async fn chutes_start_loopback_callback(\n    input: ChutesLoopbackInput,\n) -> Result<ChutesLoopbackStarted, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 86
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::node",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/node.rs",
          "sha256": "e07f1a9a991f70047188ade9930d1fa60d4e268277c5b6d13487178037e1dfa7",
          "attributes": "",
          "items": [
            {
              "name": "commands::node::NodeStatus",
              "kind": "struct_item",
              "signature": "pub struct NodeStatus {\n/// The node's DID (decentralized identifier).\n\npub did: String,\n/// Number of connected peers.\n\npub peer_count: usize,\n/// Names of currently open Locus drives.\n\npub drives: Vec<String>\n}",
              "docs": "Current status of the Weave node.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 10
            },
            {
              "name": "commands::node::get_status",
              "kind": "function_item",
              "signature": "pub async fn get_status(state: State<'_, AppState>) -> Result<NodeStatus, String>;",
              "docs": "Get the current status of the Weave node.",
              "attributes": "#[tauri::command]",
              "line": 21
            },
            {
              "name": "commands::node::get_peers",
              "kind": "function_item",
              "signature": "pub async fn get_peers(state: State<'_, AppState>) -> Result<Vec<String>, String>;",
              "docs": "Get a list of currently connected peer DIDs or addresses.",
              "attributes": "#[tauri::command]",
              "line": 51
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::omega",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/omega.rs",
          "sha256": "2404c95e4353db0e733a00f54ea8e326d7ea7b4044698475a3231e309cea8690",
          "attributes": "",
          "items": [
            {
              "name": "commands::omega::OmegaLocalServiceStatus",
              "kind": "struct_item",
              "signature": "pub struct OmegaLocalServiceStatus {\npub mode: &'static str,\npub service_name: &'static str,\npub frontend_url: String,\npub frontend_dir: String,\npub orchestrator_url: String,\npub worker_health_url: String,\npub running: bool,\npub real_frontend: bool,\npub autostart_enabled: bool,\npub launcher: &'static str,\npub services: Vec<OmegaManagedServiceStatus>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 20
            },
            {
              "name": "commands::omega::OmegaManagedServiceStatus",
              "kind": "struct_item",
              "signature": "pub struct OmegaManagedServiceStatus {\npub service_name: &'static str,\npub url: String,\npub running: bool,\npub managed: bool,\npub launcher: &'static str\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 35
            },
            {
              "name": "commands::omega::omega_local_service_status",
              "kind": "function_item",
              "signature": "pub async fn omega_local_service_status() -> Result<OmegaLocalServiceStatus, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 44
            },
            {
              "name": "commands::omega::ensure_omega_web_started",
              "kind": "function_item",
              "signature": "pub async fn ensure_omega_web_started(\n    frontend_url: &str,\n    frontend_dir: &Path,\n) -> Result<(), String>;",
              "docs": "",
              "attributes": "",
              "line": 135
            },
            {
              "name": "commands::omega::shutdown_omega_web",
              "kind": "function_item",
              "signature": "pub fn shutdown_omega_web();",
              "docs": "",
              "attributes": "",
              "line": 158
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::search",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/search.rs",
          "sha256": "c1d9a858156779f997466a996b1381e187e6f03348c07545d4228885a3fcbf20",
          "attributes": "",
          "items": [
            {
              "name": "commands::search::WebSearchSource",
              "kind": "struct_item",
              "signature": "pub struct WebSearchSource {\npub title: String,\npub url: String,\npub snippet: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, PartialEq, Eq)]",
              "line": 12
            },
            {
              "name": "commands::search::WebExtractedDocument",
              "kind": "struct_item",
              "signature": "pub struct WebExtractedDocument {\npub title: String,\npub url: String,\npub markdown: String,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub error: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, PartialEq, Eq)]",
              "line": 19
            },
            {
              "name": "commands::search::WasiParserInput",
              "kind": "struct_item",
              "signature": "pub struct WasiParserInput {\npub url: String,\npub profile_id: Option<String>,\npub html: String,\npub max_chars: Option<u32>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 29
            },
            {
              "name": "commands::search::WasiParserExtraction",
              "kind": "struct_item",
              "signature": "pub struct WasiParserExtraction {\npub schema: String,\npub url: String,\npub profile_id: String,\npub allowed_fetch: bool,\npub title: String,\npub snapshot: serde_json::Value,\npub semantic: Vec<serde_json::Value>,\npub markdown: String,\npub source_score: f64,\npub content_hash: String,\npub chunks: Vec<serde_json::Value>,\n#[serde(default)]\npub runner: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 38
            },
            {
              "name": "commands::search::search_web_sources",
              "kind": "function_item",
              "signature": "pub async fn search_web_sources(\n    query: String,\n    limit: Option<usize>,\n) -> Result<Vec<WebSearchSource>, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 55
            },
            {
              "name": "commands::search::extract_web_documents",
              "kind": "function_item",
              "signature": "pub async fn extract_web_documents(\n    app: AppHandle,\n    urls: Vec<String>,\n    timeout_secs: Option<u64>,\n) -> Result<Vec<WebExtractedDocument>, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 97
            },
            {
              "name": "commands::search::extract_html_with_wasi_parser",
              "kind": "function_item",
              "signature": "pub async fn extract_html_with_wasi_parser(\n    app: AppHandle,\n    input: WasiParserInput,\n) -> Result<WasiParserExtraction, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 132
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::spaces",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/spaces.rs",
          "sha256": "e93fbebd855aa5f7801d132313a933a2737158eb7b67f961875d524c578e3d5c",
          "attributes": "",
          "items": [
            {
              "name": "commands::spaces::Space",
              "kind": "struct_item",
              "signature": "pub struct Space {\n/// The space / drive name.\n\npub name: String,\n/// The weave:// URL for this space.\n\npub url: String,\n/// Hex-encoded discovery key for peer replication (empty for legacy spaces).\n\npub discovery_key: String\n}",
              "docs": "A named space backed by a Locus drive.",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 13
            },
            {
              "name": "commands::spaces::list_spaces",
              "kind": "function_item",
              "signature": "pub async fn list_spaces(state: State<'_, AppState>) -> Result<Vec<Space>, String>;",
              "docs": "List all available spaces.\n\nCombines Locus drives from the WeaveNode with any legacy filesystem\ndirectories found under `~/.dbrowser/sites/` that are not already\ntracked as Locus drives.",
              "attributes": "#[tauri::command]",
              "line": 48
            },
            {
              "name": "commands::spaces::create_space",
              "kind": "function_item",
              "signature": "pub fn create_space(name: String, state: State<'_, AppState>) -> Result<Space, String>;",
              "docs": "Create a new space backed by a Locus drive.\n\n1. Opens a Locus drive via the WeaveNode.\n2. Derives a discovery key from the drive name.\n3. Announces on DHT for peer discovery (best-effort).\n4. Returns the Space with its weave:// URL and discovery key.",
              "attributes": "#[tauri::command]",
              "line": 98
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::tls",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/tls.rs",
          "sha256": "33c0d71314ec250db63f07abe543377482e15657b77b29713149a3c956b5648f",
          "attributes": "",
          "items": [
            {
              "name": "commands::tls::CertificateField",
              "kind": "struct_item",
              "signature": "pub struct CertificateField {\npub label: String,\npub value: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 10
            },
            {
              "name": "commands::tls::CertificateNode",
              "kind": "struct_item",
              "signature": "pub struct CertificateNode {\npub subject: String,\npub issuer: String,\npub serial_number: String,\npub signature_algorithm: String,\npub public_key_algorithm: String,\npub public_key_bits: Option<u32>,\npub not_before: String,\npub not_after: String,\npub fingerprint_sha256: String,\npub fingerprint_sha1: String,\npub san: Vec<String>,\npub extensions: Vec<CertificateField>,\npub pem: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 16
            },
            {
              "name": "commands::tls::ConnectionSecurity",
              "kind": "struct_item",
              "signature": "pub struct ConnectionSecurity {\npub url: String,\npub host: String,\npub port: u16,\npub tls_version: String,\npub cipher_suite: String,\npub negotiated_protocol: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 33
            },
            {
              "name": "commands::tls::CertificateReport",
              "kind": "struct_item",
              "signature": "pub struct CertificateReport {\npub connection: ConnectionSecurity,\npub chain: Vec<CertificateNode>,\npub matches_hostname: bool,\npub trust_status: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 43
            },
            {
              "name": "commands::tls::CertificateRequest",
              "kind": "struct_item",
              "signature": "pub struct CertificateRequest {\npub url: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 51
            },
            {
              "name": "commands::tls::inspect_certificate",
              "kind": "function_item",
              "signature": "pub async fn inspect_certificate(input: CertificateRequest) -> Result<CertificateReport, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::traces",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/traces.rs",
          "sha256": "042307bbd0eabb3db83759e65c29cd0d2c4af92da66cf26a1b2051d5983445c8",
          "attributes": "",
          "items": [
            {
              "name": "commands::traces::TracesLocalServiceStatus",
              "kind": "struct_item",
              "signature": "pub struct TracesLocalServiceStatus {\npub mode: &'static str,\npub service_name: &'static str,\npub bind_host: &'static str,\npub port_strategy: &'static str,\npub api_base_url: String,\npub running: bool,\npub auth_required: bool,\npub billing_visible: bool,\npub cloud_managed_by: &'static str\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 19
            },
            {
              "name": "commands::traces::traces_local_service_status",
              "kind": "function_item",
              "signature": "pub async fn traces_local_service_status() -> Result<TracesLocalServiceStatus, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 32
            },
            {
              "name": "commands::traces::ensure_traces_local_service_started",
              "kind": "function_item",
              "signature": "pub async fn ensure_traces_local_service_started() -> Result<(), String>;",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "commands::traces::shutdown_traces_local_service",
              "kind": "function_item",
              "signature": "pub fn shutdown_traces_local_service();",
              "docs": "",
              "attributes": "",
              "line": 76
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::window",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/commands/window.rs",
          "sha256": "11f0e5b66a5d097a6ef2b83d79ef08969c1b703bb28410eb490acec53e6d1702",
          "attributes": "",
          "items": [
            {
              "name": "commands::window::WindowThemeChoice",
              "kind": "enum_item",
              "signature": "pub enum WindowThemeChoice {\n    Light,\n    Dark,\n    /// Follow the OS system appearance.\n    System,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 17
            },
            {
              "name": "commands::window::CaptureMode",
              "kind": "struct_item",
              "signature": "pub struct CaptureMode {\npub enabled: bool,\npub content_only: bool,\npub target_url: Option<String>,\npub theme: Option<WindowThemeChoice>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 26
            },
            {
              "name": "commands::window::CaptureWindowStartupPlan",
              "kind": "struct_item",
              "signature": "pub struct CaptureWindowStartupPlan {\npub unmaximize: bool,\npub width: f64,\npub height: f64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq)]",
              "line": 34
            },
            {
              "name": "commands::window::CaptureObservationInput",
              "kind": "struct_item",
              "signature": "pub struct CaptureObservationInput {\npub url: String,\npub title: Option<String>,\npub source: String,\npub semantic_node_count: u64,\npub actionable_node_count: u64,\npub observed_at_ms: u64,\n#[serde(default)]\npub fallback_signals: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Deserialize, Serialize)]\n#[serde(rename_all = \"camelCase\")]",
              "line": 42
            },
            {
              "name": "commands::window::set_window_theme",
              "kind": "function_item",
              "signature": "pub fn set_window_theme(app: AppHandle, theme: WindowThemeChoice) -> Result<(), String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 54
            },
            {
              "name": "commands::window::get_capture_mode",
              "kind": "function_item",
              "signature": "pub fn get_capture_mode() -> CaptureMode;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 70
            },
            {
              "name": "commands::window::apply_capture_window_startup",
              "kind": "function_item",
              "signature": "pub fn apply_capture_window_startup(app: &AppHandle) -> Result<(), String>;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "commands::window::write_capture_observation",
              "kind": "function_item",
              "signature": "pub fn write_capture_observation(input: CaptureObservationInput) -> Result<String, String>;",
              "docs": "",
              "attributes": "#[tauri::command]",
              "line": 127
            }
          ],
          "parseErrors": false
        },
        {
          "module": "menu",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/menu.rs",
          "sha256": "8354f5dfd3642c30836b26c26ad568d95bcbc467f6440ed46b0bf6b4761e82de",
          "attributes": "",
          "items": [
            {
              "name": "menu::MENU_EVENT_NAME",
              "kind": "const_item",
              "signature": "pub const MENU_EVENT_NAME: &str;",
              "docs": "",
              "attributes": "",
              "line": 4
            },
            {
              "name": "menu::install_app_menu",
              "kind": "function_item",
              "signature": "pub fn install_app_menu<R: Runtime>(app: &mut App<R>) -> tauri::Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 6
            }
          ],
          "parseErrors": false
        },
        {
          "module": "protocol",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/protocol.rs",
          "sha256": "276e4b30b038cc1a6c4d572fda91d1f74d50dfa6e21542b5627e96c3c2487cec",
          "attributes": "",
          "items": [
            {
              "name": "pub use engine_protocol::{parse_weave_url, WeaveUrl};",
              "kind": "use_declaration",
              "signature": "pub use engine_protocol::{parse_weave_url, WeaveUrl};",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "protocol::ProtocolError",
              "kind": "enum_item",
              "signature": "pub enum ProtocolError {\n    #[error(\"browser engine error: {0}\")]\n    Engine(#[from] weave_browser_engine::error::BrowserError),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 18
            },
            {
              "name": "protocol::resolve_weave_url",
              "kind": "function_item",
              "signature": "pub async fn resolve_weave_url(node: &Arc<WeaveNode>, url: &str) -> Result<Vec<u8>, ProtocolError>;",
              "docs": "Resolve a `weave://` URL and return the response body.\n\nUses the shared [`engine_protocol::WeaveResolver`] backed by the\napplication's `WeaveNode`.",
              "attributes": "",
              "line": 29
            },
            {
              "name": "protocol::resolve_hns_url",
              "kind": "function_item",
              "signature": "pub async fn resolve_hns_url(url: &str) -> Result<String, ProtocolError>;",
              "docs": "Resolve an `hns://` URL via Handshake decentralised DNS.",
              "attributes": "",
              "line": 37
            }
          ],
          "parseErrors": false
        },
        {
          "module": "state",
          "source": "sigil/weave/tools/dbrowser/src-tauri/src/state.rs",
          "sha256": "e99fc771a3e28993bfab14d0f5e974c8cabdb0c7bb5a931cf4b0e5ec454d57b1",
          "attributes": "",
          "items": [
            {
              "name": "state::AppState",
              "kind": "struct_item",
              "signature": "pub struct AppState {\n/// The Weave P2P node providing identity, storage, and networking.\n\npub node: Arc<WeaveNode>\n}",
              "docs": "Shared application state registered as Tauri managed state.",
              "attributes": "",
              "line": 7
            },
            {
              "name": "state::AppState::new",
              "kind": "function_item",
              "signature": "pub async fn new() -> Result<Self, WeaveError>;",
              "docs": "Create a new AppState by building a WeaveNode.\n\nThe node stores its data in `~/.dbrowser`, uses the \"l1fe\" OAS namespace,\nand enables mDNS for local peer discovery.",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-dcli",
      "version": "0.1.0",
      "source": "sigil/weave/tools/dcli",
      "manifestSha256": "7c190dae223b1a336525b66b3503446ffb30db5cef4372df5f92c79dc9673b72",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-dcli",
      "modules": [
        {
          "module": "fetch",
          "source": "sigil/weave/tools/dcli/src/fetch.rs",
          "sha256": "8093602c21281642183a2a8831bcb3e0b3ea702f25c5f64c1a6c80f1d4df025f",
          "attributes": "",
          "items": [
            {
              "name": "fetch::fetch_url",
              "kind": "function_item",
              "signature": "pub async fn fetch_url(\n    url: &str,\n    include_raw: bool,\n    extract_links: bool,\n    extract_images: bool,\n    css_selector: Option<&str>,\n) -> Result<Value>;",
              "docs": "Fetch a URL, parse it, and return structured JSONL.",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "output",
          "source": "sigil/weave/tools/dcli/src/output.rs",
          "sha256": "07937045ce1c3634dbc20c47f898c2e3d75c1b002e4bc3280874fb4c9dd3f62c",
          "attributes": "",
          "items": [
            {
              "name": "output::print",
              "kind": "function_item",
              "signature": "pub fn print(value: &Value, format: &str) -> Result<()>;",
              "docs": "Print a value in the specified format.",
              "attributes": "",
              "line": 8
            }
          ],
          "parseErrors": false
        },
        {
          "module": "perceive",
          "source": "sigil/weave/tools/dcli/src/perceive.rs",
          "sha256": "1b56edb4539c590092d2675a1606b7efc2ac8b33d26b27d66a2fed1748c84474",
          "attributes": "",
          "items": [
            {
              "name": "perceive::perceive",
              "kind": "function_item",
              "signature": "pub async fn perceive(input: &str) -> Result<Value>;",
              "docs": "Analyze a file and return structured metadata.",
              "attributes": "",
              "line": 9
            }
          ],
          "parseErrors": false
        },
        {
          "module": "search",
          "source": "sigil/weave/tools/dcli/src/search.rs",
          "sha256": "b710e4ee1266e5a029e32a5e607dd7d7914f8ed6563c06c68abdd297a2d726c7",
          "attributes": "",
          "items": [
            {
              "name": "search::search",
              "kind": "function_item",
              "signature": "pub async fn search(query: &str, top: usize, engine: &str) -> Result<Value>;",
              "docs": "Search using DuckDuckGo HTML (or other engines).",
              "attributes": "",
              "line": 9
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-hub",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom-hub",
      "manifestSha256": "ea9734ed211249b9fd41bd0b5e2af6d8dd81b21526bf272565fd299a1852def0",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-hub",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-hub/src/lib.rs",
          "sha256": "9ffc477bfa4b7f7b00cee1687f3b2db8eb13f13f91d3d59e1fc7469062f668c3",
          "attributes": "",
          "items": [
            {
              "name": "pub use entry::{\n    BlobsLocusKeys, RegistryEntry, RepositoryVisibility, ShareAccess, ShareBundle, ShareResources,\n};",
              "kind": "use_declaration",
              "signature": "pub use entry::{\n    BlobsLocusKeys, RegistryEntry, RepositoryVisibility, ShareAccess, ShareBundle, ShareResources,\n};",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use registry::{registry_key, Registry, RegistryError, Result, REGISTRY_LENS};",
              "kind": "use_declaration",
              "signature": "pub use registry::{registry_key, Registry, RegistryError, Result, REGISTRY_LENS};",
              "docs": "",
              "attributes": "",
              "line": 44
            }
          ],
          "parseErrors": false
        },
        {
          "module": "entry",
          "source": "sigil/weave/tools/loom-hub/src/entry.rs",
          "sha256": "69db2ac127bc1265fe6c168af77cb96b9512f5b220664d82884642cc0db189bb",
          "attributes": "",
          "items": [
            {
              "name": "entry::RepositoryVisibility",
              "kind": "enum_item",
              "signature": "pub enum RepositoryVisibility {\n    /// Public repository whose discovery metadata may be enumerated.\n    Public,\n    /// Private repository whose recipient-scoped bundle is exchanged directly.\n    Private,\n}",
              "docs": "Explicit repository visibility carried inside signed registry and share\nrecords. The field is intentionally non-defaulting at the policy layer:\nlegacy records that omit it are never inferred to be public.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 15
            },
            {
              "name": "entry::RegistryEntry",
              "kind": "struct_item",
              "signature": "pub struct RegistryEntry {\n/// Schema version; bump when backwards-incompatible fields change.\n\npub version: u32,\n/// Explicit signed visibility. `None` represents an untrusted legacy entry\n\n/// and is never accepted by public registry read or write surfaces.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub visibility: Option<RepositoryVisibility>,\n/// Repo name component, e.g. `agent-fabric`. Combined with the owner\n\n/// DID this is `<owner>/<name>`.\n\npub name: String,\n/// Optional one-line description, plain text.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// Default branch for the registered HEAD ref (mirrors the bundle).\n\npub default_branch: String,\n/// The seven resource pubkeys needed by `loom clone --pubkeys`.\n\npub bundle: ShareBundle,\n/// UNIX millis when the entry was first published.\n\npub registered_ms: u64,\n/// UNIX millis when the entry was last refreshed (e.g. on commit).\n\npub updated_ms: u64,\n/// Local-machine path to the repo's workdir (the directory containing\n\n/// `.loom/`). Recorded at register-time so the gateway can route\n\n/// per-repo `/api/v1/repos/:name/...` requests to the correct\n\n/// per-repo `WeaveNode`.\n\n///\n\n/// Optional + default-empty so on-disk entries written before this\n\n/// field existed continue to deserialize cleanly. Local-machine-\n\n/// only; v2 cross-machine registry replication will move this to a\n\n/// per-machine cache instead of inlining it here.\n\n#[serde(default, skip_serializing_if = \"String::is_empty\")]\npub workdir: String\n}",
              "docs": "A registered repository \u2014 what `loom search` and `loom-web` consume.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 24
            },
            {
              "name": "entry::ShareBundle",
              "kind": "struct_item",
              "signature": "pub struct ShareBundle {\n/// Bundle schema version.\n\npub version: u32,\n/// Explicit signed visibility. Readers fail closed when this is absent or\n\n/// inconsistent with the attached private access material.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub visibility: Option<RepositoryVisibility>,\n/// Owner agent DID (e.g. `did:oas:l1fe:agent:...`).\n\npub agent_did: String,\n/// Per-resource source pubkeys.\n\npub resources: ShareResources,\n/// Repo-stable id (BLAKE3 prefix of agent pubkey).\n\npub repo_id: String,\n/// Default branch name on the source.\n\npub default_branch: String,\n/// Optional private-repo access material for a specific authorized\n\n/// recipient. Public repos and generic registry entries omit this field.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub access: Option<ShareAccess>\n}",
              "docs": "Public bundle published by a source so a fresh receiver can call\n`WeaveNode::open_remote_*` on each resource. This is the same shape\nthe loom CLI emits via `loom identity share`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 62
            },
            {
              "name": "entry::ShareAccess",
              "kind": "struct_item",
              "signature": "pub struct ShareAccess {\n/// Access bundle schema version.\n\npub version: u32,\n/// Private discovery handle; this is a blinded handle, not the repo id.\n\npub private_discovery_handle: String,\n/// Serialized Loom access manifest.\n\npub manifest: serde_json::Value,\n/// Wrapped repository-key epochs for the intended recipient. A recovery\n\n/// or delayed peer can receive every epoch it is entitled to without a\n\n/// central key service.\n\n#[serde(default)]\npub wrapped_keys: Vec<serde_json::Value>,\n/// Legacy single-epoch envelope. Readers accept this only when\n\n/// `wrapped_keys` is empty.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub wrapped_key: Option<serde_json::Value>,\n/// DID of the active repository admin who authenticated this exact bundle.\n\n#[serde(default)]\npub key_bundle_signer_did: String,\n/// Authentication public key of the bundle signer (32-byte hex).\n\n#[serde(default)]\npub key_bundle_signer_auth_key: String,\n/// Ed25519 signature over the full share bundle with this field empty.\n\n#[serde(default)]\npub key_bundle_signature: String\n}",
              "docs": "Recipient-scoped private access material attached to a share bundle.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 85
            },
            {
              "name": "entry::ShareResources",
              "kind": "struct_item",
              "signature": "pub struct ShareResources {\n/// Commits strand writer pubkey (hex).\n\npub commits_strand: String,\n/// Actual commits strand name. Private repos use a blinded per-member\n\n/// strand rather than the legacy canonical `loom.commits` strand.\n\n#[serde(default)]\npub commits_strand_name: Option<String>,\n/// Refs Lens writer pubkey for public repositories. Private bundles omit\n\n/// this resource because refs are local projections derived from encrypted\n\n/// commit strands.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub refs_lens: Option<String>,\n/// Index Lens writer pubkey for public repositories. Private indexes are\n\n/// local workspace state and are never replication resources.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub index_lens: Option<String>,\n/// Public-repository Locus keys. Private commit strands carry encrypted\n\n/// sparse blob payloads and therefore omit the Locus from replication.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub blobs_locus: Option<BlobsLocusKeys>\n}",
              "docs": "Per-resource hex-encoded Ed25519 32-byte pubkeys.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 114
            },
            {
              "name": "entry::BlobsLocusKeys",
              "kind": "struct_item",
              "signature": "pub struct BlobsLocusKeys {\n/// Metadata Lens strand pubkey (hex).\n\npub meta: String,\n/// Blob metadata strand pubkey (hex).\n\npub blob_meta: String,\n/// Blob data strand pubkey (hex).\n\npub blob_data: String\n}",
              "docs": "The three underlying-strand pubkeys for a Locus drive.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 138
            }
          ],
          "parseErrors": false
        },
        {
          "module": "registry",
          "source": "sigil/weave/tools/loom-hub/src/registry.rs",
          "sha256": "2a1cfcf28f41ef367d1f4fe4ac658db46a87e825af2bc44ec8538f9a6dc432f7",
          "attributes": "",
          "items": [
            {
              "name": "registry::REGISTRY_LENS",
              "kind": "const_item",
              "signature": "pub const REGISTRY_LENS: &str;",
              "docs": "Canonical Lens database name used for the registry. Stable across\nversions so an existing on-disk store is always readable.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "registry::registry_key",
              "kind": "function_item",
              "signature": "pub fn registry_key(name: &str) -> Vec<u8>;",
              "docs": "Build the canonical key bytes for a repo name. Centralized so both\nwriters and readers stay aligned on the encoding.",
              "attributes": "",
              "line": 25
            },
            {
              "name": "registry::RegistryError",
              "kind": "enum_item",
              "signature": "pub enum RegistryError {\n    /// The named repo was not found in this registry.\n    #[error(\"registry entry not found: {0}\")]\n    NotFound(String),\n\n    /// The Weave SDK returned an error.\n    #[error(\"weave error: {0}\")]\n    Weave(String),\n\n    /// (De)serialization of a registry entry failed.\n    #[error(\"serialization error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    /// Private recipient bundles must never enter the public registry.\n    #[error(\"private repository bundles are forbidden in the public registry\")]\n    PrivateEntry,\n}",
              "docs": "Errors emitted by the registry layer.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 34
            },
            {
              "name": "registry::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, RegistryError>;",
              "docs": "Convenience result alias.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "registry::Registry",
              "kind": "struct_item",
              "signature": "pub struct Registry<'a> {\n\n}",
              "docs": "Read/write handle for an owner's registry, riding on top of an\nexisting [`WeaveNode`]. The node provides identity (used to sign\nthe underlying Lens strand) and storage; this type adds only the\nrepo-name \u2192 entry encoding.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "registry::Registry<'a>::open",
              "kind": "function_item",
              "signature": "pub async fn open(node: &'a WeaveNode) -> Result<Self>;",
              "docs": "Wrap an existing node. Idempotently opens the `loom.registry`\nLens on first call so subsequent operations don't have to.",
              "attributes": "",
              "line": 72
            },
            {
              "name": "registry::Registry<'a>::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, entry: &RegistryEntry) -> Result<()>;",
              "docs": "Publish (or overwrite) a registry entry. The Lens strand is\nsigned by the owner's keypair, so callers need not sign the\nentry themselves \u2014 the strand block carries the signature.",
              "attributes": "",
              "line": 80
            },
            {
              "name": "registry::Registry<'a>::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, name: &str) -> Result<RegistryEntry>;",
              "docs": "Look up a single entry by repo name.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "registry::Registry<'a>::try_get",
              "kind": "function_item",
              "signature": "pub async fn try_get(&self, name: &str) -> Result<Option<RegistryEntry>>;",
              "docs": "Soft `get` that returns `None` if the entry is absent rather\nthan erroring.",
              "attributes": "",
              "line": 109
            },
            {
              "name": "registry::Registry<'a>::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, name: &str) -> Result<()>;",
              "docs": "Remove an entry. Lens delete writes a tombstone to the strand,\npreserving auditable history.",
              "attributes": "",
              "line": 119
            },
            {
              "name": "registry::Registry<'a>::list",
              "kind": "function_item",
              "signature": "pub async fn list(&self, name_prefix: Option<&str>) -> Result<Vec<RegistryEntry>>;",
              "docs": "Enumerate every registered repo, optionally filtered by a prefix\nover the repo `name` (post `repo:` prefix). Returns entries sorted\nlexicographically by key. Reads via Lens range stream.",
              "attributes": "",
              "line": 128
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-diff",
      "version": "0.1.1",
      "source": "sigil/weave/tools/loom-diff",
      "manifestSha256": "baf41130d523d903d0fce6ffcf29471f72b5312aaea611f8d15180270e98f4c0",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-diff",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-diff/src/lib.rs",
          "sha256": "875b1bcd8b2372ce40858f03a0b3a8a7e19095296648f69442d8342d0d181066",
          "attributes": "",
          "items": [
            {
              "name": "pub use render::{unified_diff_string, UnifiedDiffOptions};",
              "kind": "use_declaration",
              "signature": "pub use render::{unified_diff_string, UnifiedDiffOptions};",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "pub use structured::{\n    diff_blobs, file_diff, BinaryReason, DiffHunk, DiffLine, DiffLineKind, FileDiff, FileDiffStatus,\n};",
              "kind": "use_declaration",
              "signature": "pub use structured::{\n    diff_blobs, file_diff, BinaryReason, DiffHunk, DiffLine, DiffLineKind, FileDiff, FileDiffStatus,\n};",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "::DiffError",
              "kind": "enum_item",
              "signature": "pub enum DiffError {\n    /// Caller asked for a diff with non-utf8 bytes; the structured API\n    /// surfaces this as a `Binary` diff instead. Reserved for cases where\n    /// callers explicitly demanded text decoding.\n    #[error(\"not valid utf-8\")]\n    NotUtf8,\n}",
              "docs": "Errors produced by loom-diff.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 35
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, DiffError>;",
              "docs": "Result alias.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "::looks_binary",
              "kind": "function_item",
              "signature": "pub fn looks_binary(bytes: &[u8]) -> bool;",
              "docs": "Heuristic: a byte slice is \"probably binary\" if the first 8KB\ncontains a null byte. This is the same check git uses.",
              "attributes": "",
              "line": 48
            }
          ],
          "parseErrors": false
        },
        {
          "module": "render",
          "source": "sigil/weave/tools/loom-diff/src/render.rs",
          "sha256": "d71bd01c4e179dbaef2fc7aa7cb92d6ee9e82b5a3a51ccded790b1922eacbad9",
          "attributes": "",
          "items": [
            {
              "name": "render::UnifiedDiffOptions",
              "kind": "struct_item",
              "signature": "pub struct UnifiedDiffOptions {\n/// `a/` prefix used in the `--- a/` header (git convention).\n\npub a_prefix: String,\n/// `b/` prefix used in the `+++ b/` header.\n\npub b_prefix: String,\n/// Whether to colorize with ANSI escape codes (TTY mode).\n\npub color: bool\n}",
              "docs": "Options for [`unified_diff_string`].",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 9
            },
            {
              "name": "render::unified_diff_string",
              "kind": "function_item",
              "signature": "pub fn unified_diff_string(diff: &FileDiff, opts: &UnifiedDiffOptions) -> String;",
              "docs": "Render a [`FileDiff`] as a unified-diff string. Identical layout to\n`git diff` so agents and humans both find this reading exactly as\nthey expect. Empty string for unchanged files.",
              "attributes": "",
              "line": 37
            }
          ],
          "parseErrors": false
        },
        {
          "module": "structured",
          "source": "sigil/weave/tools/loom-diff/src/structured.rs",
          "sha256": "bc300069d31e40aa258ef0b451dd6e71f4c944c09a5b2ce0e6b95f2307ffe921",
          "attributes": "",
          "items": [
            {
              "name": "structured::BinaryReason",
              "kind": "enum_item",
              "signature": "pub enum BinaryReason {\n    /// One side contains null bytes (heuristic: looks_binary).\n    NullByte,\n    /// Bytes did not decode as utf-8 cleanly.\n    NotUtf8,\n}",
              "docs": "Why a diff couldn't be rendered as text.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "structured::DiffLineKind",
              "kind": "enum_item",
              "signature": "pub enum DiffLineKind {\n    /// Line in `a` only \u2014 rendered with `-`.\n    Delete,\n    /// Line in `b` only \u2014 rendered with `+`.\n    Insert,\n    /// Line present in both \u2014 rendered with ` `.\n    Equal,\n}",
              "docs": "Per-line tag \u2014 additions, deletions, unchanged context lines, plus\nthe two structural markers around a hunk gap.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 22
            },
            {
              "name": "structured::DiffLine",
              "kind": "struct_item",
              "signature": "pub struct DiffLine {\n/// Whether this is `+`, `-`, or context.\n\npub kind: DiffLineKind,\n/// 1-based line number on the `a` side; `None` for inserts.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub a_line: Option<u32>,\n/// 1-based line number on the `b` side; `None` for deletes.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub b_line: Option<u32>,\n/// Line content WITHOUT the trailing newline (we re-add on render).\n\npub content: String\n}",
              "docs": "One line in a hunk.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 33
            },
            {
              "name": "structured::DiffHunk",
              "kind": "struct_item",
              "signature": "pub struct DiffHunk {\n/// Starting line on the `a` side (1-based).\n\npub a_start: u32,\n/// Number of `a` lines in this hunk.\n\npub a_count: u32,\n/// Starting line on the `b` side (1-based).\n\npub b_start: u32,\n/// Number of `b` lines in this hunk.\n\npub b_count: u32,\n/// Lines of the hunk, in order.\n\npub lines: Vec<DiffLine>\n}",
              "docs": "A contiguous run of changes plus surrounding context.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "structured::FileDiffStatus",
              "kind": "enum_item",
              "signature": "pub enum FileDiffStatus {\n    /// The file is identical on both sides.\n    Unchanged,\n    /// File added (only present on `b`).\n    Added,\n    /// File deleted (only present on `a`).\n    Deleted,\n    /// File present on both sides with content changes.\n    Modified,\n    /// File present on both sides but binary; no line-diff produced.\n    Binary {\n        /// Why the rendering was skipped.\n        reason: BinaryReason,\n    },\n}",
              "docs": "File-level status.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 64
            },
            {
              "name": "structured::FileDiff",
              "kind": "struct_item",
              "signature": "pub struct FileDiff {\n/// Path on the `a` side. May differ from `b_path` for renames; v1\n\n/// always sets these equal.\n\npub a_path: Option<String>,\n/// Path on the `b` side.\n\npub b_path: Option<String>,\n/// File-level status.\n\npub status: FileDiffStatus,\n/// Hunks; empty when `status` is `Unchanged`/`Binary`.\n\npub hunks: Vec<DiffHunk>,\n/// Total `+` lines across all hunks.\n\npub additions: u32,\n/// Total `-` lines across all hunks.\n\npub deletions: u32\n}",
              "docs": "A diff for a single path. The shape carries enough information to\nrender git-style unified output, group changes per-hunk in a UI,\nand surface summary stats.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 84
            },
            {
              "name": "structured::diff_blobs",
              "kind": "function_item",
              "signature": "pub fn diff_blobs(\n    a: Option<&[u8]>,\n    b: Option<&[u8]>,\n    a_path: Option<&str>,\n    b_path: Option<&str>,\n    context_lines: usize,\n) -> FileDiff;",
              "docs": "Build a [`FileDiff`] from two byte slices. Detects binary content\n(null-byte heuristic, then utf-8 check) and surfaces it as a\n`Binary` status without trying to render lines.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "structured::file_diff",
              "kind": "function_item",
              "signature": "pub fn file_diff(\n    a: Option<&str>,\n    b: Option<&str>,\n    a_path: Option<&str>,\n    b_path: Option<&str>,\n    context_lines: usize,\n) -> FileDiff;",
              "docs": "Convenience: diff two text strings, treating absent strings as\nempty (file added/deleted). Provided for tests and for callers\nthat already hold UTF-8 strings.",
              "attributes": "",
              "line": 252
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-gateway",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom-gateway",
      "manifestSha256": "4fbddbd1773baed6d7325eef1a080483e5f23af1119231ad05e8e1822b4855dc",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-gateway",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-gateway/src/lib.rs",
          "sha256": "e5ba2cd1c33e438f4b1d507d959e50b4cf120709993f8804b7991d9020d11af2",
          "attributes": "",
          "items": [
            {
              "name": "pub use error::ApiError;",
              "kind": "use_declaration",
              "signature": "pub use error::ApiError;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use state::AppState;",
              "kind": "use_declaration",
              "signature": "pub use state::AppState;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use worker::{spawn as spawn_worker, WorkerRequest};",
              "kind": "use_declaration",
              "signature": "pub use worker::{spawn as spawn_worker, WorkerRequest};",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "::router",
              "kind": "function_item",
              "signature": "pub fn router(state: AppState) -> Router;",
              "docs": "Build the axum [`Router`] for the gateway.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "::serve",
              "kind": "function_item",
              "signature": "pub async fn serve(\n    workdir: PathBuf,\n    default_branch: String,\n    addr: SocketAddr,\n    gateway_token: String,\n) -> anyhow::Result<()>;",
              "docs": "Convenience: spawn the worker thread, build the router, bind + serve.\n`workdir` is the loom repo root containing `.loom/`.",
              "attributes": "",
              "line": 83
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/tools/loom-gateway/src/error.rs",
          "sha256": "0af89ba889c9e4095c828f540680565e08620ed856ac61cfb418459f400baf80",
          "attributes": "",
          "items": [
            {
              "name": "error::ApiError",
              "kind": "enum_item",
              "signature": "pub enum ApiError {\n    /// Resource not found (repo, commit, tree, blob).\n    #[error(\"not found: {0}\")]\n    NotFound(String),\n\n    /// Caller asked for something the gateway can't give (e.g. binary\n    /// returned where text was requested).\n    #[error(\"bad request: {0}\")]\n    BadRequest(String),\n\n    /// Missing or invalid local gateway bearer capability.\n    #[error(\"unauthorized: {0}\")]\n    Unauthorized(String),\n\n    /// Underlying weave-sdk / strand / lens / locus failure.\n    #[error(\"storage error: {0}\")]\n    Storage(String),\n\n    /// JSON (de)serialization failed.\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n\n    /// Anything else \u2014 surfaces as 500.\n    #[error(\"internal error: {0}\")]\n    Internal(String),\n}",
              "docs": "Errors surfaced over the API.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes",
          "source": "sigil/weave/tools/loom-gateway/src/routes/mod.rs",
          "sha256": "833f8df55a5fb760a539e289bcf9012d659adce2b603512f7a337334bc5dc3bd",
          "attributes": "",
          "items": [
            {
              "name": "routes::api_router",
              "kind": "function_item",
              "signature": "pub fn api_router() -> Router<AppState>;",
              "docs": "Compose the api/v1 router. The resulting `Router<AppState>` takes\n`with_state(...)` cleanly at the lib boundary. State is `AppState`\ndirectly (Cloneable, just wraps an mpsc Sender + metadata) \u2014 no Arc\nwrapper needed.",
              "attributes": "",
              "line": 20
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::blob",
          "source": "sigil/weave/tools/loom-gateway/src/routes/blob.rs",
          "sha256": "2845c8f43f60a01eb4f726e980c74484830e1b8353d682e4d66bebb017cdec12",
          "attributes": "",
          "items": [
            {
              "name": "routes::blob::BlobQuery",
              "kind": "struct_item",
              "signature": "pub struct BlobQuery {\n/// Optional content-disposition filename hint for the browser.\n\npub filename: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Deserialize)]",
              "line": 15
            },
            {
              "name": "routes::blob::raw",
              "kind": "function_item",
              "signature": "pub async fn raw(\n    State(state): State<AppState>,\n    Path((name, hash)): Path<(String, String)>,\n    Query(q): Query<BlobQuery>,\n) -> Result<Response, ApiError>;",
              "docs": "",
              "attributes": "",
              "line": 20
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::branches",
          "source": "sigil/weave/tools/loom-gateway/src/routes/branches.rs",
          "sha256": "dbfde0cd1e9a34aabd05d78da709eec16a5fdaba40ef7f3d426b6dc560e09652",
          "attributes": "",
          "items": [
            {
              "name": "routes::branches::BranchesEnvelope",
              "kind": "struct_item",
              "signature": "pub struct BranchesEnvelope {\npub items: Vec<BranchInfo>,\npub total: usize,\n/// The repo's default branch \u2014 UI highlights this row and uses it as\n\n/// the comparison baseline once ahead/behind counts land.\n\npub default_branch: String\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 11
            },
            {
              "name": "routes::branches::list",
              "kind": "function_item",
              "signature": "pub async fn list(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<BranchesEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/branches`",
              "attributes": "",
              "line": 20
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::clone",
          "source": "sigil/weave/tools/loom-gateway/src/routes/clone.rs",
          "sha256": "f7baef789e4c0517bdebf82736b50ac3cc4361329320f5c950243538bc82b59e",
          "attributes": "",
          "items": [
            {
              "name": "routes::clone::CloneRequest",
              "kind": "struct_item",
              "signature": "pub struct CloneRequest {\npub source: String,\npub name: String,\n#[serde(default)]\npub workspaces_dir: Option<String>,\n#[serde(default)]\npub description: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Deserialize)]\n#[allow(dead_code)]",
              "line": 17
            },
            {
              "name": "routes::clone::CloneResponse",
              "kind": "struct_item",
              "signature": "pub struct CloneResponse {\npub name: String,\npub workdir: String,\npub source: String,\npub commits_imported: Option<u32>,\npub blobs_imported: Option<u32>,\npub elapsed_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Serialize)]",
              "line": 27
            },
            {
              "name": "routes::clone::create",
              "kind": "function_item",
              "signature": "pub async fn create(\n    State(_state): State<AppState>,\n    Json(_request): Json<CloneRequest>,\n) -> Result<Json<CloneResponse>, ApiError>;",
              "docs": "Network Git cloning is disabled at the HTTP boundary.\n\nThis route remains present so older clients receive one stable,\nauthenticated error instead of probing another transport fallback.",
              "attributes": "",
              "line": 40
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::commits",
          "source": "sigil/weave/tools/loom-gateway/src/routes/commits.rs",
          "sha256": "33c7d451d60b0ab9f4d2145192930267fe1622fa6e456dfc5e9e51fe5f51139b",
          "attributes": "",
          "items": [
            {
              "name": "routes::commits::CommitSummary",
              "kind": "struct_item",
              "signature": "pub struct CommitSummary {\npub seq: u64,\npub id: String,\npub author: String,\npub timestamp_ms: u64,\npub message: String,\npub parents: Vec<u64>,\npub tree_id: String,\npub files: usize\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 11
            },
            {
              "name": "routes::commits::LogEnvelope",
              "kind": "struct_item",
              "signature": "pub struct LogEnvelope {\npub items: Vec<CommitSummary>,\npub branch: Option<String>,\npub head_seq: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 23
            },
            {
              "name": "routes::commits::LogQuery",
              "kind": "struct_item",
              "signature": "pub struct LogQuery {\n/// Optional ref (branch name) to start the walk from.\n\npub branch: Option<String>,\n/// Maximum entries to return (default 50, cap 500).\n\npub limit: Option<usize>\n}",
              "docs": "",
              "attributes": "#[derive(Deserialize)]",
              "line": 30
            },
            {
              "name": "routes::commits::list",
              "kind": "function_item",
              "signature": "pub async fn list(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n    Query(q): Query<LogQuery>,\n) -> Result<Json<LogEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/commits`",
              "attributes": "",
              "line": 38
            },
            {
              "name": "routes::commits::CommitDetail",
              "kind": "struct_item",
              "signature": "pub struct CommitDetail {\npub summary: CommitSummary,\npub tree: Vec<FileEntry>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 81
            },
            {
              "name": "routes::commits::FileEntry",
              "kind": "struct_item",
              "signature": "pub struct FileEntry {\npub path: String,\npub blob: String,\npub size: u64,\npub mode: String\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 87
            },
            {
              "name": "routes::commits::detail",
              "kind": "function_item",
              "signature": "pub async fn detail(\n    State(state): State<AppState>,\n    Path((name, rev)): Path<(String, String)>,\n) -> Result<Json<CommitDetail>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/commits/:rev`",
              "attributes": "",
              "line": 95
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::pulls",
          "source": "sigil/weave/tools/loom-gateway/src/routes/pulls.rs",
          "sha256": "3019f0b322288e6d8cb2a2456a283bc0f1c8f9cdeab78dd7e953562f2592875e",
          "attributes": "",
          "items": [
            {
              "name": "routes::pulls::PrSummary",
              "kind": "struct_item",
              "signature": "pub struct PrSummary {\npub id: String,\npub title: String,\npub head_branch: String,\npub base_branch: String,\npub author_did: String,\npub status: String,\npub created_ms: u64,\npub updated_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 18
            },
            {
              "name": "routes::pulls::PullsEnvelope",
              "kind": "struct_item",
              "signature": "pub struct PullsEnvelope {\npub items: Vec<PrSummary>,\npub total: usize\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 51
            },
            {
              "name": "routes::pulls::list",
              "kind": "function_item",
              "signature": "pub async fn list(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<PullsEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/pulls`",
              "attributes": "",
              "line": 57
            },
            {
              "name": "routes::pulls::ApprovalSummary",
              "kind": "struct_item",
              "signature": "pub struct ApprovalSummary {\npub approver_did: String,\npub approved_head_seq: u64,\npub signed_at_ms: u64,\n/// Whether the approval still pins to the PR's *current* head_seq.\n\n/// `false` indicates the head advanced after signing \u2014 UI shows\n\n/// \"stale\" badge.\n\npub pinned_to_current_head: bool\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 75
            },
            {
              "name": "routes::pulls::PrDetail",
              "kind": "struct_item",
              "signature": "pub struct PrDetail {\npub pr: PrFull,\npub approvals: Vec<ApprovalSummary>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 86
            },
            {
              "name": "routes::pulls::PrFull",
              "kind": "struct_item",
              "signature": "pub struct PrFull {\npub id: String,\npub title: String,\npub description: String,\npub head_branch: String,\npub head_commit_seq: u64,\npub base_branch: String,\npub base_commit_seq: u64,\npub author_did: String,\npub repo_id: String,\npub status: String,\npub created_ms: u64,\npub updated_ms: u64,\npub merged_commit_seq: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 92
            },
            {
              "name": "routes::pulls::detail",
              "kind": "function_item",
              "signature": "pub async fn detail(\n    State(state): State<AppState>,\n    Path((name, id)): Path<(String, String)>,\n) -> Result<Json<PrDetail>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/pulls/:id`",
              "attributes": "",
              "line": 135
            },
            {
              "name": "routes::pulls::ApproveRequest",
              "kind": "struct_item",
              "signature": "pub struct ApproveRequest {\n\n}",
              "docs": "",
              "attributes": "#[derive(Deserialize)]",
              "line": 162
            },
            {
              "name": "routes::pulls::approve",
              "kind": "function_item",
              "signature": "pub async fn approve(\n    State(state): State<AppState>,\n    Path((name, id)): Path<(String, String)>,\n    Json(_): Json<ApproveRequest>,\n) -> Result<Json<PrDetail>, ApiError>;",
              "docs": "`POST /api/v1/repos/:name/pulls/:id/approve`",
              "attributes": "",
              "line": 165
            },
            {
              "name": "routes::pulls::MergeRequest",
              "kind": "struct_item",
              "signature": "pub struct MergeRequest {\n/// Optional override; defaults to 1 (matches CLI default).\n\n#[serde(default)]\npub min_approvals: Option<u32>,\n/// Optional commit message override.\n\n#[serde(default)]\npub message: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Deserialize, Default)]",
              "line": 197
            },
            {
              "name": "routes::pulls::merge",
              "kind": "function_item",
              "signature": "pub async fn merge(\n    State(state): State<AppState>,\n    Path((name, id)): Path<(String, String)>,\n    Json(req): Json<MergeRequest>,\n) -> Result<Json<PrDetail>, ApiError>;",
              "docs": "`POST /api/v1/repos/:name/pulls/:id/merge`",
              "attributes": "",
              "line": 207
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::repos",
          "source": "sigil/weave/tools/loom-gateway/src/routes/repos.rs",
          "sha256": "29b09461ba6fb7919b564a4a11d88439429142b29d1e2353ad18b7d8a28fa067",
          "attributes": "",
          "items": [
            {
              "name": "routes::repos::RepoSummary",
              "kind": "struct_item",
              "signature": "pub struct RepoSummary {\npub name: String,\npub owner_did: String,\npub default_branch: String,\npub description: Option<String>,\npub repo_id: String,\npub registered_ms: u64,\npub updated_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 12
            },
            {
              "name": "routes::repos::ReposEnvelope",
              "kind": "struct_item",
              "signature": "pub struct ReposEnvelope {\npub items: Vec<RepoSummary>,\npub total: usize\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 37
            },
            {
              "name": "routes::repos::RepoDetail",
              "kind": "struct_item",
              "signature": "pub struct RepoDetail {\npub version: u32,\npub name: String,\npub description: Option<String>,\npub default_branch: String,\npub bundle: loom_hub::ShareBundle,\npub registered_ms: u64,\npub updated_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 43
            },
            {
              "name": "routes::repos::list",
              "kind": "function_item",
              "signature": "pub async fn list(State(state): State<AppState>) -> Result<Json<ReposEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos` \u2014 every registry entry on this node.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "routes::repos::detail",
              "kind": "function_item",
              "signature": "pub async fn detail(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<RepoDetail>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name` \u2014 full registry entry.",
              "attributes": "",
              "line": 78
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::settings",
          "source": "sigil/weave/tools/loom-gateway/src/routes/settings.rs",
          "sha256": "dd2bf24a745bc65786b758218dda5558694deea0675084337cbeb472a4e95496",
          "attributes": "",
          "items": [
            {
              "name": "routes::settings::MandateSummary",
              "kind": "struct_item",
              "signature": "pub struct MandateSummary {\npub id: String,\npub issuer: String,\npub subject: String,\npub grant: String,\npub min_approvals: Option<u32>,\npub block_self_approval: Option<bool>,\npub allowed_approvers: Vec<String>,\npub issued_at_ms: u64,\npub expires_at_ms: Option<u64>,\npub revoked: bool,\npub revoked_at_ms: Option<u64>,\npub revoker: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 15
            },
            {
              "name": "routes::settings::MandatesEnvelope",
              "kind": "struct_item",
              "signature": "pub struct MandatesEnvelope {\npub items: Vec<MandateSummary>,\npub total: usize\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 31
            },
            {
              "name": "routes::settings::list_mandates",
              "kind": "function_item",
              "signature": "pub async fn list_mandates(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<MandatesEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/mandates`",
              "attributes": "",
              "line": 37
            },
            {
              "name": "routes::settings::DeploySummary",
              "kind": "struct_item",
              "signature": "pub struct DeploySummary {\npub id: String,\npub commit_hash: String,\npub branch: String,\npub author_did: String,\npub status: String,\npub minted_at_ms: u64,\npub spec: serde_json::Value,\npub error: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 94
            },
            {
              "name": "routes::settings::DeploysEnvelope",
              "kind": "struct_item",
              "signature": "pub struct DeploysEnvelope {\npub items: Vec<DeploySummary>,\npub total: usize\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 106
            },
            {
              "name": "routes::settings::list_deploys",
              "kind": "function_item",
              "signature": "pub async fn list_deploys(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<DeploysEnvelope>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/deploys` \u2014 read-only listing of intent files\nat `<workdir>/.loom/deploys/*.json`. v2 will move these into the lens\nfor cross-machine replication.",
              "attributes": "",
              "line": 114
            },
            {
              "name": "routes::settings::MarsAnchorView",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorView {\npub id: String,\npub did: String,\npub repo_id: String,\npub owner_did: String,\npub default_branch: String,\npub latest_commit_hash: String,\npub registered_at_ms: u64\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 178
            },
            {
              "name": "routes::settings::get_mars",
              "kind": "function_item",
              "signature": "pub async fn get_mars(\n    State(state): State<AppState>,\n    Path(name): Path<String>,\n) -> Result<Json<Option<MarsAnchorView>>, ApiError>;",
              "docs": "`GET /api/v1/repos/:name/mars` \u2014 try to find a MARS anchor whose\n`repo_id` matches this repo. Searches by the default `did:loom:you:<name>`\npattern then falls back to scanning all anchors.",
              "attributes": "",
              "line": 191
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routes::tree",
          "source": "sigil/weave/tools/loom-gateway/src/routes/tree.rs",
          "sha256": "a6215d8ef3d99d6834a622ecbb1ba92fd4e54cda83001579517822963105b7c7",
          "attributes": "",
          "items": [
            {
              "name": "routes::tree::TreeEntry",
              "kind": "struct_item",
              "signature": "pub struct TreeEntry {\npub name: String,\npub kind: TreeKind,\npub path: String,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub blob: Option<String>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub size: Option<u64>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub mode: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 12
            },
            {
              "name": "routes::tree::TreeKind",
              "kind": "enum_item",
              "signature": "pub enum TreeKind {\n    Tree,\n    Blob,\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 26
            },
            {
              "name": "routes::tree::TreeEnvelope",
              "kind": "struct_item",
              "signature": "pub struct TreeEnvelope {\npub repo: String,\npub rev: String,\npub path: String,\npub entries: Vec<TreeEntry>\n}",
              "docs": "",
              "attributes": "#[derive(Serialize)]",
              "line": 32
            },
            {
              "name": "routes::tree::root",
              "kind": "function_item",
              "signature": "pub async fn root(\n    State(state): State<AppState>,\n    Path((name, rev)): Path<(String, String)>,\n) -> Result<Json<TreeEnvelope>, ApiError>;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "routes::tree::nested",
              "kind": "function_item",
              "signature": "pub async fn nested(\n    State(state): State<AppState>,\n    Path((name, rev, path)): Path<(String, String, String)>,\n) -> Result<Json<TreeEnvelope>, ApiError>;",
              "docs": "",
              "attributes": "",
              "line": 46
            }
          ],
          "parseErrors": false
        },
        {
          "module": "state",
          "source": "sigil/weave/tools/loom-gateway/src/state.rs",
          "sha256": "8835ec0131181bf53d1ce4c5f8e430fab86ea074d74b84762eb62c1d29c5dcf9",
          "attributes": "",
          "items": [
            {
              "name": "state::AppState",
              "kind": "struct_item",
              "signature": "pub struct AppState {\n/// Channel into the worker that owns the WeaveNode.\n\npub tx: mpsc::Sender<WorkerRequest>,\n/// The `.loom/` workdir root the gateway was launched from.\n\npub workdir: PathBuf,\n/// Default branch surfaced when a request omits the ref.\n\npub default_branch: String\n}",
              "docs": "State shared across handlers. Cheap to clone \u2014 just an mpsc Sender\nplus metadata.",
              "attributes": "#[derive(Clone)]",
              "line": 16
            },
            {
              "name": "state::AppState::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        tx: mpsc::Sender<WorkerRequest>,\n        workdir: PathBuf,\n        default_branch: String,\n        gateway_token: &str,\n    ) -> Self;",
              "docs": "Construct a new `AppState`.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "state::AppState::authorizes",
              "kind": "function_item",
              "signature": "pub fn authorizes(&self, token: &str) -> bool;",
              "docs": "Constant-time verification of the local bearer capability.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "state::AppState::ask",
              "kind": "function_item",
              "signature": "pub async fn ask<T>(\n        &self,\n        build: impl FnOnce(oneshot::Sender<Result<T, ApiError>>) -> WorkerRequest,\n    ) -> Result<T, ApiError>;",
              "docs": "Helper: send a request and await the reply, mapping channel\nfailures to `ApiError::Internal`.",
              "attributes": "",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "worker",
          "source": "sigil/weave/tools/loom-gateway/src/worker.rs",
          "sha256": "3c28ec6fd309e15eb2bd5356aeb09b7d61b7e1c1b8ca12bbc4b85294ce161e3e",
          "attributes": "",
          "items": [
            {
              "name": "worker::CHANNEL_CAP",
              "kind": "const_item",
              "signature": "pub const CHANNEL_CAP: usize;",
              "docs": "Capacity of the request channel. 256 is generous for a local\ndeveloper-facing gateway; we surface backpressure via 503.",
              "attributes": "",
              "line": 25
            },
            {
              "name": "worker::WorkerRequest",
              "kind": "enum_item",
              "signature": "pub enum WorkerRequest {\n    /// `GET /api/v1/repos`\n    ListRepos {\n        reply: oneshot::Sender<Result<Vec<RegistryEntry>, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name`\n    GetRepo {\n        name: String,\n        reply: oneshot::Sender<Result<RegistryEntry, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/commits` \u2014 log walk.\n    LogCommits {\n        repo_name: String,\n        branch: String,\n        limit: usize,\n        reply: oneshot::Sender<Result<LogResult, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/commits/:rev`\n    GetCommit {\n        repo_name: String,\n        rev: String,\n        reply: oneshot::Sender<Result<(u64, LoomCommit), ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/tree/:rev[/*path]`\n    ReadTreeAt {\n        repo_name: String,\n        rev: String,\n        reply: oneshot::Sender<Result<TreeManifest, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/blob/:hash`\n    ReadBlob {\n        repo_name: String,\n        hash: String,\n        reply: oneshot::Sender<Result<Vec<u8>, ApiError>>,\n    },\n    /// Discard the cached user-wide WeaveNode and re-open it on the next\n    /// registry call. Sent by the clone handler after register completes\n    /// \u2014 without this, the long-running gateway can't see new entries\n    /// written by sibling subprocesses.\n    ReloadRegistry {\n        reply: oneshot::Sender<Result<(), ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/pulls`\n    ListPrs {\n        repo_name: String,\n        reply: oneshot::Sender<Result<Vec<loom_pr::Pr>, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/pulls/:id` \u2014 PR + approvals.\n    GetPr {\n        repo_name: String,\n        pr_id: String,\n        reply: oneshot::Sender<Result<(loom_pr::Pr, Vec<loom_pr::Approval>), ApiError>>,\n    },\n    /// Drop a per-repo cached node. Sent by handlers after a PR is\n    /// approved/merged so the next read sees the latest lens state.\n    ReloadRepo {\n        repo_name: String,\n        reply: oneshot::Sender<Result<(), ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/branches`\n    ListBranches {\n        repo_name: String,\n        reply: oneshot::Sender<Result<Vec<BranchInfo>, ApiError>>,\n    },\n    /// `GET /api/v1/repos/:name/mandates` \u2014 every mandate scoped to this\n    /// repo's repo_id, plus revocations.\n    ListMandates {\n        repo_id: String,\n        reply: MandatesReply,\n    },\n    /// `GET /api/v1/repos/:name/mars/:did` \u2014 single MARS anchor lookup.\n    GetMarsAnchor {\n        did: String,\n        reply: oneshot::Sender<Result<Option<loom_mars::MarsAnchor>, ApiError>>,\n    },\n    /// Match any anchor whose `payload.repo_id` equals the requested\n    /// repo_id. Used by the settings page so we don't need to know the\n    /// owner's handle to find their anchor for a given repo.\n    GetMarsAnchorByRepoId {\n        repo_id: String,\n        reply: oneshot::Sender<Result<Option<loom_mars::MarsAnchor>, ApiError>>,\n    },\n}",
              "docs": "One unit of work the gateway can ask of the WeaveNode.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "worker::BranchInfo",
              "kind": "struct_item",
              "signature": "pub struct BranchInfo {\npub name: String,\npub tip_seq: u64,\npub tip_id: String,\npub tip_author: String,\npub tip_message: String,\npub tip_timestamp_ms: u64\n}",
              "docs": "Wire shape: a single branch with its current tip.",
              "attributes": "#[derive(Clone, Debug, Serialize)]",
              "line": 123
            },
            {
              "name": "worker::LogResult",
              "kind": "struct_item",
              "signature": "pub struct LogResult {\npub head_seq: Option<u64>,\npub commits: Vec<(u64, LoomCommit)>\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Serialize)]",
              "line": 133
            },
            {
              "name": "worker::LoomCommit",
              "kind": "struct_item",
              "signature": "pub struct LoomCommit {\npub version: u32,\npub tree: TreeManifest,\npub tree_id: String,\npub parents: Vec<u64>,\npub author: String,\npub timestamp_ms: u64,\npub message: String\n}",
              "docs": "Mirror of `loom`'s commit object so we can decode it without taking\na circular dep. Layout is stable per `tools/loom/src/manifest.rs`.",
              "attributes": "#[derive(Clone, Debug, Deserialize, Serialize)]",
              "line": 141
            },
            {
              "name": "worker::TreeManifest",
              "kind": "struct_item",
              "signature": "pub struct TreeManifest {\npub entries: Vec<ManifestEntry>\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Deserialize, Serialize)]",
              "line": 152
            },
            {
              "name": "worker::ManifestEntry",
              "kind": "struct_item",
              "signature": "pub struct ManifestEntry {\npub path: String,\npub blob: String,\npub mode: FileMode,\npub size: u64\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Deserialize, Serialize)]",
              "line": 157
            },
            {
              "name": "worker::FileMode",
              "kind": "enum_item",
              "signature": "pub enum FileMode {\n    Regular,\n    Executable,\n    Symlink,\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Deserialize, Serialize)]",
              "line": 165
            },
            {
              "name": "worker::spawn",
              "kind": "function_item",
              "signature": "pub fn spawn(workdir: PathBuf) -> std::io::Result<(mpsc::Sender<WorkerRequest>, JoinHandle<()>)>;",
              "docs": "Spawn the worker on a dedicated OS thread running a current-thread\ntokio runtime. Returns the `Sender` handlers should use, plus the\nthread join handle (caller should keep this alive for the lifetime\nof the gateway).",
              "attributes": "",
              "line": 179
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-git",
      "version": "0.1.1",
      "source": "sigil/weave/tools/loom-git",
      "manifestSha256": "b9cc7a9fe5a37698c7c6ccf64ce6a467302d2272d0c4720c35e1d48f2969a9aa",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-git",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-git/src/lib.rs",
          "sha256": "7084cbf42bf7897599d5973d770912ec1c6b00ff43c27191f2c0e55863060245",
          "attributes": "",
          "items": [
            {
              "name": "export",
              "kind": "module",
              "signature": "pub mod export;",
              "docs": "`loom-git` \u2014 git \u2194 loom transpiler.\n\nThis crate converts git history into a loom-shaped commit graph (and back).\nIt produces a pure data structure ([`ImportPlan`]) that callers drain into a\nreal loom repo by writing blobs and appending commits \u2014 that keeps the\nlibrary independent of the WeaveNode runtime and easy to test.\n\n## Why a transpiler matters\n\nAdoption hinges on agents being able to migrate existing git repos onto\nloom (and back, for safety). A round-trip-verified import means an agent\ncan switch from git to loom *without losing history*, then export back to\ngit if they ever want to leave. That's the migration on-ramp the \"I'd use\nthis over Git\" bar requires.\n\n## What's preserved\n\n- **Commit graph**: parents and merges (topo-sorted, parents-first)\n- **Authorship**: git author is preserved verbatim in a structured field;\n  the importing agent's DID is the canonical signer (chain of custody is\n  imported-by, original-by, recorded in the commit message + structured\n  trailer)\n- **Tree contents**: blobs deduped via BLAKE3; file modes mapped to\n  loom's `FileMode` (Regular / Executable / Symlink)\n- **Timestamps**: author timestamp from git\n- **Round-trip key**: each loom commit records its source git oid so the\n  exporter can reconstruct identical trees and rebuild a corresponding\n  git commit graph (export direction lives in this crate too \u2014 see\n  `export.rs`, future iteration)",
              "attributes": "",
              "line": 31
            },
            {
              "name": "import",
              "kind": "module",
              "signature": "pub mod import;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "plan",
              "kind": "module",
              "signature": "pub mod plan;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "schema",
              "kind": "module",
              "signature": "pub mod schema;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use export::{export_to_git, ExportCommit, ExportPlan, ExportReport};",
              "kind": "use_declaration",
              "signature": "pub use export::{export_to_git, ExportCommit, ExportPlan, ExportReport};",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "pub use import::{import_git, ImportOpts, ImportReport};",
              "kind": "use_declaration",
              "signature": "pub use import::{import_git, ImportOpts, ImportReport};",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "pub use plan::{BlobDraft, CommitDraft, ImportPlan};",
              "kind": "use_declaration",
              "signature": "pub use plan::{BlobDraft, CommitDraft, ImportPlan};",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use schema::{Commit, FileMode, ManifestEntry, TreeManifest};",
              "kind": "use_declaration",
              "signature": "pub use schema::{Commit, FileMode, ManifestEntry, TreeManifest};",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "::Error",
              "kind": "enum_item",
              "signature": "pub enum Error {\n    #[error(\"git plumbing error: {0}\")]\n    Git(String),\n    #[error(\"io: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"malformed git tree at {oid}: {reason}\")]\n    BadTree { oid: String, reason: String },\n    #[error(\"unsupported git object kind for path '{path}': {kind}\")]\n    UnsupportedObject { path: String, kind: String },\n}",
              "docs": "Errors emitted by loom-git.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 43
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, Error>;",
              "docs": "",
              "attributes": "",
              "line": 54
            }
          ],
          "parseErrors": false
        },
        {
          "module": "export",
          "source": "sigil/weave/tools/loom-git/src/export.rs",
          "sha256": "b2b94bac1d8345baf5dd85de218b9f3d9c6bdcbfa248d7a21bdbdfd81e7c739d",
          "attributes": "",
          "items": [
            {
              "name": "export::ExportPlan",
              "kind": "struct_item",
              "signature": "pub struct ExportPlan {\n/// Loom commits in topo order (parents-first, same shape as\n\n/// [`crate::ImportPlan::commits`]). Each commit's `parents` field is a\n\n/// list of indices into this vector.\n\npub commits: Vec<ExportCommit>,\n/// Branch name to set in the destination git repo (typically `main`).\n\npub branch: String\n}",
              "docs": "What the CLI shim hands the exporter.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 37
            },
            {
              "name": "export::ExportCommit",
              "kind": "struct_item",
              "signature": "pub struct ExportCommit {\npub commit: Commit,\n/// Indices into [`ExportPlan::commits`] of this commit's parents.\n\npub parents: Vec<usize>,\n/// Resolved blob payloads keyed by `manifest.blob` (blake3 hex). The\n\n/// shim is responsible for reading these from the loom blobs Locus.\n\npub blob_bytes: std::collections::HashMap<String, Vec<u8>>\n}",
              "docs": "One commit ready for export. The shim populates this from a loom\n`Commit` plus the bytes of every blob it references.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 49
            },
            {
              "name": "export::ExportReport",
              "kind": "struct_item",
              "signature": "pub struct ExportReport {\npub commits_exported: usize,\npub trees_written: usize,\npub blobs_written: usize\n}",
              "docs": "What was written.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 60
            },
            {
              "name": "export::export_to_git",
              "kind": "function_item",
              "signature": "pub fn export_to_git(dest: &std::path::Path, plan: &ExportPlan) -> crate::Result<ExportReport>;",
              "docs": "Write a fresh bare git repo at `dest` containing the history described by\n`plan`. The directory is initialized if it doesn't exist, otherwise it\nmust be empty (we don't merge into existing histories yet).",
              "attributes": "",
              "line": 69
            }
          ],
          "parseErrors": false
        },
        {
          "module": "import",
          "source": "sigil/weave/tools/loom-git/src/import.rs",
          "sha256": "a2340eb4a6690fa898df2c730717d4729f444fe62618283822a16e556424674b",
          "attributes": "",
          "items": [
            {
              "name": "import::ImportOpts",
              "kind": "struct_item",
              "signature": "pub struct ImportOpts {\n/// Loom branch name to set at the tip after draining (default: `main`).\n\npub branch: String,\n/// DID that signs the imported commits. The CLI defaults this to the\n\n/// repo's own agent DID; library callers override as needed.\n\npub author: String,\n/// Source ref to import (e.g. `HEAD`, `refs/heads/master`). Default `HEAD`.\n\npub source_ref: String,\n/// If true, abort if any tree contains an unsupported entry (gitlinks,\n\n/// non-utf8 paths). If false, warn and skip.\n\npub strict: bool\n}",
              "docs": "Knobs for an import run.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 31
            },
            {
              "name": "import::ImportReport",
              "kind": "struct_item",
              "signature": "pub struct ImportReport {\npub commits_imported: usize,\npub blobs_imported: usize,\npub total_blob_bytes: u64,\npub skipped_entries: usize\n}",
              "docs": "Summary of what an import produced.",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 57
            },
            {
              "name": "import::import_git",
              "kind": "function_item",
              "signature": "pub fn import_git(git_path: &Path, opts: ImportOpts) -> Result<(ImportPlan, ImportReport)>;",
              "docs": "Read a git repo and produce a drainable [`ImportPlan`].",
              "attributes": "",
              "line": 65
            }
          ],
          "parseErrors": false
        },
        {
          "module": "plan",
          "source": "sigil/weave/tools/loom-git/src/plan.rs",
          "sha256": "a795aeb383f6a01bfcd2429d69f8c3287ffdce7f42b9ed088b68ac68ec85d767",
          "attributes": "",
          "items": [
            {
              "name": "plan::BlobDraft",
              "kind": "struct_item",
              "signature": "pub struct BlobDraft {\n/// BLAKE3 hex of `content` \u2014 the path-suffix in the blobs locus\n\n/// (`/blobs/<blob_hash>`).\n\npub blob_hash: String,\n/// Raw bytes. Bounded by git's blob-size policy on the source side; the\n\n/// importer doesn't slice large blobs.\n\npub content: Vec<u8>\n}",
              "docs": "One blob to write into the loom blobs Locus drive.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 27
            },
            {
              "name": "plan::CommitDraft",
              "kind": "struct_item",
              "signature": "pub struct CommitDraft {\n/// Source git oid (40-char lowercase hex). Recorded in the structured\n\n/// `imported-from-git` trailer of the commit message and surfaced by\n\n/// `loom log --git-oid`.\n\npub git_oid: String,\n/// Indices into [`ImportPlan::commits`] of this commit's parents. Empty\n\n/// for the root commit; one entry for normal commits; \u22652 for merges.\n\npub parents: Vec<usize>,\n/// The commit body (tree + tree_id + author + timestamp + message),\n\n/// minus parents \u2014 those are filled in at drain time once seq numbers\n\n/// are known.\n\npub commit_template: Commit\n}",
              "docs": "One commit to append, after blob writes complete.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 38
            },
            {
              "name": "plan::ImportPlan",
              "kind": "struct_item",
              "signature": "pub struct ImportPlan {\n/// Deduped blobs (one entry per unique BLAKE3 hash).\n\npub blobs: Vec<BlobDraft>,\n/// Commits in topo order (parents come first).\n\npub commits: Vec<CommitDraft>,\n/// Branch name to set at the tip after draining (typically `main`).\n\npub branch: String\n}",
              "docs": "The fully-prepared import. The CLI shim drains this and writes to a\nreal loom repo.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 55
            },
            {
              "name": "plan::ImportPlan::total_blob_bytes",
              "kind": "function_item",
              "signature": "pub fn total_blob_bytes(&self) -> u64;",
              "docs": "Total number of bytes across all blobs (informational).",
              "attributes": "",
              "line": 66
            },
            {
              "name": "plan::ImportPlan::unique_blob_count",
              "kind": "function_item",
              "signature": "pub fn unique_blob_count(&self) -> usize;",
              "docs": "Convenience for callers verifying dedup ratio.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "plan::ImportPlan::commit_count",
              "kind": "function_item",
              "signature": "pub fn commit_count(&self) -> usize;",
              "docs": "Number of commits in the plan.",
              "attributes": "",
              "line": 76
            }
          ],
          "parseErrors": false
        },
        {
          "module": "schema",
          "source": "sigil/weave/tools/loom-git/src/schema.rs",
          "sha256": "7e7438de983154ba0132a1410eec7f098eaec2ac296f708bdba9c4f75686f4c6",
          "attributes": "",
          "items": [
            {
              "name": "schema::FileMode",
              "kind": "enum_item",
              "signature": "pub enum FileMode {\n    Regular,\n    Executable,\n    Symlink,\n}",
              "docs": "File permission mode, matching loom's wire format.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "schema::FileMode::from_git_mode",
              "kind": "function_item",
              "signature": "pub fn from_git_mode(mode: u32) -> Option<Self>;",
              "docs": "Translate a git tree-entry mode (`u32` from the tree object) to loom.",
              "attributes": "",
              "line": 25
            },
            {
              "name": "schema::ManifestEntry",
              "kind": "struct_item",
              "signature": "pub struct ManifestEntry {\npub path: String,\n/// Hex-encoded BLAKE3 of the blob content.\n\npub blob: String,\npub mode: FileMode,\npub size: u64\n}",
              "docs": "One file entry inside a [`TreeManifest`].",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 38
            },
            {
              "name": "schema::TreeManifest",
              "kind": "struct_item",
              "signature": "pub struct TreeManifest {\npub entries: Vec<ManifestEntry>\n}",
              "docs": "Sorted list of manifest entries. Sort happens in [`Self::from_entries`]\nto keep the canonical encoding stable.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 49
            },
            {
              "name": "schema::TreeManifest::from_entries",
              "kind": "function_item",
              "signature": "pub fn from_entries(mut entries: Vec<ManifestEntry>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "schema::TreeManifest::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "schema::Commit",
              "kind": "struct_item",
              "signature": "pub struct Commit {\npub version: u32,\npub tree: TreeManifest,\npub tree_id: String,\n/// Parent commit *sequence numbers* on the loom commits-strand. The\n\n/// importer doesn't know the final seq numbers (the strand assigns them\n\n/// at append time), so the [`crate::ImportPlan`] carries parents as\n\n/// indices into the draft list and the CLI shim translates to seqs.\n\npub parents: Vec<u64>,\npub author: String,\npub timestamp_ms: u64,\npub message: String\n}",
              "docs": "A loom commit \u2014 same JSON shape as `loom::manifest::Commit`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "schema::Commit::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "",
              "attributes": "",
              "line": 82
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-pr",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom-pr",
      "manifestSha256": "65cc02d2a32db5a34bf592dfb108107e598430669acd51cc6e1944b80b0d52d3",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-pr",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-pr/src/lib.rs",
          "sha256": "b20ac5942590e265656d6d98efdbe769ea9d0e4bb8ffbff2ac319516f989bf71",
          "attributes": "",
          "items": [
            {
              "name": "pub use approval::{verify_approval, Approval, ApprovalError, ApprovalPayload};",
              "kind": "use_declaration",
              "signature": "pub use approval::{verify_approval, Approval, ApprovalError, ApprovalPayload};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use policy::{MergeDecision, MergePolicy};",
              "kind": "use_declaration",
              "signature": "pub use policy::{MergeDecision, MergePolicy};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use pr::{OpenPayload, Pr, PrId, PrStatus};",
              "kind": "use_declaration",
              "signature": "pub use pr::{OpenPayload, Pr, PrId, PrStatus};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use store::{PrError, PrStore, Result, PR_LENS};",
              "kind": "use_declaration",
              "signature": "pub use store::{PrError, PrStore, Result, PR_LENS};",
              "docs": "",
              "attributes": "",
              "line": 57
            }
          ],
          "parseErrors": false
        },
        {
          "module": "approval",
          "source": "sigil/weave/tools/loom-pr/src/approval.rs",
          "sha256": "7b3bd2dbbc497a6d712701dee4b4a38691be2c7b93278fbd0afad9dd44765c7d",
          "attributes": "",
          "items": [
            {
              "name": "approval::ApprovalPayload",
              "kind": "struct_item",
              "signature": "pub struct ApprovalPayload {\n/// Schema version.\n\npub version: u32,\n/// PR being approved.\n\npub pr_id: PrId,\n/// Approver DID.\n\npub approver_did: String,\n/// The exact head-commit sequence number the approver is endorsing.\n\n/// Approvals only count toward threshold when the PR's\n\n/// `head_commit_seq` matches this field.\n\npub approved_head_seq: u64,\n/// UNIX millis the approval was signed.\n\npub signed_at_ms: u64\n}",
              "docs": "The bytes that get Ed25519-signed. Order matters; serde_json\nserializes fields in declaration order.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "approval::ApprovalPayload::canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_bytes(&self) -> Result<Vec<u8>, serde_json::Error>;",
              "docs": "Canonical JSON bytes used for signing/verification. Stable across\nserde versions because field order is fixed by the struct\ndeclaration and serde_json preserves that order for structs.",
              "attributes": "",
              "line": 37
            },
            {
              "name": "approval::Approval",
              "kind": "struct_item",
              "signature": "pub struct Approval {\n/// The signed payload.\n\npub payload: ApprovalPayload,\n/// Hex-encoded 64-byte Ed25519 signature.\n\npub signature_hex: String,\n/// Hex-encoded 32-byte Ed25519 public key of the approver. Embedded\n\n/// here so verifiers don't need to chase the approver's DID document\n\n/// before checking \u2014 speeds up the common path while still being\n\n/// auditable (the DID's pubkey is the source of truth).\n\npub approver_pubkey_hex: String\n}",
              "docs": "A persisted approval \u2014 payload plus signature plus the verifying key\nneeded to check it without DID resolution.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "approval::ApprovalError",
              "kind": "enum_item",
              "signature": "pub enum ApprovalError {\n    /// Signature does not validate against the embedded public key.\n    #[error(\"signature invalid\")]\n    SignatureInvalid,\n    /// Payload re-encoding failed (corrupt JSON).\n    #[error(\"payload encoding: {0}\")]\n    Encoding(#[from] serde_json::Error),\n    /// Public-key bytes were not 32 hex-bytes.\n    #[error(\"invalid public key encoding: {0}\")]\n    BadKey(String),\n    /// Signature bytes were not 64 hex-bytes.\n    #[error(\"invalid signature encoding: {0}\")]\n    BadSig(String),\n}",
              "docs": "Errors raised by approval verification.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 59
            },
            {
              "name": "approval::verify_approval",
              "kind": "function_item",
              "signature": "pub fn verify_approval(approval: &Approval) -> Result<(), ApprovalError>;",
              "docs": "Verify an approval's signature. Returns `Ok(())` when the signature\nis valid for the embedded payload + pubkey. **Does not** check\nauthorization; the merge policy layer enforces that separately.",
              "attributes": "",
              "line": 77
            }
          ],
          "parseErrors": false
        },
        {
          "module": "policy",
          "source": "sigil/weave/tools/loom-pr/src/policy.rs",
          "sha256": "9d7992d3bc2ec43a3796b837925ba4925469be541397ce015f1273aa873bf136",
          "attributes": "",
          "items": [
            {
              "name": "policy::MergePolicy",
              "kind": "struct_item",
              "signature": "pub struct MergePolicy {\n/// Minimum approver-DIDs whose signatures verify against the current\n\n/// `head_commit_seq`. Default `1`.\n\npub min_approvals: u32,\n/// If set, only DIDs in this allow-list count. Empty means \"any DID\n\n/// counts\" (open-source default \u2014 anyone can review). v2 will replace\n\n/// this with a Sigil Mandate reference.\n\n#[serde(default)]\npub allowed_approvers: Vec<String>,\n/// If true, the PR's own author cannot satisfy the threshold (a\n\n/// reviewer-must-not-be-author guard). Default `true`.\n\n#[serde(default = \"default_block_self_approval\")]\npub block_self_approval: bool\n}",
              "docs": "How many distinct, valid approvals are required to merge.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "policy::MergeDecision",
              "kind": "enum_item",
              "signature": "pub enum MergeDecision {\n    /// At least `min_approvals` distinct, valid, on-policy approvals\n    /// pinned to the current head; merge is authorized.\n    Approved {\n        /// DIDs that contributed to the threshold (deduped).\n        contributing_dids: Vec<String>,\n    },\n    /// Not enough qualifying approvals.\n    Insufficient {\n        /// How many we counted as valid.\n        valid: u32,\n        /// What the policy required.\n        required: u32,\n    },\n}",
              "docs": "Outcome of evaluating a set of approvals against a policy.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 44
            },
            {
              "name": "policy::MergePolicy::evaluate",
              "kind": "function_item",
              "signature": "pub fn evaluate(&self, pr: &Pr, approvals: &[Approval]) -> MergeDecision;",
              "docs": "Evaluate `approvals` for `pr`. Each approval is signature-checked\nonce and counted toward the threshold iff:\n\n1. Signature verifies against its embedded pubkey.\n2. `payload.pr_id` matches the PR.\n3. `payload.approved_head_seq` matches the PR's current head.\n4. `payload.approver_did` is on the allow-list (or list is empty).\n5. Approver DID is not the PR author when `block_self_approval`.",
              "attributes": "",
              "line": 69
            }
          ],
          "parseErrors": false
        },
        {
          "module": "pr",
          "source": "sigil/weave/tools/loom-pr/src/pr.rs",
          "sha256": "f67efff1d03f0c3c544aa3edc8c50e366f6725057458287b009269a04a8a6f0f",
          "attributes": "",
          "items": [
            {
              "name": "pr::PrId",
              "kind": "type_item",
              "signature": "pub type PrId = String;",
              "docs": "A 16-char hex BLAKE3-prefix uniquely identifying a PR. Content-\naddressed over the `OpenPayload` so two agents that open \"the same\"\nPR (same head/base/title/description) collide on purpose; otherwise\nevery PR gets a fresh id without coordination.",
              "attributes": "",
              "line": 9
            },
            {
              "name": "pr::PrStatus",
              "kind": "enum_item",
              "signature": "pub enum PrStatus {\n    /// Open and accepting reviews.\n    Open,\n    /// Successfully merged via [`crate::MergePolicy`].\n    Merged,\n    /// Closed without merging.\n    Closed,\n}",
              "docs": "Lifecycle states.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 14
            },
            {
              "name": "pr::OpenPayload",
              "kind": "struct_item",
              "signature": "pub struct OpenPayload {\n/// Schema version.\n\npub version: u32,\n/// Repo identifier (matches `RepoConfig::repo_id`). Bound into the id\n\n/// so the same head/base from different repos gets distinct ids.\n\npub repo_id: String,\n/// Branch the PR is requesting to merge into the base.\n\npub head_branch: String,\n/// Loom commit sequence number at the head branch tip when the PR\n\n/// was opened. Approvers pin their signature to this; if the head\n\n/// advances, approvals on the prior commit no longer count toward\n\n/// threshold.\n\npub head_commit_seq: u64,\n/// Branch to merge into.\n\npub base_branch: String,\n/// Loom commit sequence number at the base branch tip when the PR\n\n/// was opened.\n\npub base_commit_seq: u64,\n/// PR title (one line).\n\npub title: String,\n/// PR description (free-form Markdown).\n\npub description: String,\n/// DID that opened the PR.\n\npub author_did: String,\n/// UNIX millis when the PR was opened.\n\npub created_ms: u64\n}",
              "docs": "The deterministic payload signed (and hashed for the id) when a PR is\nopened. Order of fields is fixed and matches the serde declaration \u2014\nserde_json preserves field declaration order so `serde_json::to_vec`\nof this struct is canonical.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "pr::OpenPayload::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<PrId, serde_json::Error>;",
              "docs": "Compute the canonical 16-char hex PR id.",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pr::Pr",
              "kind": "struct_item",
              "signature": "pub struct Pr {\n/// Schema version.\n\npub version: u32,\n/// Content-addressed PR id (16-char hex).\n\npub id: PrId,\n/// Title.\n\npub title: String,\n/// Free-form description (Markdown).\n\npub description: String,\n/// Head branch name.\n\npub head_branch: String,\n/// Head commit seq when the PR was opened.\n\npub head_commit_seq: u64,\n/// Base branch name.\n\npub base_branch: String,\n/// Base commit seq when the PR was opened.\n\npub base_commit_seq: u64,\n/// Author DID.\n\npub author_did: String,\n/// Repo id (matches `RepoConfig::repo_id`).\n\npub repo_id: String,\n/// Lifecycle status.\n\npub status: PrStatus,\n/// UNIX millis when the PR was opened.\n\npub created_ms: u64,\n/// UNIX millis of the most recent status change or rewrite.\n\npub updated_ms: u64,\n/// Set when the PR is merged: the seq number of the merge commit on\n\n/// the base branch.\n\npub merged_commit_seq: Option<u64>\n}",
              "docs": "The full PR document persisted in Lens.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "pr::Pr::open",
              "kind": "function_item",
              "signature": "pub fn open(payload: &OpenPayload) -> Result<Self, serde_json::Error>;",
              "docs": "Construct a fresh `Pr` from an [`OpenPayload`]. Mints the id and\nstamps the created/updated timestamps from the payload itself.",
              "attributes": "",
              "line": 102
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store",
          "source": "sigil/weave/tools/loom-pr/src/store.rs",
          "sha256": "5ec28399726b2d11bbe7f9242da262614983a6b644c2d5fce80e511571ad1f4b",
          "attributes": "",
          "items": [
            {
              "name": "store::PR_LENS",
              "kind": "const_item",
              "signature": "pub const PR_LENS: &str;",
              "docs": "Canonical Lens database name. Stable across versions.",
              "attributes": "",
              "line": 10
            },
            {
              "name": "store::PrError",
              "kind": "enum_item",
              "signature": "pub enum PrError {\n    /// PR with the requested id was not found.\n    #[error(\"PR not found: {0}\")]\n    NotFound(String),\n    /// Underlying Weave error (Lens IO, identity, etc.).\n    #[error(\"weave error: {0}\")]\n    Weave(String),\n    /// (De)serialization failed.\n    #[error(\"serialization error: {0}\")]\n    Json(#[from] serde_json::Error),\n}",
              "docs": "Errors raised by the store.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 14
            },
            {
              "name": "store::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, PrError>;",
              "docs": "Convenience result.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "store::pr_key",
              "kind": "function_item",
              "signature": "pub fn pr_key(id: &PrId) -> Vec<u8>;",
              "docs": "Lens key for a PR document.",
              "attributes": "",
              "line": 36
            },
            {
              "name": "store::approval_key",
              "kind": "function_item",
              "signature": "pub fn approval_key(pr_id: &PrId, approver_did: &str) -> Vec<u8>;",
              "docs": "Lens key for an approval.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "store::PrStore",
              "kind": "struct_item",
              "signature": "pub struct PrStore<'a> {\n\n}",
              "docs": "Read/write handle. Like the registry, this is a thin wrapper that\nadds a stable encoding over the existing WeaveNode + Lens.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "store::PrStore<'a>::open",
              "kind": "function_item",
              "signature": "pub async fn open(node: &'a WeaveNode) -> Result<Self>;",
              "docs": "Open the PR Lens (idempotent).",
              "attributes": "",
              "line": 61
            },
            {
              "name": "store::PrStore<'a>::put_pr",
              "kind": "function_item",
              "signature": "pub async fn put_pr(&self, pr: &Pr) -> Result<()>;",
              "docs": "Persist a PR document (overwrites by id).",
              "attributes": "",
              "line": 67
            },
            {
              "name": "store::PrStore<'a>::get_pr",
              "kind": "function_item",
              "signature": "pub async fn get_pr(&self, id: &PrId) -> Result<Pr>;",
              "docs": "Look up by id.",
              "attributes": "",
              "line": 75
            },
            {
              "name": "store::PrStore<'a>::try_get_pr",
              "kind": "function_item",
              "signature": "pub async fn try_get_pr(&self, id: &PrId) -> Result<Option<Pr>>;",
              "docs": "Soft-fail variant.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "store::PrStore<'a>::list_prs",
              "kind": "function_item",
              "signature": "pub async fn list_prs(&self) -> Result<Vec<Pr>>;",
              "docs": "List every PR (sorted by id). Range scan over the `pr:` prefix.",
              "attributes": "",
              "line": 95
            },
            {
              "name": "store::PrStore<'a>::put_approval",
              "kind": "function_item",
              "signature": "pub async fn put_approval(&self, approval: &Approval) -> Result<()>;",
              "docs": "Persist an approval (one per (pr_id, approver_did)).",
              "attributes": "",
              "line": 129
            },
            {
              "name": "store::PrStore<'a>::list_approvals",
              "kind": "function_item",
              "signature": "pub async fn list_approvals(&self, pr_id: &PrId) -> Result<Vec<Approval>>;",
              "docs": "Range-scan every approval for a PR.",
              "attributes": "",
              "line": 137
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-encrypt",
      "version": "0.1.1",
      "source": "sigil/weave/tools/loom-encrypt",
      "manifestSha256": "fcbcc0ac69ab47cbc9e30740901a5804619c8303d9bae5f5bc7967d3614575a5",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-encrypt",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-encrypt/src/lib.rs",
          "sha256": "a5972250d3d452ed23ff012a9ff5bd92d75983c28c4b802bf96b16534e9b8de5",
          "attributes": "",
          "items": [
            {
              "name": "pub use codec::{open, seal, DecryptError, EncryptError, FORMAT_VERSION};",
              "kind": "use_declaration",
              "signature": "pub use codec::{open, seal, DecryptError, EncryptError, FORMAT_VERSION};",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "pub use key::{derive_blob_key, derive_blob_nonce, mek_from_identity_bytes, MasterKey, MEK_LEN};",
              "kind": "use_declaration",
              "signature": "pub use key::{derive_blob_key, derive_blob_nonce, mek_from_identity_bytes, MasterKey, MEK_LEN};",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "pub use metadata::{\n    opaque_id, open_metadata, replication_access_proof, seal_metadata,\n    verify_replication_access_proof, MetadataDecryptError, MetadataEncryptError,\n    METADATA_FORMAT_VERSION,\n};",
              "kind": "use_declaration",
              "signature": "pub use metadata::{\n    opaque_id, open_metadata, replication_access_proof, seal_metadata,\n    verify_replication_access_proof, MetadataDecryptError, MetadataEncryptError,\n    METADATA_FORMAT_VERSION,\n};",
              "docs": "",
              "attributes": "",
              "line": 72
            }
          ],
          "parseErrors": false
        },
        {
          "module": "codec",
          "source": "sigil/weave/tools/loom-encrypt/src/codec.rs",
          "sha256": "608fa0d851755d4358ae6a24c30a7b9f540088ac9cf74678cef88263120b70c9",
          "attributes": "",
          "items": [
            {
              "name": "codec::FORMAT_VERSION",
              "kind": "const_item",
              "signature": "pub const FORMAT_VERSION: u8;",
              "docs": "Format version byte at offset 0.",
              "attributes": "",
              "line": 26
            },
            {
              "name": "codec::EncryptError",
              "kind": "enum_item",
              "signature": "pub enum EncryptError {\n    /// AEAD failed (should not happen with well-formed inputs).\n    #[error(\"AEAD seal failed: {0}\")]\n    Aead(String),\n}",
              "docs": "Errors raised during [`seal`].",
              "attributes": "#[derive(Debug, Error)]",
              "line": 37
            },
            {
              "name": "codec::DecryptError",
              "kind": "enum_item",
              "signature": "pub enum DecryptError {\n    /// Ciphertext shorter than the minimum header + tag.\n    #[error(\"ciphertext too short: {len} bytes (need at least {needed})\")]\n    TooShort {\n        /// Actual length.\n        len: usize,\n        /// Required minimum.\n        needed: usize,\n    },\n    /// Format version byte was not [`FORMAT_VERSION`].\n    #[error(\"unknown format version 0x{0:02x}\")]\n    UnknownVersion(u8),\n    /// In-band nonce did not match the expected derivation. Indicates\n    /// the ciphertext was forged or copy-paste'd from another (mek,\n    /// blob_hash) pair \u2014 refuse to decrypt either way.\n    #[error(\"nonce mismatch (ciphertext was sealed under a different key/blob_hash)\")]\n    NonceMismatch,\n    /// AEAD authentication failed (tampered ciphertext or wrong key).\n    #[error(\"authentication tag invalid (wrong key, wrong blob_hash, or tampering)\")]\n    Auth,\n}",
              "docs": "Errors raised during [`open`].",
              "attributes": "#[derive(Debug, Error)]",
              "line": 45
            },
            {
              "name": "codec::seal",
              "kind": "function_item",
              "signature": "pub fn seal(mek: &MasterKey, blob_hash: &str, plaintext: &[u8]) -> Result<Vec<u8>, EncryptError>;",
              "docs": "Encrypt `plaintext` for storage. The associated data committed to by\nthe AEAD is the BLAKE3 `blob_hash` itself, so a ciphertext relocated\nto a different `/blobs/<other_hash>` slot fails to decrypt \u2014 that\nmakes the storage path tamper-evident in addition to the AEAD tag.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "codec::open",
              "kind": "function_item",
              "signature": "pub fn open(mek: &MasterKey, blob_hash: &str, ciphertext: &[u8]) -> Result<Vec<u8>, DecryptError>;",
              "docs": "Decrypt a ciphertext previously produced by [`seal`]. Verifies the\nin-band nonce against the expected derivation (catches accidental\nblob-hash mix-ups) and the AEAD tag (catches tampering).",
              "attributes": "",
              "line": 98
            }
          ],
          "parseErrors": false
        },
        {
          "module": "key",
          "source": "sigil/weave/tools/loom-encrypt/src/key.rs",
          "sha256": "2de8c8f35ae470c630a14bd649ad9c9aa448ede2638c88d39e301e55f6aca947",
          "attributes": "",
          "items": [
            {
              "name": "key::MEK_LEN",
              "kind": "const_item",
              "signature": "pub const MEK_LEN: usize;",
              "docs": "Length of the master encryption key in bytes (256-bit ChaCha20 key).",
              "attributes": "",
              "line": 8
            },
            {
              "name": "key::MasterKey",
              "kind": "struct_item",
              "signature": "pub struct MasterKey([u8; MEK_LEN]);",
              "docs": "Master encryption key. Wrapped so it zeroes its memory on drop \u2014\nhostile core dumps cannot scrape it later.",
              "attributes": "#[derive(Clone, ZeroizeOnDrop)]",
              "line": 21
            },
            {
              "name": "key::MasterKey::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: [u8; MEK_LEN]) -> Self;",
              "docs": "Wrap raw key bytes. Caller is responsible for sourcing them\n(from agent identity, from a secret store, from a passphrase).",
              "attributes": "",
              "line": 26
            },
            {
              "name": "key::MasterKey::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; MEK_LEN];",
              "docs": "Borrow the raw key bytes for HKDF input. Only call inside the\ncrypto path; never log or persist the result.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "key::derive_blob_key",
              "kind": "function_item",
              "signature": "pub fn derive_blob_key(mek: &MasterKey, blob_hash: &str) -> Zeroizing<[u8; 32]>;",
              "docs": "Derive the per-blob ChaCha20 key from `(blob_hash, mek)`.\n\n`blob_hash` is the BLAKE3 hex of the *plaintext*; it doubles as the\nHKDF salt so two different blobs end up with completely distinct keys.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "key::derive_blob_nonce",
              "kind": "function_item",
              "signature": "pub fn derive_blob_nonce(mek: &MasterKey, blob_hash: &str) -> [u8; 12];",
              "docs": "Derive the deterministic 12-byte nonce from `(blob_hash, mek)`.\n\nDeterminism is safe here because each plaintext has a unique\nblob_hash (BLAKE3), so the `(key, nonce)` pair is globally unique\nper content. Different blobs end up with independent keys *and\nnonces \u2014 there is no nonce-reuse attack surface.",
              "attributes": "",
              "line": 63
            },
            {
              "name": "key::mek_from_identity_bytes",
              "kind": "function_item",
              "signature": "pub fn mek_from_identity_bytes(identity_bytes: &[u8], repo_id: &str) -> MasterKey;",
              "docs": "Derive a MEK from an agent's identity material plus a repo id.\nUseful when the user doesn't want a passphrase \u2014 they get one MEK\nper repo per agent automatically. Identical inputs always produce\nthe same MEK so the agent can re-derive on every loom invocation.\n\nThe repo id is bound into the HKDF info tag so two private repos on\nthe same agent get different MEKs even if their content overlaps.",
              "attributes": "",
              "line": 78
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metadata",
          "source": "sigil/weave/tools/loom-encrypt/src/metadata.rs",
          "sha256": "d49fb474b0c4aef6fedc9f17bbe74f14855a5c05a2984b1ee137a5ef6fedfcbc",
          "attributes": "",
          "items": [
            {
              "name": "metadata::METADATA_FORMAT_VERSION",
              "kind": "const_item",
              "signature": "pub const METADATA_FORMAT_VERSION: u8;",
              "docs": "Private-metadata envelope format version.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "metadata::MetadataEncryptError",
              "kind": "enum_item",
              "signature": "pub enum MetadataEncryptError {\n    /// The caller exceeded the bounded private-metadata payload size.\n    #[error(\"metadata plaintext is {len} bytes; maximum is {max}\")]\n    TooLarge {\n        /// Supplied plaintext length.\n        len: usize,\n        /// Maximum admitted plaintext length.\n        max: usize,\n    },\n    /// The platform RNG could not provide a nonce.\n    #[error(\"metadata nonce generation failed\")]\n    Random,\n    /// Authenticated encryption failed.\n    #[error(\"metadata AEAD seal failed\")]\n    Aead,\n}",
              "docs": "Errors raised while sealing private metadata.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 38
            },
            {
              "name": "metadata::MetadataDecryptError",
              "kind": "enum_item",
              "signature": "pub enum MetadataDecryptError {\n    /// Ciphertext is shorter than the version, nonce, and authentication tag.\n    #[error(\"metadata ciphertext is too short\")]\n    TooShort,\n    /// The envelope version is unsupported.\n    #[error(\"unsupported metadata format version 0x{0:02x}\")]\n    UnknownVersion(u8),\n    /// The envelope exceeds the largest plaintext plus bounded padding.\n    #[error(\"metadata ciphertext is {len} bytes; maximum is {max}\")]\n    TooLarge {\n        /// Supplied ciphertext length.\n        len: usize,\n        /// Maximum admitted ciphertext length.\n        max: usize,\n    },\n    /// Authenticated decryption failed.\n    #[error(\"metadata authentication failed\")]\n    Auth,\n    /// The authenticated plaintext carried an invalid embedded length.\n    #[error(\"metadata plaintext length is invalid\")]\n    InvalidLength,\n    /// The authenticated padding was not canonical zero padding.\n    #[error(\"metadata padding is not canonical\")]\n    InvalidPadding,\n}",
              "docs": "Errors raised while opening private metadata.",
              "attributes": "#[derive(Debug, Error, PartialEq, Eq)]",
              "line": 57
            },
            {
              "name": "metadata::seal_metadata",
              "kind": "function_item",
              "signature": "pub fn seal_metadata(\n    mek: &MasterKey,\n    context: &str,\n    plaintext: &[u8],\n) -> Result<Vec<u8>, MetadataEncryptError>;",
              "docs": "Seal a private metadata payload.\n\n`context` is a stable, non-secret type label such as `commit` or\n`access-manifest`. It is authenticated as associated data and separates\notherwise identical payload classes.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "metadata::open_metadata",
              "kind": "function_item",
              "signature": "pub fn open_metadata(\n    mek: &MasterKey,\n    context: &str,\n    ciphertext: &[u8],\n) -> Result<Vec<u8>, MetadataDecryptError>;",
              "docs": "Open a private metadata payload sealed by [`seal_metadata`].",
              "attributes": "",
              "line": 136
            },
            {
              "name": "metadata::opaque_id",
              "kind": "function_item",
              "signature": "pub fn opaque_id(mek: &MasterKey, kind: &str, clear_identifier: &[u8]) -> String;",
              "docs": "Derive a keyed, domain-separated identifier for a private metadata value.\n\nThe result is suitable for replicated object names and cannot be confirmed\nfrom a guessed plaintext value without possession of the repository key.",
              "attributes": "",
              "line": 194
            },
            {
              "name": "metadata::replication_access_proof",
              "kind": "function_item",
              "signature": "pub fn replication_access_proof(\n    mek: &MasterKey,\n    channel_binding: &[u8; 32],\n    discovery_key: &[u8; 32],\n    live: bool,\n) -> [u8; 32];",
              "docs": "Derive the anonymous, one-time proof sent before private peers disclose\ntheir DIDs. The proof is bound to the current repository key epoch, the\nexact Noise channel, requested discovery key, and live/non-live mode.",
              "attributes": "",
              "line": 207
            },
            {
              "name": "metadata::verify_replication_access_proof",
              "kind": "function_item",
              "signature": "pub fn verify_replication_access_proof(\n    mek: &MasterKey,\n    channel_binding: &[u8; 32],\n    discovery_key: &[u8; 32],\n    live: bool,\n    proof: &[u8; 32],\n) -> bool;",
              "docs": "Constant-time verification of a private replication access proof.",
              "attributes": "",
              "line": 222
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-mandate",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom-mandate",
      "manifestSha256": "046df55ef3d0ba40ae7c225107210434a6ce336544dfa988b60aa49b0e796e10",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-mandate",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-mandate/src/lib.rs",
          "sha256": "9a034c119865d9b0ec9a110edd1af131e810f261742b5c5da69af5d610ebabbf",
          "attributes": "",
          "items": [
            {
              "name": "pub use evaluate::{evaluate, EvalDecision, EvalRequest};",
              "kind": "use_declaration",
              "signature": "pub use evaluate::{evaluate, EvalDecision, EvalRequest};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use mandate::{\n    sign_issue, verify_issue, ApprovalPolicy, DelegationPolicy, IssuePayload, Mandate,\n    MandateError, Permission, RevocationEntry,\n};",
              "kind": "use_declaration",
              "signature": "pub use mandate::{\n    sign_issue, verify_issue, ApprovalPolicy, DelegationPolicy, IssuePayload, Mandate,\n    MandateError, Permission, RevocationEntry,\n};",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "pub use store::{MandateStore, StoreError, MANDATE_LENS};",
              "kind": "use_declaration",
              "signature": "pub use store::{MandateStore, StoreError, MANDATE_LENS};",
              "docs": "",
              "attributes": "",
              "line": 65
            }
          ],
          "parseErrors": false
        },
        {
          "module": "evaluate",
          "source": "sigil/weave/tools/loom-mandate/src/evaluate.rs",
          "sha256": "79abc4af42e4ae700d91f8b79bcbccaf31732878c009771971e187c086e9c571",
          "attributes": "",
          "items": [
            {
              "name": "evaluate::EvalRequest",
              "kind": "struct_item",
              "signature": "pub struct EvalRequest<'a> {\n/// Subject DID requesting the action.\n\npub subject_did: &'a str,\n/// Repo id the action targets.\n\npub repo_id: &'a str,\n/// Permission being requested.\n\npub permission: Permission,\n/// Wall clock for expiry checks (UNIX millis).\n\npub now_ms: u64\n}",
              "docs": "Question being asked of the policy.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 11
            },
            {
              "name": "evaluate::EvalDecision",
              "kind": "enum_item",
              "signature": "pub enum EvalDecision {\n    /// One or more valid mandates grant the permission unconditionally.\n    Allow,\n    /// Permission is granted but contingent on additional approvals\n    /// (used for `Approve` grants that come with an N-of-M\n    /// `ApprovalPolicy`). The caller is expected to consult the\n    /// approval store separately.\n    AllowWithPolicy {\n        /// Min approvals required by the gating policy.\n        min_approvals: u32,\n    },\n    /// No mandate authorizes this action.\n    Deny,\n}",
              "docs": "Outcome of an evaluation.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 24
            },
            {
              "name": "evaluate::evaluate",
              "kind": "function_item",
              "signature": "pub fn evaluate(\n    req: &EvalRequest,\n    mandates: &[Mandate],\n    revocations: &[RevocationEntry],\n) -> EvalDecision;",
              "docs": "Evaluate a request against a slice of mandates and revocations. The\nevaluator filters out:\n- revoked mandates\n- expired mandates\n- mandates for a different repo\n- mandates whose subject is not the requester\n- mandates whose grant doesn't subsume the request\n- mandates with a malformed signature (caller is expected to have\n  verified them already; defense-in-depth re-check is out of scope\n  here to keep evaluator pure / cheap).",
              "attributes": "",
              "line": 49
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mandate",
          "source": "sigil/weave/tools/loom-mandate/src/mandate.rs",
          "sha256": "9858bfadcd29410c974bd62dd03e8b23f330b263d49f7af75b90ca4be7ce750e",
          "attributes": "",
          "items": [
            {
              "name": "mandate::Permission",
              "kind": "enum_item",
              "signature": "pub enum Permission {\n    /// Read repo contents (clone, fetch, log, diff).\n    Read,\n    /// Write commits / push / append to refs.\n    Write,\n    /// Approve PRs (signature counts toward `MergePolicy::min_approvals`).\n    Approve,\n    /// Issue / revoke / update other mandates on this repo.\n    Admin,\n    /// Mint merge commits \u2014 last gate before commits land on the base\n    /// branch. Reserved for v2 multi-writer-coordinator role.\n    Mint,\n}",
              "docs": "Granted action.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 16
            },
            {
              "name": "mandate::ApprovalPolicy",
              "kind": "struct_item",
              "signature": "pub struct ApprovalPolicy {\n/// Minimum distinct DIDs that must contribute a valid signature.\n\npub min_approvals: u32,\n/// Optional list of allowed approver DIDs. Empty = \"anyone\".\n\n#[serde(default)]\npub allowed_approvers: Vec<String>,\n/// Reject approvals from the same DID as the issuer.\n\n#[serde(default = \"default_block_self_approval\")]\npub block_self_approval: bool\n}",
              "docs": "N-of-M threshold over a set of subject DIDs. Mirrors Sigil's\n`ApprovalPolicy` so the policy can be lifted onto a chain Mandate\nverbatim. `min_approvals` is the threshold; `block_self_approval`\nguards against the issuer satisfying their own threshold.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 35
            },
            {
              "name": "mandate::DelegationPolicy",
              "kind": "struct_item",
              "signature": "pub struct DelegationPolicy {\n/// Maximum chain length: 0 = leaf (cannot delegate further),\n\n/// 1 = grantee can delegate once, etc. Defaults to 0 (no\n\n/// re-delegation).\n\npub max_depth: u32,\n/// Permissions the grantee is permitted to delegate. Subset of the\n\n/// permissions in `grant`. Empty = no delegation allowed.\n\n#[serde(default)]\npub allowed_actions: Vec<Permission>\n}",
              "docs": "Limits on re-delegation. Mirrors Sigil's `DelegationPolicy`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 52
            },
            {
              "name": "mandate::IssuePayload",
              "kind": "struct_item",
              "signature": "pub struct IssuePayload {\n/// Schema version.\n\npub version: u32,\n/// Issuer DID.\n\npub issuer: String,\n/// Subject DID (recipient of the grant).\n\npub subject: String,\n/// Repo id binding (matches `RepoConfig::repo_id`).\n\npub repo_id: String,\n/// What's being granted.\n\npub grant: Permission,\n/// Required for `Permission::Approve` / `Permission::Mint`. None\n\n/// otherwise.\n\npub policy: Option<ApprovalPolicy>,\n/// Re-delegation limits.\n\npub delegation: DelegationPolicy,\n/// UNIX millis after which the mandate is automatically inert.\n\n/// `None` = never expires (don't use this for live repos).\n\npub expires_at_ms: Option<u64>,\n/// UNIX millis when the mandate was issued.\n\npub issued_at_ms: u64\n}",
              "docs": "Canonical signed payload for `IssueMandate`. Field order is the\ndeclaration order; serde_json preserves that for structs, so this\nserializes deterministically.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "mandate::IssuePayload::canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_bytes(&self) -> Result<Vec<u8>, serde_json::Error>;",
              "docs": "Canonical JSON bytes for signing/hashing.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "mandate::IssuePayload::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "16-hex content-addressed id (BLAKE3 prefix of canonical bytes).",
              "attributes": "",
              "line": 97
            },
            {
              "name": "mandate::Mandate",
              "kind": "struct_item",
              "signature": "pub struct Mandate {\n/// Content-addressed id (BLAKE3 prefix of `IssuePayload`).\n\npub id: String,\n/// The signed payload.\n\npub payload: IssuePayload,\n/// Hex-encoded 64-byte Ed25519 signature.\n\npub signature_hex: String,\n/// Hex-encoded 32-byte issuer pubkey.\n\npub issuer_pubkey_hex: String\n}",
              "docs": "A persisted mandate \u2014 payload + signature + issuer pubkey.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 106
            },
            {
              "name": "mandate::RevocationEntry",
              "kind": "struct_item",
              "signature": "pub struct RevocationEntry {\n/// Mandate id being revoked.\n\npub mandate_id: String,\n/// Repo id (binds the revocation to one repo, just like the\n\n/// mandate).\n\npub repo_id: String,\n/// Revoker DID (issuer or admin).\n\npub revoker: String,\n/// UNIX millis.\n\npub revoked_at_ms: u64,\n/// Hex-encoded 64-byte Ed25519 signature over `(mandate_id ||\n\n/// repo_id || revoker || revoked_at_ms)`.\n\npub signature_hex: String,\n/// Hex-encoded revoker pubkey.\n\npub revoker_pubkey_hex: String\n}",
              "docs": "A revocation entry, signed by the original issuer (or by an Admin\nover the same repo). Cancels a mandate by id.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 120
            },
            {
              "name": "mandate::MandateError",
              "kind": "enum_item",
              "signature": "pub enum MandateError {\n    /// Signature failed verification.\n    #[error(\"mandate signature invalid\")]\n    SignatureInvalid,\n    /// Encoded pubkey was malformed.\n    #[error(\"invalid issuer pubkey: {0}\")]\n    BadKey(String),\n    /// Encoded signature was malformed.\n    #[error(\"invalid signature: {0}\")]\n    BadSig(String),\n    /// JSON encode/decode error.\n    #[error(\"json: {0}\")]\n    Json(#[from] serde_json::Error),\n}",
              "docs": "Errors raised during issue/verify.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 139
            },
            {
              "name": "mandate::sign_issue",
              "kind": "function_item",
              "signature": "pub fn sign_issue(payload: IssuePayload, signer: &SigningKey) -> Result<Mandate, MandateError>;",
              "docs": "Sign a fresh `IssuePayload` with a signing key, producing a complete\n`Mandate`. The id is derived from the payload at signing time.",
              "attributes": "",
              "line": 156
            },
            {
              "name": "mandate::verify_issue",
              "kind": "function_item",
              "signature": "pub fn verify_issue(mandate: &Mandate) -> Result<(), MandateError>;",
              "docs": "Verify a mandate's signature against its embedded pubkey.",
              "attributes": "",
              "line": 170
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store",
          "source": "sigil/weave/tools/loom-mandate/src/store.rs",
          "sha256": "708887849f083ee96a79e33daa1518299b6859960c91ce7e1a546c7acd46f3b3",
          "attributes": "",
          "items": [
            {
              "name": "store::MANDATE_LENS",
              "kind": "const_item",
              "signature": "pub const MANDATE_LENS: &str;",
              "docs": "Canonical Lens database name.",
              "attributes": "",
              "line": 8
            },
            {
              "name": "store::StoreError",
              "kind": "enum_item",
              "signature": "pub enum StoreError {\n    /// Underlying Weave error.\n    #[error(\"weave error: {0}\")]\n    Weave(String),\n    /// Serialization failure.\n    #[error(\"serialization: {0}\")]\n    Json(#[from] serde_json::Error),\n}",
              "docs": "Errors raised by the store.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 12
            },
            {
              "name": "store::MandateStore",
              "kind": "struct_item",
              "signature": "pub struct MandateStore<'a> {\n\n}",
              "docs": "Read/write handle.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "store::MandateStore<'a>::open",
              "kind": "function_item",
              "signature": "pub async fn open(node: &'a WeaveNode) -> Result<Self, StoreError>;",
              "docs": "Idempotently open the mandates Lens.",
              "attributes": "",
              "line": 48
            },
            {
              "name": "store::MandateStore<'a>::put_mandate",
              "kind": "function_item",
              "signature": "pub async fn put_mandate(&self, mandate: &Mandate) -> Result<(), StoreError>;",
              "docs": "Persist a mandate (overwrites by id).",
              "attributes": "",
              "line": 54
            },
            {
              "name": "store::MandateStore<'a>::put_revocation",
              "kind": "function_item",
              "signature": "pub async fn put_revocation(&self, rev: &RevocationEntry) -> Result<(), StoreError>;",
              "docs": "Persist a revocation entry.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "store::MandateStore<'a>::list_mandates",
              "kind": "function_item",
              "signature": "pub async fn list_mandates(&self) -> Result<Vec<Mandate>, StoreError>;",
              "docs": "Range-scan every mandate in the Lens.",
              "attributes": "",
              "line": 70
            },
            {
              "name": "store::MandateStore<'a>::list_revocations",
              "kind": "function_item",
              "signature": "pub async fn list_revocations(&self) -> Result<Vec<RevocationEntry>, StoreError>;",
              "docs": "Range-scan every revocation in the Lens.",
              "attributes": "",
              "line": 105
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-mars",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom-mars",
      "manifestSha256": "aab897a9a719ba6b8c10cf7bc83cf803991a6c3bc35f96b428a49292842cf9ac",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-mars",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-mars/src/lib.rs",
          "sha256": "4968e1fcc6a06a7a4373d50fbfece4c44e73e949e5b7986e9908cdcd9492274b",
          "attributes": "",
          "items": [
            {
              "name": "pub use anchor::{\n    AnchorAction, MarsAnchor, MarsAnchorPayload, MarsAttestation, MarsRevocation, MarsTransfer,\n    MarsUpdate,\n};",
              "kind": "use_declaration",
              "signature": "pub use anchor::{\n    AnchorAction, MarsAnchor, MarsAnchorPayload, MarsAttestation, MarsRevocation, MarsTransfer,\n    MarsUpdate,\n};",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "pub use store::{MarsError, MarsStore, Result, MARS_LENS};",
              "kind": "use_declaration",
              "signature": "pub use store::{MarsError, MarsStore, Result, MARS_LENS};",
              "docs": "",
              "attributes": "",
              "line": 41
            }
          ],
          "parseErrors": false
        },
        {
          "module": "anchor",
          "source": "sigil/weave/tools/loom-mars/src/anchor.rs",
          "sha256": "67d5b960bc4dde006b99810a569e8fe8ed378fae80444aea122c1a881721e9e7",
          "attributes": "",
          "items": [
            {
              "name": "anchor::AnchorAction",
              "kind": "enum_item",
              "signature": "pub enum AnchorAction {\n    /// First-time registration.\n    Register,\n    /// Update of the pointed-at commit hash.\n    Update,\n    /// Tombstone.\n    Revoke,\n    /// Ownership transfer.\n    Transfer,\n    /// Third-party attestation.\n    Attest,\n}",
              "docs": "Lifecycle action a MARS anchor can be in. Mirrors Sigil's\n`MarsAnchor*` transaction kind enum.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 9
            },
            {
              "name": "anchor::MarsAnchorPayload",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchorPayload {\n/// Schema version.\n\npub version: u32,\n/// Globally-resolvable DID. Convention for loom: `did:loom:<owner_handle>:<repo_name>`.\n\npub did: String,\n/// Loom repo id (matches `RepoConfig::repo_id`).\n\npub repo_id: String,\n/// Owner's Ed25519 verifying key (hex-encoded).\n\npub owner_pubkey_hex: String,\n/// Owner DID (e.g. `did:oas:l1fe:agent:abc...`).\n\npub owner_did: String,\n/// Latest committed commit hash on the default branch \u2014 the\n\n/// content-integrity pointer.\n\npub latest_commit_hash: String,\n/// Default branch name.\n\npub default_branch: String,\n/// UNIX millis registered.\n\npub registered_at_ms: u64\n}",
              "docs": "The signed payload for [`AnchorAction::Register`]. Mirrors\n`MarsAnchorRegister` so v2 chain anchoring is a serialization swap.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "anchor::MarsAnchorPayload::canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_bytes(&self) -> Result<Vec<u8>, serde_json::Error>;",
              "docs": "Canonical JSON bytes for hashing/signing.",
              "attributes": "",
              "line": 47
            },
            {
              "name": "anchor::MarsAnchorPayload::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "16-hex content-addressed id.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "anchor::MarsAnchor",
              "kind": "struct_item",
              "signature": "pub struct MarsAnchor {\n/// Content-addressed id of the *register* payload (stable across\n\n/// updates / transfers / attestations \u2014 all of those reference this\n\n/// anchor by id).\n\npub id: String,\n/// The signed register payload.\n\npub payload: MarsAnchorPayload,\n/// Hex-encoded 64-byte Ed25519 signature over `payload`.\n\npub signature_hex: String,\n/// Hex-encoded owner pubkey.\n\npub owner_pubkey_hex: String\n}",
              "docs": "A MARS anchor document \u2014 payload plus action metadata.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 61
            },
            {
              "name": "anchor::MarsUpdate",
              "kind": "struct_item",
              "signature": "pub struct MarsUpdate {\n/// Anchor id being updated.\n\npub anchor_id: String,\n/// New latest commit hash.\n\npub new_latest_commit_hash: String,\n/// UNIX millis.\n\npub updated_at_ms: u64,\n/// Hex-encoded signature over `(anchor_id || new_hash || updated_at_ms)`.\n\npub signature_hex: String,\n/// Updater pubkey hex (must match the anchor's owner_pubkey_hex on\n\n/// chain; off-chain we accept any signed update by the owner).\n\npub updater_pubkey_hex: String\n}",
              "docs": "Update event recording a new latest commit.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 76
            },
            {
              "name": "anchor::MarsRevocation",
              "kind": "struct_item",
              "signature": "pub struct MarsRevocation {\n/// Anchor id being revoked.\n\npub anchor_id: String,\n/// UNIX millis.\n\npub revoked_at_ms: u64,\n/// Reason (free-form string, optional).\n\n#[serde(default)]\npub reason: String,\n/// Hex-encoded signature over `(anchor_id || revoked_at_ms || reason)`.\n\npub signature_hex: String,\n/// Revoker pubkey hex.\n\npub revoker_pubkey_hex: String\n}",
              "docs": "Revocation (tombstone) event.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 92
            },
            {
              "name": "anchor::MarsTransfer",
              "kind": "struct_item",
              "signature": "pub struct MarsTransfer {\n/// Anchor id.\n\npub anchor_id: String,\n/// New owner DID.\n\npub new_owner_did: String,\n/// New owner pubkey hex.\n\npub new_owner_pubkey_hex: String,\n/// UNIX millis.\n\npub transferred_at_ms: u64,\n/// Hex-encoded signature by the *current* owner.\n\npub signature_hex: String,\n/// Old owner pubkey hex (the signer).\n\npub old_owner_pubkey_hex: String\n}",
              "docs": "Ownership transfer.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 108
            },
            {
              "name": "anchor::MarsAttestation",
              "kind": "struct_item",
              "signature": "pub struct MarsAttestation {\n/// Anchor id being attested.\n\npub anchor_id: String,\n/// Attestation kind (free-form: \"build\", \"audit\", \"license\", ...).\n\npub kind: String,\n/// Attestation body (free-form, often a URL or commit hash).\n\npub body: String,\n/// UNIX millis.\n\npub attested_at_ms: u64,\n/// Attester DID.\n\npub attester_did: String,\n/// Hex-encoded signature.\n\npub signature_hex: String,\n/// Attester pubkey hex.\n\npub attester_pubkey_hex: String\n}",
              "docs": "Third-party attestation. Useful for \"build verified\", \"audited\",\n\"license compliant\" badges in the UI.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 126
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store",
          "source": "sigil/weave/tools/loom-mars/src/store.rs",
          "sha256": "22a596289f3b9c85115e887e1d18b2422434a19d0f39db47a17c55f26f57af2d",
          "attributes": "",
          "items": [
            {
              "name": "store::MARS_LENS",
              "kind": "const_item",
              "signature": "pub const MARS_LENS: &str;",
              "docs": "Canonical Lens database name for MARS.",
              "attributes": "",
              "line": 8
            },
            {
              "name": "store::MarsError",
              "kind": "enum_item",
              "signature": "pub enum MarsError {\n    /// Underlying Weave error.\n    #[error(\"weave error: {0}\")]\n    Weave(String),\n    /// Serialization failure.\n    #[error(\"serialization: {0}\")]\n    Json(#[from] serde_json::Error),\n    /// Anchor with the requested DID not found.\n    #[error(\"anchor not found: {0}\")]\n    NotFound(String),\n}",
              "docs": "Errors raised by the MARS store.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 12
            },
            {
              "name": "store::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, MarsError>;",
              "docs": "Result alias.",
              "attributes": "",
              "line": 31
            },
            {
              "name": "store::MarsStore",
              "kind": "struct_item",
              "signature": "pub struct MarsStore<'a> {\n\n}",
              "docs": "Store handle.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "store::MarsStore<'a>::open",
              "kind": "function_item",
              "signature": "pub async fn open(node: &'a WeaveNode) -> Result<Self>;",
              "docs": "Idempotently open the MARS Lens.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "store::MarsStore<'a>::register",
              "kind": "function_item",
              "signature": "pub async fn register(&self, anchor: &MarsAnchor) -> Result<()>;",
              "docs": "Persist an anchor (registration).",
              "attributes": "",
              "line": 65
            },
            {
              "name": "store::MarsStore<'a>::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, did: &str) -> Result<MarsAnchor>;",
              "docs": "Look up by DID.",
              "attributes": "",
              "line": 73
            },
            {
              "name": "store::MarsStore<'a>::try_get",
              "kind": "function_item",
              "signature": "pub async fn try_get(&self, did: &str) -> Result<Option<MarsAnchor>>;",
              "docs": "Soft `get`.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "store::MarsStore<'a>::put_update",
              "kind": "function_item",
              "signature": "pub async fn put_update(&self, update: &MarsUpdate) -> Result<()>;",
              "docs": "Append an update event.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "store::MarsStore<'a>::put_revocation",
              "kind": "function_item",
              "signature": "pub async fn put_revocation(&self, rev: &MarsRevocation) -> Result<()>;",
              "docs": "Append a revocation event.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "store::MarsStore<'a>::put_transfer",
              "kind": "function_item",
              "signature": "pub async fn put_transfer(&self, t: &MarsTransfer) -> Result<()>;",
              "docs": "Append a transfer event.",
              "attributes": "",
              "line": 109
            },
            {
              "name": "store::MarsStore<'a>::list_all",
              "kind": "function_item",
              "signature": "pub async fn list_all(&self) -> Result<Vec<MarsAnchor>>;",
              "docs": "List every registered anchor. Range-scans the `anchor:` key\nnamespace; ignores update / revocation / transfer / attestation\nevents. Output is unordered \u2014 caller sorts as needed.",
              "attributes": "",
              "line": 119
            },
            {
              "name": "store::MarsStore<'a>::put_attestation",
              "kind": "function_item",
              "signature": "pub async fn put_attestation(&self, a: &MarsAttestation) -> Result<()>;",
              "docs": "Append an attestation event.",
              "attributes": "",
              "line": 151
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "loom-deploy",
      "version": "0.1.1",
      "source": "sigil/weave/tools/loom-deploy",
      "manifestSha256": "9bbf89688c0f8a0c3d3be6f07ee2588c07f148302ee27288a443d18301889673",
      "features": {},
      "publish": true,
      "url": "/reference/rust/loom-deploy",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/tools/loom-deploy/src/lib.rs",
          "sha256": "fe5995bae79345f1b40836552d365c2832c22681260b7f844b8dfdb06a09dc60",
          "attributes": "",
          "items": [
            {
              "name": "pub use intent::{DeployIntent, DeployStatus};",
              "kind": "use_declaration",
              "signature": "pub use intent::{DeployIntent, DeployStatus};",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "pub use spec::{parse, DeployError, DeploySpec, NetworkMode, NetworkSpec, ResourceSpec, Runtime};",
              "kind": "use_declaration",
              "signature": "pub use spec::{parse, DeployError, DeploySpec, NetworkMode, NetworkSpec, ResourceSpec, Runtime};",
              "docs": "",
              "attributes": "",
              "line": 44
            }
          ],
          "parseErrors": false
        },
        {
          "module": "intent",
          "source": "sigil/weave/tools/loom-deploy/src/intent.rs",
          "sha256": "05a9875e3fc9820224546d19ef266ae4bcb1854f5cebc3b871982e813b2a0cf5",
          "attributes": "",
          "items": [
            {
              "name": "intent::DeployStatus",
              "kind": "enum_item",
              "signature": "pub enum DeployStatus {\n    /// Written but not yet picked up by the marketplace.\n    Pending,\n    /// Marketplace accepted the intent and is provisioning.\n    Accepted,\n    /// Provisioning succeeded; the workload is live.\n    Running,\n    /// Provisioning failed; reason in `error`.\n    Failed,\n    /// Operator stopped it.\n    Stopped,\n}",
              "docs": "Lifecycle.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 11
            },
            {
              "name": "intent::DeployIntent",
              "kind": "struct_item",
              "signature": "pub struct DeployIntent {\n/// 16-hex content-addressed id (BLAKE3 over canonical bytes).\n\npub id: String,\n/// Loom repo id this deploy comes from.\n\npub repo_id: String,\n/// Commit being deployed (loom commit hash, hex).\n\npub commit_hash: String,\n/// Branch the deploy is from (informational).\n\npub branch: String,\n/// Author DID \u2014 who initiated the deploy.\n\npub author_did: String,\n/// The deploy spec.\n\npub spec: DeploySpec,\n/// UNIX millis the intent was minted.\n\npub minted_at_ms: u64,\n/// Current status.\n\npub status: DeployStatus,\n/// Optional failure reason.\n\n#[serde(default)]\npub error: Option<String>\n}",
              "docs": "One deploy attempt.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "intent::DeployIntent::compute_id",
              "kind": "function_item",
              "signature": "pub fn compute_id(\n        repo_id: &str,\n        commit_hash: &str,\n        branch: &str,\n        author_did: &str,\n        spec: &DeploySpec,\n        minted_at_ms: u64,\n    ) -> Result<String, serde_json::Error>;",
              "docs": "Compute the content-addressed id from a fully-formed intent.",
              "attributes": "",
              "line": 50
            },
            {
              "name": "intent::DeployIntent::new_pending",
              "kind": "function_item",
              "signature": "pub fn new_pending(\n        repo_id: String,\n        commit_hash: String,\n        branch: String,\n        author_did: String,\n        spec: DeploySpec,\n        minted_at_ms: u64,\n    ) -> Result<Self, serde_json::Error>;",
              "docs": "Build a fresh `Pending` intent.",
              "attributes": "",
              "line": 72
            }
          ],
          "parseErrors": false
        },
        {
          "module": "spec",
          "source": "sigil/weave/tools/loom-deploy/src/spec.rs",
          "sha256": "afa0f02e5e8cf377fd1e698150e8b2126a10edac8aef2f888f68dd40f50238e0",
          "attributes": "",
          "items": [
            {
              "name": "spec::Runtime",
              "kind": "enum_item",
              "signature": "pub enum Runtime {\n    /// WASI/Wasmtime. Best for stateless services.\n    Wasm,\n    /// OCI container.\n    Docker,\n    /// Firecracker microVM. Best for stateful workloads.\n    Firecracker,\n}",
              "docs": "What runtime ARISE should provision.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 11
            },
            {
              "name": "spec::NetworkMode",
              "kind": "enum_item",
              "signature": "pub enum NetworkMode {\n    /// Default \u2014 bridge to a private subnet.\n    Bridge,\n    /// Share the host network.\n    Host,\n    /// Air-gapped.\n    None,\n}",
              "docs": "Network exposure mode.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 23
            },
            {
              "name": "spec::ResourceSpec",
              "kind": "struct_item",
              "signature": "pub struct ResourceSpec {\n/// CPU cores requested. Floats allowed for fractional cores in v2.\n\npub cpu_cores: u32,\n/// Memory in MB.\n\npub memory_mb: u64,\n/// Disk in MB.\n\n#[serde(default)]\npub disk_mb: u64\n}",
              "docs": "Hardware resources requested.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "spec::NetworkSpec",
              "kind": "struct_item",
              "signature": "pub struct NetworkSpec {\n/// Network mode.\n\n#[serde(default = \"default_mode\")]\npub mode: NetworkMode,\n/// Ports exposed to peers.\n\n#[serde(default)]\npub exposed_ports: Vec<u16>\n}",
              "docs": "Network spec.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "spec::DeploySpec",
              "kind": "struct_item",
              "signature": "pub struct DeploySpec {\n/// User-facing app name.\n\npub name: String,\n/// Path to the entrypoint relative to the repo root.\n\npub entrypoint: String,\n/// Runtime.\n\npub runtime: Runtime,\n/// Resource request.\n\npub resources: ResourceSpec,\n/// Network spec.\n\n#[serde(default)]\npub network: NetworkSpec,\n/// Env vars.\n\n#[serde(default)]\npub env: std::collections::BTreeMap<String, String>,\n/// Free-form fields the marketplace consumes.\n\n#[serde(default)]\npub extra: serde_json::Value\n}",
              "docs": "The full deploy spec. Any unknown fields under `[deploy.extra]` flow\nthrough unchanged into the marketplace request.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 71
            },
            {
              "name": "spec::DeployError",
              "kind": "enum_item",
              "signature": "pub enum DeployError {\n    /// The file doesn't exist.\n    #[error(\"loom.toml not found at {0}\")]\n    Missing(String),\n    /// IO error reading the file.\n    #[error(\"io reading {0}: {1}\")]\n    Io(String, std::io::Error),\n    /// TOML parse error.\n    #[error(\"parse {0}: {1}\")]\n    Parse(String, toml::de::Error),\n    /// Required `[deploy]` section absent.\n    #[error(\"loom.toml is missing a `[deploy]` section\")]\n    NoDeploySection,\n}",
              "docs": "Errors raised parsing the spec.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 93
            },
            {
              "name": "spec::parse",
              "kind": "function_item",
              "signature": "pub fn parse(path: &Path) -> Result<DeploySpec, DeployError>;",
              "docs": "Parse a `loom.toml` file path.",
              "attributes": "",
              "line": 114
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-loom",
      "version": "0.1.0",
      "source": "sigil/weave/tools/loom",
      "manifestSha256": "7e0d938c6e88bb8f825c59393ff41afbef524aa15ee3907fdde1ca0b6b23a1d7",
      "features": {
        "default": [],
        "hivelocity-private-p2p-proof": []
      },
      "publish": false,
      "url": "/reference/rust/weave-loom",
      "modules": [
        {
          "module": "cli",
          "source": "sigil/weave/tools/loom/src/cli.rs",
          "sha256": "08cffe6d9989b7842fab5bbb7c7b0080d2104dce896708c3f6d77ce5ca53caae",
          "attributes": "",
          "items": [
            {
              "name": "cli::Cli",
              "kind": "struct_item",
              "signature": "pub struct Cli {\n/// Subcommand to execute\n\n#[command(subcommand)]\npub command: Command\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Parser)]\n#[command(\n    name = \"loom\",\n    about = \"git-compatible VCS over Weave (Strand-backed, multi-device, signed)\",\n    version,\n    author,\n    long_about = \"Loom is a git-compatible CLI whose repository is a signed, \\\n                  causal, multi-device store built on Weave (Strand + Locus + \\\n                  Lens + DHT). Agents fluent in git can use loom unchanged; \\\n                  the system handles signing, replication, and causal merge.\"\n)]",
              "line": 19
            },
            {
              "name": "cli::Command",
              "kind": "enum_item",
              "signature": "pub enum Command {\n    /// Create an empty loom repository or reinitialize an existing one.\n    Init(InitArgs),\n\n    /// Show the working tree status.\n    Status(StatusArgs),\n\n    /// Add file contents to the index (staging area).\n    Add(AddArgs),\n\n    /// Record changes to the repository.\n    Commit(CommitArgs),\n\n    /// Show commit logs.\n    Log(LogArgs),\n\n    /// Show changes between commits, commit and working tree, etc.\n    Diff(DiffArgs),\n\n    /// Show various types of objects (commits, blobs).\n    Show(ShowArgs),\n\n    /// List, create, or delete branches.\n    Branch(BranchArgs),\n\n    /// Switch branches or restore working tree files (legacy git verb).\n    Checkout(CheckoutArgs),\n\n    /// Switch branches.\n    Switch(SwitchArgs),\n\n    /// Join two or more development histories together.\n    Merge(MergeArgs),\n\n    /// Reset current HEAD to a specified state.\n    Reset(ResetArgs),\n\n    /// Restore working tree files from a commit.\n    Restore(RestoreArgs),\n\n    /// Remove files from the working tree and index.\n    Rm(RmArgs),\n\n    /// Move or rename a file, directory, or symlink.\n    Mv(MvArgs),\n\n    /// Create, list, or delete tags.\n    Tag(TagArgs),\n\n    /// Manage tracked remotes (peers).\n    Remote(RemoteArgs),\n\n    /// Clone a repository from a peer or DID into a new directory.\n    Clone(CloneArgs),\n\n    /// Update remote refs along with associated objects.\n    Push(PushArgs),\n\n    /// Fetch from and integrate with another repository or local branch.\n    Pull(PullArgs),\n\n    /// Download objects and refs from another repository.\n    Fetch(FetchArgs),\n\n    /// Get and set repository or global options.\n    Config(ConfigArgs),\n\n    /// Manage signing identity (DID) for the agent.\n    Identity(IdentityArgs),\n\n    /// Manage private repository access and wrapped encryption keys.\n    Access(AccessArgs),\n\n    /// Run a long-lived peer presence so other devices can replicate.\n    Daemon(DaemonArgs),\n\n    /// Publish this repo to the local registry so peers can discover it.\n    Register(RegisterArgs),\n\n    /// Remove a repo from the local registry.\n    Unregister(UnregisterArgs),\n\n    /// Search the local registry by repo-name prefix.\n    Search(SearchArgs),\n\n    /// List every repo in the local registry.\n    List(ListArgs),\n\n    /// Run the local HTTP gateway so a browser/UI can read this repo.\n    Serve(ServeArgs),\n\n    /// Import a git repository's history into this loom repo.\n    ImportGit(crate::commands::import_git::ImportGitArgs),\n\n    /// Export this loom repo's history into a fresh git repository.\n    ExportGit(crate::commands::export_git::ExportGitArgs),\n\n    /// Pull request flow (open / list / show / approve / merge).\n    Pr(crate::commands::pr::PrArgs),\n\n    /// Issue, list, and revoke ACL mandates on this repository.\n    Mandate(crate::commands::mandate::MandateArgs),\n\n    /// MARS asset registration (canonical naming layer).\n    Mars(crate::commands::mars::MarsArgs),\n\n    /// Mint a deploy intent for the Sigil compute marketplace.\n    Deploy(crate::commands::deploy::DeployArgs),\n}",
              "docs": "Top-level git-shaped verbs. Argument shapes mirror git as closely as\npossible \u2014 when in doubt, default to git's flag names and semantics.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 28
            },
            {
              "name": "cli::ServeArgs",
              "kind": "struct_item",
              "signature": "pub struct ServeArgs {\n/// Port to bind on (default 7740).\n\n#[arg(short = 'p', long, default_value_t = 7740)]\npub port: u16,\n/// Address to bind on (default 127.0.0.1).\n\n#[arg(long, default_value = \"127.0.0.1\")]\npub host: String,\n/// Explicitly permit a non-loopback bind. Bearer authentication remains\n\n/// mandatory on every route.\n\n#[arg(long)]\npub allow_remote: bool\n}",
              "docs": "Arguments for `loom serve`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 140
            },
            {
              "name": "cli::RegisterArgs",
              "kind": "struct_item",
              "signature": "pub struct RegisterArgs {\n/// Local repo name to publish (defaults to the workdir basename).\n\npub name: Option<String>,\n/// Optional one-line description.\n\n#[arg(short, long)]\npub description: Option<String>\n}",
              "docs": "Arguments for `loom register`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 159
            },
            {
              "name": "cli::UnregisterArgs",
              "kind": "struct_item",
              "signature": "pub struct UnregisterArgs {\n/// Repo name to remove from the registry.\n\npub name: String\n}",
              "docs": "Arguments for `loom unregister`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 170
            },
            {
              "name": "cli::SearchArgs",
              "kind": "struct_item",
              "signature": "pub struct SearchArgs {\n/// Optional name prefix; omit to list everything.\n\npub query: Option<String>\n}",
              "docs": "Arguments for `loom search`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 177
            },
            {
              "name": "cli::ListArgs",
              "kind": "struct_item",
              "signature": "pub struct ListArgs {\n/// Render full registry entries as JSON instead of a table.\n\n#[arg(long)]\npub json: bool\n}",
              "docs": "Arguments for `loom list`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 184
            },
            {
              "name": "cli::DaemonArgs",
              "kind": "struct_item",
              "signature": "pub struct DaemonArgs {\n/// Optional duration in seconds to run before exiting (0 = forever).\n\n#[arg(long, default_value_t = 0)]\npub duration: u64,\n/// Re-announce resources on this interval (seconds).\n\n#[arg(long, default_value_t = 30)]\npub announce_interval: u64\n}",
              "docs": "Arguments for `loom daemon`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 194
            },
            {
              "name": "cli::InitArgs",
              "kind": "struct_item",
              "signature": "pub struct InitArgs {\n/// Directory to initialize (defaults to current directory).\n\npub directory: Option<PathBuf>,\n/// Initial branch name.\n\n#[arg(short = 'b', long, default_value = \"main\")]\npub initial_branch: String,\n/// Force re-initialization if a `.loom/` directory already exists.\n\n#[arg(long)]\npub force: bool,\n/// Bind a specific signing identity (agent DID); defaults to the\n\n/// repository-local generated identity.\n\n#[arg(long)]\npub agent: Option<String>,\n/// Encrypt blobs at rest with a per-repo MEK derived from the agent\n\n/// identity. Plaintext bytes never touch the locus or the wire.\n\n#[arg(long)]\npub private: bool\n}",
              "docs": "Arguments for `loom init`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 208
            },
            {
              "name": "cli::StatusArgs",
              "kind": "struct_item",
              "signature": "pub struct StatusArgs {\n/// Show short-form output.\n\n#[arg(short, long)]\npub short: bool\n}",
              "docs": "Arguments for `loom status`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 235
            },
            {
              "name": "cli::AddArgs",
              "kind": "struct_item",
              "signature": "pub struct AddArgs {\n/// Paths to stage.\n\n#[arg(required = true)]\npub paths: Vec<PathBuf>\n}",
              "docs": "Arguments for `loom add`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 245
            },
            {
              "name": "cli::CommitArgs",
              "kind": "struct_item",
              "signature": "pub struct CommitArgs {\n/// Commit message.\n\n#[arg(short, long)]\npub message: Option<String>,\n/// Stage all tracked, modified files before committing.\n\n#[arg(short = 'a', long)]\npub all: bool,\n/// Override the author DID for this commit (defaults to repo identity).\n\n#[arg(long)]\npub author: Option<String>,\n/// Allow an empty commit (no changes).\n\n#[arg(long)]\npub allow_empty: bool\n}",
              "docs": "Arguments for `loom commit`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 255
            },
            {
              "name": "cli::LogArgs",
              "kind": "struct_item",
              "signature": "pub struct LogArgs {\n/// Limit the number of commits to output.\n\n#[arg(short = 'n', long)]\npub max_count: Option<usize>,\n/// Use a single-line per commit format.\n\n#[arg(long)]\npub oneline: bool,\n/// Show the causal DAG (loom-specific; quiet upgrade over git's linear log).\n\n#[arg(long)]\npub graph: bool,\n/// Optional ref or commit to start from.\n\npub revision: Option<String>\n}",
              "docs": "Arguments for `loom log`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 277
            },
            {
              "name": "cli::DiffArgs",
              "kind": "struct_item",
              "signature": "pub struct DiffArgs {\n/// Restrict diff to these paths.\n\npub paths: Vec<PathBuf>,\n/// Show a diff between two refs (`A..B`) or against the index.\n\n#[arg(long)]\npub cached: bool,\n/// Print only the per-path A/M/D summary (suppress line-level diff).\n\n#[arg(long = \"name-status\")]\npub name_status: bool,\n/// Number of context lines around each hunk (defaults to 3).\n\n#[arg(short = 'U', long = \"unified\", default_value_t = 3)]\npub unified: usize\n}",
              "docs": "Arguments for `loom diff`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 298
            },
            {
              "name": "cli::ShowArgs",
              "kind": "struct_item",
              "signature": "pub struct ShowArgs {\n/// Object to show (commit hash, tag, branch \u2014 defaults to HEAD).\n\npub object: Option<String>\n}",
              "docs": "Arguments for `loom show`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 319
            },
            {
              "name": "cli::BranchArgs",
              "kind": "struct_item",
              "signature": "pub struct BranchArgs {\n/// Branch to create or operate on.\n\npub branch: Option<String>,\n/// Starting point for a new branch.\n\npub start_point: Option<String>,\n/// Delete the named branch.\n\n#[arg(short = 'd', long)]\npub delete: bool,\n/// List all branches.\n\n#[arg(short = 'l', long)]\npub list: bool\n}",
              "docs": "Arguments for `loom branch`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 328
            },
            {
              "name": "cli::CheckoutArgs",
              "kind": "struct_item",
              "signature": "pub struct CheckoutArgs {\n/// Target branch or commit.\n\npub target: String,\n/// Create a new branch and switch to it.\n\n#[arg(short = 'b', long)]\npub create: bool\n}",
              "docs": "Arguments for `loom checkout` (legacy).",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 348
            },
            {
              "name": "cli::SwitchArgs",
              "kind": "struct_item",
              "signature": "pub struct SwitchArgs {\n/// Target branch.\n\npub target: String,\n/// Create the branch if it does not exist.\n\n#[arg(short = 'c', long)]\npub create: bool\n}",
              "docs": "Arguments for `loom switch`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 361
            },
            {
              "name": "cli::MergeArgs",
              "kind": "struct_item",
              "signature": "pub struct MergeArgs {\n/// Branch or commit to merge.\n\npub source: String,\n/// Override the merge commit message.\n\n#[arg(short, long)]\npub message: Option<String>\n}",
              "docs": "Arguments for `loom merge`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 374
            },
            {
              "name": "cli::ResetArgs",
              "kind": "struct_item",
              "signature": "pub struct ResetArgs {\n/// Target commit (defaults to HEAD).\n\npub target: Option<String>,\n/// Reset both index and working tree.\n\n#[arg(long)]\npub hard: bool,\n/// Reset only the index.\n\n#[arg(long)]\npub mixed: bool,\n/// Reset HEAD only (leave index/working tree intact).\n\n#[arg(long)]\npub soft: bool\n}",
              "docs": "Arguments for `loom reset`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 387
            },
            {
              "name": "cli::RestoreArgs",
              "kind": "struct_item",
              "signature": "pub struct RestoreArgs {\n/// Files to restore.\n\n#[arg(required = true)]\npub paths: Vec<PathBuf>,\n/// Restore from the staged contents (index).\n\n#[arg(long)]\npub staged: bool,\n/// Source commit to restore from.\n\n#[arg(long)]\npub source: Option<String>\n}",
              "docs": "Arguments for `loom restore`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 408
            },
            {
              "name": "cli::RmArgs",
              "kind": "struct_item",
              "signature": "pub struct RmArgs {\n/// Paths to remove.\n\n#[arg(required = true)]\npub paths: Vec<PathBuf>,\n/// Recursively remove directories.\n\n#[arg(short, long)]\npub recursive: bool,\n/// Only remove from the index, leave the working tree alone.\n\n#[arg(long)]\npub cached: bool\n}",
              "docs": "Arguments for `loom rm`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 426
            },
            {
              "name": "cli::MvArgs",
              "kind": "struct_item",
              "signature": "pub struct MvArgs {\n/// Source path.\n\npub source: PathBuf,\n/// Destination path.\n\npub destination: PathBuf\n}",
              "docs": "Arguments for `loom mv`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 444
            },
            {
              "name": "cli::TagArgs",
              "kind": "struct_item",
              "signature": "pub struct TagArgs {\n/// Tag name (omit to list).\n\npub name: Option<String>,\n/// Commit the tag points at (defaults to HEAD).\n\npub target: Option<String>,\n/// Delete the named tag.\n\n#[arg(short = 'd', long)]\npub delete: bool\n}",
              "docs": "Arguments for `loom tag`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 455
            },
            {
              "name": "cli::RemoteArgs",
              "kind": "struct_item",
              "signature": "pub struct RemoteArgs {\n/// Subcommand: `add <name> <addr>`, `remove <name>`, `list`.\n\n#[command(subcommand)]\npub action: RemoteAction\n}",
              "docs": "Arguments for `loom remote`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 471
            },
            {
              "name": "cli::RemoteAction",
              "kind": "enum_item",
              "signature": "pub enum RemoteAction {\n    /// List configured remotes.\n    List,\n\n    /// Add a new remote.\n    Add {\n        /// Remote name.\n        name: String,\n        /// Remote address: a peer DID, multiaddr, or `did:weave:` URI.\n        address: String,\n    },\n\n    /// Remove a remote.\n    Remove {\n        /// Remote name.\n        name: String,\n    },\n}",
              "docs": "Remote subcommands.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 479
            },
            {
              "name": "cli::CloneArgs",
              "kind": "struct_item",
              "signature": "pub struct CloneArgs {\n/// Source DID, multiaddr, or `did:weave:` URI (next-iteration form).\n\n/// Optional today \u2014 when `--pubkeys` is given, this is unused.\n\n#[arg(long)]\npub source: Option<String>,\n/// Local directory to clone into. Defaults to a name derived from\n\n/// the bundle's `repo_id`.\n\npub directory: Option<PathBuf>,\n/// Branch to check out after cloning.\n\n#[arg(short, long)]\npub branch: Option<String>,\n/// Path to a JSON file produced by `loom identity share`.\n\n/// Bootstraps the receiver with the source's resource pubkeys so\n\n/// the four read-only handles can replicate over the DHT.\n\n#[arg(long)]\npub pubkeys: Option<PathBuf>,\n/// Path to a local Weave signing identity directory or identity.json.\n\n/// Required for private clones so the peer can prove the granted DID.\n\n#[arg(long)]\npub identity: Option<PathBuf>,\n/// Path to a local encryption identity JSON whose public key matches\n\n/// the private share bundle recipient.\n\n#[arg(long = \"encryption-identity\")]\npub encryption_identity: Option<PathBuf>,\n/// Expected repository-owner authentication public key as 32-byte hex.\n\n/// Required for private clones to pin the out-of-band invite trust root.\n\n#[arg(long = \"owner-auth-key\")]\npub owner_auth_key: Option<String>,\n/// Expected current access-manifest signer authentication key as\n\n/// 32-byte hex. Required, in addition to --owner-auth-key, when a\n\n/// recovery admin signed the invite after owner-device replacement.\n\n#[arg(long = \"manifest-signer-auth-key\")]\npub manifest_signer_auth_key: Option<String>,\n/// Expected complete signed access-manifest hash as 32-byte hex.\n\n/// Required for private first contact and obtained independently from the\n\n/// bundle, so retirement authority history cannot authenticate itself.\n\n#[arg(long = \"manifest-hash\")]\npub manifest_hash: Option<String>\n}",
              "docs": "Arguments for `loom clone`.\n\nTwo forms:\n\n- `loom clone --pubkeys <bundle.json> <directory>` (works today): bootstrap\n  from a `loom identity share` bundle.\n- `loom clone <peer-did> [<directory>]` (next iteration): DID-based pubkey\n  resolution via the DHT.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 509
            },
            {
              "name": "cli::PushArgs",
              "kind": "struct_item",
              "signature": "pub struct PushArgs {\n/// Remote name (defaults to `origin`).\n\npub remote: Option<String>,\n/// Refspec to push.\n\npub refspec: Option<String>\n}",
              "docs": "Arguments for `loom push`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 561
            },
            {
              "name": "cli::PullArgs",
              "kind": "struct_item",
              "signature": "pub struct PullArgs {\n/// Remote name.\n\npub remote: Option<String>,\n/// Branch to pull.\n\npub branch: Option<String>\n}",
              "docs": "Arguments for `loom pull`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 572
            },
            {
              "name": "cli::FetchArgs",
              "kind": "struct_item",
              "signature": "pub struct FetchArgs {\n/// Remote name.\n\npub remote: Option<String>\n}",
              "docs": "Arguments for `loom fetch`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 583
            },
            {
              "name": "cli::ConfigArgs",
              "kind": "struct_item",
              "signature": "pub struct ConfigArgs {\n/// Get a value (e.g. `user.name`).\n\n#[arg(long, conflicts_with = \"set\")]\npub get: Option<String>,\n/// Set a value (`key=value`).\n\n#[arg(long)]\npub set: Option<String>,\n/// List all configured values.\n\n#[arg(short, long)]\npub list: bool\n}",
              "docs": "Arguments for `loom config`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 592
            },
            {
              "name": "cli::IdentityArgs",
              "kind": "struct_item",
              "signature": "pub struct IdentityArgs {\n/// Subcommand.\n\n#[command(subcommand)]\npub action: IdentityAction\n}",
              "docs": "Arguments for `loom identity`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 610
            },
            {
              "name": "cli::IdentityAction",
              "kind": "enum_item",
              "signature": "pub enum IdentityAction {\n    /// Show the current signing identity DID.\n    Show,\n    /// Generate a new signing identity for this repository.\n    Create,\n    /// Bind a different DID as the repo's signing identity.\n    Bind {\n        /// Agent DID to bind.\n        agent: String,\n    },\n    /// Print this repo's seven resource pubkeys as JSON, suitable for\n    /// `loom clone --pubkeys` on a remote receiver.\n    Share {\n        /// Optional output file (defaults to stdout).\n        #[arg(short, long)]\n        output: Option<PathBuf>,\n        /// Authorized recipient DID for private-repo access material.\n        #[arg(long)]\n        recipient_did: Option<String>,\n        /// Authorized recipient encryption public key as 32-byte hex.\n        #[arg(long = \"recipient-enc-key\")]\n        recipient_enc_key: Option<String>,\n    },\n}",
              "docs": "Identity subcommands.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 618
            },
            {
              "name": "cli::AccessArgs",
              "kind": "struct_item",
              "signature": "pub struct AccessArgs {\n/// Subcommand.\n\n#[command(subcommand)]\npub action: AccessAction\n}",
              "docs": "Arguments for `loom access`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 647
            },
            {
              "name": "cli::AccessAction",
              "kind": "enum_item",
              "signature": "pub enum AccessAction {\n    /// Generate recipient device keys before repository admission.\n    EnrollmentKey {\n        /// Repository id supplied by the inviting admin.\n        #[arg(long)]\n        repo_id: String,\n        /// Assigned DID. Omit for a newly generated agent DID; provide the\n        /// existing DID for compromised-device replacement.\n        #[arg(long)]\n        did: Option<String>,\n        /// Writer device generation. Use 1 for a new member and the next\n        /// generation reported by the admin for device replacement.\n        #[arg(long, default_value_t = 1)]\n        generation: u64,\n        /// New empty directory in which owner-only identity files are stored.\n        #[arg(long)]\n        output: PathBuf,\n        /// Render the public enrollment request as JSON.\n        #[arg(long)]\n        json: bool,\n    },\n\n    /// Print this repo's local encryption public key.\n    Key {\n        /// Render as JSON.\n        #[arg(long)]\n        json: bool,\n    },\n\n    /// List access manifest members.\n    List {\n        /// Render as JSON.\n        #[arg(long)]\n        json: bool,\n    },\n\n    /// Grant a DID reader, writer, or admin access.\n    Grant {\n        /// Human or agent DID to grant.\n        #[arg(long)]\n        did: String,\n        /// Role to grant: reader, writer, or admin.\n        #[arg(long)]\n        role: String,\n        /// Recipient sealed-box encryption public key as 32-byte hex.\n        #[arg(long = \"enc-key\")]\n        enc_key: String,\n        /// Recipient signing/authentication public key as 32-byte hex.\n        #[arg(long = \"auth-key\")]\n        auth_key: String,\n        /// Recipient's unlinkable per-repository Strand public key as\n        /// 32-byte hex. Required for writer and admin roles; omitted for\n        /// readers.\n        #[arg(long = \"strand-key\")]\n        strand_key: Option<String>,\n    },\n\n    /// Permanently freeze the initial admin DID roster. Bootstrap exactly\n    /// three or more independently controlled admins first. After this\n    /// one-way transition no new admin DID can be granted.\n    FreezeAdminRoster,\n\n    /// Revoke a DID and rotate the future repository key epoch.\n    Revoke {\n        /// Human or agent DID to revoke.\n        #[arg(long)]\n        did: String,\n        /// Signed, peer-produced writer-tail attestations. Writer/admin\n        /// revocation requires a strict majority and at least two independent\n        /// active admins to attest the same complete terminal checkpoint.\n        #[arg(long = \"tail-attestation\")]\n        tail_attestations: Vec<PathBuf>,\n    },\n\n    /// Replace an active member's compromised or lost device keys and rotate\n    /// the future repository-key epoch. Must be signed by a different active\n    /// admin when replacing the current device.\n    ReplaceDevice {\n        /// Member DID whose device keys are being replaced.\n        #[arg(long)]\n        did: String,\n        /// Replacement sealed-box encryption public key as 32-byte hex.\n        #[arg(long = \"enc-key\")]\n        enc_key: String,\n        /// Replacement authentication public key as 32-byte hex.\n        #[arg(long = \"auth-key\")]\n        auth_key: String,\n        /// Replacement private Strand public key as 32-byte hex. Required\n        /// for writer/admin members; omit for readers.\n        #[arg(long = \"strand-key\")]\n        strand_key: Option<String>,\n        /// Signed, peer-produced writer-tail attestations. Writer/admin\n        /// replacement requires a strict majority and at least two independent\n        /// active admins to attest the same complete terminal checkpoint.\n        #[arg(long = \"tail-attestation\")]\n        tail_attestations: Vec<PathBuf>,\n    },\n\n    /// Sign this admin peer's verified view of a writer's terminal Strand.\n    /// Exchange the resulting file directly with the revoking admin; no\n    /// registry, coordinator, or centralized service is involved.\n    AttestTail {\n        /// Active writer/admin DID whose current generation is being retired.\n        #[arg(long)]\n        did: String,\n        /// New output file. Existing files are never overwritten.\n        #[arg(long)]\n        output: PathBuf,\n    },\n\n    /// Rotate the future repository key epoch without changing members.\n    Rotate,\n\n    /// Apply a recipient-scoped signed membership/key update received\n    /// directly from another repository peer.\n    Apply {\n        /// Path to the updated bundle produced by `loom identity share`.\n        #[arg(long)]\n        bundle: PathBuf,\n        /// Separately verified current owner authentication key (32-byte hex).\n        #[arg(long = \"owner-auth-key\")]\n        owner_auth_key: String,\n        /// Separately verified current manifest signer key (32-byte hex).\n        /// Required when a recovery admin, rather than the owner, signed.\n        #[arg(long = \"manifest-signer-auth-key\")]\n        manifest_signer_auth_key: Option<String>,\n    },\n}",
              "docs": "Access-control subcommands.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 655
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands",
          "source": "sigil/weave/tools/loom/src/commands/mod.rs",
          "sha256": "a8836f803cbce9a56d0521da6696a739975f031f8316e80f881f03d80ba99a72",
          "attributes": "",
          "items": [
            {
              "name": "commands::access",
              "kind": "module",
              "signature": "pub mod access;",
              "docs": "Command implementations. Each module corresponds to a single git verb.",
              "attributes": "",
              "line": 3
            },
            {
              "name": "commands::add",
              "kind": "module",
              "signature": "pub mod add;",
              "docs": "",
              "attributes": "",
              "line": 4
            },
            {
              "name": "commands::branch",
              "kind": "module",
              "signature": "pub mod branch;",
              "docs": "",
              "attributes": "",
              "line": 5
            },
            {
              "name": "commands::checkout",
              "kind": "module",
              "signature": "pub mod checkout;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "commands::clone",
              "kind": "module",
              "signature": "pub mod clone;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "commands::commit",
              "kind": "module",
              "signature": "pub mod commit;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "commands::config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "commands::daemon",
              "kind": "module",
              "signature": "pub mod daemon;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "commands::diff",
              "kind": "module",
              "signature": "pub mod diff;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "commands::fetch",
              "kind": "module",
              "signature": "pub mod fetch;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "commands::identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "commands::init",
              "kind": "module",
              "signature": "pub mod init;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "commands::log",
              "kind": "module",
              "signature": "pub mod log;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "commands::merge",
              "kind": "module",
              "signature": "pub mod merge;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "commands::mv",
              "kind": "module",
              "signature": "pub mod mv;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "commands::pull",
              "kind": "module",
              "signature": "pub mod pull;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "commands::push",
              "kind": "module",
              "signature": "pub mod push;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "commands::remote",
              "kind": "module",
              "signature": "pub mod remote;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "commands::reset",
              "kind": "module",
              "signature": "pub mod reset;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "commands::restore",
              "kind": "module",
              "signature": "pub mod restore;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "commands::rm",
              "kind": "module",
              "signature": "pub mod rm;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "commands::show",
              "kind": "module",
              "signature": "pub mod show;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "commands::status",
              "kind": "module",
              "signature": "pub mod status;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "commands::switch",
              "kind": "module",
              "signature": "pub mod switch;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "commands::tag",
              "kind": "module",
              "signature": "pub mod tag;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "commands::list",
              "kind": "module",
              "signature": "pub mod list;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "commands::register",
              "kind": "module",
              "signature": "pub mod register;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "commands::search",
              "kind": "module",
              "signature": "pub mod search;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "commands::serve",
              "kind": "module",
              "signature": "pub mod serve;",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "commands::unregister",
              "kind": "module",
              "signature": "pub mod unregister;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "commands::deploy",
              "kind": "module",
              "signature": "pub mod deploy;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "commands::export_git",
              "kind": "module",
              "signature": "pub mod export_git;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "commands::import_git",
              "kind": "module",
              "signature": "pub mod import_git;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "commands::mandate",
              "kind": "module",
              "signature": "pub mod mandate;",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "commands::mars",
              "kind": "module",
              "signature": "pub mod mars;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "commands::pr",
              "kind": "module",
              "signature": "pub mod pr;",
              "docs": "",
              "attributes": "",
              "line": 40
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::access",
          "source": "sigil/weave/tools/loom/src/commands/access.rs",
          "sha256": "8667fb5d3b47dba6e8ea5049effca82642f51c0b0491950ce328872d789d2684",
          "attributes": "",
          "items": [
            {
              "name": "commands::access::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: AccessArgs) -> Result<()>;",
              "docs": "Execute `loom access`.",
              "attributes": "",
              "line": 19
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::add",
          "source": "sigil/weave/tools/loom/src/commands/add.rs",
          "sha256": "9d5f8da5e5580ebf9b7ae04cbf185d426e8627024f42038fe94369c48be1e952",
          "attributes": "",
          "items": [
            {
              "name": "commands::add::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: AddArgs) -> Result<()>;",
              "docs": "Execute `loom add`.",
              "attributes": "",
              "line": 20
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::branch",
          "source": "sigil/weave/tools/loom/src/commands/branch.rs",
          "sha256": "83aca277bf8647888d4788fc25ce9a1dc08e99c682369e399ef6669bf5ebf660",
          "attributes": "",
          "items": [
            {
              "name": "commands::branch::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: BranchArgs) -> Result<()>;",
              "docs": "Execute `loom branch`.",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::checkout",
          "source": "sigil/weave/tools/loom/src/commands/checkout.rs",
          "sha256": "eba09e2f8f2eff267332c1f5459c56fe37ab056d72de43f7b071d85077095ab3",
          "attributes": "",
          "items": [
            {
              "name": "commands::checkout::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: CheckoutArgs) -> Result<()>;",
              "docs": "Execute `loom checkout`.",
              "attributes": "",
              "line": 13
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::clone",
          "source": "sigil/weave/tools/loom/src/commands/clone.rs",
          "sha256": "0c7a5e0609a333c2eea81ebb829b689445fe6a4e6dd38bf4193557b4044abf77",
          "attributes": "",
          "items": [
            {
              "name": "commands::clone::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: CloneArgs) -> Result<()>;",
              "docs": "Execute `loom clone`.",
              "attributes": "",
              "line": 41
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::commit",
          "source": "sigil/weave/tools/loom/src/commands/commit.rs",
          "sha256": "c2c949812a9369d30f495467b1b754395131308d045fee10e54ff68428f58810",
          "attributes": "",
          "items": [
            {
              "name": "commands::commit::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: CommitArgs) -> Result<()>;",
              "docs": "Execute `loom commit`.",
              "attributes": "",
              "line": 18
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::config",
          "source": "sigil/weave/tools/loom/src/commands/config.rs",
          "sha256": "0954f00bf611efa2af2645983508673c992c61dd46b1f3fcd410b2e758bfa118",
          "attributes": "",
          "items": [
            {
              "name": "commands::config::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ConfigArgs) -> Result<()>;",
              "docs": "Execute `loom config`.",
              "attributes": "",
              "line": 9
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::daemon",
          "source": "sigil/weave/tools/loom/src/commands/daemon.rs",
          "sha256": "7a3f13edad412d6d5ef176f4144e8810c0848fb29dd0298e32544ddf0cfbf275",
          "attributes": "",
          "items": [
            {
              "name": "commands::daemon::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: DaemonArgs) -> Result<()>;",
              "docs": "Execute `loom daemon`.",
              "attributes": "",
              "line": 22
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::diff",
          "source": "sigil/weave/tools/loom/src/commands/diff.rs",
          "sha256": "629c62ff8d4778fe069600decea23a66a5807884a7ee61a5e122f7dd2cb33798",
          "attributes": "",
          "items": [
            {
              "name": "commands::diff::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: DiffArgs) -> Result<()>;",
              "docs": "Execute `loom diff`.",
              "attributes": "",
              "line": 29
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::fetch",
          "source": "sigil/weave/tools/loom/src/commands/fetch.rs",
          "sha256": "7d43f13e565b8cb5d2d84000f786c14e170838796eba1fd71a596f5b1417eb6c",
          "attributes": "",
          "items": [
            {
              "name": "commands::fetch::run",
              "kind": "function_item",
              "signature": "pub async fn run(_args: FetchArgs) -> Result<()>;",
              "docs": "Execute `loom fetch`.",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::identity",
          "source": "sigil/weave/tools/loom/src/commands/identity.rs",
          "sha256": "483b9340fc2c417eb91b905c5b7a75c7a97fdf3b3b5ce87f84e3f5a65218ff5e",
          "attributes": "",
          "items": [
            {
              "name": "commands::identity::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: IdentityArgs) -> Result<()>;",
              "docs": "Execute `loom identity`.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "commands::identity::build_share_bundle",
              "kind": "function_item",
              "signature": "pub async fn build_share_bundle(repo: &mut Repo) -> Result<ShareBundle>;",
              "docs": "Build a [`ShareBundle`] from the current repo's open resources. Used\nby `loom identity share` and `loom register` so the registry entry\nand the standalone bundle file always agree on shape and contents.",
              "attributes": "",
              "line": 119
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::init",
          "source": "sigil/weave/tools/loom/src/commands/init.rs",
          "sha256": "8d67612fdb0810eac56b3ddaff074fc97d6aaca8e30c2ea7115ee3abeaaf3922",
          "attributes": "",
          "items": [
            {
              "name": "commands::init::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: InitArgs) -> Result<()>;",
              "docs": "Execute `loom init`.",
              "attributes": "",
              "line": 16
            },
            {
              "name": "commands::init::rand_compat::fill_random",
              "kind": "function_item",
              "signature": "pub fn fill_random(dst: &mut [u8]);",
              "docs": "Fill `dst` with cryptographically random bytes using the same RNG the\nrest of the Weave stack uses.",
              "attributes": "",
              "line": 185
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::log",
          "source": "sigil/weave/tools/loom/src/commands/log.rs",
          "sha256": "c97dde89ffeb9e28d3805fb783dab29ff9e7d920e7e2a2842f68cff73ad0fdd8",
          "attributes": "",
          "items": [
            {
              "name": "commands::log::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: LogArgs) -> Result<()>;",
              "docs": "Execute `loom log`.",
              "attributes": "",
              "line": 15
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::merge",
          "source": "sigil/weave/tools/loom/src/commands/merge.rs",
          "sha256": "877bcc55aeafd23b091625914b8a42ea4c5fe1cc864074a4a3a9d28bff6ad641",
          "attributes": "",
          "items": [
            {
              "name": "commands::merge::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: MergeArgs) -> Result<()>;",
              "docs": "Execute `loom merge`.",
              "attributes": "",
              "line": 38
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::mv",
          "source": "sigil/weave/tools/loom/src/commands/mv.rs",
          "sha256": "d1c9d2c42317a7e172a48fb408cf7296a93d65dcdccdc7313349104f7ebd8bff",
          "attributes": "",
          "items": [
            {
              "name": "commands::mv::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: MvArgs) -> Result<()>;",
              "docs": "Execute `loom mv`.",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::pull",
          "source": "sigil/weave/tools/loom/src/commands/pull.rs",
          "sha256": "df6df483211d817711da590dab817bd5c09d42b0a1527679ec4b8dedd3ec6f93",
          "attributes": "",
          "items": [
            {
              "name": "commands::pull::run",
              "kind": "function_item",
              "signature": "pub async fn run(_args: PullArgs) -> Result<()>;",
              "docs": "Execute `loom pull`.",
              "attributes": "",
              "line": 14
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::push",
          "source": "sigil/weave/tools/loom/src/commands/push.rs",
          "sha256": "853a3660e3cdb1025a3f8b817f385303b7a264d52a9036ebc036a93591b32dee",
          "attributes": "",
          "items": [
            {
              "name": "commands::push::run",
              "kind": "function_item",
              "signature": "pub async fn run(_args: PushArgs) -> Result<()>;",
              "docs": "Execute `loom push`.",
              "attributes": "",
              "line": 18
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::remote",
          "source": "sigil/weave/tools/loom/src/commands/remote.rs",
          "sha256": "958f5c26b54495a1cbd101465f0ef8e2693c6789765d417ba97de7ca89cc10d5",
          "attributes": "",
          "items": [
            {
              "name": "commands::remote::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: RemoteArgs) -> Result<()>;",
              "docs": "Execute `loom remote`.",
              "attributes": "",
              "line": 60
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::reset",
          "source": "sigil/weave/tools/loom/src/commands/reset.rs",
          "sha256": "625542fcdd6766df09653df2dd1dfeba80ddf183dc89790dd3208fd46bf462e7",
          "attributes": "",
          "items": [
            {
              "name": "commands::reset::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ResetArgs) -> Result<()>;",
              "docs": "Execute `loom reset`.",
              "attributes": "",
              "line": 17
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::restore",
          "source": "sigil/weave/tools/loom/src/commands/restore.rs",
          "sha256": "0ea5a333b5046b038742b6557465a70ab1f7dd217cd7ac077d6bfe340aebb42f",
          "attributes": "",
          "items": [
            {
              "name": "commands::restore::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: RestoreArgs) -> Result<()>;",
              "docs": "Execute `loom restore`.",
              "attributes": "",
              "line": 21
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::rm",
          "source": "sigil/weave/tools/loom/src/commands/rm.rs",
          "sha256": "7e81ec65b5857d2f52cc17754a7ae18af620e5c5f9bd1246891715a6a1ae688e",
          "attributes": "",
          "items": [
            {
              "name": "commands::rm::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: RmArgs) -> Result<()>;",
              "docs": "Execute `loom rm`.",
              "attributes": "",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::show",
          "source": "sigil/weave/tools/loom/src/commands/show.rs",
          "sha256": "39407fce84aafd83b29db92a5413cb251523afbfa3dd112fbb6dc4f35cd1850a",
          "attributes": "",
          "items": [
            {
              "name": "commands::show::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ShowArgs) -> Result<()>;",
              "docs": "Execute `loom show`.",
              "attributes": "",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::status",
          "source": "sigil/weave/tools/loom/src/commands/status.rs",
          "sha256": "c5d8bab07e49828111cf32206e7cea7cc45a2cfeafa86c68bd524dcd29d8ba6b",
          "attributes": "",
          "items": [
            {
              "name": "commands::status::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: StatusArgs) -> Result<()>;",
              "docs": "Execute `loom status`.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "commands::status::Status",
              "kind": "enum_item",
              "signature": "pub enum Status {\n    /// Present in workdir, absent from index and HEAD.\n    Untracked,\n    /// Workdir blob differs from index blob.\n    UnstagedModified,\n    /// Index has it, workdir doesn't.\n    UnstagedDeleted,\n    /// Index has it, HEAD doesn't.\n    StagedNew,\n    /// Index blob differs from HEAD blob.\n    StagedModified,\n    /// HEAD has it, index doesn't.\n    StagedDeleted,\n}",
              "docs": "Per-file classification.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 136
            },
            {
              "name": "commands::status::StatusReport",
              "kind": "struct_item",
              "signature": "pub struct StatusReport {\n/// Per-path status entries, sorted lexicographically by path.\n\npub entries: BTreeMap<String, Status>\n}",
              "docs": "Aggregated status report.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 153
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::switch",
          "source": "sigil/weave/tools/loom/src/commands/switch.rs",
          "sha256": "b4c4ddd988ae0fb8ad0fa32b56a043393d402d6533773c22b81b36d92c770d21",
          "attributes": "",
          "items": [
            {
              "name": "commands::switch::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: SwitchArgs) -> Result<()>;",
              "docs": "Execute `loom switch`.",
              "attributes": "",
              "line": 25
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::tag",
          "source": "sigil/weave/tools/loom/src/commands/tag.rs",
          "sha256": "0818772c5c44c8990f48ba1f167ad056bea97be61a0c5e40a63f4c3e3626976d",
          "attributes": "",
          "items": [
            {
              "name": "commands::tag::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: TagArgs) -> Result<()>;",
              "docs": "Execute `loom tag`.",
              "attributes": "",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::list",
          "source": "sigil/weave/tools/loom/src/commands/list.rs",
          "sha256": "3edc5ac5a0d001176dd3ef2450cb940c6611aabe632bb76356bd920e9178204d",
          "attributes": "",
          "items": [
            {
              "name": "commands::list::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ListArgs) -> Result<()>;",
              "docs": "Execute `loom list`.",
              "attributes": "",
              "line": 13
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::register",
          "source": "sigil/weave/tools/loom/src/commands/register.rs",
          "sha256": "7b0d96a215fc4ae90032be807a843f3ded1b4081a93923c7b24aff216ab3b1d4",
          "attributes": "",
          "items": [
            {
              "name": "commands::register::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: RegisterArgs) -> Result<()>;",
              "docs": "Execute `loom register`.",
              "attributes": "",
              "line": 13
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::search",
          "source": "sigil/weave/tools/loom/src/commands/search.rs",
          "sha256": "57efb866b4134dfcb58aaa5a5d97e22a59de4ea62897f50690c8dde577930c9a",
          "attributes": "",
          "items": [
            {
              "name": "commands::search::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: SearchArgs) -> Result<()>;",
              "docs": "Execute `loom search`.",
              "attributes": "",
              "line": 15
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::serve",
          "source": "sigil/weave/tools/loom/src/commands/serve.rs",
          "sha256": "5440b3c1c6b7c0bb3fc1539199c7c28246d5ca1b8454ee9bfe45af0836ce649b",
          "attributes": "",
          "items": [
            {
              "name": "commands::serve::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ServeArgs) -> Result<()>;",
              "docs": "Execute `loom serve`.",
              "attributes": "",
              "line": 15
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::unregister",
          "source": "sigil/weave/tools/loom/src/commands/unregister.rs",
          "sha256": "00a2cd7bc37cda23befa8b6190d9f854537e6d74268eb824875683deebafdf21",
          "attributes": "",
          "items": [
            {
              "name": "commands::unregister::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: UnregisterArgs) -> Result<()>;",
              "docs": "Execute `loom unregister`.",
              "attributes": "",
              "line": 12
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::deploy",
          "source": "sigil/weave/tools/loom/src/commands/deploy.rs",
          "sha256": "e7f9cefd0a38c31c78f1cfcee97ae9ec1a4ecc232934670f328f076054cca578",
          "attributes": "",
          "items": [
            {
              "name": "commands::deploy::DeployArgs",
              "kind": "struct_item",
              "signature": "pub struct DeployArgs {\n/// Path to `loom.toml`. Defaults to the workdir root.\n\n#[arg(long)]\npub config: Option<PathBuf>,\n/// Plan the intent but don't write it (prints the JSON to stdout).\n\n#[arg(long)]\npub dry_run: bool\n}",
              "docs": "Arguments for `loom deploy`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 17
            },
            {
              "name": "commands::deploy::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: DeployArgs) -> Result<()>;",
              "docs": "Execute `loom deploy`.",
              "attributes": "",
              "line": 28
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::export_git",
          "source": "sigil/weave/tools/loom/src/commands/export_git.rs",
          "sha256": "f2f30f37c2d25af890b6fb7fa4089a56ad96d798cbdb467f5f5e746a64778aa0",
          "attributes": "",
          "items": [
            {
              "name": "commands::export_git::ExportGitArgs",
              "kind": "struct_item",
              "signature": "pub struct ExportGitArgs {\n/// Destination directory for the new git repo. Must be empty (or\n\n/// non-existent).\n\npub destination: PathBuf,\n/// Branch in the loom repo to export (default: the loom default\n\n/// branch).\n\n#[arg(long)]\npub branch: Option<String>\n}",
              "docs": "Arguments for `loom export-git`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 21
            },
            {
              "name": "commands::export_git::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ExportGitArgs) -> Result<()>;",
              "docs": "Execute `loom export-git`.",
              "attributes": "",
              "line": 33
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::import_git",
          "source": "sigil/weave/tools/loom/src/commands/import_git.rs",
          "sha256": "636fcb0cf670c0711a9711551fd6daf90088b6753bab21a179904b918a970d72",
          "attributes": "",
          "items": [
            {
              "name": "commands::import_git::ImportGitArgs",
              "kind": "struct_item",
              "signature": "pub struct ImportGitArgs {\n/// Path to the source git repository.\n\npub source: PathBuf,\n/// Branch name to materialize on the loom side (default: `main`).\n\n#[arg(long, default_value = \"main\")]\npub branch: String,\n/// Source git ref to import from (default: `HEAD`).\n\n#[arg(long, default_value = \"HEAD\")]\npub source_ref: String,\n/// Override the importing-agent DID (defaults to repo identity).\n\n#[arg(long)]\npub author: Option<String>,\n/// Abort on unsupported git entries (gitlinks, non-utf8 paths) instead\n\n/// of silently skipping them.\n\n#[arg(long)]\npub strict: bool,\n/// Plan but don't write \u2014 useful for sizing an import.\n\n#[arg(long)]\npub dry_run: bool,\n/// Skip materialization of the working tree after import. By default\n\n/// `loom import-git` writes the head commit's tree to disk so the\n\n/// user has plaintext files immediately, matching the expected\n\n/// \"fresh clone\" experience.\n\n#[arg(long)]\npub no_materialize: bool\n}",
              "docs": "Arguments for `loom import-git`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 27
            },
            {
              "name": "commands::import_git::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: ImportGitArgs) -> Result<()>;",
              "docs": "Execute `loom import-git`.",
              "attributes": "",
              "line": 61
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::mandate",
          "source": "sigil/weave/tools/loom/src/commands/mandate.rs",
          "sha256": "39e4fbc598932e692660e07810c866c574fca78134f6700df8096f32336e8fac",
          "attributes": "",
          "items": [
            {
              "name": "commands::mandate::MandateArgs",
              "kind": "struct_item",
              "signature": "pub struct MandateArgs {\n/// Subcommand.\n\n#[command(subcommand)]\npub action: MandateAction\n}",
              "docs": "Arguments for `loom mandate`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 27
            },
            {
              "name": "commands::mandate::MandateAction",
              "kind": "enum_item",
              "signature": "pub enum MandateAction {\n    /// Issue a new mandate granting `--grant` to `--subject`.\n    Issue {\n        /// Subject DID receiving the grant.\n        #[arg(long)]\n        subject: String,\n        /// Permission being granted: read | write | approve | admin | mint.\n        #[arg(long)]\n        grant: String,\n        /// Min approvals (only meaningful for `approve` / `mint`).\n        #[arg(long)]\n        min_approvals: Option<u32>,\n        /// Optional comma-separated allow-list of approver DIDs.\n        #[arg(long)]\n        allowed_approvers: Option<String>,\n        /// Optional millisecond expiry-from-now (e.g. 30 days = 2592000000).\n        #[arg(long)]\n        expires_in_ms: Option<u64>,\n    },\n\n    /// List every mandate in this repo.\n    List,\n\n    /// Revoke a mandate by id.\n    Revoke {\n        /// Mandate id (16-hex prefix).\n        id: String,\n    },\n}",
              "docs": "`loom mandate <subcommand>`.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 35
            },
            {
              "name": "commands::mandate::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: MandateArgs) -> Result<()>;",
              "docs": "Execute `loom mandate`.",
              "attributes": "",
              "line": 66
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::mars",
          "source": "sigil/weave/tools/loom/src/commands/mars.rs",
          "sha256": "16317e5cbb16b67853b7ac4e4ce3c71805f297acb603a289c567e3b740294b85",
          "attributes": "",
          "items": [
            {
              "name": "commands::mars::MarsArgs",
              "kind": "struct_item",
              "signature": "pub struct MarsArgs {\n/// Subcommand.\n\n#[command(subcommand)]\npub action: MarsAction\n}",
              "docs": "Arguments for `loom mars`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 13
            },
            {
              "name": "commands::mars::MarsAction",
              "kind": "enum_item",
              "signature": "pub enum MarsAction {\n    /// Register this repo as a MARS asset under `did:loom:<handle>:<name>`.\n    Register {\n        /// Owner handle (e.g. `ada`). Combined with `--name` to form the\n        /// canonical `did:loom:<handle>:<name>`.\n        #[arg(long)]\n        handle: String,\n        /// Asset name (typically the repo basename).\n        #[arg(long)]\n        name: String,\n    },\n\n    /// Show the current anchor for `--did`.\n    Show {\n        /// Canonical loom DID.\n        did: String,\n    },\n\n    /// Update the anchor's pointer to the current default-branch tip.\n    Update {\n        /// Canonical loom DID.\n        did: String,\n    },\n\n    /// Append a third-party attestation (Lens v1 via MarsStore).\n    Attest {\n        /// Canonical loom DID.\n        did: String,\n        /// Attestation kind (e.g. build, audit, license).\n        #[arg(long)]\n        kind: String,\n        /// Attestation body (URL, commit hash, note).\n        #[arg(long)]\n        body: String,\n    },\n}",
              "docs": "`loom mars <subcommand>`.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 21
            },
            {
              "name": "commands::mars::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: MarsArgs) -> Result<()>;",
              "docs": "Execute `loom mars`.",
              "attributes": "",
              "line": 59
            }
          ],
          "parseErrors": false
        },
        {
          "module": "commands::pr",
          "source": "sigil/weave/tools/loom/src/commands/pr.rs",
          "sha256": "f3ab45cba91f2d8f9baa796f7d11a6102a7252a4983e56e51c91e999c31d5210",
          "attributes": "",
          "items": [
            {
              "name": "commands::pr::PrArgs",
              "kind": "struct_item",
              "signature": "pub struct PrArgs {\n/// Subcommand.\n\n#[command(subcommand)]\npub action: PrAction\n}",
              "docs": "Arguments for `loom pr`.",
              "attributes": "#[derive(Debug, clap::Args)]",
              "line": 26
            },
            {
              "name": "commands::pr::PrAction",
              "kind": "enum_item",
              "signature": "pub enum PrAction {\n    /// Open a new pull request from --head into --base.\n    Open {\n        /// Source branch (the changes you want to merge in).\n        #[arg(long)]\n        head: String,\n        /// Target branch. Defaults to the repo's `default_branch`.\n        #[arg(long)]\n        base: Option<String>,\n        /// One-line title.\n        #[arg(short = 'm', long)]\n        title: String,\n        /// Long-form description (Markdown).\n        #[arg(short = 'd', long, default_value = \"\")]\n        description: String,\n    },\n\n    /// List every PR in this repo.\n    List,\n\n    /// Show one PR plus its approvals.\n    Show {\n        /// PR id (16-hex prefix).\n        id: String,\n    },\n\n    /// Sign and persist an approval for the PR's current head commit.\n    Approve {\n        /// PR id (16-hex prefix).\n        id: String,\n    },\n\n    /// If the approval threshold is met, run the existing merge primitive\n    /// to fold head into base, then mark the PR `merged`.\n    Merge {\n        /// PR id.\n        id: String,\n        /// Override the default `MergePolicy::min_approvals = 1`.\n        #[arg(long, default_value_t = 1)]\n        min_approvals: u32,\n        /// Optional commit message; defaults to the PR title.\n        #[arg(short, long)]\n        message: Option<String>,\n    },\n}",
              "docs": "`loom pr <subcommand>`.",
              "attributes": "#[derive(Debug, Subcommand)]",
              "line": 34
            },
            {
              "name": "commands::pr::run",
              "kind": "function_item",
              "signature": "pub async fn run(args: PrArgs) -> Result<()>;",
              "docs": "Execute `loom pr`.",
              "attributes": "",
              "line": 81
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/tools/loom/src/error.rs",
          "sha256": "6d45692334ac2023941bfa2a888633a924276f12ca2791ef6446c28723ecc834",
          "attributes": "",
          "items": [
            {
              "name": "error::LoomError",
              "kind": "enum_item",
              "signature": "pub enum LoomError {\n    /// No `.loom/` directory was found walking up from the current directory.\n    #[error(\"not a loom repository (or any parent up to mount point /): no .loom/ directory\")]\n    NotARepository,\n\n    /// A loom repository already exists at the requested path.\n    #[error(\"loom repository already exists at {0}\")]\n    AlreadyInitialized(PathBuf),\n\n    /// The named ref does not exist.\n    #[error(\"ref not found: {0}\")]\n    RefNotFound(String),\n\n    /// The working tree contains uncommitted changes that would be lost.\n    #[error(\"uncommitted changes would be overwritten: {0}\")]\n    UncommittedChanges(String),\n\n    /// A path was outside the repository root.\n    #[error(\"path is outside the repository: {0}\")]\n    PathOutsideRepo(PathBuf),\n\n    /// Repository configuration is malformed or missing required fields.\n    #[error(\"invalid repository config: {0}\")]\n    InvalidConfig(String),\n\n    /// Required identity material is missing.\n    #[error(\"no signing identity available; run `loom identity create`\")]\n    MissingIdentity,\n\n    /// A commit entry on the strand was malformed.\n    #[error(\"malformed commit at seq {seq}: {reason}\")]\n    MalformedCommit {\n        /// Sequence number of the malformed commit.\n        seq: u64,\n        /// Human-readable reason.\n        reason: String,\n    },\n\n    /// Filesystem or I/O error.\n    #[error(\"io error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// JSON (de)serialization error.\n    #[error(\"serialization error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    /// Errors propagated from the Weave SDK.\n    #[error(\"weave error: {0}\")]\n    Weave(String),\n\n    /// Errors propagated from the Strand crate.\n    #[error(\"strand error: {0}\")]\n    Strand(String),\n\n    /// Errors propagated from the Locus crate.\n    #[error(\"locus error: {0}\")]\n    Locus(String),\n\n    /// Errors propagated from the Lens crate.\n    #[error(\"lens error: {0}\")]\n    Lens(String),\n\n    /// A precondition failed (e.g. dirty index when a clean tree is required).\n    #[error(\"{0}\")]\n    Other(String),\n}",
              "docs": "Errors that can occur during loom operations. Some variants are\ndeclared ahead of the commands that emit them; `#[allow(dead_code)]`\nkeeps the typed surface stable as v1/v2 verbs land.",
              "attributes": "#[derive(Debug, Error)]\n#[allow(dead_code)]",
              "line": 11
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, LoomError>;",
              "docs": "Convenience result alias.",
              "attributes": "",
              "line": 79
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ignore",
          "source": "sigil/weave/tools/loom/src/ignore.rs",
          "sha256": "a0e5d466b1bf27593d445575debbd87372d699d7bc912da0536fbc80ecaed213",
          "attributes": "",
          "items": [
            {
              "name": "ignore::IgnoreMatcher",
              "kind": "struct_item",
              "signature": "pub struct IgnoreMatcher {\n\n}",
              "docs": "Compiled ignore matcher.",
              "attributes": "",
              "line": 10
            },
            {
              "name": "ignore::IgnoreMatcher::for_workdir",
              "kind": "function_item",
              "signature": "pub fn for_workdir(workdir: &Path) -> Result<Self>;",
              "docs": "Build a matcher from the workdir root, reading `.loomignore` if present.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "ignore::IgnoreMatcher::is_ignored",
              "kind": "function_item",
              "signature": "pub fn is_ignored(&self, repo_relative_path: &str) -> bool;",
              "docs": "True if `repo_relative_path` should be ignored. The path is forward-\nslash normalized and has no leading `./`.",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false
        },
        {
          "module": "index",
          "source": "sigil/weave/tools/loom/src/index.rs",
          "sha256": "d7d287f18cfb69e7d1a1f957e11c3868094ee49832b413866c1b389969ee3bdf",
          "attributes": "",
          "items": [
            {
              "name": "index::IndexEntry",
              "kind": "struct_item",
              "signature": "pub struct IndexEntry {\n/// Hex BLAKE3 of the blob content.\n\npub blob: String,\n/// File mode at stage time.\n\npub mode: FileMode,\n/// File size in bytes.\n\npub size: u64\n}",
              "docs": "One staged file.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "index::Index",
              "kind": "struct_item",
              "signature": "pub struct Index {\n/// Schema version.\n\npub version: u32,\n/// Path \u2192 entry map. `BTreeMap` so the on-disk encoding is sorted and\n\n/// stable.\n\npub entries: BTreeMap<String, IndexEntry>\n}",
              "docs": "In-memory representation of the staging index.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "index::Index::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Empty index with the current schema version.",
              "attributes": "",
              "line": 48
            },
            {
              "name": "index::Index::load",
              "kind": "function_item",
              "signature": "pub async fn load(node: &WeaveNode, lens_name: &str) -> Result<Self>;",
              "docs": "Read the index from the given Lens database. Returns an empty\nindex if no document has been written yet (a fresh repo).",
              "attributes": "",
              "line": 57
            },
            {
              "name": "index::Index::save",
              "kind": "function_item",
              "signature": "pub async fn save(&self, node: &WeaveNode, lens_name: &str) -> Result<()>;",
              "docs": "Persist the index to Lens.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "index::Index::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "Validate the local projection against the same portable tree profile\nenforced for signed commits before it can influence a command.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "index::Index::put",
              "kind": "function_item",
              "signature": "pub fn put(&mut self, path: impl Into<String>, entry: IndexEntry);",
              "docs": "Replace the entry for `path` (forward-slash form).",
              "attributes": "",
              "line": 102
            },
            {
              "name": "index::Index::remove",
              "kind": "function_item",
              "signature": "pub fn remove(&mut self, path: &str) -> Option<IndexEntry>;",
              "docs": "Remove the entry for `path` if present; returns the prior entry.",
              "attributes": "",
              "line": 107
            },
            {
              "name": "index::Index::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "True when no entries are staged.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "index::Index::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, path: &str) -> Option<&IndexEntry>;",
              "docs": "Look up the entry for `path`.",
              "attributes": "",
              "line": 120
            }
          ],
          "parseErrors": false
        },
        {
          "module": "manifest",
          "source": "sigil/weave/tools/loom/src/manifest.rs",
          "sha256": "c51a5d6681ec0b71b90671c6b887adf1995416bde649a77d59caee2520ed0926",
          "attributes": "",
          "items": [
            {
              "name": "manifest::FileMode",
              "kind": "enum_item",
              "signature": "pub enum FileMode {\n    /// Regular file with read-only permissions.\n    Regular,\n    /// Regular file marked executable.\n    Executable,\n    /// Symbolic link.\n    Symlink,\n}",
              "docs": "Permission bits stored alongside each blob in a tree manifest. We keep the\nrepresentation explicit (rather than a raw `u32`) so it survives\ncross-platform replication.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 21
            },
            {
              "name": "manifest::FileMode::as_git_octal",
              "kind": "function_item",
              "signature": "pub fn as_git_octal(self) -> &'static str;",
              "docs": "Render as the same octal codes git uses on the wire.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "manifest::ManifestEntry",
              "kind": "struct_item",
              "signature": "pub struct ManifestEntry {\n/// Repo-relative path (forward-slash form).\n\npub path: String,\n/// Hex-encoded BLAKE3 hash of the blob content.\n\npub blob: String,\n/// File mode.\n\npub mode: FileMode,\n/// File size in bytes (informational; the blob hash is canonical).\n\npub size: u64\n}",
              "docs": "A single entry in a tree manifest. The `path` is repo-relative and uses\nforward slashes regardless of platform.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 44
            },
            {
              "name": "manifest::TreeManifest",
              "kind": "struct_item",
              "signature": "pub struct TreeManifest {\n/// Sorted lexicographically by `path` so the canonical encoding is stable.\n\npub entries: Vec<ManifestEntry>\n}",
              "docs": "A tree manifest \u2014 the ordered list of all tracked files at a snapshot.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "manifest::TreeManifest::from_entries",
              "kind": "function_item",
              "signature": "pub fn from_entries(mut entries: Vec<ManifestEntry>) -> Self;",
              "docs": "Construct a manifest from an iterator of entries; sorts in-place.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "manifest::TreeManifest::canonical_json",
              "kind": "function_item",
              "signature": "pub fn canonical_json(&self) -> Result<Vec<u8>, serde_json::Error>;",
              "docs": "Canonical JSON encoding (used for hashing and storage).",
              "attributes": "",
              "line": 70
            },
            {
              "name": "manifest::TreeManifest::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "BLAKE3 hash of the canonical encoding, hex-encoded. Doubles as the\n\"tree id\" in commit objects.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "manifest::TreeManifest::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), String>;",
              "docs": "Validate the canonical, portable, materialization-safe tree profile.",
              "attributes": "",
              "line": 82
            },
            {
              "name": "manifest::CommitSeq",
              "kind": "type_item",
              "signature": "pub type CommitSeq = u64;",
              "docs": "Sequence number on the commits strand \u2014 analogous to git's commit hash, but\nmonotonic per branch tip rather than content-addressed. The pair\n`(writer_pk, seq)` is globally unique; the BLAKE3 of the commit's signed\nheader is the cross-strand identifier.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "manifest::CommitParentRef",
              "kind": "struct_item",
              "signature": "pub struct CommitParentRef {\n/// Commit strand name.\n\npub strand: String,\n/// Sequence number within `strand`.\n\npub seq: CommitSeq\n}",
              "docs": "Cross-strand parent pointer for multi-writer commit DAGs.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 142
            },
            {
              "name": "manifest::CommitBlob",
              "kind": "struct_item",
              "signature": "pub struct CommitBlob {\n/// Hex-encoded BLAKE3 hash of the plaintext blob.\n\npub hash: String,\n/// Base64 encoded blob payload.\n\npub data: String\n}",
              "docs": "Blob bytes carried directly by a commit. The payload is plaintext for\npublic repos and repo-key ciphertext for private repos, encoded as base64\nso commit JSON remains portable.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 153
            },
            {
              "name": "manifest::Commit",
              "kind": "struct_item",
              "signature": "pub struct Commit {\n/// Schema version for forward compatibility.\n\npub version: u32,\n/// Branch that this commit advanced. Legacy commits did not record a\n\n/// branch; local refs remain the source of truth for those.\n\n#[serde(default)]\npub branch: Option<String>,\n/// Inline tree manifest (small repos).\n\npub tree: TreeManifest,\n/// BLAKE3 of the canonical tree manifest \u2014 recorded so we can detach the\n\n/// tree without re-hashing.\n\npub tree_id: String,\n/// Parent commit sequence numbers. Empty for the root commit; one entry\n\n/// for normal commits; two or more for merges.\n\npub parents: Vec<CommitSeq>,\n/// Cross-strand parent refs. Empty on legacy commits and single-writer\n\n/// commits; populated when a private member strand points at another\n\n/// writer's strand.\n\n#[serde(default)]\npub parent_refs: Vec<CommitParentRef>,\n/// Sparse blob payloads needed to materialize this commit's changed\n\n/// content without trusting a separate multi-writer Locus drive.\n\n#[serde(default)]\npub blobs: Vec<CommitBlob>,\n/// Author DID (e.g. `did:oas:l1fe:agent:abc...`).\n\npub author: String,\n/// UNIX millis when the commit was created.\n\npub timestamp_ms: u64,\n/// Commit message.\n\npub message: String\n}",
              "docs": "A commit object stored on the strand.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 162
            },
            {
              "name": "manifest::Commit::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Result<String, serde_json::Error>;",
              "docs": "Hex-encoded canonical commit id (BLAKE3 of canonical JSON). This is the\n\"loom commit hash\" surfaced to users \u2014 comparable to a git sha.",
              "attributes": "",
              "line": 197
            },
            {
              "name": "manifest::Commit::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), String>;",
              "docs": "Validate a commit before it influences history or materialization.",
              "attributes": "",
              "line": 203
            },
            {
              "name": "manifest::ManifestEntry::validate_blob_bytes",
              "kind": "function_item",
              "signature": "pub fn validate_blob_bytes(&self, bytes: &[u8]) -> Result<(), String>;",
              "docs": "Verify plaintext materialization bytes against the signed tree entry.",
              "attributes": "",
              "line": 258
            }
          ],
          "parseErrors": false
        },
        {
          "module": "paths",
          "source": "sigil/weave/tools/loom/src/paths.rs",
          "sha256": "aa13a3ac8fb589f299220b276109422a1f94ff456f365aa6a5cebd7c0bd98b4b",
          "attributes": "",
          "items": [
            {
              "name": "paths::LOOM_DIR",
              "kind": "const_item",
              "signature": "pub const LOOM_DIR: &str;",
              "docs": "The hidden directory name that marks a loom repository, analogous to `.git`.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "paths::files",
              "kind": "module",
              "signature": "pub mod files;",
              "docs": "File names within `.loom/`.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "paths::files::CONFIG",
              "kind": "const_item",
              "signature": "pub const CONFIG: &str;",
              "docs": "Repo configuration (TOML).",
              "attributes": "",
              "line": 16
            },
            {
              "name": "paths::files::HEAD",
              "kind": "const_item",
              "signature": "pub const HEAD: &str;",
              "docs": "Reference to the current branch (analogous to git's HEAD).",
              "attributes": "",
              "line": 18
            },
            {
              "name": "paths::files::IDENTITY",
              "kind": "const_item",
              "signature": "pub const IDENTITY: &str;",
              "docs": "Subdirectory holding the agent identity for this repository.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "paths::files::WEAVE",
              "kind": "const_item",
              "signature": "pub const WEAVE: &str;",
              "docs": "Subdirectory backing this repo's `WeaveNode` storage.",
              "attributes": "",
              "line": 22
            },
            {
              "name": "paths::files::REMOTES",
              "kind": "const_item",
              "signature": "pub const REMOTES: &str;",
              "docs": "File listing remotes (TOML).",
              "attributes": "",
              "line": 24
            },
            {
              "name": "paths::files::ACCESS",
              "kind": "const_item",
              "signature": "pub const ACCESS: &str;",
              "docs": "Repository access manifest (TOML).",
              "attributes": "",
              "line": 26
            },
            {
              "name": "paths::files::KEYRING",
              "kind": "const_item",
              "signature": "pub const KEYRING: &str;",
              "docs": "Wrapped repository key envelopes (TOML).",
              "attributes": "",
              "line": 28
            },
            {
              "name": "paths::files::ACCESS_PIN",
              "kind": "const_item",
              "signature": "pub const ACCESS_PIN: &str;",
              "docs": "Highest locally accepted signed access revision and trusted admins.",
              "attributes": "",
              "line": 30
            },
            {
              "name": "paths::files::ACCESS_TRANSACTION",
              "kind": "const_item",
              "signature": "pub const ACCESS_TRANSACTION: &str;",
              "docs": "Recoverable two-file transaction joining access manifest and trust pin.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "paths::files::ENCRYPTION_IDENTITY",
              "kind": "const_item",
              "signature": "pub const ENCRYPTION_IDENTITY: &str;",
              "docs": "Sealed-box encryption identity file.",
              "attributes": "",
              "line": 34
            },
            {
              "name": "paths::files::GATEWAY_TOKEN",
              "kind": "const_item",
              "signature": "pub const GATEWAY_TOKEN: &str;",
              "docs": "Local HTTP gateway bearer capability.",
              "attributes": "",
              "line": 36
            },
            {
              "name": "paths::resources",
              "kind": "module",
              "signature": "pub mod resources;",
              "docs": "Names of canonical Weave resources used by a loom repo. Stable across\nversions so existing repos remain readable.",
              "attributes": "",
              "line": 41
            },
            {
              "name": "paths::resources::COMMITS_TRACE",
              "kind": "const_item",
              "signature": "pub const COMMITS_TRACE: &str;",
              "docs": "The Strand that holds commits.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "paths::resources::BLOBS_DRIVE",
              "kind": "const_item",
              "signature": "pub const BLOBS_DRIVE: &str;",
              "docs": "The Locus drive that holds blob content (content-addressed).",
              "attributes": "",
              "line": 45
            },
            {
              "name": "paths::resources::REFS_LENS",
              "kind": "const_item",
              "signature": "pub const REFS_LENS: &str;",
              "docs": "The Lens database that holds refs (HEAD, branches, tags).",
              "attributes": "",
              "line": 47
            },
            {
              "name": "paths::resources::INDEX_LENS",
              "kind": "const_item",
              "signature": "pub const INDEX_LENS: &str;",
              "docs": "The Lens database that holds the staging index.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "paths::find_repo_root",
              "kind": "function_item",
              "signature": "pub fn find_repo_root(start: &Path) -> Result<PathBuf>;",
              "docs": "Find the loom repository root walking up from `start`.\n\nReturns the path to the directory containing `.loom/`, or\n[`LoomError::NotARepository`] if none is found before reaching the\nfilesystem root.",
              "attributes": "",
              "line": 57
            },
            {
              "name": "paths::discover",
              "kind": "function_item",
              "signature": "pub fn discover() -> Result<PathBuf>;",
              "docs": "Find the loom repo root from the current working directory.",
              "attributes": "",
              "line": 81
            },
            {
              "name": "paths::require_safe_loom_dir",
              "kind": "function_item",
              "signature": "pub fn require_safe_loom_dir(workdir: &Path) -> Result<()>;",
              "docs": "Require `.loom` to be a real directory rather than a symlink or other\nreparseable file type before any repository-owned path is opened.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "paths::access_transaction_path",
              "kind": "function_item",
              "signature": "pub fn access_transaction_path(workdir: &Path) -> PathBuf;",
              "docs": "Recoverable access manifest + trust-pin transaction journal.",
              "attributes": "",
              "line": 104
            },
            {
              "name": "paths::validate_worktree_relative_path",
              "kind": "function_item",
              "signature": "pub fn validate_worktree_relative_path(value: &str) -> Result<PathBuf>;",
              "docs": "Validate a repository-relative worktree path received from an index or\nreplicated manifest.\n\nThe private profile deliberately accepts one portable subset: forward\nslash separated normal components, no empty/dot/parent component, no\nplatform prefix, and no `.loom` metadata component.",
              "attributes": "",
              "line": 114
            },
            {
              "name": "paths::write_worktree_file",
              "kind": "function_item",
              "signature": "pub fn write_worktree_file(\n    workdir: &Path,\n    relative: &str,\n    bytes: &[u8],\n    executable: bool,\n) -> Result<PathBuf>;",
              "docs": "Write one worktree file without following an existing final symlink and\nonly after every parent resolves beneath the canonical repository root.",
              "attributes": "",
              "line": 201
            },
            {
              "name": "paths::rename_worktree_file",
              "kind": "function_item",
              "signature": "pub fn rename_worktree_file(workdir: &Path, source: &str, destination: &str) -> Result<()>;",
              "docs": "Atomically rename one regular worktree file without replacing an existing\ndestination. Both parent walks are descriptor-relative and no-follow.",
              "attributes": "",
              "line": 227
            },
            {
              "name": "paths::read_worktree_file",
              "kind": "function_item",
              "signature": "pub fn read_worktree_file(workdir: &Path, relative: &str) -> Result<Vec<u8>>;",
              "docs": "Read one worktree file after the same path and symlink-parent checks used\nfor materialization.",
              "attributes": "",
              "line": 245
            },
            {
              "name": "paths::read_worktree_file_with_mode",
              "kind": "function_item",
              "signature": "pub fn read_worktree_file_with_mode(workdir: &Path, relative: &str) -> Result<(Vec<u8>, bool)>;",
              "docs": "Read one worktree file and its executable mode from the same no-follow\ndescriptor, preventing content/mode comparisons from spanning two inodes.",
              "attributes": "",
              "line": 251
            },
            {
              "name": "paths::remove_worktree_file",
              "kind": "function_item",
              "signature": "pub fn remove_worktree_file(workdir: &Path, relative: &str) -> Result<()>;",
              "docs": "Remove one indexed worktree path without allowing parent traversal.",
              "attributes": "",
              "line": 267
            },
            {
              "name": "paths::loom_dir",
              "kind": "function_item",
              "signature": "pub fn loom_dir(workdir: &Path) -> PathBuf;",
              "docs": "Path to the `.loom/` dir given a workdir root.",
              "attributes": "",
              "line": 584
            },
            {
              "name": "paths::weave_dir",
              "kind": "function_item",
              "signature": "pub fn weave_dir(workdir: &Path) -> PathBuf;",
              "docs": "Path to the WeaveNode storage for this repo.",
              "attributes": "",
              "line": 589
            },
            {
              "name": "paths::identity_dir",
              "kind": "function_item",
              "signature": "pub fn identity_dir(workdir: &Path) -> PathBuf;",
              "docs": "Path to the identity dir.",
              "attributes": "",
              "line": 594
            },
            {
              "name": "paths::config_path",
              "kind": "function_item",
              "signature": "pub fn config_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the repo config.",
              "attributes": "",
              "line": 599
            },
            {
              "name": "paths::access_manifest_path",
              "kind": "function_item",
              "signature": "pub fn access_manifest_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the repo access manifest.",
              "attributes": "",
              "line": 604
            },
            {
              "name": "paths::keyring_path",
              "kind": "function_item",
              "signature": "pub fn keyring_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the wrapped repo keyring.",
              "attributes": "",
              "line": 609
            },
            {
              "name": "paths::access_pin_path",
              "kind": "function_item",
              "signature": "pub fn access_pin_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the local access rollback/trust pin.",
              "attributes": "",
              "line": 614
            },
            {
              "name": "paths::encryption_identity_path",
              "kind": "function_item",
              "signature": "pub fn encryption_identity_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the local sealed-box encryption identity.",
              "attributes": "",
              "line": 619
            },
            {
              "name": "paths::gateway_token_path",
              "kind": "function_item",
              "signature": "pub fn gateway_token_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the local HTTP gateway bearer capability.",
              "attributes": "",
              "line": 624
            },
            {
              "name": "paths::head_path",
              "kind": "function_item",
              "signature": "pub fn head_path(workdir: &Path) -> PathBuf;",
              "docs": "Path to the HEAD file.",
              "attributes": "",
              "line": 629
            },
            {
              "name": "paths::relativize",
              "kind": "function_item",
              "signature": "pub fn relativize(workdir: &Path, path: &Path) -> Result<PathBuf>;",
              "docs": "Strip the workdir prefix from `path` to produce a repo-relative path.\n\nReturns [`LoomError::PathOutsideRepo`] if `path` does not live within\n`workdir`.",
              "attributes": "",
              "line": 637
            }
          ],
          "parseErrors": false
        },
        {
          "module": "repo",
          "source": "sigil/weave/tools/loom/src/repo.rs",
          "sha256": "d1d5ec68a7dae5f76ab2b0f732f53fc7dba6e0c9bc74cb69f12912535af1c33d",
          "attributes": "",
          "items": [
            {
              "name": "repo::RepoConfig",
              "kind": "struct_item",
              "signature": "pub struct RepoConfig {\n/// Schema version.\n\npub version: u32,\n/// Repo-stable id (used for resource naming + replication discovery).\n\npub repo_id: String,\n/// Agent DID that signs commits in this repo.\n\npub agent_did: String,\n/// Default branch name (the branch HEAD points at on init).\n\npub default_branch: String,\n/// Optional human-readable description.\n\n#[serde(default)]\npub description: Option<String>,\n/// Encryption-at-rest for blobs. When `true`, every blob written to\n\n/// the locus is sealed with a per-blob ChaCha20-Poly1305 key derived\n\n/// from the agent identity + repo_id (see `loom-encrypt`). The\n\n/// blob_hash remains the plaintext BLAKE3 so dedup, merge, and the\n\n/// transpiler still work; only the bytes on disk and over the wire\n\n/// are opaque.\n\n#[serde(default)]\npub private: bool\n}",
              "docs": "Persisted repository configuration.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 27
            },
            {
              "name": "repo::RepoConfig::path_in",
              "kind": "function_item",
              "signature": "pub fn path_in(workdir: &Path) -> PathBuf;",
              "docs": "Path to the config file inside `.loom/`.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "repo::RepoConfig::load",
              "kind": "function_item",
              "signature": "pub fn load(workdir: &Path) -> Result<Self>;",
              "docs": "Read config from `.loom/config.toml`.",
              "attributes": "",
              "line": 56
            },
            {
              "name": "repo::RepoConfig::save",
              "kind": "function_item",
              "signature": "pub fn save(&self, workdir: &Path) -> Result<()>;",
              "docs": "Persist config to `.loom/config.toml`.",
              "attributes": "",
              "line": 63
            },
            {
              "name": "repo::Repo",
              "kind": "struct_item",
              "signature": "pub struct Repo {\n\n}",
              "docs": "Open repository \u2014 workdir + lazily-built [`WeaveNode`].",
              "attributes": "",
              "line": 76
            },
            {
              "name": "repo::RepoMutationGuard",
              "kind": "struct_item",
              "signature": "pub struct RepoMutationGuard(File);",
              "docs": "Process-scoped ownership of a repository mutation lease.",
              "attributes": "",
              "line": 85
            },
            {
              "name": "repo::Repo::open",
              "kind": "function_item",
              "signature": "pub fn open(workdir: impl Into<PathBuf>) -> Result<Self>;",
              "docs": "Open the repo rooted at `workdir`. Loads the config and identity from\ndisk but does not start the WeaveNode (call [`Repo::node`] for that).",
              "attributes": "",
              "line": 96
            },
            {
              "name": "repo::Repo::discover",
              "kind": "function_item",
              "signature": "pub fn discover() -> Result<Self>;",
              "docs": "Discover the repo by walking up from the current directory.",
              "attributes": "",
              "line": 144
            },
            {
              "name": "repo::Repo::workdir",
              "kind": "function_item",
              "signature": "pub fn workdir(&self) -> &Path;",
              "docs": "Workdir root.",
              "attributes": "",
              "line": 150
            },
            {
              "name": "repo::Repo::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &RepoConfig;",
              "docs": "Repository configuration.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "repo::Repo::identity",
              "kind": "function_item",
              "signature": "pub fn identity(&self) -> &WeaveIdentity;",
              "docs": "Signing identity for this repo.",
              "attributes": "",
              "line": 160
            },
            {
              "name": "repo::Repo::lock_mutation",
              "kind": "function_item",
              "signature": "pub fn lock_mutation(&self) -> Result<RepoMutationGuard>;",
              "docs": "Serialize every local operation that can mutate repository history,\nrefs, the staging index, HEAD, or the materialized worktree. The lease\nis filesystem-backed and therefore coordinates independent Loom\nprocesses sharing this checkout.",
              "attributes": "",
              "line": 168
            },
            {
              "name": "repo::Repo::node",
              "kind": "function_item",
              "signature": "pub async fn node(&mut self) -> Result<Arc<WeaveNode>>;",
              "docs": "Build (or return cached) WeaveNode for this repo.\n\nThe node is parameterized by the repo identity and storage dir so that\ncommits land on the same Strand and refs/index live in the same Lens\nacross runs. DHT port and bootstrap peers are read from the\nenvironment so multi-device tests can wire two nodes together\nwithout changing the porcelain:\n- `LOOM_DHT_PORT`: integer port for libp2p (default: SDK chooses).\n- `LOOM_BOOTSTRAP`: comma-separated peer multiaddrs/DIDs.",
              "attributes": "",
              "line": 196
            },
            {
              "name": "repo::Repo::resources",
              "kind": "function_item",
              "signature": "pub fn resources(&self) -> RepoResources;",
              "docs": "Read the canonical name of the resources used by this repo.",
              "attributes": "",
              "line": 362
            },
            {
              "name": "repo::Repo::commit_strands_for_replication",
              "kind": "function_item",
              "signature": "pub fn commit_strands_for_replication(&self) -> Result<Vec<String>>;",
              "docs": "Commit strands this repo should track and announce for sparse sync.",
              "attributes": "",
              "line": 504
            },
            {
              "name": "repo::Repo::ensure_resources",
              "kind": "function_item",
              "signature": "pub async fn ensure_resources(&mut self) -> Result<()>;",
              "docs": "Ensure the per-repo Weave resources exist (idempotent). Called on init\nand on first use of an existing repo whose backing dir was reset.",
              "attributes": "",
              "line": 523
            },
            {
              "name": "repo::Repo::master_key",
              "kind": "function_item",
              "signature": "pub fn master_key(&self) -> Result<Option<loom_encrypt::MasterKey>>;",
              "docs": "Open the current master encryption key for this repo. Private\nrepositories require a complete signed access profile and a keyring\nwrapped to the local encryption identity.",
              "attributes": "",
              "line": 587
            },
            {
              "name": "repo::Repo::master_keys",
              "kind": "function_item",
              "signature": "pub fn master_keys(&self) -> Result<Vec<loom_encrypt::MasterKey>>;",
              "docs": "Open every local master key epoch newest-first. This lets readers\ndecrypt old ciphertext after a member revocation rotates future keys.",
              "attributes": "",
              "line": 611
            },
            {
              "name": "repo::Repo::write_blob",
              "kind": "function_item",
              "signature": "pub async fn write_blob(&mut self, blob_hash: &str, plaintext: &[u8]) -> Result<()>;",
              "docs": "Write a blob to the repo's blobs locus. Encrypts in-place when\n`config.private`. The `/blobs` directory is created lazily.",
              "attributes": "",
              "line": 636
            },
            {
              "name": "repo::Repo::read_blob",
              "kind": "function_item",
              "signature": "pub async fn read_blob(&mut self, blob_hash: &str) -> Result<Vec<u8>>;",
              "docs": "Read a blob from the repo's blobs locus. Decrypts in-place when\n`config.private`. Returns plaintext bytes.\n\nCurrently unused at the call sites \u2014 the read paths (restore,\nswitch, diff, merge, reset, export_git) still go through\n`node.locus_read_file` directly; iteration 14 routes them\nthrough this helper so private repos decrypt transparently\neverywhere.",
              "attributes": "#[allow(dead_code)]",
              "line": 661
            },
            {
              "name": "repo::Repo::read_head",
              "kind": "function_item",
              "signature": "pub fn read_head(&self) -> Result<HeadRef>;",
              "docs": "Read the current HEAD value: either a branch name (`ref: refs/heads/main`)\nor a detached commit id (`commit:<hex>`).",
              "attributes": "",
              "line": 672
            },
            {
              "name": "repo::Repo::write_head",
              "kind": "function_item",
              "signature": "pub fn write_head(&self, head: &HeadRef) -> Result<()>;",
              "docs": "Write HEAD to point at `head`.",
              "attributes": "",
              "line": 679
            },
            {
              "name": "repo::RepoResources",
              "kind": "struct_item",
              "signature": "pub struct RepoResources {\n/// Strand that records commits.\n\npub commits_strand: String,\n/// Locus drive that holds blob contents.\n\npub blobs_drive: String,\n/// Lens DB that holds refs (HEAD, branches, tags).\n\npub refs_lens: String,\n/// Lens DB that holds the staging index.\n\npub index_lens: String\n}",
              "docs": "Names of the canonical Weave resources used by a single repo.",
              "attributes": "",
              "line": 686
            },
            {
              "name": "repo::CommitRef",
              "kind": "struct_item",
              "signature": "pub struct CommitRef {\n/// Commit strand name.\n\npub strand: String,\n/// Sequence number within `strand`.\n\npub seq: CommitSeq\n}",
              "docs": "A globally-addressable commit position. Legacy Loom refs stored only a\nsequence number because every repo had exactly one commit strand. Multi-\nwriter Loom stores need the strand name too.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 886
            },
            {
              "name": "repo::CommitRef::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: String, seq: CommitSeq) -> Self;",
              "docs": "Construct a new commit ref.",
              "attributes": "",
              "line": 895
            },
            {
              "name": "repo::CommitRef::legacy",
              "kind": "function_item",
              "signature": "pub fn legacy(seq: CommitSeq) -> Self;",
              "docs": "Construct a legacy single-writer commit ref.",
              "attributes": "",
              "line": 900
            },
            {
              "name": "repo::CommitRef::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Result<Vec<u8>>;",
              "docs": "Encode for storage in the refs lens.",
              "attributes": "",
              "line": 905
            },
            {
              "name": "repo::CommitRef::decode",
              "kind": "function_item",
              "signature": "pub fn decode(payload: &[u8]) -> Result<Self>;",
              "docs": "Decode a refs-lens payload. Plain integers are accepted for existing\nrepos and mapped to the canonical single-writer commit strand.",
              "attributes": "",
              "line": 911
            },
            {
              "name": "repo::HeadRef",
              "kind": "enum_item",
              "signature": "pub enum HeadRef {\n    /// Symbolic ref to a branch (e.g. `refs/heads/main`).\n    Symbolic(String),\n    /// Detached HEAD pointing at a commit id directly.\n    Detached(String),\n}",
              "docs": "What HEAD points at.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 927
            },
            {
              "name": "repo::HeadRef::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize(&self) -> String;",
              "docs": "On-disk representation.",
              "attributes": "",
              "line": 936
            },
            {
              "name": "repo::HeadRef::parse",
              "kind": "function_item",
              "signature": "pub fn parse(text: &str) -> Result<Self>;",
              "docs": "Parse the `.loom/HEAD` contents.",
              "attributes": "",
              "line": 944
            },
            {
              "name": "repo::HeadRef::branch_name",
              "kind": "function_item",
              "signature": "pub fn branch_name(&self) -> Option<&str>;",
              "docs": "Branch name component (e.g. `main`) for symbolic HEADs.",
              "attributes": "",
              "line": 958
            },
            {
              "name": "repo::branch_tip",
              "kind": "function_item",
              "signature": "pub async fn branch_tip(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n) -> Result<Option<CommitSeq>>;",
              "docs": "Look up the commit sequence number of a branch. Returns `None` if the\nbranch has no commits yet (newly initialized repo).",
              "attributes": "#[allow(dead_code)]",
              "line": 969
            },
            {
              "name": "repo::branch_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn branch_tip_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n) -> Result<Option<CommitRef>>;",
              "docs": "Look up the global commit ref of a branch. Returns `None` if the branch\nhas no commits yet.",
              "attributes": "",
              "line": 981
            },
            {
              "name": "repo::branch_heads_ref",
              "kind": "function_item",
              "signature": "pub async fn branch_heads_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n    candidate_strands: &[String],\n) -> Result<Vec<CommitRef>>;",
              "docs": "Resolve all currently-known heads for a branch by combining the local refs\nlens with branch metadata found in replicated writer commit strands.\n\nPrivate Loom repos are multi-writer: each writer appends to their own\nsigned strand. The local `loom.refs` lens is still useful for local\ncommands, but it cannot be the only source of branch truth after sparse\npeer replication because remote writers do not mutate this device's lens.",
              "attributes": "",
              "line": 1008
            },
            {
              "name": "repo::resolved_branch_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn resolved_branch_tip_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n    candidate_strands: &[String],\n) -> Result<Option<CommitRef>>;",
              "docs": "Resolve the newest currently-known head for a branch.",
              "attributes": "",
              "line": 1080
            },
            {
              "name": "repo::effective_branch_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn effective_branch_tip_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n    candidate_strands: &[String],\n    private: bool,\n) -> Result<Option<CommitRef>>;",
              "docs": "Resolve the effective branch tip under the repository visibility profile.\n\nPublic repositories are single-writer and retain mutable local Lens refs.\nPrivate repositories derive heads from authenticated append-only writer\nstrands; local Lens state is only a cache and never overrides replication.",
              "attributes": "",
              "line": 1097
            },
            {
              "name": "repo::resolve_head_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn resolve_head_tip_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    head: &HeadRef,\n    candidate_strands: &[String],\n    private: bool,\n) -> Result<Option<CommitRef>>;",
              "docs": "Resolve the effective commit that HEAD points at, including replicated\nprivate writer strands that have not updated this device's refs lens.",
              "attributes": "",
              "line": 1113
            },
            {
              "name": "repo::resolve_commitish_ref",
              "kind": "function_item",
              "signature": "pub async fn resolve_commitish_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    head: &HeadRef,\n    target: &str,\n    candidate_strands: &[String],\n    private: bool,\n) -> Result<Option<CommitRef>>;",
              "docs": "Resolve a user-facing commit-ish value.\n\nSupports `HEAD`, branch names, numeric sequence numbers on the current\neffective head's strand, and unique commit hash prefixes reachable from the\ncurrent effective branch heads.",
              "attributes": "",
              "line": 1139
            },
            {
              "name": "repo::commit_parent_refs",
              "kind": "function_item",
              "signature": "pub fn commit_parent_refs(current: &CommitRef, commit: &Commit) -> Vec<CommitRef>;",
              "docs": "Parent refs for a commit, filling legacy same-strand parents when needed.",
              "attributes": "",
              "line": 1309
            },
            {
              "name": "repo::set_branch_tip",
              "kind": "function_item",
              "signature": "pub async fn set_branch_tip(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n    seq: CommitSeq,\n) -> Result<()>;",
              "docs": "Update a branch ref to point at `seq`.",
              "attributes": "#[allow(dead_code)]",
              "line": 1327
            },
            {
              "name": "repo::set_branch_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn set_branch_tip_ref(\n    node: &WeaveNode,\n    refs_lens: &str,\n    branch: &str,\n    reference: &CommitRef,\n) -> Result<()>;",
              "docs": "Update a branch ref to point at `reference`.",
              "attributes": "",
              "line": 1337
            },
            {
              "name": "repo::delete_branch_tip_ref",
              "kind": "function_item",
              "signature": "pub async fn delete_branch_tip_ref(node: &WeaveNode, refs_lens: &str, branch: &str) -> Result<()>;",
              "docs": "Delete a single-writer branch without allowing history scans to resurrect\nthe branch. The tombstone is written first, so a failed ref deletion remains\nsafely hidden.",
              "attributes": "",
              "line": 1368
            },
            {
              "name": "repo::open_user_node",
              "kind": "function_item",
              "signature": "pub async fn open_user_node() -> Result<Arc<WeaveNode>>;",
              "docs": "Open (or create) the user-wide WeaveNode at `~/.loom/weave/`. This\nnode is **shared across every loom repo for a single human user\nand holds the global namespaces:\n\n- `loom.registry` \u2014 every repo this user has published\n- `loom.mandates` \u2014 every mandate this user has been issued (or\n  has issued to others)\n- `loom.mars` \u2014 cached MARS anchors for repos the user has seen\n\nPer-repo state (commits strand, refs lens, index lens, blobs locus,\nPR store) still lives in each repo's own WeaveNode under\n`<workdir>/.loom/weave/`. The user-wide node and the per-repo node\nshare the same `WeaveIdentity` (loaded from `~/.loom/identity/`)\nso a single agent DID can author commits in any repo and own the\nglobal registry simultaneously.\n\nFirst call generates a fresh user identity if one isn't already on\ndisk; subsequent calls re-use it.",
              "attributes": "",
              "line": 1397
            },
            {
              "name": "repo::read_blob_via",
              "kind": "function_item",
              "signature": "pub async fn read_blob_via(\n    node: &WeaveNode,\n    blobs_drive: &str,\n    mek: Option<&loom_encrypt::MasterKey>,\n    blob_hash: &str,\n) -> Result<Vec<u8>>;",
              "docs": "Read a blob from the locus, decrypting if `mek` is `Some`. This free\nfunction exists so command modules that already hold a `&WeaveNode`\n(and not a `&mut Repo`) can transparently support private repos\nwithout restructuring their borrows.",
              "attributes": "#[allow(dead_code)]",
              "line": 1429
            },
            {
              "name": "repo::read_blob_via_keys",
              "kind": "function_item",
              "signature": "pub async fn read_blob_via_keys(\n    node: &WeaveNode,\n    blobs_drive: &str,\n    meks: &[loom_encrypt::MasterKey],\n    blob_hash: &str,\n) -> Result<Vec<u8>>;",
              "docs": "Read a blob from the locus, decrypting with any local repo-key epoch.",
              "attributes": "",
              "line": 1440
            },
            {
              "name": "repo::read_blob_via_keys_or_commits",
              "kind": "function_item",
              "signature": "pub async fn read_blob_via_keys_or_commits(\n    node: &WeaveNode,\n    blobs_drive: &str,\n    commit_strands: &[String],\n    meks: &[loom_encrypt::MasterKey],\n    blob_hash: &str,\n) -> Result<Vec<u8>>;",
              "docs": "Read a blob from the local Locus drive, falling back to sparse payloads\nembedded in replicated commit strands. The fallback is what lets private\nmulti-writer repos materialize remote commits without mixing unrelated\nwriters into one Locus writer key.",
              "attributes": "",
              "line": 1455
            },
            {
              "name": "repo::read_commit",
              "kind": "function_item",
              "signature": "pub async fn read_commit(node: &WeaveNode, commits_strand: &str, seq: CommitSeq) -> Result<Commit>;",
              "docs": "Read a commit object from the strand.",
              "attributes": "",
              "line": 1529
            },
            {
              "name": "repo::read_commit_ref",
              "kind": "function_item",
              "signature": "pub async fn read_commit_ref(node: &WeaveNode, reference: &CommitRef) -> Result<Commit>;",
              "docs": "Read a commit object from a global commit ref.",
              "attributes": "",
              "line": 1546
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-dht",
      "version": "1.1.0",
      "source": "sigil/weave/network/weave-dht",
      "manifestSha256": "fc4874935202a3b2188c83ebedaeb7b8cb2442666e61f09ce2135493b4a05bdb",
      "features": {
        "default": [],
        "rocksdb-store": [
          "rocksdb"
        ],
        "testhooks": []
      },
      "publish": true,
      "url": "/reference/rust/weave-dht",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/network/weave-dht/src/lib.rs",
          "sha256": "3bf71679acf54a672835d3c3440d7a59ac0e0411c6e830615638d51996ad6116",
          "attributes": "",
          "items": [
            {
              "name": "private_route_v1",
              "kind": "module",
              "signature": "pub mod private_route_v1;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "route_v1",
              "kind": "module",
              "signature": "pub mod route_v1;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "pub use enhanced::EnhancedDhtNode;",
              "kind": "use_declaration",
              "signature": "pub use enhanced::EnhancedDhtNode;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "pub use envelope::{validate_envelope, DidEnvelope, Proof};",
              "kind": "use_declaration",
              "signature": "pub use envelope::{validate_envelope, DidEnvelope, Proof};",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "pub use methods::{AdapterRegistry, DhtMethodAdapter, MarsAdapter, MarsConfig, MethodAdapter};",
              "kind": "use_declaration",
              "signature": "pub use methods::{AdapterRegistry, DhtMethodAdapter, MarsAdapter, MarsConfig, MethodAdapter};",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "pub use relay::{RelayConfig as LocalRelayConfig, RelayProtocol, SessionId};",
              "kind": "use_declaration",
              "signature": "pub use relay::{RelayConfig as LocalRelayConfig, RelayProtocol, SessionId};",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "pub use store_usage_demo::demo_rocksdb_store_usage;",
              "kind": "use_declaration",
              "signature": "pub use store_usage_demo::demo_rocksdb_store_usage;",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 76
            },
            {
              "name": "pub use store_usage_demo::{demo_memory_store_usage, demo_store_factory_usage};",
              "kind": "use_declaration",
              "signature": "pub use store_usage_demo::{demo_memory_store_usage, demo_store_factory_usage};",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "pub use weave::{\n    AnnounceOpts, AnnouncementState, MutableValue, PeerInfo, WeaveDht, WeaveDhtAdapter,\n    WeaveDhtConfig,\n};",
              "kind": "use_declaration",
              "signature": "pub use weave::{\n    AnnounceOpts, AnnouncementState, MutableValue, PeerInfo, WeaveDht, WeaveDhtAdapter,\n    WeaveDhtConfig,\n};",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "key_utils::did_key",
              "kind": "function_item",
              "signature": "pub fn did_key(did: &str) -> Key;",
              "docs": "Convenience helper \u2013 converts an agent DID into the standard `/oas/{did}` record key.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "key_utils::did_env_key",
              "kind": "function_item",
              "signature": "pub fn did_env_key(did: &str) -> Key;",
              "docs": "Envelope record key `/oas-env/{did}`",
              "attributes": "",
              "line": 98
            },
            {
              "name": "key_utils::RecordKey",
              "kind": "type_item",
              "signature": "pub type RecordKey = Key;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "pub use key_utils::{did_env_key, did_key, RecordKey};",
              "kind": "use_declaration",
              "signature": "pub use key_utils::{did_env_key, did_key, RecordKey};",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "::DhtHandle",
              "kind": "struct_item",
              "signature": "pub struct DhtHandle {\n\n}",
              "docs": "Cloneable handle for interacting with the DHT task.",
              "attributes": "#[derive(Clone)]",
              "line": 143
            },
            {
              "name": "::DhtHandle::get_record",
              "kind": "function_item",
              "signature": "pub async fn get_record(&self, key: Key) -> Result<Option<Vec<u8>>>;",
              "docs": "Retrieve a record value by key.",
              "attributes": "",
              "line": 149
            },
            {
              "name": "::DhtHandle::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, key: Key) -> Result<Option<Vec<u8>>>;",
              "docs": "Convenience method using the old name",
              "attributes": "",
              "line": 156
            },
            {
              "name": "::DhtHandle::put_record",
              "kind": "function_item",
              "signature": "pub async fn put_record(&self, key: Key, value: Vec<u8>) -> Result<()>;",
              "docs": "Publish a record to the DHT.",
              "attributes": "",
              "line": 161
            },
            {
              "name": "::DhtHandle::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, key: Key, value: Vec<u8>) -> Result<()>;",
              "docs": "Convenience method using the old name",
              "attributes": "",
              "line": 174
            },
            {
              "name": "::DhtHandle::add_address",
              "kind": "function_item",
              "signature": "pub fn add_address(&self, peer_id: &libp2p::PeerId, addr: libp2p::Multiaddr);",
              "docs": "Add a known address for a peer",
              "attributes": "",
              "line": 179
            },
            {
              "name": "::DhtHandle::list_peers",
              "kind": "function_item",
              "signature": "pub async fn list_peers(&self) -> Result<Vec<String>>;",
              "docs": "List connected peers",
              "attributes": "",
              "line": 187
            },
            {
              "name": "::DhtHandle::list_listeners",
              "kind": "function_item",
              "signature": "pub async fn list_listeners(&self) -> Result<Vec<String>>;",
              "docs": "List current listen addresses",
              "attributes": "",
              "line": 195
            },
            {
              "name": "::DhtHandle::store_stats",
              "kind": "function_item",
              "signature": "pub async fn store_stats(&self) -> Result<(Option<u64>, Option<u64>, u64, u64)>;",
              "docs": "Get RocksDB store stats: (approx_bytes, max_bytes, record_ttl_secs, provider_ttl_secs)",
              "attributes": "",
              "line": 205
            },
            {
              "name": "::DhtHandle::get_dcutr_count",
              "kind": "function_item",
              "signature": "pub async fn get_dcutr_count(&self) -> Result<u64>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"testhooks\")]",
              "line": 214
            },
            {
              "name": "::DhtNode",
              "kind": "struct_item",
              "signature": "pub struct DhtNode {\n\n}",
              "docs": "Running node instance \u2013 mainly a wrapper that keeps the handle alive.",
              "attributes": "",
              "line": 224
            },
            {
              "name": "::DhtNode::handle",
              "kind": "function_item",
              "signature": "pub fn handle(&self) -> DhtHandle;",
              "docs": "",
              "attributes": "",
              "line": 232
            },
            {
              "name": "::DhtNode::peer_id",
              "kind": "function_item",
              "signature": "pub fn peer_id(&self) -> libp2p::PeerId;",
              "docs": "",
              "attributes": "",
              "line": 236
            },
            {
              "name": "::DhtNode::listen_port",
              "kind": "function_item",
              "signature": "pub fn listen_port(&self) -> u16;",
              "docs": "",
              "attributes": "",
              "line": 240
            },
            {
              "name": "::DhtNode::builder",
              "kind": "function_item",
              "signature": "pub fn builder() -> DhtNodeBuilder;",
              "docs": "",
              "attributes": "",
              "line": 244
            },
            {
              "name": "::DhtNode::into_enhanced",
              "kind": "function_item",
              "signature": "pub fn into_enhanced(\n        self,\n        weave_config: WeaveDhtConfig,\n        relay_config: LocalRelayConfig,\n    ) -> EnhancedDhtNode;",
              "docs": "Create an enhanced node with Weave compatibility",
              "attributes": "",
              "line": 249
            },
            {
              "name": "::DhtNodeBuilder",
              "kind": "struct_item",
              "signature": "pub struct DhtNodeBuilder {\n\n}",
              "docs": "Builder for configuring a DHT node.",
              "attributes": "",
              "line": 265
            },
            {
              "name": "::DhtNodeBuilder::bootstrap_peers",
              "kind": "function_item",
              "signature": "pub fn bootstrap_peers(mut self, peers: Vec<String>) -> Self;",
              "docs": "Provide bootstrap peer multiaddrs (\"/ip4/\u2026/p2p/\u2026\").",
              "attributes": "",
              "line": 300
            },
            {
              "name": "::DhtNodeBuilder::in_memory",
              "kind": "function_item",
              "signature": "pub fn in_memory(mut self) -> Self;",
              "docs": "Run in-memory only (no external transport) \u2013 useful for unit tests.",
              "attributes": "",
              "line": 306
            },
            {
              "name": "::DhtNodeBuilder::listen_port",
              "kind": "function_item",
              "signature": "pub fn listen_port(mut self, port: u16) -> Self;",
              "docs": "Set specific listen port",
              "attributes": "",
              "line": 312
            },
            {
              "name": "::DhtNodeBuilder::mdns",
              "kind": "function_item",
              "signature": "pub fn mdns(mut self, enabled: bool) -> Self;",
              "docs": "Enable or disable local mDNS peer discovery.",
              "attributes": "",
              "line": 318
            },
            {
              "name": "::DhtNodeBuilder::with_weave",
              "kind": "function_item",
              "signature": "pub fn with_weave(mut self, config: WeaveDhtConfig) -> Self;",
              "docs": "Enable Weave compatibility",
              "attributes": "",
              "line": 324
            },
            {
              "name": "::DhtNodeBuilder::with_relay",
              "kind": "function_item",
              "signature": "pub fn with_relay(mut self, config: LocalRelayConfig) -> Self;",
              "docs": "Enable relay protocol",
              "attributes": "",
              "line": 330
            },
            {
              "name": "::DhtNodeBuilder::relay_peers",
              "kind": "function_item",
              "signature": "pub fn relay_peers(mut self, peers: Vec<String>) -> Self;",
              "docs": "Provide relay peer multiaddrs for circuit reservations",
              "attributes": "",
              "line": 336
            },
            {
              "name": "::DhtNodeBuilder::store_path",
              "kind": "function_item",
              "signature": "pub fn store_path(mut self, path: impl Into<String>) -> Self;",
              "docs": "Configure persistent store path and limits",
              "attributes": "",
              "line": 342
            },
            {
              "name": "::DhtNodeBuilder::max_disk_bytes",
              "kind": "function_item",
              "signature": "pub fn max_disk_bytes(mut self, max: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 346
            },
            {
              "name": "::DhtNodeBuilder::record_ttl_secs",
              "kind": "function_item",
              "signature": "pub fn record_ttl_secs(mut self, secs: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 350
            },
            {
              "name": "::DhtNodeBuilder::provider_ttl_secs",
              "kind": "function_item",
              "signature": "pub fn provider_ttl_secs(mut self, secs: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 354
            },
            {
              "name": "::DhtNodeBuilder::start",
              "kind": "function_item",
              "signature": "pub async fn start(self) -> Result<DhtNode>;",
              "docs": "Starts the node, spawning the swarm task onto the tokio runtime.",
              "attributes": "",
              "line": 360
            },
            {
              "name": "::set_global_handle",
              "kind": "function_item",
              "signature": "pub fn set_global_handle(handle: DhtHandle);",
              "docs": "",
              "attributes": "",
              "line": 959
            },
            {
              "name": "::global_handle",
              "kind": "function_item",
              "signature": "pub fn global_handle() -> Option<DhtHandle>;",
              "docs": "",
              "attributes": "",
              "line": 963
            },
            {
              "name": "::DhtConfig",
              "kind": "struct_item",
              "signature": "pub struct DhtConfig {\npub bootstrap_nodes: Vec<String>,\npub port: u16\n}",
              "docs": "Configuration for DHT client",
              "attributes": "",
              "line": 968
            },
            {
              "name": "::DhtConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(bootstrap_nodes: Vec<String>, port: u16) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 974
            },
            {
              "name": "::DhtClient",
              "kind": "struct_item",
              "signature": "pub struct DhtClient {\n\n}",
              "docs": "DHT client for publishing and resolving DID documents",
              "attributes": "",
              "line": 992
            },
            {
              "name": "::DhtClient::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: DhtConfig) -> Result<Self>;",
              "docs": "Create a new DHT client with configuration",
              "attributes": "",
              "line": 998
            },
            {
              "name": "::DhtClient::publish_did_document",
              "kind": "function_item",
              "signature": "pub async fn publish_did_document(\n        &mut self,\n        did: &str,\n        document: &oas_document::OasDocument,\n    ) -> Result<()>;",
              "docs": "Publish a DID document to the DHT",
              "attributes": "",
              "line": 1011
            },
            {
              "name": "::DhtClient::resolve_did_document",
              "kind": "function_item",
              "signature": "pub async fn resolve_did_document(&mut self, did: &str) -> Result<oas_document::OasDocument>;",
              "docs": "Resolve a DID document from the DHT",
              "attributes": "",
              "line": 1023
            },
            {
              "name": "::DhtClient::handle",
              "kind": "function_item",
              "signature": "pub fn handle(&self) -> &DhtHandle;",
              "docs": "Get the underlying DHT handle",
              "attributes": "",
              "line": 1036
            }
          ],
          "parseErrors": false
        },
        {
          "module": "enhanced",
          "source": "sigil/weave/network/weave-dht/src/enhanced.rs",
          "sha256": "ebe8383fd7e95556cf4f04ea863734fbfa5f0bafd7ee5362129c85a48c7de2e8",
          "attributes": "",
          "items": [
            {
              "name": "enhanced::EnhancedDhtNode",
              "kind": "struct_item",
              "signature": "pub struct EnhancedDhtNode {\n\n}",
              "docs": "Enhanced DHT node with Weave compatibility",
              "attributes": "",
              "line": 21
            },
            {
              "name": "enhanced::EnhancedDhtNode::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        dht_handle: DhtHandle,\n        peer_id: PeerId,\n        listen_port: u16,\n        weave_config: WeaveDhtConfig,\n        relay_config: LocalRelayConfig,\n    ) -> Self;",
              "docs": "Create enhanced DHT node",
              "attributes": "",
              "line": 40
            },
            {
              "name": "enhanced::EnhancedDhtNode::bootstrap_weave",
              "kind": "function_item",
              "signature": "pub async fn bootstrap_weave(&mut self, nodes: Vec<String>) -> Result<()>;",
              "docs": "Bootstrap from Weave network",
              "attributes": "",
              "line": 371
            },
            {
              "name": "enhanced::EnhancedDhtNode::handle_relay_request",
              "kind": "function_item",
              "signature": "pub async fn handle_relay_request(\n        &self,\n        from: PeerId,\n        to: PeerId,\n        token: [u8; 32],\n    ) -> Result<SessionId>;",
              "docs": "Handle relay request",
              "attributes": "",
              "line": 397
            },
            {
              "name": "enhanced::EnhancedDhtNode::relay_data",
              "kind": "function_item",
              "signature": "pub async fn relay_data(\n        &self,\n        session_id: SessionId,\n        data: &[u8],\n        from_peer: PeerId,\n    ) -> Result<()>;",
              "docs": "Relay data",
              "attributes": "",
              "line": 407
            },
            {
              "name": "enhanced::EnhancedDhtNode::close_relay_session",
              "kind": "function_item",
              "signature": "pub fn close_relay_session(&self, session_id: SessionId);",
              "docs": "Close relay session",
              "attributes": "",
              "line": 417
            },
            {
              "name": "enhanced::PeerInfo::from_libp2p",
              "kind": "function_item",
              "signature": "pub fn from_libp2p(peer_id: PeerId, addrs: Vec<Multiaddr>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 424
            },
            {
              "name": "enhanced::PeerInfo::to_libp2p",
              "kind": "function_item",
              "signature": "pub fn to_libp2p(&self) -> Result<(PeerId, Vec<Multiaddr>)>;",
              "docs": "",
              "attributes": "",
              "line": 455
            }
          ],
          "parseErrors": false
        },
        {
          "module": "envelope",
          "source": "sigil/weave/network/weave-dht/src/envelope.rs",
          "sha256": "7995ceb4015b6a257f89e0a08d5c40008292ef82b946976adbcc67ac204bc686",
          "attributes": "",
          "items": [
            {
              "name": "envelope::Proof",
              "kind": "struct_item",
              "signature": "pub struct Proof {\n#[serde(rename = \"type\")]\npub proof_type: String,\n#[serde(rename = \"proofPurpose\")]\npub proof_purpose: String,\n#[serde(rename = \"verificationMethod\")]\npub verification_method: String,\npub jws: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "envelope::DidEnvelope",
              "kind": "struct_item",
              "signature": "pub struct DidEnvelope {\npub version: u64,\npub did: String,\npub sequence: u64,\npub timestamp: String,\n#[serde(default)]\npub previous_hash: Option<String>,\npub controller: Vec<String>,\npub document: serde_json::Value,\npub proof: Proof\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "envelope::canonicalize_jcs",
              "kind": "function_item",
              "signature": "pub fn canonicalize_jcs(value: &serde_json::Value) -> Result<Vec<u8>>;",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "envelope::verify_envelope_sig",
              "kind": "function_item",
              "signature": "pub fn verify_envelope_sig(env: &DidEnvelope) -> Result<bool>;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "envelope::validate_envelope",
              "kind": "function_item",
              "signature": "pub fn validate_envelope(\n    env: &DidEnvelope,\n    cfg: &WeaveDhtConfig,\n    last_seq: Option<u64>,\n) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 88
            }
          ],
          "parseErrors": false
        },
        {
          "module": "methods",
          "source": "sigil/weave/network/weave-dht/src/methods.rs",
          "sha256": "0b8679ed260328e2897efb441787e57342a500e638b9924647240e778e464d77",
          "attributes": "",
          "items": [
            {
              "name": "methods::MethodAdapter",
              "kind": "trait_item",
              "signature": "pub trait MethodAdapter: Send + Sync {\n    fn name(&self) -> &'static str;\n    async fn publish(&self, envelope: &DidEnvelope) -> Result<()>;\n    async fn resolve(&self, did: &str) -> Result<Option<DidEnvelope>>;\n}",
              "docs": "",
              "attributes": "#[async_trait]",
              "line": 12
            },
            {
              "name": "methods::AdapterRegistry",
              "kind": "struct_item",
              "signature": "pub struct AdapterRegistry {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "methods::AdapterRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "methods::AdapterRegistry::register",
              "kind": "function_item",
              "signature": "pub fn register(&self, adapter: Arc<dyn MethodAdapter>);",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "methods::AdapterRegistry::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<Arc<dyn MethodAdapter>>;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "methods::DhtMethodAdapter",
              "kind": "struct_item",
              "signature": "pub struct DhtMethodAdapter {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "methods::DhtMethodAdapter::new",
              "kind": "function_item",
              "signature": "pub fn new(handle: DhtHandle, config: WeaveDhtConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "methods::MarsConfig",
              "kind": "struct_item",
              "signature": "pub struct MarsConfig {\npub endpoint: String,\npub bearer_token: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 79
            },
            {
              "name": "methods::MarsAdapter",
              "kind": "struct_item",
              "signature": "pub struct MarsAdapter {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "methods::MarsAdapter::new",
              "kind": "function_item",
              "signature": "pub fn new(dht: DhtMethodAdapter, mars: Option<MarsConfig>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 90
            }
          ],
          "parseErrors": false
        },
        {
          "module": "private_route_v1",
          "source": "sigil/weave/network/weave-dht/src/private_route_v1.rs",
          "sha256": "ea6d6f8224766f6c2312cd4255f5ed3faf51d05ea71c474509c441c145177ecc",
          "attributes": "",
          "items": [
            {
              "name": "private_route_v1::PRIVATE_ENVELOPE_VERSION",
              "kind": "const_item",
              "signature": "pub const PRIVATE_ENVELOPE_VERSION: u64;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "private_route_v1::ROUTE_SLOT_WIDTH_MS",
              "kind": "const_item",
              "signature": "pub const ROUTE_SLOT_WIDTH_MS: u64;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "private_route_v1::MAX_PRIVATE_LEASE_SLOTS",
              "kind": "const_item",
              "signature": "pub const MAX_PRIVATE_LEASE_SLOTS: u64;",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "private_route_v1::PRIVATE_PADDING_BUCKETS",
              "kind": "const_item",
              "signature": "pub const PRIVATE_PADDING_BUCKETS: [usize; 6];",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "private_route_v1::LOOKUP_DOMAIN",
              "kind": "const_item",
              "signature": "pub const LOOKUP_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "private_route_v1::EPOCH_HINT_DOMAIN",
              "kind": "const_item",
              "signature": "pub const EPOCH_HINT_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "private_route_v1::AEAD_KEY_CONTEXT",
              "kind": "const_item",
              "signature": "pub const AEAD_KEY_CONTEXT: &str;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "private_route_v1::KEY_SET_DIGEST_DOMAIN",
              "kind": "const_item",
              "signature": "pub const KEY_SET_DIGEST_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "private_route_v1::EPOCH_HANDLE_DOMAIN",
              "kind": "const_item",
              "signature": "pub const EPOCH_HANDLE_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "private_route_v1::ScopedDiscoverySecretsV1",
              "kind": "struct_item",
              "signature": "pub struct ScopedDiscoverySecretsV1 {\npub privacy_epoch: u64,\npub privacy_profile: PrivacyProfile\n}",
              "docs": "Application-supplied discovery keys for one immutable privacy epoch.\n\nThe keys are zeroized on drop. The constructor rejects public profiles and\nidentical lookup/encryption keys, but the application integration remains\nresponsible for ensuring neither key is a repository MEK, application\nauthentication key, DID, writer key, or raw scope identifier.",
              "attributes": "",
              "line": 44
            },
            {
              "name": "private_route_v1::ScopedDiscoverySecretsV1::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        lookup_key: [u8; 32],\n        encryption_key: [u8; 32],\n        privacy_epoch: u64,\n        privacy_profile: PrivacyProfile,\n    ) -> Result<Self, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "private_route_v1::ScopedDiscoverySecretsV1::discovery_key_set_digest",
              "kind": "function_item",
              "signature": "pub fn discovery_key_set_digest(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "private_route_v1::ScopedDiscoverySecretsV1::lookup_tag",
              "kind": "function_item",
              "signature": "pub fn lookup_tag(&self, route_slot: u32) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "private_route_v1::ScopedDiscoverySecretsV1::epoch_hint",
              "kind": "function_item",
              "signature": "pub fn epoch_hint(&self, route_slot: u32) -> [u8; 8];",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "private_route_v1::PaddingClass",
              "kind": "enum_item",
              "signature": "pub enum PaddingClass {\n    KiB1 = 0,\n    KiB2 = 1,\n    KiB4 = 2,\n    KiB8 = 3,\n    KiB16 = 4,\n    KiB32 = 5,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 92
            },
            {
              "name": "private_route_v1::PaddingClass::bucket_bytes",
              "kind": "function_item",
              "signature": "pub fn bucket_bytes(self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 102
            },
            {
              "name": "private_route_v1::PrivateRouteEnvelopeV1",
              "kind": "struct_item",
              "signature": "pub struct PrivateRouteEnvelopeV1 {\npub lookup_tag: [u8; 32],\npub slot_epoch_hint: [u8; 8],\npub issued_bucket: u64,\npub expires_bucket: u64,\npub padding_class: PaddingClass,\npub nonce: [u8; 24],\npub ciphertext: Vec<u8>,\npub authenticator: [u8; 16]\n}",
              "docs": "",
              "attributes": "#[derive(Clone, PartialEq, Eq)]",
              "line": 130
            },
            {
              "name": "private_route_v1::PrivateLeasePolicy",
              "kind": "trait_item",
              "signature": "pub trait PrivateLeasePolicy {\n    fn accepts(&self, issued_bucket: u64, expires_bucket: u64) -> bool;\n}",
              "docs": "Application/operator-owned slot policy.\n\nThe codec enforces only the frozen structural rule (`expires > issued` and\nat most two 10-minute slots). Wall-clock skew, readable epochs, publication\njitter, and local lease state are intentionally supplied by the later D3a\nprovider integration through this boundary.",
              "attributes": "",
              "line": 159
            },
            {
              "name": "private_route_v1::PrivateRouteEnvelopeV1::open_and_validate",
              "kind": "function_item",
              "signature": "pub fn open_and_validate<P>(\n        wire: &[u8],\n        secrets: &ScopedDiscoverySecretsV1,\n        lease_policy: &P,\n        route_context: &RouteValidationContext,\n    ) -> Result<PeerRouteSetV1, Protocol1CodecError>\n    where\n        P: PrivateLeasePolicy,;",
              "docs": "",
              "attributes": "",
              "line": 173
            },
            {
              "name": "private_route_v1::PrivateRouteEnvelopeV1::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Result<Vec<u8>, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 277
            },
            {
              "name": "private_route_v1::route_slot_for_time",
              "kind": "function_item",
              "signature": "pub fn route_slot_for_time(publication_time_ms: u64) -> Result<u32, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 371
            },
            {
              "name": "private_route_v1::reader_slots",
              "kind": "function_item",
              "signature": "pub fn reader_slots(current_slot: u32) -> [Option<u32>; 3];",
              "docs": "",
              "attributes": "",
              "line": 376
            },
            {
              "name": "private_route_v1::privacy_epoch_handle",
              "kind": "function_item",
              "signature": "pub fn privacy_epoch_handle(\n    privacy_compartment_ref: &[u8; 32],\n    privacy_epoch: u64,\n    allowed_scope_set_digest: &[u8; 32],\n    discovery_key_set_digest: &[u8; 32],\n) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 421
            },
            {
              "name": "private_route_v1::select_padding_length_for_header",
              "kind": "function_item",
              "signature": "pub fn select_padding_length_for_header(\n    content_length: usize,\n    issued_bucket: u64,\n    expires_bucket: u64,\n) -> Result<(PaddingClass, usize), Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 436
            }
          ],
          "parseErrors": false
        },
        {
          "module": "relay",
          "source": "sigil/weave/network/weave-dht/src/relay.rs",
          "sha256": "2170cf1dc8c6ca3221494228b13ff18db87fbbda445e18af5350dcc1346426b2",
          "attributes": "",
          "items": [
            {
              "name": "relay::SessionId",
              "kind": "struct_item",
              "signature": "pub struct SessionId(Uuid);",
              "docs": "Session ID type",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "relay::SessionId::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "relay::RelaySession",
              "kind": "struct_item",
              "signature": "pub struct RelaySession {\npub id: SessionId,\npub from: PeerId,\npub to: PeerId,\npub created: Instant,\npub bytes_relayed: u64\n}",
              "docs": "Relay session",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 32
            },
            {
              "name": "relay::RelayConfig",
              "kind": "struct_item",
              "signature": "pub struct RelayConfig {\n/// Allow this node to relay\n\npub allow_relay: bool,\n/// Maximum concurrent sessions\n\npub max_sessions: usize,\n/// Session timeout\n\npub session_timeout: Duration,\n/// Maximum bytes per session\n\npub max_bytes_per_session: u64,\n/// Rate limit per peer\n\npub rate_limit_per_peer: Option<u64>\n}",
              "docs": "Relay protocol configuration",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 42
            },
            {
              "name": "relay::RelayProtocol",
              "kind": "struct_item",
              "signature": "pub struct RelayProtocol {\n\n}",
              "docs": "Relay protocol handler",
              "attributes": "",
              "line": 72
            },
            {
              "name": "relay::RelayProtocol::new",
              "kind": "function_item",
              "signature": "pub fn new(config: RelayConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "relay::RelayProtocol::handle_relay_request",
              "kind": "function_item",
              "signature": "pub async fn handle_relay_request(\n        &self,\n        from: PeerId,\n        to: PeerId,\n        _token: [u8; 32],\n    ) -> Result<SessionId>;",
              "docs": "Handle relay request",
              "attributes": "",
              "line": 128
            },
            {
              "name": "relay::RelayProtocol::relay_data",
              "kind": "function_item",
              "signature": "pub async fn relay_data(\n        &self,\n        session_id: SessionId,\n        data: &[u8],\n        from_peer: PeerId,\n    ) -> Result<()>;",
              "docs": "Relay data for a session",
              "attributes": "",
              "line": 175
            },
            {
              "name": "relay::RelayProtocol::close_session",
              "kind": "function_item",
              "signature": "pub fn close_session(&self, session_id: SessionId);",
              "docs": "Close a relay session",
              "attributes": "",
              "line": 210
            },
            {
              "name": "relay::RelayProtocol::active_sessions",
              "kind": "function_item",
              "signature": "pub fn active_sessions(&self) -> usize;",
              "docs": "Get active session count",
              "attributes": "",
              "line": 231
            },
            {
              "name": "relay::RelayProtocol::cleanup_expired",
              "kind": "function_item",
              "signature": "pub fn cleanup_expired(&self);",
              "docs": "Clean up expired sessions",
              "attributes": "",
              "line": 236
            }
          ],
          "parseErrors": false
        },
        {
          "module": "route_v1",
          "source": "sigil/weave/network/weave-dht/src/route_v1.rs",
          "sha256": "ff9516473dd9c99207754349f893a592f0caf360500a5567e3f5eb4e6cdab02d",
          "attributes": "",
          "items": [
            {
              "name": "route_v1::ROUTE_SET_VERSION",
              "kind": "const_item",
              "signature": "pub const ROUTE_SET_VERSION: u64;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "route_v1::MAX_ROUTE_SET_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_ROUTE_SET_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "route_v1::MAX_PRIVATE_INNER_ROUTE_SET_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_PRIVATE_INNER_ROUTE_SET_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "route_v1::MAX_ROUTE_CANDIDATES",
              "kind": "const_item",
              "signature": "pub const MAX_ROUTE_CANDIDATES: usize;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "route_v1::MAX_SUPPORTED_PROTOCOLS",
              "kind": "const_item",
              "signature": "pub const MAX_SUPPORTED_PROTOCOLS: usize;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "route_v1::MAX_TRANSPORT_PEER_ID_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_TRANSPORT_PEER_ID_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "route_v1::MAX_MULTIADDR_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_MULTIADDR_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "route_v1::MAX_OPERATOR_DOMAIN_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_OPERATOR_DOMAIN_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "route_v1::MAX_PROTOCOL_ID_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_PROTOCOL_ID_BYTES: usize;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "route_v1::MAX_ROUTE_LIFETIME_MS",
              "kind": "const_item",
              "signature": "pub const MAX_ROUTE_LIFETIME_MS: u64;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "route_v1::ALLOCATED_FEATURES_MASK",
              "kind": "const_item",
              "signature": "pub const ALLOCATED_FEATURES_MASK: u64;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "route_v1::ALLOCATED_SERVICE_ROLES_MASK",
              "kind": "const_item",
              "signature": "pub const ALLOCATED_SERVICE_ROLES_MASK: u16;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "route_v1::ROUTE_SIGNATURE_DOMAIN",
              "kind": "const_item",
              "signature": "pub const ROUTE_SIGNATURE_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "route_v1::ROUTE_SET_DIGEST_DOMAIN",
              "kind": "const_item",
              "signature": "pub const ROUTE_SET_DIGEST_DOMAIN: &[u8];",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "route_v1::Protocol1CodecError",
              "kind": "enum_item",
              "signature": "pub enum Protocol1CodecError {\n    #[error(\"malformed Protocol 1.0 data\")]\n    Malformed,\n    #[error(\"noncanonical Protocol 1.0 data\")]\n    NonCanonical,\n    #[error(\"unknown or missing fixed-schema field\")]\n    UnknownOrMissingField,\n    #[error(\"Protocol 1.0 resource bound exceeded\")]\n    ResourceLimitExceeded,\n    #[error(\"route signature or transport identity is invalid\")]\n    TransportAuthenticationFailed,\n    #[error(\"route record is expired, future-issued, or has an invalid lifetime\")]\n    InvalidLifetime,\n    #[error(\"route sequence is stale, rolled back, or equivocates\")]\n    Rollback,\n    #[error(\"route contains an unsafe address\")]\n    AddressPolicyDenied,\n    #[error(\"route requires an unsupported Protocol 1.0 feature\")]\n    UnsupportedCriticalFeature,\n    #[error(\"private discovery rejected\")]\n    PrivateDiscoveryRejected,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Error)]",
              "line": 31
            },
            {
              "name": "route_v1::Protocol1CodecError::public_error_family",
              "kind": "function_item",
              "signature": "pub fn public_error_family(self) -> &'static str;",
              "docs": "Frozen externally visible error family for this codec slice.\n\nDiagnostic enum variants remain local. Callers must not serialize their\ndisplay text to an unauthorized peer.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "route_v1::EndpointProfile",
              "kind": "enum_item",
              "signature": "pub enum EndpointProfile {\n    NativeFull = 0,\n    NativeRestricted = 1,\n    PortableMacosAlpha = 2,\n    OfflineLan = 3,\n    BrowserReserved = 4,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 77
            },
            {
              "name": "route_v1::PrivacyProfile",
              "kind": "enum_item",
              "signature": "pub enum PrivacyProfile {\n    Public = 0,\n    PrivateStandard = 1,\n    PrivateMetadata = 2,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 102
            },
            {
              "name": "route_v1::RouteTransport",
              "kind": "enum_item",
              "signature": "pub enum RouteTransport {\n    TcpNoiseYamux = 0,\n    QuicV1 = 1,\n    CircuitRelayV2 = 2,\n    Tcp443Relay = 3,\n    ExplicitOverlay = 4,\n    WebTransportReserved = 5,\n    WebRtcReserved = 6,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 123
            },
            {
              "name": "route_v1::CandidateScope",
              "kind": "enum_item",
              "signature": "pub enum CandidateScope {\n    Public = 0,\n    AuthenticatedLan = 1,\n    ObservedPublic = 2,\n    VerifiedMapping = 3,\n    ExplicitOverlay = 4,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 152
            },
            {
              "name": "route_v1::DirectCandidateV1",
              "kind": "struct_item",
              "signature": "pub struct DirectCandidateV1 {\npub multiaddr: Vec<u8>,\npub transport: RouteTransport,\npub scope: CandidateScope,\npub expires_at_ms: u64,\npub required_features: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 176
            },
            {
              "name": "route_v1::RelayCandidateV1",
              "kind": "struct_item",
              "signature": "pub struct RelayCandidateV1 {\npub relay_peer_id: Vec<u8>,\npub destination_multiaddr: Vec<u8>,\npub transport: RouteTransport,\npub reservation_expires_at_ms: u64,\npub operator_domain: Option<String>,\npub relay_ad_digest: [u8; 32]\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 185
            },
            {
              "name": "route_v1::SupportedProtocolV1",
              "kind": "struct_item",
              "signature": "pub struct SupportedProtocolV1 {\npub protocol_id: String,\npub supported_features: u64,\npub required_features: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 195
            },
            {
              "name": "route_v1::PeerRouteSetUnsignedV1",
              "kind": "struct_item",
              "signature": "pub struct PeerRouteSetUnsignedV1 {\npub transport_peer_id: Vec<u8>,\npub route_generation: u64,\npub sequence: u64,\npub issued_at_ms: u64,\npub expires_at_ms: u64,\npub direct_candidates: Vec<DirectCandidateV1>,\npub relay_candidates: Vec<RelayCandidateV1>,\npub supported_protocols: Vec<SupportedProtocolV1>,\npub endpoint_profile: EndpointProfile,\npub service_roles: u16,\npub privacy_profile: PrivacyProfile,\npub critical_features: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 202
            },
            {
              "name": "route_v1::PeerRouteSetV1",
              "kind": "struct_item",
              "signature": "pub struct PeerRouteSetV1 {\npub unsigned: PeerRouteSetUnsignedV1,\npub signature: [u8; 64]\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 218
            },
            {
              "name": "route_v1::RouteSequence",
              "kind": "struct_item",
              "signature": "pub struct RouteSequence {\npub route_generation: u64,\npub sequence: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]",
              "line": 224
            },
            {
              "name": "route_v1::ProtocolRegistryV1",
              "kind": "struct_item",
              "signature": "pub struct ProtocolRegistryV1 {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 230
            },
            {
              "name": "route_v1::ProtocolRegistryV1::empty",
              "kind": "function_item",
              "signature": "pub fn empty() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 235
            },
            {
              "name": "route_v1::ProtocolRegistryV1::with_application_major",
              "kind": "function_item",
              "signature": "pub fn with_application_major(\n        mut self,\n        name: &str,\n        major: u64,\n    ) -> Result<Self, Protocol1CodecError>;",
              "docs": "Returns a new immutable registry containing one application protocol\nname/major pair. Registration is separate from route parsing so a peer\ncannot self-declare support for an unknown major.",
              "attributes": "",
              "line": 242
            },
            {
              "name": "route_v1::RouteValidationContext",
              "kind": "struct_item",
              "signature": "pub struct RouteValidationContext {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 273
            },
            {
              "name": "route_v1::RouteValidationContext::alpha",
              "kind": "function_item",
              "signature": "pub fn alpha(now_ms: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 282
            },
            {
              "name": "route_v1::RouteValidationContext::try_new",
              "kind": "function_item",
              "signature": "pub fn try_new(\n        now_ms: u64,\n        maximum_future_skew_ms: u64,\n        last_accepted: Option<RouteSequence>,\n        supported_features: u64,\n        protocol_registry: ProtocolRegistryV1,\n    ) -> Result<Self, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 292
            },
            {
              "name": "route_v1::PeerRouteSetV1::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n        unsigned: PeerRouteSetUnsignedV1,\n        identity: &libp2p::identity::Keypair,\n        context: &RouteValidationContext,\n    ) -> Result<Self, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 313
            },
            {
              "name": "route_v1::PeerRouteSetV1::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Result<Vec<u8>, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 344
            },
            {
              "name": "route_v1::PeerRouteSetV1::decode_and_validate",
              "kind": "function_item",
              "signature": "pub fn decode_and_validate(\n        bytes: &[u8],\n        context: &RouteValidationContext,\n    ) -> Result<Self, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 358
            },
            {
              "name": "route_v1::PeerRouteSetV1::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, context: &RouteValidationContext) -> Result<(), Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 382
            },
            {
              "name": "route_v1::PeerRouteSetV1::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> Result<[u8; 32], Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 440
            },
            {
              "name": "route_v1::PeerRouteSetUnsignedV1::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Result<Vec<u8>, Protocol1CodecError>;",
              "docs": "",
              "attributes": "",
              "line": 452
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store",
          "source": "sigil/weave/network/weave-dht/src/store.rs",
          "sha256": "387f71656aef67ee7c801f28fc61f76eec2fa1688803a90386dc009dc93ed19f",
          "attributes": "",
          "items": [
            {
              "name": "store::RocksDbRecordStore",
              "kind": "struct_item",
              "signature": "pub struct RocksDbRecordStore {\n\n}",
              "docs": "RocksDB-backed RecordStore for Kademlia.\n\nColumn families:\n- records: key -> value (with 8-byte expiry prefix)\n- providers: key|peer_id -> expiry seconds\n- meta: reserved",
              "attributes": "#[derive(Clone)]\n#[cfg(feature = \"rocksdb-store\")]",
              "line": 66
            },
            {
              "name": "store::RocksDbRecordStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: &str, peer_id: PeerId) -> anyhow::Result<Self>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]\n#[cfg(feature = \"rocksdb-store\")]",
              "line": 84
            },
            {
              "name": "store::RocksDbRecordStore::open_with_limits",
              "kind": "function_item",
              "signature": "pub fn open_with_limits(\n        path: &str,\n        peer_id: PeerId,\n        max_bytes: Option<u64>,\n        record_ttl_secs: u64,\n        provider_ttl_secs: u64,\n    ) -> anyhow::Result<Self>;",
              "docs": "Open with limits and TTLs",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]\n#[cfg(feature = \"rocksdb-store\")]",
              "line": 90
            },
            {
              "name": "store::RocksDbRecordStore::gc",
              "kind": "function_item",
              "signature": "pub fn gc(&self);",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]\n#[cfg(feature = \"rocksdb-store\")]",
              "line": 154
            },
            {
              "name": "store::RocksDbRecordStore::approx_db_size_bytes",
              "kind": "function_item",
              "signature": "pub fn approx_db_size_bytes(&self) -> Option<u64>;",
              "docs": "Public: approximate DB size for admin reporting",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 195
            },
            {
              "name": "store::RocksDbRecordStore::max_bytes",
              "kind": "function_item",
              "signature": "pub fn max_bytes(&self) -> Option<u64>;",
              "docs": "Public: configured max disk cap if any",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 206
            },
            {
              "name": "store::RocksDbRecordStore::record_ttl_seconds",
              "kind": "function_item",
              "signature": "pub fn record_ttl_seconds(&self) -> u64;",
              "docs": "Public: configured TTLs",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 210
            },
            {
              "name": "store::RocksDbRecordStore::provider_ttl_seconds",
              "kind": "function_item",
              "signature": "pub fn provider_ttl_seconds(&self) -> u64;",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 213
            },
            {
              "name": "store::RocksDbRecordStore::peer_id",
              "kind": "function_item",
              "signature": "pub fn peer_id(&self) -> PeerId;",
              "docs": "Public: get the peer ID associated with this store",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 218
            },
            {
              "name": "store::DefaultMemoryStore",
              "kind": "type_item",
              "signature": "pub type DefaultMemoryStore = MemoryStore;",
              "docs": "Fallback type alias used when RocksDB is unavailable or not configured.\nThis is used as a default store when RocksDB is not available.",
              "attributes": "",
              "line": 463
            },
            {
              "name": "store::create_rocksdb_store",
              "kind": "function_item",
              "signature": "pub fn create_rocksdb_store(path: &str, peer_id: PeerId) -> anyhow::Result<RocksDbRecordStore>;",
              "docs": "Create a new RocksDB record store with default settings",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 467
            },
            {
              "name": "store::create_rocksdb_store",
              "kind": "function_item",
              "signature": "pub fn create_rocksdb_store(_path: &str, _peer_id: PeerId) -> anyhow::Result<DefaultMemoryStore>;",
              "docs": "",
              "attributes": "#[cfg(not(feature = \"rocksdb-store\"))]\n#[allow(dead_code)]",
              "line": 472
            },
            {
              "name": "store::StoreType",
              "kind": "enum_item",
              "signature": "pub enum StoreType {\n    #[cfg(feature = \"rocksdb-store\")]\n    RocksDb(RocksDbRecordStore),\n    Memory(DefaultMemoryStore),\n}",
              "docs": "Enum to hold different store types",
              "attributes": "#[allow(dead_code)]",
              "line": 478
            },
            {
              "name": "store::create_store_factory",
              "kind": "function_item",
              "signature": "pub fn create_store_factory() -> impl Fn(&str, PeerId) -> anyhow::Result<StoreType>;",
              "docs": "Create a store factory that demonstrates usage of both store types",
              "attributes": "",
              "line": 485
            }
          ],
          "parseErrors": false
        },
        {
          "module": "store_usage_demo",
          "source": "sigil/weave/network/weave-dht/src/store_usage_demo.rs",
          "sha256": "7bf0cefb98ca27a7688059e83ed2be2f78f5a019a30a1cdc5355575ae37b68b0",
          "attributes": "",
          "items": [
            {
              "name": "store_usage_demo::demo_rocksdb_store_usage",
              "kind": "function_item",
              "signature": "pub fn demo_rocksdb_store_usage() -> anyhow::Result<()>;",
              "docs": "Demonstrate usage of RocksDbRecordStore and all its methods",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 15
            },
            {
              "name": "store_usage_demo::demo_memory_store_usage",
              "kind": "function_item",
              "signature": "pub fn demo_memory_store_usage();",
              "docs": "Demonstrate usage of DefaultMemoryStore",
              "attributes": "",
              "line": 36
            },
            {
              "name": "store_usage_demo::demo_store_factory_usage",
              "kind": "function_item",
              "signature": "pub fn demo_store_factory_usage() -> anyhow::Result<()>;",
              "docs": "Demonstrate usage of StoreType enum and factory",
              "attributes": "",
              "line": 42
            }
          ],
          "parseErrors": false
        },
        {
          "module": "weave",
          "source": "sigil/weave/network/weave-dht/src/weave.rs",
          "sha256": "7cc581ece48521fcfd2995cd154f05c27388ffe8b8f7e9db2cd13c35388fe246",
          "attributes": "",
          "items": [
            {
              "name": "weave::WeaveDhtAdapter",
              "kind": "trait_item",
              "signature": "pub trait WeaveDhtAdapter {\n    /// Find peers for a topic\n    async fn lookup(&self, topic: &[u8; 32]) -> Result<Vec<PeerInfo>>;\n\n    /// Announce this peer for a topic\n    async fn announce(&self, topic: &[u8; 32], opts: AnnounceOpts) -> Result<()>;\n\n    /// Stop announcing for a topic\n    async fn unannounce(&self, topic: &[u8; 32]) -> Result<()>;\n\n    /// Store immutable value (content-addressed)\n    async fn immutable_put(&self, value: &[u8]) -> Result<[u8; 32]>;\n\n    /// Get immutable value by hash\n    async fn immutable_get(&self, hash: &[u8; 32]) -> Result<Vec<u8>>;\n\n    /// Store mutable value with sequence number\n    async fn mutable_put(&self, keypair: &OasKeyPair, value: &[u8], seq: u64) -> Result<()>;\n\n    /// Get latest mutable value\n    async fn mutable_get(&self, pubkey: &[u8; 32]) -> Result<MutableValue>;\n}",
              "docs": "Weave DHT Adapter operations",
              "attributes": "#[async_trait]",
              "line": 17
            },
            {
              "name": "weave::PeerInfo",
              "kind": "struct_item",
              "signature": "pub struct PeerInfo {\n/// Optional Ed25519 public key of the peer, if learned via Identify or out-of-band\n\npub public_key: Option<[u8; 32]>,\n/// Known socket addresses for direct connectivity\n\npub addresses: Vec<SocketAddr>,\n/// Known relay multiaddrs as strings\n\npub relay_addresses: Vec<String>,\n/// Optional libp2p PeerId (base58 string form)\n\npub peer_id: Option<String>\n}",
              "docs": "Peer information",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, Default)]",
              "line": 42
            },
            {
              "name": "weave::AnnounceOpts",
              "kind": "struct_item",
              "signature": "pub struct AnnounceOpts {\npub port: Option<u16>,\npub public_key: Option<[u8; 32]>,\npub relay_address: Option<String>\n}",
              "docs": "Options for announcing",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 58
            },
            {
              "name": "weave::MutableValue",
              "kind": "struct_item",
              "signature": "pub struct MutableValue {\npub sequence: u64,\npub value: Vec<u8>,\npub signature: Vec<u8>,\n// 64 bytes\npub public_key: Vec<u8>\n}",
              "docs": "Mutable value with versioning",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 66
            },
            {
              "name": "weave::AnnouncementState",
              "kind": "struct_item",
              "signature": "pub struct AnnouncementState {\npub topic: [u8; 32],\npub port: u16,\npub public_key: Option<[u8; 32]>,\npub started: Instant,\npub refresh_interval: Duration\n}",
              "docs": "Announcement state",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 75
            },
            {
              "name": "weave::WeaveDht",
              "kind": "struct_item",
              "signature": "pub struct WeaveDht {\n\n}",
              "docs": "Weave DHT state and operations",
              "attributes": "",
              "line": 84
            },
            {
              "name": "weave::WeaveDhtConfig",
              "kind": "struct_item",
              "signature": "pub struct WeaveDhtConfig {\n/// Enable Weave DHT protocol\n\npub enabled: bool,\n/// Bootstrap nodes\n\npub bootstrap_nodes: Vec<String>,\n/// Announcement refresh interval\n\npub announce_interval: Duration,\n/// Maximum stored values\n\npub max_values: usize,\n/// Cache timeout\n\npub cache_timeout: Duration,\n/// Max envelope size in bytes (admission)\n\npub max_envelope_bytes: u64\n}",
              "docs": "Weave DHT configuration",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 107
            },
            {
              "name": "weave::WeaveDht::new",
              "kind": "function_item",
              "signature": "pub fn new(config: WeaveDhtConfig) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 142
            },
            {
              "name": "weave::WeaveDht::new",
              "kind": "function_item",
              "signature": "pub fn new(config: WeaveDhtConfig) -> Self;",
              "docs": "",
              "attributes": "#[cfg(not(feature = \"rocksdb-store\"))]",
              "line": 154
            },
            {
              "name": "weave::WeaveDht::with_db",
              "kind": "function_item",
              "signature": "pub fn with_db(mut self, db: rocksdb::DB) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"rocksdb-store\")]",
              "line": 165
            },
            {
              "name": "weave::WeaveDht::admit_envelope",
              "kind": "function_item",
              "signature": "pub fn admit_envelope(&self, envelope: &DidEnvelope, last_seq: Option<u64>) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 172
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-dht-daemon",
      "version": "0.1.0",
      "source": "sigil/weave/network/weave-dht-daemon",
      "manifestSha256": "927f315ec72720c92c0ffec45ac52b94139d9aa2f8948e2003f2eae8f44eb993",
      "features": {
        "default": [],
        "tls": [
          "dep:axum-server",
          "dep:rustls",
          "dep:rustls-pemfile"
        ]
      },
      "publish": true,
      "url": "/reference/rust/weave-dht-daemon",
      "modules": []
    },
    {
      "name": "zer0-secret-stream",
      "version": "0.1.0",
      "source": "sigil/weave/network/zer0-secret-stream",
      "manifestSha256": "f0d7888a946b6b2ec0aa30ce46393fdf25060565d8394265f76b5d000f04163f",
      "features": {
        "default": [
          "protocol1-alpha"
        ],
        "protocol1-alpha": [],
        "legacy-api": []
      },
      "publish": true,
      "url": "/reference/rust/zer0-secret-stream",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/network/zer0-secret-stream/src/lib.rs",
          "sha256": "01b9849897635035b8b35e0128c7b5a377564db5c4b2a5ffca7ac3c70bc6a560",
          "attributes": "",
          "items": [
            {
              "name": "bridge",
              "kind": "module",
              "signature": "pub mod bridge;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "codec",
              "kind": "module",
              "signature": "pub mod codec;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "errors",
              "kind": "module",
              "signature": "pub mod errors;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "metrics",
              "kind": "module",
              "signature": "pub mod metrics;",
              "docs": "",
              "attributes": "",
              "line": 14
            },
            {
              "name": "protocol",
              "kind": "module",
              "signature": "pub mod protocol;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "session",
              "kind": "module",
              "signature": "pub mod session;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "pub use bridge::Bridge;",
              "kind": "use_declaration",
              "signature": "pub use bridge::Bridge;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use config::SecretTunables as SecretStreamTunables;",
              "kind": "use_declaration",
              "signature": "pub use config::SecretTunables as SecretStreamTunables;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "pub use errors::{Result, SecretStreamError};",
              "kind": "use_declaration",
              "signature": "pub use errors::{Result, SecretStreamError};",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "pub use handshake::{Handshake, HandshakeResult};",
              "kind": "use_declaration",
              "signature": "pub use handshake::{Handshake, HandshakeResult};",
              "docs": "",
              "attributes": "#[cfg(feature = \"legacy-api\")]",
              "line": 47
            },
            {
              "name": "pub use handshake::{HandshakeError, HandshakePattern};",
              "kind": "use_declaration",
              "signature": "pub use handshake::{HandshakeError, HandshakePattern};",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "pub use metrics::{SecretStreamMetrics as SecretStreamMetricsType, SecretStreamMetricsSnapshot};",
              "kind": "use_declaration",
              "signature": "pub use metrics::{SecretStreamMetrics as SecretStreamMetricsType, SecretStreamMetricsSnapshot};",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use protocol::{\n    ApplicationAuthTranscriptV1, ChannelBinding, EndpointProfile, FeatureSet,\n    OpaqueApplicationAuthInputs, ProtocolError, ProtocolId, RouteBinding, ServiceRoles,\n    SessionBootstrapContext, SessionBootstrapV1, TransportPeerId,\n};",
              "kind": "use_declaration",
              "signature": "pub use protocol::{\n    ApplicationAuthTranscriptV1, ChannelBinding, EndpointProfile, FeatureSet,\n    OpaqueApplicationAuthInputs, ProtocolError, ProtocolId, RouteBinding, ServiceRoles,\n    SessionBootstrapContext, SessionBootstrapV1, TransportPeerId,\n};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use session::{\n    MigrationGeneration, ReplacementAttempt, ReplacementPlan, SecureSession, SecureSessionError,\n    SecureSessionOptions, SessionCancellation, SessionClock, SessionFlowController,\n    SessionOperation, SessionPolicy, SessionPriority, SessionResourceGovernor,\n    SessionResourceLimits, SessionResourcePermit, SessionResourceSnapshot,\n};",
              "kind": "use_declaration",
              "signature": "pub use session::{\n    MigrationGeneration, ReplacementAttempt, ReplacementPlan, SecureSession, SecureSessionError,\n    SecureSessionOptions, SessionCancellation, SessionClock, SessionFlowController,\n    SessionOperation, SessionPolicy, SessionPriority, SessionResourceGovernor,\n    SessionResourceLimits, SessionResourcePermit, SessionResourceSnapshot,\n};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "::SecretOptions",
              "kind": "struct_item",
              "signature": "pub struct SecretOptions {\n/// Full local signing key pair. Required when a stable local public key is expected.\n\npub key_pair: Option<zer0_crypto::KeyPair>,\n/// The public key of the local peer\n\npub public_key: Option<[u8; 32]>,\n/// The expected public key of the remote peer\n\npub remote_public_key: Option<[u8; 32]>,\n/// Handshake pattern to use (default: XX)\n\npub pattern: HandshakePattern,\n/// Keep-alive interval in milliseconds (0 = disabled)\n\npub keep_alive: u64,\n/// Connection timeout in milliseconds (0 = disabled)\n\npub timeout: u64,\n/// Enable sending of unordered messages\n\npub enable_send: bool\n}",
              "docs": "Options for creating a new SecretStream",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 77
            },
            {
              "name": "::Message",
              "kind": "struct_item",
              "signature": "pub struct Message {\npub data: Bytes\n}",
              "docs": "Message received via the unordered message channel",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 110
            },
            {
              "name": "::StreamState",
              "kind": "enum_item",
              "signature": "pub enum StreamState {\n    Handshaking,\n    Connected,\n    Closed,\n}",
              "docs": "State of the secret stream",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 116
            },
            {
              "name": "::SecretStream",
              "kind": "struct_item",
              "signature": "pub struct SecretStream<S> {\n\n}",
              "docs": "The encrypted stream primitive underlying `SecureSession`.\n\nThe Protocol 1.0 alpha feature deliberately exposes no safe raw constructor:\n\n```compile_fail\n# let stream = tokio::io::duplex(64).0;\nlet _ = zer0_secret_stream::SecretStream::new(\n    stream,\n    true,\n    zer0_secret_stream::SecretOptions::default(),\n);\n```\n\nIsolated compatibility builds must opt out of `protocol1-alpha` and opt in to\n`legacy-api`; the two features cannot coexist.",
              "attributes": "#[pin_project(PinnedDrop)]",
              "line": 138
            },
            {
              "name": "::SecretStream<S>::new",
              "kind": "function_item",
              "signature": "pub fn new(inner: S, is_initiator: bool, options: SecretOptions) -> Result<Self>;",
              "docs": "Construct the stream used by weave-sdk replication (Noise XX over TCP).\n\nAvailable regardless of Protocol 1.0 alpha vs legacy feature selection so\noperator tools can dogfood against live DHT without feature-unification traps.",
              "attributes": "",
              "line": 519
            },
            {
              "name": "::SecretStream<S>::state",
              "kind": "function_item",
              "signature": "pub fn state(&self) -> StreamState;",
              "docs": "Get the current state of the stream",
              "attributes": "",
              "line": 524
            },
            {
              "name": "::SecretStream<S>::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> [u8; 32];",
              "docs": "Get the local public key",
              "attributes": "",
              "line": 529
            },
            {
              "name": "::SecretStream<S>::remote_public_key",
              "kind": "function_item",
              "signature": "pub fn remote_public_key(&self) -> Option<[u8; 32]>;",
              "docs": "Get the remote public key (if connected)",
              "attributes": "",
              "line": 534
            },
            {
              "name": "::SecretStream<S>::handshake_hash",
              "kind": "function_item",
              "signature": "pub fn handshake_hash(&self) -> Option<[u8; 32]>;",
              "docs": "Get the handshake hash (if connected)",
              "attributes": "",
              "line": 539
            },
            {
              "name": "::SecretStream<S>::is_initiator",
              "kind": "function_item",
              "signature": "pub fn is_initiator(&self) -> bool;",
              "docs": "Check if this peer is the initiator",
              "attributes": "",
              "line": 598
            },
            {
              "name": "::SecretStream<S>::metrics",
              "kind": "function_item",
              "signature": "pub fn metrics(&self) -> Arc<SecretStreamMetrics>;",
              "docs": "Get a clone of the metrics handle",
              "attributes": "",
              "line": 603
            },
            {
              "name": "::SecretStream<S>::tunables",
              "kind": "function_item",
              "signature": "pub fn tunables(&self) -> SecretTunables;",
              "docs": "Get current tunables (by value)",
              "attributes": "",
              "line": 608
            },
            {
              "name": "::SecretStream<S>::export_metrics_text",
              "kind": "function_item",
              "signature": "pub fn export_metrics_text(&self, namespace: &str) -> String;",
              "docs": "Export metrics text for scraping",
              "attributes": "",
              "line": 613
            },
            {
              "name": "::SecretStream<S>::key_pair",
              "kind": "function_item",
              "signature": "pub fn key_pair(seed: Option<&[u8; 32]>) -> zer0_crypto::KeyPair;",
              "docs": "Generate a new key pair",
              "attributes": "",
              "line": 618
            },
            {
              "name": "::SecretStream<S>::id",
              "kind": "function_item",
              "signature": "pub fn id(handshake_hash: &[u8; 32], is_initiator: bool) -> [u8; 32];",
              "docs": "Generate stream ID for the given handshake hash",
              "attributes": "",
              "line": 623
            },
            {
              "name": "::SecretStream<S>::send_message",
              "kind": "function_item",
              "signature": "pub async fn send_message(&mut self, data: impl Into<Bytes>) -> Result<()>;",
              "docs": "Send an unordered message (UDP-style)",
              "attributes": "#[cfg(feature = \"legacy-api\")]",
              "line": 629
            },
            {
              "name": "::SecretStream<S>::recv_message",
              "kind": "function_item",
              "signature": "pub async fn recv_message(&mut self) -> Result<Option<Message>>;",
              "docs": "Receive an unordered message",
              "attributes": "#[cfg(feature = \"legacy-api\")]",
              "line": 696
            },
            {
              "name": "::SecretStream<S>::handshake",
              "kind": "function_item",
              "signature": "pub async fn handshake(&mut self) -> Result<()>;",
              "docs": "Perform handshake",
              "attributes": "",
              "line": 704
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bridge",
          "source": "sigil/weave/network/zer0-secret-stream/src/bridge.rs",
          "sha256": "0f43bc88e7e5b037894076dc519ed49c00bea9845c3b679575cc4336a9688fb9",
          "attributes": "",
          "items": [
            {
              "name": "bridge::Bridge",
              "kind": "struct_item",
              "signature": "pub struct Bridge {\n\n}",
              "docs": "A bridge creates two connected streams that pipe data between each other",
              "attributes": "#[pin_project]",
              "line": 12
            },
            {
              "name": "bridge::BridgeReverse",
              "kind": "struct_item",
              "signature": "pub struct BridgeReverse {\n\n}",
              "docs": "The reverse side of a bridge",
              "attributes": "#[pin_project]",
              "line": 25
            },
            {
              "name": "bridge::Bridge::new",
              "kind": "function_item",
              "signature": "pub fn new() -> (Bridge, BridgeReverse);",
              "docs": "Create a new bridge pair",
              "attributes": "",
              "line": 38
            }
          ],
          "parseErrors": false
        },
        {
          "module": "codec",
          "source": "sigil/weave/network/zer0-secret-stream/src/codec.rs",
          "sha256": "dd5b8ac34345a374c4f087d0de222f2bec6892acf9ff51eaf5de020861c80c11",
          "attributes": "",
          "items": [
            {
              "name": "codec::encode_message",
              "kind": "function_item",
              "signature": "pub fn encode_message(buf: &mut BytesMut, len: usize);",
              "docs": "Encodes the message length as a 3-byte little-endian prefix.",
              "attributes": "",
              "line": 10
            },
            {
              "name": "codec::decode_message",
              "kind": "function_item",
              "signature": "pub fn decode_message(buf: &[u8]) -> Result<usize>;",
              "docs": "Decodes the message length from a 3-byte little-endian prefix.",
              "attributes": "",
              "line": 15
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/network/zer0-secret-stream/src/config.rs",
          "sha256": "d49a5579e9824d4381ea38c839757c98f0298fd3962802839585d50c2fc3b075",
          "attributes": "",
          "items": [
            {
              "name": "config::SecretTunables",
              "kind": "struct_item",
              "signature": "pub struct SecretTunables {\n/// Maximum size of any handshake frame (bytes)\n\npub handshake_max_frame: usize,\n/// Maximum size of any application payload/frame before encryption (bytes)\n\npub max_application_frame: usize,\n/// Capacity of unordered message queue\n\npub unordered_queue_capacity: usize,\n/// Maximum growth allowed for the internal read buffer (bytes)\n\npub read_buffer_max: usize,\n/// Keep-alive interval; 0 disables keep-alives\n\npub keep_alive_interval: Duration,\n/// Idle timeout; 0 disables idle timeouts\n\npub idle_timeout: Duration,\n/// IO timeout used during handshake and per-frame operations; 0 disables\n\npub io_timeout: Duration\n}",
              "docs": "Tunable limits and timeouts (no magic numbers)",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 7
            },
            {
              "name": "config::SecretTunables::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&mut self);",
              "docs": "Validate values and clamp to safe ranges",
              "attributes": "",
              "line": 40
            }
          ],
          "parseErrors": false
        },
        {
          "module": "errors",
          "source": "sigil/weave/network/zer0-secret-stream/src/errors.rs",
          "sha256": "50c6f1235d89111ac7bbe9389cdb9de1c447e6b614735baefcc823366849321e",
          "attributes": "",
          "items": [
            {
              "name": "errors::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, SecretStreamError>;",
              "docs": "Result type alias for SecretStream operations",
              "attributes": "",
              "line": 7
            },
            {
              "name": "errors::SecretStreamError",
              "kind": "enum_item",
              "signature": "pub enum SecretStreamError {\n    /// IO error from underlying stream\n    #[error(\"IO error: {0}\")]\n    Io(#[from] io::Error),\n\n    /// Handshake failed\n    #[error(\"Handshake failed: {0}\")]\n    HandshakeFailed(String),\n\n    /// Invalid message format\n    #[error(\"Invalid message format: {0}\")]\n    InvalidMessage(String),\n\n    /// Message too large\n    #[error(\"Message too large: size {size} exceeds maximum {max}\")]\n    MessageTooLarge { size: usize, max: usize },\n\n    /// Stream not connected\n    #[error(\"Stream not connected\")]\n    NotConnected,\n\n    /// Stream already connected\n    #[error(\"Stream already connected\")]\n    AlreadyConnected,\n\n    /// Encryption error\n    #[error(\"Encryption error: {0}\")]\n    Encryption(String),\n\n    /// Decryption error\n    #[error(\"Decryption error: {0}\")]\n    Decryption(String),\n\n    /// Invalid stream ID\n    #[error(\"Invalid stream ID\")]\n    InvalidStreamId,\n\n    /// Send disabled\n    #[error(\"Send functionality is disabled\")]\n    SendDisabled,\n\n    /// Channel closed\n    #[error(\"Message channel closed\")]\n    ChannelClosed,\n\n    /// Timeout\n    #[error(\"Operation timed out\")]\n    Timeout,\n\n    /// Invalid key\n    #[error(\"Invalid key: {0}\")]\n    InvalidKey(String),\n\n    /// Protocol error\n    #[error(\"Protocol error: {0}\")]\n    Protocol(String),\n\n    #[error(\"Handshake error: {0}\")]\n    Handshake(#[from] crate::handshake::HandshakeError),\n\n    #[error(\"Invalid message header\")]\n    InvalidMessageHeader,\n\n    #[error(\"Encryption error\")]\n    EncryptionError,\n\n    /// Feature not implemented yet (used for cross-crate sequencing gates)\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n}",
              "docs": "Errors that can occur during SecretStream operations",
              "attributes": "#[derive(Error, Debug)]",
              "line": 11
            }
          ],
          "parseErrors": false
        },
        {
          "module": "handshake",
          "source": "sigil/weave/network/zer0-secret-stream/src/handshake.rs",
          "sha256": "94a015264c63b29d3d3ae41591de2ae5e5d0d8507a2466c0c42ee3b18e17e504",
          "attributes": "",
          "items": [
            {
              "name": "handshake::HandshakeError",
              "kind": "enum_item",
              "signature": "pub enum HandshakeError {\n    #[error(\"Noise protocol error: {0}\")]\n    Noise(#[from] snow::Error),\n\n    #[error(\"Invalid handshake state\")]\n    InvalidState,\n\n    #[error(\"Handshake already complete\")]\n    AlreadyComplete,\n\n    #[error(\"Missing remote public key\")]\n    MissingRemoteKey,\n\n    #[error(\"Noise handshake hash is shorter than the frozen 32-byte rule\")]\n    InvalidHandshakeHashLength,\n}",
              "docs": "Errors that can occur during handshake",
              "attributes": "#[derive(Error, Debug)]",
              "line": 11
            },
            {
              "name": "handshake::HandshakePattern",
              "kind": "enum_item",
              "signature": "pub enum HandshakePattern {\n    /// XX pattern - both parties exchange keys\n    XX,\n    /// IK pattern - initiator knows responder's key\n    IK,\n    /// IX pattern - responder knows initiator's key\n    IX,\n    /// KK pattern - both parties know each other's keys\n    KK,\n}",
              "docs": "Supported handshake patterns",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 30
            },
            {
              "name": "handshake::HandshakeResult",
              "kind": "struct_item",
              "signature": "pub struct HandshakeResult {\n/// Data to send to remote (if any)\n\npub data: Option<Bytes>,\n/// Noise-authenticated payload received from the remote peer.\n\npub remote_payload: Bytes,\n/// The transport state, containing cipher states for sending and receiving.\n\npub transport: Option<TransportState>,\n/// Handshake hash (if complete)\n\npub hash: Option<[u8; 32]>,\n/// Remote public key (if available)\n\npub remote_public_key: Option<[u8; 32]>\n}",
              "docs": "Result of a handshake operation",
              "attributes": "#[derive(Debug)]",
              "line": 54
            },
            {
              "name": "handshake::Handshake",
              "kind": "struct_item",
              "signature": "pub struct Handshake {\n\n}",
              "docs": "Noise protocol handshake state",
              "attributes": "",
              "line": 68
            },
            {
              "name": "handshake::Handshake::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        is_initiator: bool,\n        key_pair: KeyPair,\n        remote_public_key: Option<[u8; 32]>,\n        pattern: HandshakePattern,\n    ) -> Self;",
              "docs": "Create a new handshake",
              "attributes": "",
              "line": 81
            },
            {
              "name": "handshake::Handshake::send",
              "kind": "function_item",
              "signature": "pub fn send(&mut self) -> Result<HandshakeResult, HandshakeError>;",
              "docs": "Send a handshake message",
              "attributes": "",
              "line": 126
            },
            {
              "name": "handshake::Handshake::send_with_payload",
              "kind": "function_item",
              "signature": "pub fn send_with_payload(&mut self, payload: &[u8]) -> Result<HandshakeResult, HandshakeError>;",
              "docs": "Send a handshake message with a Noise-authenticated payload.",
              "attributes": "",
              "line": 131
            },
            {
              "name": "handshake::Handshake::recv",
              "kind": "function_item",
              "signature": "pub fn recv(&mut self, data: &[u8]) -> Result<HandshakeResult, HandshakeError>;",
              "docs": "Receive a handshake message",
              "attributes": "",
              "line": 174
            },
            {
              "name": "handshake::Handshake::recv_with_payload",
              "kind": "function_item",
              "signature": "pub fn recv_with_payload(\n        &mut self,\n        data: &[u8],\n        response_payload: &[u8],\n    ) -> Result<HandshakeResult, HandshakeError>;",
              "docs": "Receive a handshake message and place `response_payload` in any response\ngenerated by this Noise state transition.",
              "attributes": "",
              "line": 180
            },
            {
              "name": "handshake::Handshake::complete",
              "kind": "function_item",
              "signature": "pub fn complete(&self) -> bool;",
              "docs": "Check if handshake is complete",
              "attributes": "",
              "line": 292
            },
            {
              "name": "handshake::Handshake::destroy",
              "kind": "function_item",
              "signature": "pub fn destroy(&mut self);",
              "docs": "Destroy the handshake state",
              "attributes": "",
              "line": 297
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/weave/network/zer0-secret-stream/src/metrics.rs",
          "sha256": "10f4ba6ff9a8a371f09c4ebaf6413765b5b4866fd1f1c81091997167a965da01",
          "attributes": "",
          "items": [
            {
              "name": "metrics::SecretStreamMetrics",
              "kind": "struct_item",
              "signature": "pub struct SecretStreamMetrics {\npub bytes_in_total: AtomicU64,\npub bytes_out_total: AtomicU64,\npub frames_in_total: AtomicU64,\npub frames_out_total: AtomicU64,\npub keepalives_sent_total: AtomicU64,\npub keepalives_recv_total: AtomicU64,\n/// Completed cryptographic rekeys only.\n\n///\n\n/// Protocol 1.0 defines no rekey transition, so this remains zero until a\n\n/// separately specified and interoperable rekey protocol is implemented.\n\npub rekeys_total: AtomicU64,\npub drops_message_too_large_total: AtomicU64,\npub drops_queue_full_total: AtomicU64,\npub timeouts_idle_total: AtomicU64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default)]",
              "line": 6
            },
            {
              "name": "metrics::SecretStreamMetrics::snapshot",
              "kind": "function_item",
              "signature": "pub fn snapshot(&self) -> SecretStreamMetricsSnapshot;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "metrics::SecretStreamMetrics::export_prometheus_text",
              "kind": "function_item",
              "signature": "pub fn export_prometheus_text(&self, namespace: &str) -> String;",
              "docs": "Export a Prometheus-like plain text for quick scraping",
              "attributes": "",
              "line": 42
            },
            {
              "name": "metrics::SecretStreamMetricsSnapshot",
              "kind": "struct_item",
              "signature": "pub struct SecretStreamMetricsSnapshot {\npub bytes_in_total: u64,\npub bytes_out_total: u64,\npub frames_in_total: u64,\npub frames_out_total: u64,\npub keepalives_sent_total: u64,\npub keepalives_recv_total: u64,\npub rekeys_total: u64,\npub drops_message_too_large_total: u64,\npub drops_queue_full_total: u64,\npub timeouts_idle_total: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 81
            }
          ],
          "parseErrors": false
        },
        {
          "module": "protocol",
          "source": "sigil/weave/network/zer0-secret-stream/src/protocol.rs",
          "sha256": "c54c2015b3c6d8659eaa5f2c92c4b1e2d3bcf3b5519425df890dd650d1de4a1b",
          "attributes": "",
          "items": [
            {
              "name": "protocol::ALLOCATED_FEATURE_MASK",
              "kind": "const_item",
              "signature": "pub const ALLOCATED_FEATURE_MASK: u64;",
              "docs": "Protocol 1.0 currently allocates feature bits 0 through 9.",
              "attributes": "",
              "line": 13
            },
            {
              "name": "protocol::INNER_BINDING_FEATURE",
              "kind": "const_item",
              "signature": "pub const INNER_BINDING_FEATURE: u64;",
              "docs": "Mandatory inner zer0-secret-stream binding feature bit.",
              "attributes": "",
              "line": 15
            },
            {
              "name": "protocol::MAX_BOOTSTRAP_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_BOOTSTRAP_BYTES: usize;",
              "docs": "Maximum accepted deterministic-CBOR bootstrap size.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "protocol::MAX_TRANSPORT_PEER_ID_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_TRANSPORT_PEER_ID_BYTES: usize;",
              "docs": "Exact canonical inline-Ed25519 transport PeerId byte length.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "protocol::MAX_CAPABILITY_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_CAPABILITY_BYTES: usize;",
              "docs": "Maximum opaque requested-capability byte length.",
              "attributes": "",
              "line": 21
            },
            {
              "name": "protocol::MAX_APPLICATION_IDENTITY_BYTES",
              "kind": "const_item",
              "signature": "pub const MAX_APPLICATION_IDENTITY_BYTES: usize;",
              "docs": "Maximum opaque application-identity byte length.",
              "attributes": "",
              "line": 23
            },
            {
              "name": "protocol::MAX_BOOTSTRAP_LIFETIME_MS",
              "kind": "const_item",
              "signature": "pub const MAX_BOOTSTRAP_LIFETIME_MS: u64;",
              "docs": "Maximum Protocol 1.0 bootstrap lifetime.",
              "attributes": "",
              "line": 25
            },
            {
              "name": "protocol::MAX_APPLICATION_AUTH_LIFETIME_MS",
              "kind": "const_item",
              "signature": "pub const MAX_APPLICATION_AUTH_LIFETIME_MS: u64;",
              "docs": "Maximum Protocol 1.0 application authorization lifetime.",
              "attributes": "",
              "line": 27
            },
            {
              "name": "protocol::ProtocolError",
              "kind": "enum_item",
              "signature": "pub enum ProtocolError {\n    #[error(\"unsupported or malformed protocol identifier\")]\n    InvalidProtocolId,\n    #[error(\"invalid endpoint profile {0}\")]\n    InvalidEndpointProfile(u64),\n    #[error(\"service-role bitmap contains unallocated bits: {0:#06x}\")]\n    InvalidServiceRoles(u16),\n    #[error(\"feature bitmap contains unallocated bits: {0:#018x}\")]\n    UnsupportedCriticalFeature(u64),\n    #[error(\"selected features are not the exact supported-feature intersection\")]\n    InvalidSelectedFeatures,\n    #[error(\"required features are not covered by the selected features\")]\n    MissingRequiredFeature,\n    #[error(\"transport PeerId must be the canonical inline-Ed25519 libp2p encoding\")]\n    InvalidTransportPeerId,\n    #[error(\"a pinned route must use a null digest and generation zero\")]\n    InvalidPinnedRoute,\n    #[error(\"initiator and responder challenges must be independent\")]\n    ReusedChallenge,\n    #[error(\"invalid bootstrap validity interval\")]\n    InvalidBootstrapLifetime,\n    #[error(\"bootstrap was issued in the future\")]\n    BootstrapNotYetValid,\n    #[error(\"bootstrap has expired\")]\n    BootstrapExpired,\n    #[error(\"invalid application-authorization validity interval\")]\n    InvalidApplicationAuthLifetime,\n    #[error(\"application protocol version must be ASCII semantic version without build metadata\")]\n    InvalidApplicationProtocolVersion,\n    #[error(\"opaque requested capability exceeds 256 bytes\")]\n    CapabilityTooLarge,\n    #[error(\"opaque application identity exceeds 4096 bytes\")]\n    ApplicationIdentityTooLarge,\n    #[error(\"deterministic CBOR is malformed or non-canonical: {0}\")]\n    NonCanonicalCbor(&'static str),\n    #[error(\"deterministic CBOR exceeds the Protocol 1.0 size limit\")]\n    CborTooLarge,\n    #[error(\"received transcript does not exactly match the locally reconstructed transcript\")]\n    TranscriptMismatch,\n    #[error(\"migration generation overflow\")]\n    MigrationGenerationOverflow,\n    #[error(\"a replacement plan has already been issued for this session\")]\n    ReplacementAlreadyPlanned,\n}",
              "docs": "Fail-closed transcript and binding errors.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 35
            },
            {
              "name": "protocol::ProtocolId",
              "kind": "struct_item",
              "signature": "pub struct ProtocolId(String);",
              "docs": "Exact negotiated Protocol 1.0 identifier.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 82
            },
            {
              "name": "protocol::ProtocolId::parse",
              "kind": "function_item",
              "signature": "pub fn parse(value: impl Into<String>) -> Result<Self, ProtocolError>;",
              "docs": "Parse a frozen network identifier or an application identifier.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "protocol::ProtocolId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "protocol::ProtocolId::wire_version",
              "kind": "function_item",
              "signature": "pub fn wire_version(&self) -> &str;",
              "docs": "Exact semantic-version suffix carried by the negotiated identifier.",
              "attributes": "",
              "line": 124
            },
            {
              "name": "protocol::EndpointProfile",
              "kind": "enum_item",
              "signature": "pub enum EndpointProfile {\n    NativeFull = 0,\n    NativeRestricted = 1,\n    PortableMacosAlpha = 2,\n    OfflineLan = 3,\n}",
              "docs": "Frozen endpoint profile values admitted in Protocol 1.0.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]\n#[repr(u8)]",
              "line": 134
            },
            {
              "name": "protocol::ServiceRoles",
              "kind": "struct_item",
              "signature": "pub struct ServiceRoles(u16);",
              "docs": "Protocol 1.0 service-role bitmap. Only bits 0 through 3 are allocated.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]",
              "line": 157
            },
            {
              "name": "protocol::ServiceRoles::new",
              "kind": "function_item",
              "signature": "pub fn new(bits: u16) -> Result<Self, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 160
            },
            {
              "name": "protocol::ServiceRoles::bits",
              "kind": "function_item",
              "signature": "pub fn bits(self) -> u16;",
              "docs": "",
              "attributes": "",
              "line": 167
            },
            {
              "name": "protocol::FeatureSet",
              "kind": "struct_item",
              "signature": "pub struct FeatureSet(u64);",
              "docs": "A validated Protocol 1.0 feature bitmap.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]",
              "line": 174
            },
            {
              "name": "protocol::FeatureSet::new",
              "kind": "function_item",
              "signature": "pub fn new(bits: u64) -> Result<Self, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "protocol::FeatureSet::bits",
              "kind": "function_item",
              "signature": "pub fn bits(self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 184
            },
            {
              "name": "protocol::TransportPeerId",
              "kind": "struct_item",
              "signature": "pub struct TransportPeerId(Vec<u8>);",
              "docs": "Canonical, role-specific transport PeerId bytes supplied by the outer transport.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 191
            },
            {
              "name": "protocol::TransportPeerId::new",
              "kind": "function_item",
              "signature": "pub fn new(bytes: impl Into<Vec<u8>>) -> Result<Self, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 194
            },
            {
              "name": "protocol::TransportPeerId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "",
              "attributes": "",
              "line": 205
            },
            {
              "name": "protocol::RouteBinding",
              "kind": "struct_item",
              "signature": "pub struct RouteBinding {\npub route_set_digest: Option<[u8; 32]>,\npub generation: u64\n}",
              "docs": "Route state bound into a session for one role.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 212
            },
            {
              "name": "protocol::RouteBinding::pinned",
              "kind": "function_item",
              "signature": "pub fn pinned() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 218
            },
            {
              "name": "protocol::RouteBinding::routed",
              "kind": "function_item",
              "signature": "pub fn routed(digest: [u8; 32], generation: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 225
            },
            {
              "name": "protocol::SessionBootstrapContext",
              "kind": "struct_item",
              "signature": "pub struct SessionBootstrapContext {\npub selected_protocol_id: ProtocolId,\npub initiator_endpoint_profile: EndpointProfile,\npub responder_endpoint_profile: EndpointProfile,\npub initiator_service_roles: ServiceRoles,\npub responder_service_roles: ServiceRoles,\npub initiator_transport_peer_id: TransportPeerId,\npub responder_transport_peer_id: TransportPeerId,\npub initiator_route: RouteBinding,\npub responder_route: RouteBinding,\npub initiator_supported_features: FeatureSet,\npub initiator_required_features: FeatureSet,\npub responder_supported_features: FeatureSet,\npub responder_required_features: FeatureSet,\npub selected_features: FeatureSet,\npub proposed_migration_generation: u64,\npub issued_at_ms: u64,\npub expires_at_ms: u64\n}",
              "docs": "Static, role-ordered inputs used to construct `SessionBootstrapV1`.\n\nT-A must supply canonical initiator/responder transport PeerIds in Noise-role\norder. This type never sorts identities lexicographically.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 246
            },
            {
              "name": "protocol::SessionBootstrapContext::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "protocol::SessionBootstrapContext::validate_at",
              "kind": "function_item",
              "signature": "pub fn validate_at(\n        &self,\n        now_ms: u64,\n        handshake_lifetime_ms: u64,\n    ) -> Result<(), ProtocolError>;",
              "docs": "Validate freshness against an injected clock and the smaller of the\nconfigured handshake deadline or the Protocol 1.0 60-second ceiling.",
              "attributes": "",
              "line": 287
            },
            {
              "name": "protocol::SessionBootstrapContext::with_challenges",
              "kind": "function_item",
              "signature": "pub fn with_challenges(\n        self,\n        initiator_challenge: [u8; 32],\n        responder_challenge: [u8; 32],\n    ) -> Result<SessionBootstrapV1, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 301
            },
            {
              "name": "protocol::SessionBootstrapV1",
              "kind": "struct_item",
              "signature": "pub struct SessionBootstrapV1 {\npub version: u64,\npub selected_protocol_id: ProtocolId,\npub initiator_endpoint_profile: EndpointProfile,\npub responder_endpoint_profile: EndpointProfile,\npub initiator_service_roles: ServiceRoles,\npub responder_service_roles: ServiceRoles,\npub initiator_transport_peer_id: TransportPeerId,\npub responder_transport_peer_id: TransportPeerId,\npub initiator_challenge: [u8; 32],\npub responder_challenge: [u8; 32],\npub initiator_route: RouteBinding,\npub responder_route: RouteBinding,\npub initiator_supported_features: FeatureSet,\npub initiator_required_features: FeatureSet,\npub responder_supported_features: FeatureSet,\npub responder_required_features: FeatureSet,\npub selected_features: FeatureSet,\npub proposed_migration_generation: u64,\npub issued_at_ms: u64,\npub expires_at_ms: u64\n}",
              "docs": "Exact frozen Protocol 1.0 secure-session bootstrap transcript.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 335
            },
            {
              "name": "protocol::SessionBootstrapV1::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 387
            },
            {
              "name": "protocol::SessionBootstrapV1::validate_at",
              "kind": "function_item",
              "signature": "pub fn validate_at(\n        &self,\n        now_ms: u64,\n        handshake_lifetime_ms: u64,\n    ) -> Result<(), ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 413
            },
            {
              "name": "protocol::SessionBootstrapV1::to_deterministic_cbor",
              "kind": "function_item",
              "signature": "pub fn to_deterministic_cbor(&self) -> Result<Vec<u8>, ProtocolError>;",
              "docs": "Encode the exact 22-entry, integer-keyed deterministic-CBOR map.",
              "attributes": "",
              "line": 428
            },
            {
              "name": "protocol::SessionBootstrapV1::from_deterministic_cbor",
              "kind": "function_item",
              "signature": "pub fn from_deterministic_cbor(input: &[u8]) -> Result<Self, ProtocolError>;",
              "docs": "Strictly decode the exact map, rejecting non-canonical integers, extra or\nmissing keys, indefinite values, tags, floats, and trailing bytes.",
              "attributes": "",
              "line": 485
            },
            {
              "name": "protocol::ChannelBinding",
              "kind": "struct_item",
              "signature": "pub struct ChannelBinding([u8; 32]);",
              "docs": "Binding derived from the Noise handshake hash and exact confirmed bootstrap bytes.\n\nThis value is intentionally non-serializable and zeroized when dropped.",
              "attributes": "#[derive(PartialEq, Eq, Zeroize, ZeroizeOnDrop)]",
              "line": 579
            },
            {
              "name": "protocol::ChannelBinding::derive",
              "kind": "function_item",
              "signature": "pub fn derive(\n        inner_handshake_hash: &[u8; 32],\n        confirmed_bootstrap_cbor: &[u8],\n    ) -> Result<Self, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 582
            },
            {
              "name": "protocol::ChannelBinding::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 598
            },
            {
              "name": "protocol::ChannelBinding::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 602
            },
            {
              "name": "protocol::OpaqueApplicationAuthInputs",
              "kind": "struct_item",
              "signature": "pub struct OpaqueApplicationAuthInputs {\npub opaque_scope_digest: [u8; 32],\npub requested_capability: Vec<u8>,\npub proving_application_identity: Vec<u8>,\npub verifying_application_identity: Vec<u8>,\npub issued_at_ms: u64,\npub expires_at_ms: u64,\npub policy_generation: u64\n}",
              "docs": "Opaque, unverified application-controlled fields supplied by T-F.\n\nConstructing this value is not an authorization decision. T-F must separately\nverify the application proof, capability, scope, policy generation, and expiry.",
              "attributes": "#[derive(Clone, Debug, PartialEq, Eq)]",
              "line": 621
            },
            {
              "name": "protocol::ApplicationAuthTranscriptV1",
              "kind": "struct_item",
              "signature": "pub struct ApplicationAuthTranscriptV1 {\n\n}",
              "docs": "Exact frozen 29-entry application-authorization transcript.\n\nAll session-duplicated fields are copied from `SessionBootstrapV1`; callers\ncannot independently override them.",
              "attributes": "#[derive(Debug, PartialEq, Eq)]",
              "line": 655
            },
            {
              "name": "protocol::ApplicationAuthTranscriptV1::from_confirmed_session",
              "kind": "function_item",
              "signature": "pub fn from_confirmed_session(\n        bootstrap: &SessionBootstrapV1,\n        channel_binding: &ChannelBinding,\n        inputs: OpaqueApplicationAuthInputs,\n    ) -> Result<Self, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 673
            },
            {
              "name": "protocol::ApplicationAuthTranscriptV1::to_deterministic_cbor",
              "kind": "function_item",
              "signature": "pub fn to_deterministic_cbor(&self) -> Result<Vec<u8>, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 687
            },
            {
              "name": "protocol::ApplicationAuthTranscriptV1::proof_message",
              "kind": "function_item",
              "signature": "pub fn proof_message(&self) -> Result<Vec<u8>, ProtocolError>;",
              "docs": "Domain-separated bytes for application-owned signing or proof generation.",
              "attributes": "",
              "line": 787
            },
            {
              "name": "protocol::ApplicationAuthTranscriptV1::confirm_exact",
              "kind": "function_item",
              "signature": "pub fn confirm_exact(&self, received: &[u8]) -> Result<(), ProtocolError>;",
              "docs": "Fail closed unless received bytes are the exact canonical reconstruction.",
              "attributes": "",
              "line": 796
            }
          ],
          "parseErrors": false
        },
        {
          "module": "session",
          "source": "sigil/weave/network/zer0-secret-stream/src/session.rs",
          "sha256": "657a2f101033d52472faa6208cfc0cc2da5db8f1db42b5172e42d5ac438fdfc7",
          "attributes": "",
          "items": [
            {
              "name": "session::SecureSessionError",
              "kind": "enum_item",
              "signature": "pub enum SecureSessionError {\n    #[error(\"inner secure-stream failure: {0}\")]\n    SecretStream(#[from] SecretStreamError),\n    #[error(\"secure-session transcript failure: {0}\")]\n    Protocol(#[from] ProtocolError),\n    #[error(\"secure-session handshake or bootstrap confirmation timed out\")]\n    HandshakeDeadline,\n    #[error(\"secure-session operation was cancelled\")]\n    Cancelled,\n    #[error(\"invalid secure-session policy: {0}\")]\n    InvalidPolicy(&'static str),\n    #[error(\"remote bootstrap length exceeds the Protocol 1.0 limit\")]\n    BootstrapTooLarge,\n    #[error(\"remote bootstrap bytes differ from the local canonical transcript\")]\n    BootstrapMismatch,\n    #[error(\"replacement produced the prior channel-binding digest\")]\n    ReusedChannelBinding,\n    #[error(\"replacement context differs from the old session invariant\")]\n    ReplacementContextMismatch,\n    #[error(\"replacement plan has no remaining monotonic generation\")]\n    ReplacementGenerationExhausted,\n    #[error(\"operating-system CSPRNG initialization failed\")]\n    RandomnessUnavailable,\n    #[error(\"flow-credit grant exceeds the configured bounded window\")]\n    FlowCreditOverflow,\n    #[error(\"session resource limit is exhausted\")]\n    ResourceLimitExceeded,\n    #[error(\"resource governor denied the requested operation\")]\n    ResourceGovernorDenied,\n}",
              "docs": "Fail-closed secure-session errors.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 37
            },
            {
              "name": "session::SecureSessionOptions",
              "kind": "struct_item",
              "signature": "pub struct SecureSessionOptions {\npub local_key_pair: Option<KeyPair>,\npub expected_remote_noise_static_key: Option<[u8; 32]>,\n/// Outer-governed keepalive cadence. Zero disables keepalives.\n\npub keep_alive_interval: Duration,\n/// Inactivity timeout enforced by the inner encrypted stream. Zero disables it.\n\npub idle_timeout: Duration\n}",
              "docs": "Noise configuration admitted by the Protocol 1.0 alpha constructor.\n\nThe pattern is not caller-selectable; it is always a fresh Noise XX handshake.",
              "attributes": "#[derive(Clone, Debug, Default)]",
              "line": 78
            },
            {
              "name": "session::LocalTransportRole",
              "kind": "enum_item",
              "signature": "pub enum LocalTransportRole {\n    Initiator,\n    Responder,\n}",
              "docs": "Local role proven by T-A's authenticated outer connection.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]",
              "line": 104
            },
            {
              "name": "session::AuthenticatedTransport",
              "kind": "struct_item",
              "signature": "pub struct AuthenticatedTransport<S> {\n\n}",
              "docs": "Role-bound, protocol-bound authenticated outer substream.\n\nFields are private and there is no safe raw constructor.\n\n```compile_fail\nuse zer0_secret_stream::session::AuthenticatedTransport;\n# let stream = tokio::io::duplex(64).0;\n// No safe `new` constructor exists.\nlet _ = AuthenticatedTransport::new(stream);\n```",
              "attributes": "",
              "line": 125
            },
            {
              "name": "session::AuthenticatedTransport<S>::from_verified_outer",
              "kind": "function_item",
              "signature": "pub unsafe fn from_verified_outer(\n        stream: S,\n        local_role: LocalTransportRole,\n        selected_protocol_id: ProtocolId,\n        initiator_peer_id: TransportPeerId,\n        responder_peer_id: TransportPeerId,\n    ) -> Self;",
              "docs": "Construct the narrow T-A -> T-B cross-crate capability.\n\n# Safety\n\nThe caller MUST consume T-A's non-forgeable authenticated substream and\nprove all of the following before calling:\n\n- `stream` is that exact lifetime-coupled substream, including its close,\n  reset, and resource-accounting guard;\n- `local_role` is the authenticated connection role for that substream;\n- `selected_protocol_id` is the exact protocol admitted by T-A's frozen\n  registry for that substream;\n- both PeerIds are canonical binary inline-Ed25519 libp2p PeerIds;\n- PeerIds are in authenticated Noise initiator/responder order;\n- local and remote identity placement agrees with `local_role`.\n\nCalling this with caller-asserted bytes, a detached raw stream, or a free\nrole is a security invariant violation. T-A owns the sole safe wrapper.",
              "attributes": "",
              "line": 163
            },
            {
              "name": "session::SessionClock",
              "kind": "trait_item",
              "signature": "pub trait SessionClock: Send + Sync {\n    fn now_ms(&self) -> u64;\n}",
              "docs": "Injected current-time source used for deterministic freshness validation.",
              "attributes": "",
              "line": 191
            },
            {
              "name": "session::SessionCancellation",
              "kind": "struct_item",
              "signature": "pub struct SessionCancellation(CancellationToken);",
              "docs": "Wake-capable cancellation handle scoped to one protected substream.",
              "attributes": "#[derive(Clone, Debug, Default)]",
              "line": 197
            },
            {
              "name": "session::SessionCancellation::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 200
            },
            {
              "name": "session::SessionCancellation::cancel",
              "kind": "function_item",
              "signature": "pub fn cancel(&self);",
              "docs": "",
              "attributes": "",
              "line": 204
            },
            {
              "name": "session::SessionCancellation::is_cancelled",
              "kind": "function_item",
              "signature": "pub fn is_cancelled(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 208
            },
            {
              "name": "session::SessionPriority",
              "kind": "enum_item",
              "signature": "pub enum SessionPriority {\n    Background = 0,\n    Normal = 1,\n    Interactive = 2,\n    Critical = 3,\n}",
              "docs": "Scheduler-visible priority class. A mandatory resource governor enforces it.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]",
              "line": 219
            },
            {
              "name": "session::SessionOperation",
              "kind": "enum_item",
              "signature": "pub enum SessionOperation {\n    Read,\n    Write,\n}",
              "docs": "Operation presented to the mandatory resource governor.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]",
              "line": 228
            },
            {
              "name": "session::SessionResourcePermit",
              "kind": "trait_item",
              "signature": "pub trait SessionResourcePermit: Send + Unpin {}",
              "docs": "Permit retained across `Poll::Pending` until the exact operation completes.",
              "attributes": "",
              "line": 234
            },
            {
              "name": "session::SessionResourceGovernor",
              "kind": "trait_item",
              "signature": "pub trait SessionResourceGovernor: Send + Sync {\n    fn poll_acquire(\n        &self,\n        resource_id: u64,\n        priority: SessionPriority,\n        operation: SessionOperation,\n        requested_bytes: usize,\n        cx: &mut Context<'_>,\n    ) -> Poll<io::Result<Box<dyn SessionResourcePermit>>>;\n}",
              "docs": "Enforceable admission contract used by T-A's shared priority/resource scheduler.\n\n`SecureSession` does not poll the inner stream until this returns a permit, and\nretains that permit across pending ciphertext writes or reads.",
              "attributes": "",
              "line": 242
            },
            {
              "name": "session::SessionResourceLimits",
              "kind": "struct_item",
              "signature": "pub struct SessionResourceLimits {\n/// Maximum raw encrypted inbound bytes admitted across the session.\n\npub max_read_bytes: u64,\npub max_written_bytes: u64,\n/// Maximum authenticated encrypted inbound frames, including keepalives.\n\npub max_read_operations: u64,\npub max_write_operations: u64,\n/// Shared hard ceiling for inbound and outbound keepalive control frames.\n\npub max_control_operations: u64\n}",
              "docs": "Hard per-session resource ceilings.",
              "attributes": "#[derive(Clone, Copy, Debug, PartialEq, Eq)]",
              "line": 255
            },
            {
              "name": "session::SessionFlowController",
              "kind": "struct_item",
              "signature": "pub struct SessionFlowController(Arc<FlowCreditInner>);",
              "docs": "Explicit bounded flow-credit grant handle.\n\nWrites consume credit and remain pending at zero. Only a validated remote\nwindow/ack handler should call `grant`.",
              "attributes": "#[derive(Clone)]",
              "line": 293
            },
            {
              "name": "session::SessionFlowController::available",
              "kind": "function_item",
              "signature": "pub fn available(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 314
            },
            {
              "name": "session::SessionFlowController::maximum",
              "kind": "function_item",
              "signature": "pub fn maximum(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 318
            },
            {
              "name": "session::SessionFlowController::grant",
              "kind": "function_item",
              "signature": "pub fn grant(&self, bytes: usize) -> Result<(), SecureSessionError>;",
              "docs": "",
              "attributes": "",
              "line": 322
            },
            {
              "name": "session::SessionPolicy",
              "kind": "struct_item",
              "signature": "pub struct SessionPolicy {\n\n}",
              "docs": "Independent, enforceable controls for one application substream.",
              "attributes": "",
              "line": 391
            },
            {
              "name": "session::SessionPolicy::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        handshake_deadline: Duration,\n        stream_deadline: Option<Duration>,\n        flow_control_window: usize,\n        priority: SessionPriority,\n        resource_id: u64,\n        cancellation: SessionCancellation,\n        resource_limits: SessionResourceLimits,\n        governor: Arc<dyn SessionResourceGovernor>,\n    ) -> Result<Self, SecureSessionError>;",
              "docs": "",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 418
            },
            {
              "name": "session::SessionPolicy::handshake_deadline",
              "kind": "function_item",
              "signature": "pub fn handshake_deadline(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 462
            },
            {
              "name": "session::SessionPolicy::stream_deadline",
              "kind": "function_item",
              "signature": "pub fn stream_deadline(&self) -> Option<Duration>;",
              "docs": "",
              "attributes": "",
              "line": 466
            },
            {
              "name": "session::SessionPolicy::flow_control_window",
              "kind": "function_item",
              "signature": "pub fn flow_control_window(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 470
            },
            {
              "name": "session::SessionPolicy::priority",
              "kind": "function_item",
              "signature": "pub fn priority(&self) -> SessionPriority;",
              "docs": "",
              "attributes": "",
              "line": 474
            },
            {
              "name": "session::SessionPolicy::resource_id",
              "kind": "function_item",
              "signature": "pub fn resource_id(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 478
            },
            {
              "name": "session::SessionPolicy::cancellation",
              "kind": "function_item",
              "signature": "pub fn cancellation(&self) -> SessionCancellation;",
              "docs": "",
              "attributes": "",
              "line": 482
            },
            {
              "name": "session::SessionPolicy::resource_limits",
              "kind": "function_item",
              "signature": "pub fn resource_limits(&self) -> SessionResourceLimits;",
              "docs": "",
              "attributes": "",
              "line": 486
            },
            {
              "name": "session::MigrationGeneration",
              "kind": "struct_item",
              "signature": "pub struct MigrationGeneration(u64);",
              "docs": "Persistable non-secret generation value.",
              "attributes": "#[derive(Debug, PartialEq, Eq)]",
              "line": 493
            },
            {
              "name": "session::MigrationGeneration::initial",
              "kind": "function_item",
              "signature": "pub fn initial() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 496
            },
            {
              "name": "session::MigrationGeneration::from_persisted",
              "kind": "function_item",
              "signature": "pub fn from_persisted(value: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 500
            },
            {
              "name": "session::MigrationGeneration::value",
              "kind": "function_item",
              "signature": "pub fn value(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 504
            },
            {
              "name": "session::ReplacementPlan",
              "kind": "struct_item",
              "signature": "pub struct ReplacementPlan {\n\n}",
              "docs": "Retry-capable monotonic replacement plan bound to the exact old-session invariant.",
              "attributes": "#[derive(Debug)]",
              "line": 561
            },
            {
              "name": "session::ReplacementPlan::next_generation",
              "kind": "function_item",
              "signature": "pub fn next_generation(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 568
            },
            {
              "name": "session::ReplacementPlan::reserve_attempt",
              "kind": "function_item",
              "signature": "pub fn reserve_attempt(&mut self) -> Result<ReplacementAttempt, SecureSessionError>;",
              "docs": "Reserve one attempt before any network work. The plan advances first, so a\nfailed attempt can only retry at a higher generation.",
              "attributes": "",
              "line": 574
            },
            {
              "name": "session::ReplacementAttempt",
              "kind": "struct_item",
              "signature": "pub struct ReplacementAttempt {\n\n}",
              "docs": "Non-cloneable, one-use replacement attempt.",
              "attributes": "#[derive(Debug)]",
              "line": 589
            },
            {
              "name": "session::ReplacementAttempt::generation",
              "kind": "function_item",
              "signature": "pub fn generation(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 596
            },
            {
              "name": "session::SessionResourceSnapshot",
              "kind": "struct_item",
              "signature": "pub struct SessionResourceSnapshot {\npub resource_id: u64,\n/// Raw encrypted inbound frame bytes admitted by the outer governor.\n\npub bytes_read: u64,\npub bytes_written: u64,\npub read_operations: u64,\npub write_operations: u64,\n/// Total authenticated inbound plus physically committed outbound keepalives.\n\npub keepalive_operations: u64\n}",
              "docs": "Point-in-time local accounting for one protected substream.",
              "attributes": "#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]",
              "line": 612
            },
            {
              "name": "session::SecureSession",
              "kind": "struct_item",
              "signature": "pub struct SecureSession<S> {\n\n}",
              "docs": "Confirmed Protocol 1.0 secure session.",
              "attributes": "",
              "line": 665
            },
            {
              "name": "session::SecureSession<S>::establish",
              "kind": "function_item",
              "signature": "pub async fn establish(\n        transport: AuthenticatedTransport<S>,\n        options: SecureSessionOptions,\n        context: SessionBootstrapContext,\n        generation: MigrationGeneration,\n        policy: SessionPolicy,\n        clock: Arc<dyn SessionClock>,\n    ) -> Result<Self, SecureSessionError>;",
              "docs": "",
              "attributes": "",
              "line": 687
            },
            {
              "name": "session::SecureSession<S>::establish_replacement",
              "kind": "function_item",
              "signature": "pub async fn establish_replacement(\n        transport: AuthenticatedTransport<S>,\n        options: SecureSessionOptions,\n        context: SessionBootstrapContext,\n        attempt: ReplacementAttempt,\n        policy: SessionPolicy,\n        clock: Arc<dyn SessionClock>,\n    ) -> Result<Self, SecureSessionError>;",
              "docs": "",
              "attributes": "",
              "line": 698
            },
            {
              "name": "session::SecureSession<S>::confirmed_bootstrap",
              "kind": "function_item",
              "signature": "pub fn confirmed_bootstrap(&self) -> &SessionBootstrapV1;",
              "docs": "",
              "attributes": "",
              "line": 723
            },
            {
              "name": "session::SecureSession<S>::channel_binding",
              "kind": "function_item",
              "signature": "pub fn channel_binding(&self) -> &ChannelBinding;",
              "docs": "",
              "attributes": "",
              "line": 727
            },
            {
              "name": "session::SecureSession<S>::binding_digest",
              "kind": "function_item",
              "signature": "pub fn binding_digest(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 731
            },
            {
              "name": "session::SecureSession<S>::policy",
              "kind": "function_item",
              "signature": "pub fn policy(&self) -> &SessionPolicy;",
              "docs": "",
              "attributes": "",
              "line": 735
            },
            {
              "name": "session::SecureSession<S>::flow_controller",
              "kind": "function_item",
              "signature": "pub fn flow_controller(&self) -> SessionFlowController;",
              "docs": "",
              "attributes": "",
              "line": 739
            },
            {
              "name": "session::SecureSession<S>::application_auth_transcript",
              "kind": "function_item",
              "signature": "pub fn application_auth_transcript(\n        &self,\n        inputs: OpaqueApplicationAuthInputs,\n    ) -> Result<ApplicationAuthTranscriptV1, ProtocolError>;",
              "docs": "Construct exact proof bytes only. This is not authorization.",
              "attributes": "",
              "line": 744
            },
            {
              "name": "session::SecureSession<S>::resource_snapshot",
              "kind": "function_item",
              "signature": "pub fn resource_snapshot(&self) -> SessionResourceSnapshot;",
              "docs": "",
              "attributes": "",
              "line": 755
            },
            {
              "name": "session::SecureSession<S>::is_terminal",
              "kind": "function_item",
              "signature": "pub fn is_terminal(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 766
            },
            {
              "name": "session::SecureSession<S>::begin_replacement",
              "kind": "function_item",
              "signature": "pub fn begin_replacement(&mut self) -> Result<ReplacementPlan, ProtocolError>;",
              "docs": "",
              "attributes": "",
              "line": 770
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-swarm",
      "version": "0.1.0",
      "source": "sigil/weave/network/weave-swarm",
      "manifestSha256": "fc24e9f9166da474312248ae6f5530e75ac26c9bf55f8075782ce5ba851da3d8",
      "features": {
        "default": [],
        "mock": []
      },
      "publish": true,
      "url": "/reference/rust/weave-swarm",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/network/weave-swarm/src/lib.rs",
          "sha256": "fa4baeb0031e36f14a00251686a0dc75f01afc44ae8e4ad07f71aa182b6a7a78",
          "attributes": "",
          "items": [
            {
              "name": "runtime",
              "kind": "module",
              "signature": "pub mod runtime;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use config::SwarmConfig;",
              "kind": "use_declaration",
              "signature": "pub use config::SwarmConfig;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "pub use connection::{Connection, ConnectionState, ConnectionStats, PeerId};",
              "kind": "use_declaration",
              "signature": "pub use connection::{Connection, ConnectionState, ConnectionStats, PeerId};",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "pub use error::{\n    LocalErrorCode, Result, RuntimeError, RuntimeEventCode, StableErrorCode, SwarmError,\n};",
              "kind": "use_declaration",
              "signature": "pub use error::{\n    LocalErrorCode, Result, RuntimeError, RuntimeEventCode, StableErrorCode, SwarmError,\n};",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "pub use events::{DisconnectReason, SwarmEvent};",
              "kind": "use_declaration",
              "signature": "pub use events::{DisconnectReason, SwarmEvent};",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use priority::Priority;",
              "kind": "use_declaration",
              "signature": "pub use priority::Priority;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use swarm::Swarm;",
              "kind": "use_declaration",
              "signature": "pub use swarm::Swarm;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "pub use topic::{JoinOptions, TopicId, TopicState, UpdateOptions};",
              "kind": "use_declaration",
              "signature": "pub use topic::{JoinOptions, TopicId, TopicState, UpdateOptions};",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "pub use metrics::SwarmMetrics;",
              "kind": "use_declaration",
              "signature": "pub use metrics::SwarmMetrics;",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use weave_dht::{AnnounceOpts, LocalRelayConfig, PeerInfo, WeaveDhtConfig};",
              "kind": "use_declaration",
              "signature": "pub use weave_dht::{AnnounceOpts, LocalRelayConfig, PeerInfo, WeaveDhtConfig};",
              "docs": "",
              "attributes": "",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/network/weave-swarm/src/config.rs",
          "sha256": "dba4bf4fcb4d05ea93683c46673d0256011b08bf351e5129059da7b039b0907f",
          "attributes": "",
          "items": [
            {
              "name": "config::SwarmConfig",
              "kind": "struct_item",
              "signature": "pub struct SwarmConfig {\n/// Maximum total connections\n\npub max_connections: usize,\n/// Maximum peers per topic\n\npub max_peers_per_topic: usize,\n/// Maximum connection attempts per peer\n\npub max_retries: usize,\n/// Connection timeout\n\npub connection_timeout: Duration,\n/// Verify peer ownership via human roots\n\npub verify_ownership: bool,\n/// DHT bootstrap nodes\n\npub bootstrap_nodes: Vec<String>,\n/// Keep-alive interval\n\npub keep_alive_interval: Duration,\n/// Enable connection deduplication\n\npub deduplicate: bool,\n/// Listen address (None = auto)\n\npub listen_addr: Option<String>,\n/// Listen port (0 = random)\n\npub listen_port: u16,\n/// Backoff configuration\n\n#[serde(default)]\npub backoff: BackoffConfig,\n/// NAT traversal and relay configuration\n\n#[serde(default)]\npub nat: NatConfig,\n/// Resource limits\n\n#[serde(default)]\npub limits: LimitsConfig,\n/// Telemetry configuration\n\n#[serde(default)]\npub telemetry: TelemetryConfig,\n/// Firewall callback enabled (placeholder toggle)\n\n#[serde(default)]\npub firewall_enabled: bool\n}",
              "docs": "Swarm configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "config::SwarmConfig::minimal",
              "kind": "function_item",
              "signature": "pub fn minimal() -> Self;",
              "docs": "Create a minimal config for testing",
              "attributes": "",
              "line": 84
            },
            {
              "name": "config::SwarmConfig::production",
              "kind": "function_item",
              "signature": "pub fn production() -> Self;",
              "docs": "Create a production config",
              "attributes": "",
              "line": 120
            },
            {
              "name": "config::SwarmConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&mut self);",
              "docs": "Validate and clamp configuration",
              "attributes": "",
              "line": 156
            },
            {
              "name": "config::BackoffConfig",
              "kind": "struct_item",
              "signature": "pub struct BackoffConfig {\npub initial_ms: u64,\npub max_ms: u64,\npub multiplier: f64,\n/// 0.0 - 1.0\n\npub jitter_pct: f64\n}",
              "docs": "Exponential backoff configuration with jitter",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 195
            },
            {
              "name": "config::NatConfig",
              "kind": "struct_item",
              "signature": "pub struct NatConfig {\npub enable_hole_punching: bool,\npub enable_upnp: bool,\npub relay_fallback: bool\n}",
              "docs": "NAT traversal configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 216
            },
            {
              "name": "config::LimitsConfig",
              "kind": "struct_item",
              "signature": "pub struct LimitsConfig {\npub frame_size_cap_bytes: usize,\npub per_peer_rate_limit_per_sec: u64\n}",
              "docs": "Limits configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 234
            },
            {
              "name": "config::TelemetryConfig",
              "kind": "struct_item",
              "signature": "pub struct TelemetryConfig {\npub enable_metrics: bool,\npub metrics_interval_ms: u64\n}",
              "docs": "Telemetry configuration",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 250
            }
          ],
          "parseErrors": false
        },
        {
          "module": "connection",
          "source": "sigil/weave/network/weave-swarm/src/connection.rs",
          "sha256": "0a7d4f06055b385ccef73838354bbe757b089abb0e7ec792354f421ec9a54c84",
          "attributes": "",
          "items": [
            {
              "name": "connection::PeerId",
              "kind": "struct_item",
              "signature": "pub struct PeerId(pub [u8; 32]);",
              "docs": "Peer identifier",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "connection::PeerId::from_public_key",
              "kind": "function_item",
              "signature": "pub fn from_public_key(key: &[u8; 32]) -> Self;",
              "docs": "Create from public key",
              "attributes": "",
              "line": 23
            },
            {
              "name": "connection::PeerId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "Get as bytes",
              "attributes": "",
              "line": 28
            },
            {
              "name": "connection::ConnectionState",
              "kind": "enum_item",
              "signature": "pub enum ConnectionState {\n    /// Handshake in progress\n    Handshaking,\n    /// Connected and ready\n    Connected,\n    /// Closing\n    Closing,\n    /// Closed\n    Closed,\n}",
              "docs": "Connection state",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 41
            },
            {
              "name": "connection::ConnectionStats",
              "kind": "struct_item",
              "signature": "pub struct ConnectionStats {\n/// Bytes sent\n\npub bytes_sent: AtomicU64,\n/// Bytes received\n\npub bytes_received: AtomicU64,\n/// Messages sent\n\npub messages_sent: AtomicU64,\n/// Messages received\n\npub messages_received: AtomicU64,\n/// Connection established time\n\npub connected_at: Option<Instant>\n}",
              "docs": "Connection statistics",
              "attributes": "#[derive(Debug, Default)]",
              "line": 54
            },
            {
              "name": "connection::ConnectionStats::duration",
              "kind": "function_item",
              "signature": "pub fn duration(&self) -> Option<Duration>;",
              "docs": "Get connection duration",
              "attributes": "",
              "line": 69
            },
            {
              "name": "connection::ConnectionStats::record_sent",
              "kind": "function_item",
              "signature": "pub fn record_sent(&self, bytes: usize);",
              "docs": "Record bytes sent",
              "attributes": "",
              "line": 74
            },
            {
              "name": "connection::ConnectionStats::record_received",
              "kind": "function_item",
              "signature": "pub fn record_received(&self, bytes: usize);",
              "docs": "Record bytes received",
              "attributes": "",
              "line": 80
            },
            {
              "name": "connection::Connection",
              "kind": "struct_item",
              "signature": "pub struct Connection {\n/// Peer identity\n\npub peer_id: PeerId,\n// No DID in core\n/// Encrypted stream\n\npub stream: Arc<Mutex<Box<dyn ConnectionStream>>>,\n/// Topics shared with this peer\n\npub topics: DashSet<TopicId>,\n/// Connection state\n\npub state: Arc<RwLock<ConnectionState>>,\n/// Statistics\n\npub stats: Arc<ConnectionStats>,\n/// Maximum allowed frame size in bytes\n\npub max_frame_size: usize\n}",
              "docs": "Active connection to a peer",
              "attributes": "",
              "line": 88
            },
            {
              "name": "connection::Connection::new",
              "kind": "function_item",
              "signature": "pub fn new<S>(peer_id: PeerId, stream: S, max_frame_size: usize) -> Self\n    where\n        S: AsyncRead + AsyncWrite + Send + Sync + Unpin + 'static,;",
              "docs": "Create new connection",
              "attributes": "",
              "line": 111
            },
            {
              "name": "connection::Connection::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "Check if connection is active",
              "attributes": "",
              "line": 130
            },
            {
              "name": "connection::Connection::add_topic",
              "kind": "function_item",
              "signature": "pub fn add_topic(&self, topic: TopicId);",
              "docs": "Add a topic to this connection",
              "attributes": "",
              "line": 138
            },
            {
              "name": "connection::Connection::remove_topic",
              "kind": "function_item",
              "signature": "pub fn remove_topic(&self, topic: &TopicId) -> bool;",
              "docs": "Remove a topic from this connection",
              "attributes": "",
              "line": 143
            },
            {
              "name": "connection::Connection::has_topics",
              "kind": "function_item",
              "signature": "pub fn has_topics(&self) -> bool;",
              "docs": "Check if connection has any topics",
              "attributes": "",
              "line": 148
            },
            {
              "name": "connection::Connection::send",
              "kind": "function_item",
              "signature": "pub async fn send(&self, data: &[u8]) -> Result<(), std::io::Error>;",
              "docs": "Send data over the connection",
              "attributes": "",
              "line": 153
            },
            {
              "name": "connection::Connection::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&self) -> Result<(ChannelId, Frame), std::io::Error>;",
              "docs": "Receive data from the connection",
              "attributes": "",
              "line": 168
            },
            {
              "name": "connection::ConnectionStream",
              "kind": "trait_item",
              "signature": "pub trait ConnectionStream: AsyncRead + AsyncWrite + Send + Sync + Unpin {}",
              "docs": "Trait alias for connection streams",
              "attributes": "",
              "line": 189
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/network/weave-swarm/src/error.rs",
          "sha256": "45e23e6f67779a47035acb1396cb1f60b578f448ba1870459c8cdc54ce3dcdcd",
          "attributes": "",
          "items": [
            {
              "name": "error::SwarmError",
              "kind": "enum_item",
              "signature": "pub enum SwarmError {\n    #[error(\"DHT error: {0}\")]\n    Dht(#[from] anyhow::Error),\n\n    // Identity errors removed from core swarm\n    #[error(\"Secret stream error: {0}\")]\n    SecretStream(String),\n\n    #[error(\"Connection error: {0}\")]\n    Connection(String),\n\n    #[error(\"Handshake failed: {0}\")]\n    HandshakeFailed(String),\n\n    #[error(\"Verification failed for peer {0}: {1}\")]\n    VerificationFailed(PeerId, String),\n\n    #[error(\"Max connections reached: {0}\")]\n    MaxConnectionsReached(usize),\n\n    #[error(\"Max peers per topic reached: {0}\")]\n    MaxPeersPerTopicReached(usize),\n\n    #[error(\"Topic not found: {0:?}\")]\n    TopicNotFound(TopicId),\n\n    #[error(\"Peer not found: {0:?}\")]\n    PeerNotFound(PeerId),\n\n    #[error(\"Already connected to peer: {0:?}\")]\n    AlreadyConnected(PeerId),\n\n    #[error(\"Connection timeout\")]\n    ConnectionTimeout,\n\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Channel send error\")]\n    ChannelSend,\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n}",
              "docs": "Swarm errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::StableErrorCode",
              "kind": "enum_item",
              "signature": "pub enum StableErrorCode {\n    NoRoute,\n    RelayUnavailable,\n    DirectUpgradeFailed,\n    TransportAuthenticationFailed,\n    PrivateDiscoveryRejected,\n    ApplicationAuthorizationDenied,\n    UnsupportedCriticalFeature,\n    AddressPolicyDenied,\n    ResourceLimitExceeded,\n    RuntimeSuspended,\n    NetworkChanged,\n    ProtocolDowngradeDenied,\n}",
              "docs": "Stable Protocol 1.0 error families exposed without diagnostic detail.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 55
            },
            {
              "name": "error::StableErrorCode::as_str",
              "kind": "function_item",
              "signature": "pub const fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "error::LocalErrorCode",
              "kind": "enum_item",
              "signature": "pub enum LocalErrorCode {\n    ConfigurationInvalid,\n    IdentityUnavailable,\n    IdentityLeaseUnavailable,\n    BackendUnavailable,\n    InvariantViolation,\n    StaleEventRejected,\n    CommandChannelClosed,\n    EventChannelClosed,\n    EventQueueSaturated,\n    ActorTaskFailed,\n    CommandIdExhausted,\n    OperationIdExhausted,\n}",
              "docs": "Stable local-only runtime failure families. These are never wire responses.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 91
            },
            {
              "name": "error::LocalErrorCode::as_str",
              "kind": "function_item",
              "signature": "pub const fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 107
            },
            {
              "name": "error::RuntimeEventCode",
              "kind": "enum_item",
              "signature": "pub enum RuntimeEventCode {\n    Protocol(StableErrorCode),\n    Local(LocalErrorCode),\n}",
              "docs": "Event-safe code that distinguishes Protocol 1.0 families from local failures.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 127
            },
            {
              "name": "error::RuntimeEventCode::as_str",
              "kind": "function_item",
              "signature": "pub const fn as_str(self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "error::RuntimeError",
              "kind": "enum_item",
              "signature": "pub enum RuntimeError {\n    #[error(\"runtime activation mismatch: {0}\")]\n    ActivationMismatch(&'static str),\n\n    #[error(\"persisted transport identity is invalid: {0}\")]\n    IdentityInvalid(&'static str),\n\n    #[error(\"persisted transport identity I/O failed: {0}\")]\n    IdentityIo(std::io::Error),\n\n    #[error(\"exclusive identity-store lease is unavailable\")]\n    IdentityLeaseUnavailable,\n\n    #[error(\"runtime resource limit exceeded: {0}\")]\n    ResourceLimitExceeded(&'static str),\n\n    #[error(\"protocol identifier is invalid or not registered\")]\n    ProtocolInvalid,\n\n    #[error(\"protocol identifier is already registered\")]\n    ProtocolDuplicate,\n\n    #[error(\"canonical transport PeerId is invalid\")]\n    TransportPeerIdInvalid,\n\n    #[error(\"peer is blocked: {0}\")]\n    PeerBlocked(PeerId),\n\n    #[error(\"duplicate connection for peer: {0}\")]\n    DuplicateConnection(PeerId),\n\n    #[error(\"connection registry invariant failed: {0}\")]\n    RegistryInvariant(&'static str),\n\n    #[error(\"stale runtime event rejected: {0}\")]\n    StaleRuntimeEvent(&'static str),\n\n    #[error(\"peer is not connected through the authoritative registry: {0}\")]\n    PeerNotConnected(PeerId),\n\n    #[error(\"runtime command queue is full\")]\n    CommandQueueFull,\n\n    #[error(\"runtime command channel is closed\")]\n    CommandChannelClosed,\n\n    #[error(\"runtime command response channel is closed\")]\n    CommandResponseClosed,\n\n    #[error(\"runtime critical-event consumer is closed\")]\n    EventConsumerClosed,\n\n    #[error(\"runtime critical-event queue is saturated\")]\n    EventQueueSaturated,\n\n    #[error(\"runtime actor task failed\")]\n    RuntimeTaskFailed,\n\n    #[error(\"runtime command identifier exhausted\")]\n    CommandIdExhausted,\n\n    #[error(\"runtime operation identifier exhausted\")]\n    OperationIdExhausted,\n\n    #[error(\"one-swarm backend is unavailable\")]\n    BackendUnavailable,\n}",
              "docs": "Errors emitted by the D1a fail-closed runtime primitive.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 143
            },
            {
              "name": "error::RuntimeError::event_code",
              "kind": "function_item",
              "signature": "pub const fn event_code(&self) -> RuntimeEventCode;",
              "docs": "",
              "attributes": "",
              "line": 226
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, SwarmError>;",
              "docs": "Result type alias",
              "attributes": "",
              "line": 277
            }
          ],
          "parseErrors": false
        },
        {
          "module": "events",
          "source": "sigil/weave/network/weave-swarm/src/events.rs",
          "sha256": "a7970b4eadc0d4db5e1c63d9959f666c981e713ceb705a6a36303cd138418851",
          "attributes": "",
          "items": [
            {
              "name": "events::SwarmEvent",
              "kind": "enum_item",
              "signature": "pub enum SwarmEvent {\n    /// New peer connection established\n    Connection { peer_id: PeerId },\n\n    /// Peer disconnected\n    Disconnection {\n        peer_id: PeerId,\n        reason: DisconnectReason,\n    },\n\n    /// Joined a topic\n    TopicJoined { topic: TopicId },\n\n    /// Left a topic\n    TopicLeft { topic: TopicId },\n\n    /// Error occurred\n    Error {\n        peer_id: Option<PeerId>,\n        error: String,\n    },\n\n    /// Received data from peer\n    Data {\n        peer_id: PeerId,\n        topic: TopicId,\n        data: Vec<u8>,\n    },\n\n    /// Peer joined topic\n    PeerJoined { peer_id: PeerId, topic: TopicId },\n\n    /// Peer left topic\n    PeerLeft { peer_id: PeerId, topic: TopicId },\n\n    /// Received raw message from peer (un--namespaced)\n    RawMessage { peer_id: PeerId, data: Vec<u8> },\n}",
              "docs": "Swarm events",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "events::DisconnectReason",
              "kind": "enum_item",
              "signature": "pub enum DisconnectReason {\n    /// Local node initiated disconnect\n    LocalClose,\n    /// Remote peer closed connection\n    RemoteClose,\n    /// Connection error\n    Error,\n    /// Connection timeout\n    Timeout,\n    /// Protocol violation\n    ProtocolViolation,\n    /// No shared topics\n    NoSharedTopics,\n    /// Duplicate connection\n    Duplicate,\n    /// Verification failed\n    VerificationFailed,\n}",
              "docs": "Reasons for disconnection",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 49
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/weave/network/weave-swarm/src/metrics.rs",
          "sha256": "f8d0bdf2292dd335be5f39d9fbe81b47ada4cf7f94e94de46b1438e6bf998aee",
          "attributes": "",
          "items": [
            {
              "name": "metrics::SwarmMetrics",
              "kind": "struct_item",
              "signature": "pub struct SwarmMetrics {\npub connections_total: AtomicU64,\npub disconnections_total: AtomicU64,\npub join_events_total: AtomicU64,\npub leave_events_total: AtomicU64,\npub keepalives_sent_total: AtomicU64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default)]",
              "line": 6
            },
            {
              "name": "metrics::SwarmMetrics::export_prometheus_text",
              "kind": "function_item",
              "signature": "pub fn export_prometheus_text(&self, namespace: &str) -> String;",
              "docs": "",
              "attributes": "",
              "line": 15
            }
          ],
          "parseErrors": false
        },
        {
          "module": "priority",
          "source": "sigil/weave/network/weave-swarm/src/priority.rs",
          "sha256": "49c235965f551e48fa33f768b27812707faaa928fd6ef0477ee1abd87868e787",
          "attributes": "",
          "items": [
            {
              "name": "priority::Priority",
              "kind": "struct_item",
              "signature": "pub struct Priority {\n/// Explicit priority set by user (0-255, higher is better)\n\npub explicit: u8,\n/// Number of shared topics (0-255)\n\npub shared_topics: u8,\n/// Retry count (0-255, lower is better)\n\npub retries: u8\n}",
              "docs": "Connection priority",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "priority::Priority::new",
              "kind": "function_item",
              "signature": "pub fn new(explicit: u8, shared_topics: u8, retries: u8) -> Self;",
              "docs": "Create a new priority",
              "attributes": "",
              "line": 21
            },
            {
              "name": "priority::Priority::high",
              "kind": "function_item",
              "signature": "pub fn high() -> Self;",
              "docs": "High priority",
              "attributes": "",
              "line": 39
            },
            {
              "name": "priority::Priority::low",
              "kind": "function_item",
              "signature": "pub fn low() -> Self;",
              "docs": "Low priority",
              "attributes": "",
              "line": 48
            },
            {
              "name": "priority::Priority::after_retry",
              "kind": "function_item",
              "signature": "pub fn after_retry(mut self) -> Self;",
              "docs": "Decrease priority after retry",
              "attributes": "",
              "line": 57
            },
            {
              "name": "priority::Priority::with_shared_topics",
              "kind": "function_item",
              "signature": "pub fn with_shared_topics(mut self, count: usize) -> Self;",
              "docs": "Update shared topics count",
              "attributes": "",
              "line": 63
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime",
          "source": "sigil/weave/network/weave-swarm/src/runtime/mod.rs",
          "sha256": "757470c1e774f7e378a4ea1ccee5678471a705e348e07ca9d8258df96fdb44c9",
          "attributes": "",
          "items": [
            {
              "name": "pub use activation::{EndpointProfile, MinimumPrivacyProfile, RuntimeActivationV1};",
              "kind": "use_declaration",
              "signature": "pub use activation::{EndpointProfile, MinimumPrivacyProfile, RuntimeActivationV1};",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "pub use backend::{BackendCloseDisposition, CloseId, ConnectionId, DialAttemptId, StreamId};",
              "kind": "use_declaration",
              "signature": "pub use backend::{BackendCloseDisposition, CloseId, ConnectionId, DialAttemptId, StreamId};",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "pub use limits::RuntimeLimits;",
              "kind": "use_declaration",
              "signature": "pub use limits::RuntimeLimits;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "pub use protocol::{ProtocolId, ProtocolRegistry};",
              "kind": "use_declaration",
              "signature": "pub use protocol::{ProtocolId, ProtocolRegistry};",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use registry::ConnectionRegistry;",
              "kind": "use_declaration",
              "signature": "pub use registry::ConnectionRegistry;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use substream::{\n    AuthenticatedSubstream, CanonicalTransportPeerId, RoleOrderedTransportPeerIds, TransportRole,\n};",
              "kind": "use_declaration",
              "signature": "pub use substream::{\n    AuthenticatedSubstream, CanonicalTransportPeerId, RoleOrderedTransportPeerIds, TransportRole,\n};",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "runtime::CommandId",
              "kind": "struct_item",
              "signature": "pub struct CommandId(u64);",
              "docs": "Monotonic local command identifier.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 47
            },
            {
              "name": "runtime::CommandId::get",
              "kind": "function_item",
              "signature": "pub fn get(self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "runtime::OperationId",
              "kind": "enum_item",
              "signature": "pub enum OperationId {\n    Dial(DialAttemptId),\n    StreamOpen(StreamId),\n    StreamClose(CloseId),\n}",
              "docs": "Correlation identity for one asynchronous runtime operation.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]",
              "line": 57
            },
            {
              "name": "runtime::OperationOutcome",
              "kind": "enum_item",
              "signature": "pub enum OperationOutcome {\n    Succeeded,\n    Failed(RuntimeEventCode),\n    Cancelled(RuntimeEventCode),\n}",
              "docs": "Exactly one typed terminal outcome for a submitted asynchronous operation.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 65
            },
            {
              "name": "runtime::RuntimeCommand",
              "kind": "enum_item",
              "signature": "pub enum RuntimeCommand {\n    Dial {\n        peer_id: PeerId,\n    },\n    Disconnect {\n        peer_id: PeerId,\n    },\n    OpenApplicationStream {\n        peer_id: PeerId,\n        protocol: ProtocolId,\n    },\n    DhtQuery {\n        query_id: u64,\n        key: [u8; 32],\n    },\n    BlockPeer {\n        peer_id: PeerId,\n    },\n    UnblockPeer {\n        peer_id: PeerId,\n    },\n    Shutdown,\n}",
              "docs": "Commands accepted by the bounded runtime actor.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 73
            },
            {
              "name": "runtime::CommandDisposition",
              "kind": "enum_item",
              "signature": "pub enum CommandDisposition {\n    Queued,\n    Completed {\n        operation_id: Option<OperationId>,\n        outcome: OperationOutcome,\n    },\n}",
              "docs": "Per-command disposition.\n\n`Queued` is deliberately not a success claim: it applies to commands whose\nbackend work has only entered the bounded backend queue. `Completed` is used\nonly when a correlated asynchronous operation reached a typed terminal\ntransition.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 104
            },
            {
              "name": "runtime::CommandResult",
              "kind": "struct_item",
              "signature": "pub struct CommandResult {\npub command_id: CommandId,\npub disposition: CommandDisposition\n}",
              "docs": "Result for one command: either honest queue admission or a terminal outcome.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 114
            },
            {
              "name": "runtime::CommandReceipt",
              "kind": "struct_item",
              "signature": "pub struct CommandReceipt {\n\n}",
              "docs": "Receipt returned by nonblocking command submission.",
              "attributes": "",
              "line": 120
            },
            {
              "name": "runtime::CommandReceipt::command_id",
              "kind": "function_item",
              "signature": "pub fn command_id(&self) -> CommandId;",
              "docs": "",
              "attributes": "",
              "line": 126
            },
            {
              "name": "runtime::CommandReceipt::result",
              "kind": "function_item",
              "signature": "pub async fn result(self) -> Result<CommandResult, RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 130
            },
            {
              "name": "runtime::RuntimeEvent",
              "kind": "enum_item",
              "signature": "pub enum RuntimeEvent<S>\nwhere\n    S: AsyncRead + AsyncWrite + Unpin + Send + 'static,\n{\n    Activated {\n        peer_id: CanonicalTransportPeerId,\n    },\n    CommandRejected {\n        command_id: CommandId,\n        peer_id: Option<PeerId>,\n        code: RuntimeEventCode,\n    },\n    OperationRejected {\n        operation_id: Option<OperationId>,\n        peer_id: Option<PeerId>,\n        code: RuntimeEventCode,\n    },\n    Fatal {\n        operation_id: Option<OperationId>,\n        code: RuntimeEventCode,\n    },\n    ConnectionEstablished {\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n    },\n    ConnectionClosed {\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n    },\n    DialCompleted {\n        command_id: CommandId,\n        attempt_id: DialAttemptId,\n        peer_id: PeerId,\n        outcome: OperationOutcome,\n    },\n    ApplicationSubstreamOpened {\n        command_id: Option<CommandId>,\n        peer_id: PeerId,\n        substream: AuthenticatedSubstream<S>,\n    },\n    /// Terminal non-success for an outbound open. `outcome` preserves whether\n    /// the physical terminal was a failure or a requested cancellation.\n    ApplicationStreamOpenFailed {\n        command_id: CommandId,\n        peer_id: PeerId,\n        stream_id: StreamId,\n        outcome: OperationOutcome,\n    },\n    ApplicationStreamCloseCompleted {\n        close_id: CloseId,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n        stream_id: Option<StreamId>,\n        outcome: OperationOutcome,\n    },\n    ApplicationStreamTerminated {\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n        stream_id: StreamId,\n        code: Option<RuntimeEventCode>,\n    },\n    DhtActivity {\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n        query_id: u64,\n    },\n    Stopped,\n}",
              "docs": "Critical state events. Normal capacity is finite and a fatal slot is reserved.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "runtime::RuntimeHandle",
              "kind": "struct_item",
              "signature": "pub struct RuntimeHandle {\n\n}",
              "docs": "Backpressured command handle for the one actor.",
              "attributes": "",
              "line": 330
            },
            {
              "name": "runtime::RuntimeHandle::peer_id",
              "kind": "function_item",
              "signature": "pub fn peer_id(&self) -> PeerId;",
              "docs": "",
              "attributes": "",
              "line": 339
            },
            {
              "name": "runtime::RuntimeHandle::transport_peer_id",
              "kind": "function_item",
              "signature": "pub fn transport_peer_id(&self) -> &CanonicalTransportPeerId;",
              "docs": "",
              "attributes": "",
              "line": 343
            },
            {
              "name": "runtime::RuntimeHandle::command",
              "kind": "function_item",
              "signature": "pub async fn command(&self, command: RuntimeCommand) -> Result<CommandResult, RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 347
            },
            {
              "name": "runtime::RuntimeHandle::try_command",
              "kind": "function_item",
              "signature": "pub fn try_command(&self, command: RuntimeCommand) -> Result<CommandReceipt, RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 358
            },
            {
              "name": "runtime::RuntimeHandle::stopped",
              "kind": "function_item",
              "signature": "pub async fn stopped(self) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 369
            },
            {
              "name": "runtime::RuntimeEvents",
              "kind": "struct_item",
              "signature": "pub struct RuntimeEvents<S>\nwhere\n    S: AsyncRead + AsyncWrite + Unpin + Send + 'static, {\n\n}",
              "docs": "Single-consumer critical-event stream.",
              "attributes": "",
              "line": 408
            },
            {
              "name": "runtime::RuntimeEvents<S>::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&mut self) -> Option<RuntimeEvent<S>>;",
              "docs": "",
              "attributes": "",
              "line": 419
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::activation",
          "source": "sigil/weave/network/weave-swarm/src/runtime/activation.rs",
          "sha256": "5038a5a173d2cffdb0693b105985fcf8155cb9aedd8266fa37d90ca49cc6678b",
          "attributes": "",
          "items": [
            {
              "name": "runtime::activation::EndpointProfile",
              "kind": "enum_item",
              "signature": "pub enum EndpointProfile {\n    NativeFull,\n    NativeRestricted,\n    PortableMacosAlpha,\n    OfflineLan,\n}",
              "docs": "Endpoint profiles declared for Protocol 1.0 public alpha.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 11
            },
            {
              "name": "runtime::activation::MinimumPrivacyProfile",
              "kind": "enum_item",
              "signature": "pub enum MinimumPrivacyProfile {\n    Public,\n    PrivateStandard,\n    PrivateMetadata,\n}",
              "docs": "Minimum privacy profile for an activated runtime.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 20
            },
            {
              "name": "runtime::activation::RuntimeActivationV1",
              "kind": "struct_item",
              "signature": "pub struct RuntimeActivationV1 {\npub canonical_config_digest: [u8; 32],\npub transport_peer_id: CanonicalTransportPeerId,\npub endpoint_profile: EndpointProfile,\npub service_role_bitmap: u16,\npub minimum_privacy_profile: MinimumPrivacyProfile,\npub privacy_compartment_ref: Option<[u8; 32]>,\npub privacy_epoch: Option<u64>,\npub discovery_key_set_digest: Option<[u8; 32]>,\npub allowed_scope_set_digest: Option<[u8; 32]>,\npub protocol_registry_digest: [u8; 32],\npub authorizer_registration_digest: [u8; 32],\npub resource_limits_digest: [u8; 32],\npub telemetry_policy_digest: [u8; 32],\npub installed_at_ms: u64\n}",
              "docs": "Immutable activation material installed before the backend may listen or dial.\n\nDigests are supplied by the strict configuration and authorizer layers. This\ntype deliberately contains no secret bytes.",
              "attributes": "#[derive(Clone, PartialEq, Eq)]",
              "line": 31
            },
            {
              "name": "runtime::activation::RuntimeActivationV1::validate",
              "kind": "function_item",
              "signature": "pub fn validate(\n        &self,\n        local_peer_id: &CanonicalTransportPeerId,\n        protocols: &ProtocolRegistry,\n        limits: &RuntimeLimits,\n    ) -> Result<(), RuntimeError>;",
              "docs": "Validate the activation against runtime-owned immutable inputs.",
              "attributes": "",
              "line": 69
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::backend",
          "source": "sigil/weave/network/weave-swarm/src/runtime/backend.rs",
          "sha256": "41726e1cf5722817701afaac33789dae475d0c6d10530472b4b61e92ceeb448d",
          "attributes": "",
          "items": [
            {
              "name": "runtime::backend::ConnectionId",
              "kind": "struct_item",
              "signature": "pub struct ConnectionId(pub u64);",
              "docs": "Runtime-assigned identifier for a transport connection.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 15
            },
            {
              "name": "runtime::backend::StreamId",
              "kind": "struct_item",
              "signature": "pub struct StreamId(pub u64);",
              "docs": "Runtime-assigned identifier for an application substream.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 19
            },
            {
              "name": "runtime::backend::DialAttemptId",
              "kind": "struct_item",
              "signature": "pub struct DialAttemptId(u64);",
              "docs": "Unique identity of one outbound dial attempt.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 23
            },
            {
              "name": "runtime::backend::DialAttemptId::get",
              "kind": "function_item",
              "signature": "pub fn get(self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "runtime::backend::CloseId",
              "kind": "struct_item",
              "signature": "pub struct CloseId(u64);",
              "docs": "Unique identity of one actor-requested stream close/reset.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 37
            },
            {
              "name": "runtime::backend::CloseId::get",
              "kind": "function_item",
              "signature": "pub fn get(self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "runtime::backend::BackendCloseDisposition",
              "kind": "enum_item",
              "signature": "pub enum BackendCloseDisposition {\n    Closed,\n    Reset,\n}",
              "docs": "Successful physical disposition acknowledged by the backend.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 51
            },
            {
              "name": "runtime::backend::sealed::Sealed",
              "kind": "trait_item",
              "signature": "pub trait Sealed {}",
              "docs": "",
              "attributes": "",
              "line": 205
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::limits",
          "source": "sigil/weave/network/weave-swarm/src/runtime/limits.rs",
          "sha256": "313be625e5e20becaa3e2a9e490eee9f393b4492a18a7d6ba7209e1b577ddfa7",
          "attributes": "",
          "items": [
            {
              "name": "runtime::limits::RuntimeLimits",
              "kind": "struct_item",
              "signature": "pub struct RuntimeLimits {\npub half_open_total: u32,\npub pre_identity_inbound: u32,\npub established_total: u32,\npub established_per_peer: u32,\npub application_streams_per_connection: u32,\npub application_streams_total: u32,\npub pending_dials_total: u32,\npub pending_dials_per_peer: u32,\npub pending_opens_total: u32,\npub pending_opens_per_peer: u32,\npub command_queue: u32,\npub event_queue: u32\n}",
              "docs": "D1a subset of the frozen client resource defaults.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 13
            },
            {
              "name": "runtime::limits::RuntimeLimits::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "runtime::limits::RuntimeLimits::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 82
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::protocol",
          "source": "sigil/weave/network/weave-swarm/src/runtime/protocol.rs",
          "sha256": "3249b2214e22a66434fc6be080f1b19d5bc8609fa6e8e905193ba2d22e64f2f5",
          "attributes": "",
          "items": [
            {
              "name": "runtime::protocol::ProtocolId",
              "kind": "struct_item",
              "signature": "pub struct ProtocolId(String);",
              "docs": "Validated Protocol 1.0 multistream identifier.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 20
            },
            {
              "name": "runtime::protocol::ProtocolId::parse",
              "kind": "function_item",
              "signature": "pub fn parse(value: &str) -> Result<Self, RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "runtime::protocol::ProtocolId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "runtime::protocol::ProtocolRegistry",
              "kind": "struct_item",
              "signature": "pub struct ProtocolRegistry {\n\n}",
              "docs": "Registry frozen before activation; it cannot be mutated through runtime commands.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 51
            },
            {
              "name": "runtime::protocol::ProtocolRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        application_protocols: impl IntoIterator<Item = ProtocolId>,\n    ) -> Result<Self, RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "runtime::protocol::ProtocolRegistry::contains",
              "kind": "function_item",
              "signature": "pub fn contains(&self, protocol: &ProtocolId) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "runtime::protocol::ProtocolRegistry::digest",
              "kind": "function_item",
              "signature": "pub fn digest(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 113
            },
            {
              "name": "runtime::protocol::ProtocolRegistry::iter",
              "kind": "function_item",
              "signature": "pub fn iter(&self) -> impl Iterator<Item = &ProtocolId>;",
              "docs": "",
              "attributes": "",
              "line": 117
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::registry",
          "source": "sigil/weave/network/weave-swarm/src/runtime/registry.rs",
          "sha256": "373f4dee20eb7b9ba48d37a8e711fd0a979b1d935e8009069f96eb3fc53c1aa9",
          "attributes": "",
          "items": [
            {
              "name": "runtime::registry::ConnectionRegistry",
              "kind": "struct_item",
              "signature": "pub struct ConnectionRegistry {\n\n}",
              "docs": "Registry shared by DHT, liveness, bans, limits, and application stream events.",
              "attributes": "#[derive(Debug)]",
              "line": 17
            },
            {
              "name": "runtime::registry::ConnectionRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new(limits: RuntimeLimits) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "runtime::registry::ConnectionRegistry::register_authenticated",
              "kind": "function_item",
              "signature": "pub fn register_authenticated(\n        &mut self,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n    ) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "runtime::registry::ConnectionRegistry::remove",
              "kind": "function_item",
              "signature": "pub fn remove(\n        &mut self,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n    ) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "runtime::registry::ConnectionRegistry::register_stream",
              "kind": "function_item",
              "signature": "pub fn register_stream(\n        &mut self,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n        stream_id: StreamId,\n    ) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "runtime::registry::ConnectionRegistry::remove_stream",
              "kind": "function_item",
              "signature": "pub fn remove_stream(\n        &mut self,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n        stream_id: StreamId,\n    ) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 142
            },
            {
              "name": "runtime::registry::ConnectionRegistry::require_shared_connection",
              "kind": "function_item",
              "signature": "pub fn require_shared_connection(\n        &self,\n        peer_id: PeerId,\n        connection_id: ConnectionId,\n    ) -> Result<(), RuntimeError>;",
              "docs": "",
              "attributes": "",
              "line": 173
            },
            {
              "name": "runtime::registry::ConnectionRegistry::has_stream",
              "kind": "function_item",
              "signature": "pub fn has_stream(&self, connection_id: ConnectionId, stream_id: StreamId) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 186
            },
            {
              "name": "runtime::registry::ConnectionRegistry::block",
              "kind": "function_item",
              "signature": "pub fn block(&mut self, peer_id: PeerId) -> Vec<ConnectionId>;",
              "docs": "",
              "attributes": "",
              "line": 192
            },
            {
              "name": "runtime::registry::ConnectionRegistry::unblock",
              "kind": "function_item",
              "signature": "pub fn unblock(&mut self, peer_id: PeerId);",
              "docs": "",
              "attributes": "",
              "line": 204
            },
            {
              "name": "runtime::registry::ConnectionRegistry::is_blocked",
              "kind": "function_item",
              "signature": "pub fn is_blocked(&self, peer_id: PeerId) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 208
            },
            {
              "name": "runtime::registry::ConnectionRegistry::is_connected",
              "kind": "function_item",
              "signature": "pub fn is_connected(&self, peer_id: PeerId) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 212
            }
          ],
          "parseErrors": false
        },
        {
          "module": "runtime::substream",
          "source": "sigil/weave/network/weave-swarm/src/runtime/substream.rs",
          "sha256": "0977e86eade4fedf76193ec9ebcf0a975f9bc83c328a7b5d40202516c1175ff2",
          "attributes": "",
          "items": [
            {
              "name": "runtime::substream::CanonicalTransportPeerId",
              "kind": "struct_item",
              "signature": "pub struct CanonicalTransportPeerId(Arc<[u8]>);",
              "docs": "Canonical binary inline-Ed25519 libp2p PeerId bytes.\n\nThe field is private, there is no serde/default conversion, and construction\nis crate-restricted to the version-pinned validator path.",
              "attributes": "#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 23
            },
            {
              "name": "runtime::substream::CanonicalTransportPeerId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "runtime::substream::TransportRole",
              "kind": "enum_item",
              "signature": "pub enum TransportRole {\n    Initiator,\n    Responder,\n}",
              "docs": "Role of the local peer in the authenticated transport connection.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 59
            },
            {
              "name": "runtime::substream::RoleOrderedTransportPeerIds",
              "kind": "struct_item",
              "signature": "pub struct RoleOrderedTransportPeerIds {\npub initiator: CanonicalTransportPeerId,\npub responder: CanonicalTransportPeerId\n}",
              "docs": "Canonical initiator/responder ordering required by T-B transcripts.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 66
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream",
              "kind": "struct_item",
              "signature": "pub struct AuthenticatedSubstream<S>\nwhere\n    S: AsyncRead + AsyncWrite + Unpin + Send + 'static, {\n\n}",
              "docs": "Non-forgeable arbitrary authenticated application substream.\n\nThis type carries transport facts only and grants no application authority.\nIt retains the global stream permit and raw stream in an actor-shared lifetime\nslot. Dropping it performs one nonblocking release transition; accounting is\nreleased only after typed backend close/reset acknowledgement or authoritative\nconnection teardown.",
              "attributes": "",
              "line": 200
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::stream_id",
              "kind": "function_item",
              "signature": "pub fn stream_id(&self) -> StreamId;",
              "docs": "",
              "attributes": "",
              "line": 258
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::connection_id",
              "kind": "function_item",
              "signature": "pub fn connection_id(&self) -> ConnectionId;",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::protocol",
              "kind": "function_item",
              "signature": "pub fn protocol(&self) -> &ProtocolId;",
              "docs": "",
              "attributes": "",
              "line": 266
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::local_peer_id",
              "kind": "function_item",
              "signature": "pub fn local_peer_id(&self) -> &CanonicalTransportPeerId;",
              "docs": "",
              "attributes": "",
              "line": 270
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::remote_peer_id",
              "kind": "function_item",
              "signature": "pub fn remote_peer_id(&self) -> &CanonicalTransportPeerId;",
              "docs": "",
              "attributes": "",
              "line": 274
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::role_ordered_peer_ids",
              "kind": "function_item",
              "signature": "pub fn role_ordered_peer_ids(&self) -> RoleOrderedTransportPeerIds;",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "runtime::substream::AuthenticatedSubstream<S>::into_secure_transport",
              "kind": "function_item",
              "signature": "pub fn into_secure_transport(\n        self,\n    ) -> Result<zer0_secret_stream::session::AuthenticatedTransport<Self>, RuntimeError>;",
              "docs": "Consume this non-forgeable outer substream into T-B's authenticated\ntransport capability.",
              "attributes": "",
              "line": 293
            }
          ],
          "parseErrors": false
        },
        {
          "module": "swarm",
          "source": "sigil/weave/network/weave-swarm/src/swarm.rs",
          "sha256": "07671d99fc19ebfae40a62d38e9deff13e5e9322695a48ca9ceee1bc28900f2c",
          "attributes": "",
          "items": [
            {
              "name": "swarm::Swarm",
              "kind": "struct_item",
              "signature": "pub struct Swarm {\n\n}",
              "docs": "Distributed networking swarm",
              "attributes": "",
              "line": 33
            },
            {
              "name": "swarm::Swarm::export_metrics_text",
              "kind": "function_item",
              "signature": "pub fn export_metrics_text(&self, namespace: &str) -> String;",
              "docs": "Export Prometheus metrics text",
              "attributes": "",
              "line": 74
            },
            {
              "name": "swarm::Swarm::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: SwarmConfig) -> Result<Self>;",
              "docs": "Create a new swarm",
              "attributes": "",
              "line": 79
            },
            {
              "name": "swarm::Swarm::events",
              "kind": "function_item",
              "signature": "pub fn events(&self) -> broadcast::Receiver<SwarmEvent>;",
              "docs": "Get event receiver",
              "attributes": "",
              "line": 124
            },
            {
              "name": "swarm::Swarm::local_peer_id",
              "kind": "function_item",
              "signature": "pub fn local_peer_id(&self) -> PeerId;",
              "docs": "Get local peer ID",
              "attributes": "",
              "line": 129
            },
            {
              "name": "swarm::Swarm::connection_count",
              "kind": "function_item",
              "signature": "pub fn connection_count(&self) -> usize;",
              "docs": "Get number of active connections",
              "attributes": "",
              "line": 137
            },
            {
              "name": "swarm::Swarm::topic_count",
              "kind": "function_item",
              "signature": "pub fn topic_count(&self) -> usize;",
              "docs": "Get number of joined topics",
              "attributes": "",
              "line": 142
            },
            {
              "name": "swarm::Swarm::connections",
              "kind": "function_item",
              "signature": "pub fn connections(&self) -> Arc<DashMap<PeerId, Connection>>;",
              "docs": "Get a map of the current connections",
              "attributes": "",
              "line": 147
            },
            {
              "name": "swarm::Swarm::send_to_peer",
              "kind": "function_item",
              "signature": "pub async fn send_to_peer(&self, peer_id: &PeerId, data: &[u8]) -> Result<()>;",
              "docs": "Send a data payload to a connected peer.",
              "attributes": "",
              "line": 152
            },
            {
              "name": "swarm::Swarm::broadcast",
              "kind": "function_item",
              "signature": "pub async fn broadcast(&self, data: &[u8]) -> Result<usize>;",
              "docs": "Broadcast a data payload to all currently connected peers.",
              "attributes": "",
              "line": 164
            },
            {
              "name": "swarm::Swarm::join",
              "kind": "function_item",
              "signature": "pub async fn join(&self, topic: TopicId, opts: JoinOptions) -> Result<()>;",
              "docs": "Join a topic (start finding peers)",
              "attributes": "",
              "line": 178
            },
            {
              "name": "swarm::Swarm::leave",
              "kind": "function_item",
              "signature": "pub async fn leave(&self, topic: &TopicId) -> Result<()>;",
              "docs": "Leave a topic (stop finding peers)",
              "attributes": "",
              "line": 217
            },
            {
              "name": "swarm::Swarm::connect",
              "kind": "function_item",
              "signature": "pub async fn connect(&self, peer_info: PeerInfo) -> Result<Connection>;",
              "docs": "Connect to a specific peer",
              "attributes": "",
              "line": 248
            },
            {
              "name": "swarm::Swarm::disconnect",
              "kind": "function_item",
              "signature": "pub async fn disconnect(&self, peer_id: &PeerId) -> Result<()>;",
              "docs": "Disconnect from a peer",
              "attributes": "",
              "line": 361
            },
            {
              "name": "swarm::Swarm::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&self) -> Result<()>;",
              "docs": "Shutdown the swarm",
              "attributes": "",
              "line": 886
            }
          ],
          "parseErrors": false
        },
        {
          "module": "topic",
          "source": "sigil/weave/network/weave-swarm/src/topic.rs",
          "sha256": "1e49aa703a8bf924b70fd5a14ef1305fc500f8d33ab1ae07fb53b665fb177325",
          "attributes": "",
          "items": [
            {
              "name": "topic::TopicId",
              "kind": "struct_item",
              "signature": "pub struct TopicId(pub [u8; 32]);",
              "docs": "Topic identifier",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "topic::TopicId::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(data: &[u8]) -> Self;",
              "docs": "Create topic ID from bytes",
              "attributes": "",
              "line": 15
            },
            {
              "name": "topic::TopicId::from_text",
              "kind": "function_item",
              "signature": "pub fn from_text(s: &str) -> Self;",
              "docs": "Create from string bytes.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "topic::TopicId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "Get the raw bytes",
              "attributes": "",
              "line": 25
            },
            {
              "name": "topic::TopicState",
              "kind": "struct_item",
              "signature": "pub struct TopicState {\n/// Accept incoming connections for this topic\n\npub server: bool,\n/// Make outgoing connections for this topic\n\npub client: bool,\n/// Maximum peers for this topic\n\npub max_peers: usize,\n/// Currently connected peers for this topic\n\npub active_peers: DashSet<crate::PeerId>,\n/// DHT announcement handle\n\npub announce_handle: Option<JoinHandle<()>>,\n/// DHT lookup handle\n\npub lookup_handle: Option<JoinHandle<()>>\n}",
              "docs": "Topic state",
              "attributes": "#[derive(Debug)]",
              "line": 46
            },
            {
              "name": "topic::JoinOptions",
              "kind": "struct_item",
              "signature": "pub struct JoinOptions {\n/// Act as server (accept connections)\n\npub server: Option<bool>,\n/// Act as client (make connections)\n\npub client: Option<bool>,\n/// Maximum peers for this topic\n\npub max_peers: Option<usize>,\n/// Priority for connections to this topic\n\npub priority: Option<u8>\n}",
              "docs": "Options for joining a topic",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "topic::JoinOptions::server_only",
              "kind": "function_item",
              "signature": "pub fn server_only() -> Self;",
              "docs": "Create server-only options",
              "attributes": "",
              "line": 84
            },
            {
              "name": "topic::JoinOptions::client_only",
              "kind": "function_item",
              "signature": "pub fn client_only() -> Self;",
              "docs": "Create client-only options",
              "attributes": "",
              "line": 93
            },
            {
              "name": "topic::JoinOptions::with_max_peers",
              "kind": "function_item",
              "signature": "pub fn with_max_peers(max_peers: usize) -> Self;",
              "docs": "Create options with specific max peers",
              "attributes": "",
              "line": 102
            },
            {
              "name": "topic::UpdateOptions",
              "kind": "struct_item",
              "signature": "pub struct UpdateOptions {\n/// Update server mode\n\npub server: Option<bool>,\n/// Update client mode\n\npub client: Option<bool>,\n/// Update max peers\n\npub max_peers: Option<usize>\n}",
              "docs": "Options for updating topic configuration",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 112
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-basis",
      "version": "0.1.0",
      "source": "sigil/weave/models/basis",
      "manifestSha256": "0424de5d69f4f432b6e40aec42a898d3293b4b459496279167931e149948a670",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-basis",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/basis/src/lib.rs",
          "sha256": "222b3f180b9a8fb56f3ef52802532b72e8024f85287ffcc62bab3d968b4f839f",
          "attributes": "",
          "items": [
            {
              "name": "::BasisError",
              "kind": "enum_item",
              "signature": "pub enum BasisError {\n    /// The underlying strand storage returned an error.\n    #[error(\"Strand error: {0}\")]\n    Strand(String),\n    /// Serialization or deserialization failed.\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n    /// Vector not found.\n    #[error(\"Vector with id {0} not found\")]\n    VectorNotFound(Uuid),\n    /// Member not found.\n    #[error(\"Member with identity {0} not found\")]\n    MemberNotFound(String),\n}",
              "docs": "Error types for Basis operations.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 46
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, BasisError>;",
              "docs": "A result type for Basis operations.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "::VectorEntry",
              "kind": "enum_item",
              "signature": "pub enum VectorEntry {\n    Add { id: Uuid, vector: Vec<f32> },\n    Remove { id: Uuid },\n}",
              "docs": "Represents an entry in the vector `strand` log.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 66
            },
            {
              "name": "::Basis",
              "kind": "struct_item",
              "signature": "pub struct Basis {\n\n}",
              "docs": "The Basis, a distributed vector store.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "::Basis::new",
              "kind": "function_item",
              "signature": "pub fn new(vector_strand: Arc<RwLock<Strand>>, index_strand: Arc<RwLock<Strand>>) -> Self;",
              "docs": "Creates a new `Basis` instance.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "::Basis::add",
              "kind": "function_item",
              "signature": "pub async fn add(&self, id: Uuid, vector: &[f32]) -> Result<()>;",
              "docs": "Adds a vector to the store.",
              "attributes": "",
              "line": 105
            },
            {
              "name": "::Basis::search",
              "kind": "function_item",
              "signature": "pub async fn search(&self, query: &[f32], k: usize) -> Result<Vec<(Uuid, f32)>>;",
              "docs": "Searches for the `k` nearest neighbors to a query vector.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "::Basis::remove",
              "kind": "function_item",
              "signature": "pub async fn remove(&self, id: Uuid) -> Result<()>;",
              "docs": "Removes a vector from the store.",
              "attributes": "",
              "line": 170
            },
            {
              "name": "::Basis::remove_member",
              "kind": "function_item",
              "signature": "pub async fn remove_member(&self, identity_str: &str) -> Result<()>;",
              "docs": "Remove a member from the Basis",
              "attributes": "",
              "line": 248
            },
            {
              "name": "::Basis::is_member",
              "kind": "function_item",
              "signature": "pub async fn is_member(&self, identity_str: &str) -> bool;",
              "docs": "Check if an identity is a member",
              "attributes": "",
              "line": 257
            }
          ],
          "parseErrors": false,
          "reviewNote": "Basis::new starts with an empty in-memory HNSW index; BasisStore::open does not replay persisted vector records. Snapshots are unimplemented. Present-id remove can deadlock by retaining the strand write lock while private rebuild requests a read lock. Caller validation is required for equal vector dimensions and finite values. See /libraries/basis/snapshot-recovery."
        }
      ]
    },
    {
      "name": "weave-forum",
      "version": "0.1.0",
      "source": "sigil/weave/models/forum",
      "manifestSha256": "4bf7aa27c3fa96a4530fbb863e24bb707005de606436146d63c0f4264b5c34fd",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-forum",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/forum/src/lib.rs",
          "sha256": "4ce7d4292883b6d3608a004c2d93310323a875c43b9eba8d2b83d56907b87ecd",
          "attributes": "",
          "items": [
            {
              "name": "::ForumError",
              "kind": "enum_item",
              "signature": "pub enum ForumError {\n    /// The underlying strand storage returned an error.\n    #[error(\"Strand error: {0}\")]\n    Strand(String),\n    /// The requested tuple could not be found.\n    #[error(\"Tuple not found for pattern: {0:?}\")]\n    TupleNotFound(Pattern),\n    /// Serialization or deserialization failed.\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Error types for Forum operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 22
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, ForumError>;",
              "docs": "A result type for Forum operations.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "::EntryId",
              "kind": "type_item",
              "signature": "pub type EntryId = u64;",
              "docs": "A unique identifier for an entry in the Forum's strand log.",
              "attributes": "",
              "line": 38
            },
            {
              "name": "::TupleEntry",
              "kind": "enum_item",
              "signature": "pub enum TupleEntry {\n    /// A tuple that has been written to the space.\n    Write {\n        /// The unique ID of this write operation.\n        id: EntryId,\n        /// The tuple data.\n        tuple: Vec<u8>,\n    },\n    /// A tombstone indicating that a tuple has been taken.\n    Take {\n        /// The ID of the `Write` entry that was taken.\n        write_id: EntryId,\n    },\n}",
              "docs": "Represents an entry in the Forum's `strand` log.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "::Pattern",
              "kind": "struct_item",
              "signature": "pub struct Pattern(pub Vec<u8>);",
              "docs": "A pattern used for matching tuples in `read` and `take` operations.\nFor now, this is a simple wrapper around a byte vector, but can be\nextended to support more complex matching logic.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash)]",
              "line": 61
            },
            {
              "name": "::Forum",
              "kind": "struct_item",
              "signature": "pub struct Forum {\n\n}",
              "docs": "The Forum, a decentralized tuple space.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "::Forum::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<RwLock<Strand>>) -> Self;",
              "docs": "Creates a new `Forum`.\n\n# Arguments\n\n* `strand` - The `strand` log to use for storage.",
              "attributes": "",
              "line": 77
            },
            {
              "name": "::Forum::write",
              "kind": "function_item",
              "signature": "pub async fn write(&self, tuple: Vec<u8>) -> Result<EntryId>;",
              "docs": "Writes a tuple to the space.\n\nThis appends a `TupleEntry::Write` to the `strand` log and adds the tuple\nto the in-memory index.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "::Forum::read",
              "kind": "function_item",
              "signature": "pub async fn read(&self, pattern: &Pattern) -> Result<Option<Vec<u8>>>;",
              "docs": "Reads a tuple from the space that matches the given pattern.\n\nThis operation does not consume the tuple.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "::Forum::take",
              "kind": "function_item",
              "signature": "pub async fn take(&self, pattern: &Pattern) -> Result<Option<Vec<u8>>>;",
              "docs": "Takes a tuple from the space that matches the given pattern.\n\nThis operation consumes the tuple, appending a `TupleEntry::Take` to the\n`strand` log and removing it from the in-memory index.",
              "attributes": "",
              "line": 127
            }
          ],
          "parseErrors": false,
          "reviewNote": "Construction starts an empty tuple index without automatic log replay. take can remove local state before append fails, and its lock order differs from write. Read /libraries/forum/overview before assuming durable atomic coordination."
        }
      ]
    },
    {
      "name": "weave-gnosis",
      "version": "0.1.0",
      "source": "sigil/weave/models/gnosis",
      "manifestSha256": "46bcdbd826e8cb8c04b47f0c31e8055adde428d68087e06d4a243e35862b4757",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-gnosis",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/gnosis/src/lib.rs",
          "sha256": "eb8f4c90db164bd77dc063fff34ea7306438b9c03396838fea0bf345d58ed8ae",
          "attributes": "",
          "items": [
            {
              "name": "::GnosisError",
              "kind": "enum_item",
              "signature": "pub enum GnosisError {\n    /// The underlying strand storage returned an error.\n    #[error(\"Strand error: {0}\")]\n    Strand(String),\n    /// Serialization or deserialization failed.\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Error types for Gnosis operations.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 22
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, GnosisError>;",
              "docs": "A result type for Gnosis operations.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "::Triple",
              "kind": "struct_item",
              "signature": "pub struct Triple {\npub subject: String,\npub predicate: String,\npub object: String\n}",
              "docs": "Represents a `(subject, predicate, object)` triple in the knowledge graph.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 36
            },
            {
              "name": "::QueryPattern",
              "kind": "struct_item",
              "signature": "pub struct QueryPattern {\npub subject: Option<String>,\npub predicate: Option<String>,\npub object: Option<String>\n}",
              "docs": "A pattern for querying the knowledge graph.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash)]",
              "line": 44
            },
            {
              "name": "::Gnosis",
              "kind": "struct_item",
              "signature": "pub struct Gnosis {\n\n}",
              "docs": "The Gnosis, a distributed knowledge graph.",
              "attributes": "",
              "line": 51
            },
            {
              "name": "::Gnosis::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<RwLock<Strand>>) -> Self;",
              "docs": "Creates a new `Gnosis` instance.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "::Gnosis::add_triple",
              "kind": "function_item",
              "signature": "pub async fn add_triple(&self, subject: &str, predicate: &str, object: &str) -> Result<()>;",
              "docs": "Adds a triple to the knowledge graph.",
              "attributes": "",
              "line": 74
            },
            {
              "name": "::Gnosis::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, pattern: &QueryPattern) -> Result<Vec<Triple>>;",
              "docs": "Queries the graph for triples matching a pattern using indices.",
              "attributes": "",
              "line": 106
            },
            {
              "name": "::Gnosis::get_neighbors",
              "kind": "function_item",
              "signature": "pub async fn get_neighbors(&self, node_id: &str) -> Result<Vec<(String, String)>>;",
              "docs": "Gets the neighbors of a given node.",
              "attributes": "",
              "line": 175
            }
          ],
          "parseErrors": false,
          "reviewNote": "Construction starts empty derived indexes without automatic event replay. Read /libraries/gnosis/overview before assuming restart or remote-update projection recovery."
        }
      ]
    },
    {
      "name": "weave-lens",
      "version": "0.1.0",
      "source": "sigil/weave/models/lens",
      "manifestSha256": "c7125c17f81bb94f78dfd4b6728abc67f0bb06faee41296880b8e24a75e6df45",
      "features": {
        "default": [],
        "policy-hooks": [],
        "fips": []
      },
      "publish": true,
      "url": "/reference/rust/weave-lens",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/lens/src/lib.rs",
          "sha256": "82d5ac808fbee5b3e931d7201b23aecccc8a24380aed3e7102040ba5b48192d2",
          "attributes": "",
          "items": [
            {
              "name": "pub use batch::{Batch, BatchOp};",
              "kind": "use_declaration",
              "signature": "pub use batch::{Batch, BatchOp};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use block::{BlockCache, BlockPointer};",
              "kind": "use_declaration",
              "signature": "pub use block::{BlockCache, BlockPointer};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use cache::CacheStats;",
              "kind": "use_declaration",
              "signature": "pub use cache::CacheStats;",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use config::{CompactionOptions, LensConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{CompactionOptions, LensConfig};",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pub use error::{LensError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{LensError, Result};",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "pub use iterator::{Direction, ReadOptions, ReadStream};",
              "kind": "use_declaration",
              "signature": "pub use iterator::{Direction, ReadOptions, ReadStream};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use lens::Lens;",
              "kind": "use_declaration",
              "signature": "pub use lens::Lens;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "pub use lens_policy::{set_lens_policy, AllowAllLensPolicy, LensPolicy};",
              "kind": "use_declaration",
              "signature": "pub use lens_policy::{set_lens_policy, AllowAllLensPolicy, LensPolicy};",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 63
            },
            {
              "name": "pub use metrics::{LensMetrics, LensMetricsSnapshot};",
              "kind": "use_declaration",
              "signature": "pub use metrics::{LensMetrics, LensMetricsSnapshot};",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "pub use node::{Key, Node, NodeType, Value, ValueMetadata};",
              "kind": "use_declaration",
              "signature": "pub use node::{Key, Node, NodeType, Value, ValueMetadata};",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "pub use snapshot::{Snapshot, SnapshotId};",
              "kind": "use_declaration",
              "signature": "pub use snapshot::{Snapshot, SnapshotId};",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use sub::{SubDatabase, SubOptions};",
              "kind": "use_declaration",
              "signature": "pub use sub::{SubDatabase, SubOptions};",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "pub use utils::encode_key;",
              "kind": "use_declaration",
              "signature": "pub use utils::encode_key;",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "pub use bytes::Bytes;",
              "kind": "use_declaration",
              "signature": "pub use bytes::Bytes;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "::LENS_VERSION",
              "kind": "const_item",
              "signature": "pub const LENS_VERSION: u32;",
              "docs": "Version of the lens data format",
              "attributes": "",
              "line": 74
            },
            {
              "name": "::DEFAULT_ORDER",
              "kind": "const_item",
              "signature": "pub const DEFAULT_ORDER: usize;",
              "docs": "Default B-tree order (max children per node)",
              "attributes": "",
              "line": 77
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "batch",
          "source": "sigil/weave/models/lens/src/batch.rs",
          "sha256": "44564973e8250d602a7924e2a0a070dfa7ec9379313d90d8f118563f41ff4794",
          "attributes": "",
          "items": [
            {
              "name": "batch::BatchOp",
              "kind": "enum_item",
              "signature": "pub enum BatchOp {\n    /// Put a key-value pair\n    Put(Key, Value),\n\n    /// Delete a key\n    Delete(Key),\n}",
              "docs": "Batch operation type",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 8
            },
            {
              "name": "batch::Batch",
              "kind": "struct_item",
              "signature": "pub struct Batch {\n\n}",
              "docs": "Batch of operations to apply atomically",
              "attributes": "#[derive(Debug, Default)]",
              "line": 18
            },
            {
              "name": "batch::Batch::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty batch",
              "attributes": "",
              "line": 28
            },
            {
              "name": "batch::Batch::put",
              "kind": "function_item",
              "signature": "pub fn put(&mut self, key: impl Into<Vec<u8>>, value: impl Into<Vec<u8>>);",
              "docs": "Add a put operation",
              "attributes": "",
              "line": 36
            },
            {
              "name": "batch::Batch::delete",
              "kind": "function_item",
              "signature": "pub fn delete(&mut self, key: impl Into<Vec<u8>>);",
              "docs": "Add a delete operation",
              "attributes": "",
              "line": 46
            },
            {
              "name": "batch::Batch::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get number of operations",
              "attributes": "",
              "line": 55
            },
            {
              "name": "batch::Batch::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if batch is empty",
              "attributes": "",
              "line": 60
            },
            {
              "name": "batch::Batch::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&mut self);",
              "docs": "Clear all operations",
              "attributes": "",
              "line": 65
            },
            {
              "name": "batch::Batch::operations",
              "kind": "function_item",
              "signature": "pub fn operations(&self) -> &[BatchOp];",
              "docs": "Get operations in order",
              "attributes": "",
              "line": 71
            },
            {
              "name": "batch::Batch::deduplicated",
              "kind": "function_item",
              "signature": "pub fn deduplicated(&self) -> Vec<&BatchOp>;",
              "docs": "Get deduplicated operations",
              "attributes": "",
              "line": 76
            },
            {
              "name": "batch::Batch::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, max_size: usize) -> Result<()>;",
              "docs": "Validate batch size",
              "attributes": "",
              "line": 81
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "block",
          "source": "sigil/weave/models/lens/src/block.rs",
          "sha256": "1c9b66d47b481dcc7fad39af45f32ff52f9377212b24b4c51391b750a38ebefa",
          "attributes": "",
          "items": [
            {
              "name": "block::BlockCache",
              "kind": "struct_item",
              "signature": "pub struct BlockCache {\n\n}",
              "docs": "Block cache for efficient node access",
              "attributes": "",
              "line": 10
            },
            {
              "name": "block::BlockCache::new",
              "kind": "function_item",
              "signature": "pub fn new(capacity: usize) -> Self;",
              "docs": "Create a new block cache",
              "attributes": "",
              "line": 20
            },
            {
              "name": "block::BlockCache::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, index: u64) -> Option<Arc<Node>>;",
              "docs": "Get a block from cache",
              "attributes": "",
              "line": 29
            },
            {
              "name": "block::BlockCache::put",
              "kind": "function_item",
              "signature": "pub fn put(&self, index: u64, node: Arc<Node>);",
              "docs": "Put a block in cache",
              "attributes": "",
              "line": 43
            },
            {
              "name": "block::BlockCache::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&self);",
              "docs": "Clear the cache",
              "attributes": "",
              "line": 54
            },
            {
              "name": "block::BlockCache::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> CacheStats;",
              "docs": "Get cache statistics",
              "attributes": "",
              "line": 63
            },
            {
              "name": "block::BlockCache::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get current cache size",
              "attributes": "",
              "line": 68
            },
            {
              "name": "block::BlockCache::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if cache is empty",
              "attributes": "",
              "line": 73
            },
            {
              "name": "block::CacheStats",
              "kind": "struct_item",
              "signature": "pub struct CacheStats {\n/// Number of cache hits\n\npub hits: u64,\n/// Number of cache misses\n\npub misses: u64,\n/// Number of puts\n\npub puts: u64,\n/// Number of evictions\n\npub evictions: u64,\n/// Number of clears\n\npub clears: u64\n}",
              "docs": "Cache statistics",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 80
            },
            {
              "name": "block::CacheStats::hit_ratio",
              "kind": "function_item",
              "signature": "pub fn hit_ratio(&self) -> f64;",
              "docs": "Calculate hit ratio",
              "attributes": "",
              "line": 99
            },
            {
              "name": "pub use crate::node::BlockPointer;",
              "kind": "use_declaration",
              "signature": "pub use crate::node::BlockPointer;",
              "docs": "Re-export BlockPointer from node module",
              "attributes": "",
              "line": 110
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "cache",
          "source": "sigil/weave/models/lens/src/cache.rs",
          "sha256": "2f7e0c945bfff11ea22c45e3c9e64f9941d41da88507fcf15525b10f5d7f7308",
          "attributes": "",
          "items": [
            {
              "name": "pub use crate::block::CacheStats;",
              "kind": "use_declaration",
              "signature": "pub use crate::block::CacheStats;",
              "docs": "Cache statistics",
              "attributes": "",
              "line": 4
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "config",
          "source": "sigil/weave/models/lens/src/config.rs",
          "sha256": "b25436b4b0df12fabf16a6a0a612947efb08d3c74d182ca9bdf596f788731977",
          "attributes": "",
          "items": [
            {
              "name": "config::LensConfig",
              "kind": "struct_item",
              "signature": "pub struct LensConfig {\n/// B-tree order (max children per node)\n\npub order: usize,\n/// Maximum cache size in bytes\n\npub cache_size: usize,\n/// Enable automatic compaction\n\npub auto_compact: bool,\n/// Compaction threshold (% of wasted space)\n\npub compact_threshold: f64,\n/// Snapshot retention period\n\npub snapshot_retention: Duration,\n/// Enable write-ahead logging\n\npub enable_wal: bool,\n/// Sync writes to disk\n\npub sync_writes: bool,\n/// Maximum batch size\n\npub max_batch_size: usize\n}",
              "docs": "Configuration for a Lens database",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 7
            },
            {
              "name": "config::CompactionOptions",
              "kind": "struct_item",
              "signature": "pub struct CompactionOptions {\n/// Target fill factor for nodes\n\npub target_fill_factor: f64,\n/// Merge small nodes\n\npub merge_small_nodes: bool,\n/// Maximum nodes to process per batch\n\npub batch_size: usize\n}",
              "docs": "Options for compaction",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 50
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/models/lens/src/error.rs",
          "sha256": "580fc72c9a5a5fe2adbee88ee75f81c2af189ab97158bb9debeaeb7284e9ed2a",
          "attributes": "",
          "items": [
            {
              "name": "error::LensError",
              "kind": "enum_item",
              "signature": "pub enum LensError {\n    #[error(\"Key not found\")]\n    KeyNotFound,\n\n    #[error(\"Invalid B-tree structure: {0}\")]\n    InvalidStructure(String),\n\n    #[error(\"Snapshot not found: {0}\")]\n    SnapshotNotFound(uuid::Uuid),\n\n    #[error(\"Batch operation failed: {0}\")]\n    BatchFailed(String),\n\n    #[error(\"Sub-database error: {0}\")]\n    SubDatabaseError(String),\n\n    #[error(\"Cache error: {0}\")]\n    CacheError(String),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] StrandError),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Access denied: agent {0} not authorized\")]\n    AccessDenied(String),\n\n    #[error(\"Invalid key: {0}\")]\n    InvalidKey(String),\n\n    #[error(\"Invalid value: {0}\")]\n    InvalidValue(String),\n\n    #[error(\"Transaction conflict\")]\n    TransactionConflict,\n\n    #[error(\"Compaction error: {0}\")]\n    CompactionError(String),\n}",
              "docs": "Errors that can occur during lens operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, LensError>;",
              "docs": "Result type for lens operations",
              "attributes": "",
              "line": 53
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "iterator",
          "source": "sigil/weave/models/lens/src/iterator.rs",
          "sha256": "0de4037a9076866a5129d31ccf5148c68645cf0f970d3380115610ac794c817b",
          "attributes": "",
          "items": [
            {
              "name": "iterator::Direction",
              "kind": "enum_item",
              "signature": "pub enum Direction {\n    /// Forward iteration (ascending)\n    Forward,\n    /// Reverse iteration (descending)\n    Reverse,\n}",
              "docs": "Direction for iteration",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 8
            },
            {
              "name": "iterator::ReadOptions",
              "kind": "struct_item",
              "signature": "pub struct ReadOptions {\n/// Iteration direction\n\npub direction: Direction,\n/// Include the start key\n\npub include_start: bool,\n/// Include the end key\n\npub include_end: bool,\n/// Maximum number of results\n\npub limit: Option<usize>,\n/// Use snapshot if provided\n\npub snapshot: Option<uuid::Uuid>\n}",
              "docs": "Options for read streams",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 17
            },
            {
              "name": "iterator::ReadStream",
              "kind": "struct_item",
              "signature": "pub struct ReadStream {\n\n}",
              "docs": "Async iterator over key-value pairs",
              "attributes": "",
              "line": 47
            },
            {
              "name": "iterator::ReadStream::next",
              "kind": "function_item",
              "signature": "pub async fn next(&mut self) -> Result<Option<(Key, Value)>>;",
              "docs": "Get next key-value pair",
              "attributes": "",
              "line": 114
            },
            {
              "name": "iterator::ReadStream::collect",
              "kind": "function_item",
              "signature": "pub async fn collect(mut self) -> Result<Vec<(Key, Value)>>;",
              "docs": "Collect all results into a vector",
              "attributes": "",
              "line": 364
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "lens",
          "source": "sigil/weave/models/lens/src/lens.rs",
          "sha256": "ff629e904dc5d97aaea0d8f7ba8f962eecd443de8bc12965b3adcdbb98434cdf",
          "attributes": "",
          "items": [
            {
              "name": "lens::Lens",
              "kind": "struct_item",
              "signature": "pub struct Lens {\n/// Tree metadata\n\npub metadata: Arc<RwLock<Metadata>>\n}",
              "docs": "Lens database built on top of Strand",
              "attributes": "",
              "line": 48
            },
            {
              "name": "lens::Metadata",
              "kind": "struct_item",
              "signature": "pub struct Metadata {\n/// B-tree order (max children per node)\n\npub order: usize,\n/// Current root block index\n\npub root: Option<u64>,\n/// Total number of entries\n\npub entries: u64,\n/// Schema version\n\npub _version: u32,\n/// Tree depth\n\npub depth: u32\n}",
              "docs": "Tree metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 77
            },
            {
              "name": "lens::Lens::new",
              "kind": "function_item",
              "signature": "pub async fn new(strand: Arc<AsyncRwLock<Strand>>, config: LensConfig) -> Result<Self>;",
              "docs": "Create a new Lens database (identity-agnostic)",
              "attributes": "",
              "line": 136
            },
            {
              "name": "lens::Lens::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a value by key",
              "attributes": "",
              "line": 357
            },
            {
              "name": "lens::Lens::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, key: &[u8], value_bytes: &[u8]) -> Result<()>;",
              "docs": "Put a key-value pair",
              "attributes": "",
              "line": 375
            },
            {
              "name": "lens::Lens::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, key: &[u8]) -> Result<()>;",
              "docs": "Delete a key",
              "attributes": "",
              "line": 459
            },
            {
              "name": "lens::Lens::batch",
              "kind": "function_item",
              "signature": "pub async fn batch(&self, batch: &Batch) -> Result<()>;",
              "docs": "Apply a batch of operations atomically",
              "attributes": "",
              "line": 514
            },
            {
              "name": "lens::Lens::create_read_stream",
              "kind": "function_item",
              "signature": "pub async fn create_read_stream(\n        &self,\n        start: Option<&[u8]>,\n        end: Option<&[u8]>,\n    ) -> Result<ReadStream>;",
              "docs": "Create a read stream for range queries",
              "attributes": "",
              "line": 546
            },
            {
              "name": "lens::Lens::create_read_stream_with_options",
              "kind": "function_item",
              "signature": "pub async fn create_read_stream_with_options(\n        &self,\n        start: Option<&[u8]>,\n        end: Option<&[u8]>,\n        options: ReadOptions,\n    ) -> Result<ReadStream>;",
              "docs": "Create a read stream with options",
              "attributes": "",
              "line": 556
            },
            {
              "name": "lens::Lens::snapshot",
              "kind": "function_item",
              "signature": "pub async fn snapshot(&self) -> Result<SnapshotId>;",
              "docs": "Create a snapshot",
              "attributes": "",
              "line": 583
            },
            {
              "name": "lens::Lens::snapshot_with_name",
              "kind": "function_item",
              "signature": "pub async fn snapshot_with_name(&self, name: String) -> Result<SnapshotId>;",
              "docs": "Create a named snapshot",
              "attributes": "",
              "line": 612
            },
            {
              "name": "lens::Lens::strand_handle",
              "kind": "function_item",
              "signature": "pub fn strand_handle(&self) -> Arc<AsyncRwLock<Strand>>;",
              "docs": "Expose a handle to the underlying strand for advanced operations (e.g., replication)",
              "attributes": "",
              "line": 642
            },
            {
              "name": "lens::Lens::strand_for_replication",
              "kind": "function_item",
              "signature": "pub async fn strand_for_replication(&self) -> Arc<tokio::sync::RwLock<Strand>>;",
              "docs": "Get the underlying strand for replication announcements.\n\nThis extracts the Strand from the async lock wrapper.",
              "attributes": "",
              "line": 649
            },
            {
              "name": "lens::Lens::metrics_snapshot",
              "kind": "function_item",
              "signature": "pub fn metrics_snapshot(&self) -> crate::metrics::LensMetricsSnapshot;",
              "docs": "Get a snapshot of Lens telemetry metrics",
              "attributes": "",
              "line": 656
            },
            {
              "name": "lens::Lens::get_snapshot",
              "kind": "function_item",
              "signature": "pub fn get_snapshot(&self, id: &SnapshotId) -> Option<Snapshot>;",
              "docs": "Get a snapshot by ID",
              "attributes": "",
              "line": 661
            },
            {
              "name": "lens::Lens::delete_snapshot",
              "kind": "function_item",
              "signature": "pub fn delete_snapshot(&self, id: &SnapshotId) -> Result<()>;",
              "docs": "Delete a snapshot",
              "attributes": "",
              "line": 666
            },
            {
              "name": "lens::Lens::sub",
              "kind": "function_item",
              "signature": "pub fn sub(&self, name: &str) -> SubDatabase;",
              "docs": "Create a sub-database",
              "attributes": "",
              "line": 674
            },
            {
              "name": "lens::Lens::sub_with_options",
              "kind": "function_item",
              "signature": "pub fn sub_with_options(&self, name: &str, options: SubOptions) -> SubDatabase;",
              "docs": "Create a sub-database with options",
              "attributes": "",
              "line": 683
            },
            {
              "name": "lens::Lens::cache_stats",
              "kind": "function_item",
              "signature": "pub fn cache_stats(&self) -> crate::CacheStats;",
              "docs": "Get cache statistics",
              "attributes": "",
              "line": 688
            },
            {
              "name": "lens::Lens::clear_cache",
              "kind": "function_item",
              "signature": "pub fn clear_cache(&self);",
              "docs": "Clear the cache",
              "attributes": "",
              "line": 693
            },
            {
              "name": "lens::Lens::load_node",
              "kind": "function_item",
              "signature": "pub async fn load_node(&self, index: u64) -> Result<Node>;",
              "docs": "Load a node from strand",
              "attributes": "",
              "line": 939
            },
            {
              "name": "lens::Lens::open_for_replication",
              "kind": "function_item",
              "signature": "pub async fn open_for_replication(&self) -> Result<Arc<strand::Strand>>;",
              "docs": "Create a read-only strand for replication purposes.\n\nThis creates a fresh Strand instance using the same storage\nand public key as the underlying strand, suitable for\nannouncing on DHT.",
              "attributes": "",
              "line": 1043
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "lens_policy",
          "source": "sigil/weave/models/lens/src/lens_policy.rs",
          "sha256": "82399060b2d1bb2f60dbb008f0937de4eb81de55b46f9fddf30ffd934a41640d",
          "attributes": "#[cfg(feature = \"policy-hooks\")]",
          "items": [
            {
              "name": "lens_policy::LensPolicy",
              "kind": "trait_item",
              "signature": "pub trait LensPolicy: Send + Sync + 'static {\n    fn can_put(&self, key: &[u8], value: &[u8]) -> bool;\n    fn can_delete(&self, key: &[u8]) -> bool;\n}",
              "docs": "Lens policy for boundary validation",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 4
            },
            {
              "name": "lens_policy::AllowAllLensPolicy",
              "kind": "struct_item",
              "signature": "pub struct AllowAllLensPolicy;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 9
            },
            {
              "name": "lens_policy::LENS_POLICY",
              "kind": "static_item",
              "signature": "pub static LENS_POLICY: OnceCell<Box<dyn LensPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 20
            },
            {
              "name": "lens_policy::set_lens_policy",
              "kind": "function_item",
              "signature": "pub fn set_lens_policy(policy: Box<dyn LensPolicy>) -> Result<(), Box<dyn LensPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 22
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "metrics",
          "source": "sigil/weave/models/lens/src/metrics.rs",
          "sha256": "9b7b5e0534ab7572e3a58c503f11b6521f913155f08eba14e7fdb8ba05e9d429",
          "attributes": "",
          "items": [
            {
              "name": "metrics::LensMetrics",
              "kind": "struct_item",
              "signature": "pub struct LensMetrics {\npub puts_total: AtomicU64,\npub deletes_total: AtomicU64,\npub snapshots_total: AtomicU64,\npub bytes_written_total: AtomicU64,\npub bytes_read_total: AtomicU64,\npub compactions_total: AtomicU64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default)]",
              "line": 4
            },
            {
              "name": "metrics::LensMetricsSnapshot",
              "kind": "struct_item",
              "signature": "pub struct LensMetricsSnapshot {\npub puts_total: u64,\npub deletes_total: u64,\npub snapshots_total: u64,\npub bytes_written_total: u64,\npub bytes_read_total: u64,\npub compactions_total: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]",
              "line": 14
            },
            {
              "name": "metrics::LensMetrics::snapshot",
              "kind": "function_item",
              "signature": "pub fn snapshot(&self) -> LensMetricsSnapshot;",
              "docs": "",
              "attributes": "",
              "line": 24
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "node",
          "source": "sigil/weave/models/lens/src/node.rs",
          "sha256": "b83181f55b9adeecfeb7649241a7c31291d0150c4aaf6001d626a525622bb340",
          "attributes": "",
          "items": [
            {
              "name": "node::NodeType",
              "kind": "enum_item",
              "signature": "pub enum NodeType {\n    /// Leaf node containing values\n    Leaf,\n    /// Internal node containing child pointers\n    Internal,\n}",
              "docs": "B-tree node types",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "node::Node",
              "kind": "struct_item",
              "signature": "pub struct Node {\n/// Node type\n\npub node_type: NodeType,\n/// Node level (0 = leaf)\n\npub level: u32,\n/// Keys in sorted order\n\npub keys: Vec<Key>,\n/// Values (only in leaf nodes)\n\npub values: Option<Vec<Value>>,\n/// Child pointers (only in internal nodes)\n\npub children: Option<Vec<BlockPointer>>\n}",
              "docs": "B-tree node",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "node::Node::new_leaf",
              "kind": "function_item",
              "signature": "pub fn new_leaf() -> Self;",
              "docs": "Create a new leaf node",
              "attributes": "",
              "line": 36
            },
            {
              "name": "node::Node::new_internal",
              "kind": "function_item",
              "signature": "pub fn new_internal(level: u32) -> Self;",
              "docs": "Create a new internal node",
              "attributes": "",
              "line": 47
            },
            {
              "name": "node::Node::is_full",
              "kind": "function_item",
              "signature": "pub fn is_full(&self, order: usize) -> bool;",
              "docs": "Check if node is full given the order",
              "attributes": "",
              "line": 58
            },
            {
              "name": "node::Node::is_underfull",
              "kind": "function_item",
              "signature": "pub fn is_underfull(&self, order: usize) -> bool;",
              "docs": "Check if node is underfull (less than half full)",
              "attributes": "",
              "line": 63
            },
            {
              "name": "node::Node::find_position",
              "kind": "function_item",
              "signature": "pub fn find_position(&self, key: &Key) -> Result<usize, usize>;",
              "docs": "Find position where key should be inserted",
              "attributes": "",
              "line": 68
            },
            {
              "name": "node::Node::split",
              "kind": "function_item",
              "signature": "pub fn split(&mut self, _order: usize) -> (Key, Node);",
              "docs": "Split node at midpoint",
              "attributes": "",
              "line": 73
            },
            {
              "name": "node::Key",
              "kind": "struct_item",
              "signature": "pub struct Key(pub Vec<u8>);",
              "docs": "Key in the B-tree",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 115
            },
            {
              "name": "node::Key::new",
              "kind": "function_item",
              "signature": "pub fn new(data: Vec<u8>) -> Self;",
              "docs": "Create a new key",
              "attributes": "",
              "line": 119
            },
            {
              "name": "node::Key::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "Get key data",
              "attributes": "",
              "line": 124
            },
            {
              "name": "node::Value",
              "kind": "struct_item",
              "signature": "pub struct Value {\n/// Actual data\n\npub data: Vec<u8>,\n/// Optional metadata\n\npub metadata: Option<ValueMetadata>\n}",
              "docs": "Value in the B-tree",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 151
            },
            {
              "name": "node::Value::new",
              "kind": "function_item",
              "signature": "pub fn new(data: Vec<u8>) -> Self;",
              "docs": "Create a new value",
              "attributes": "",
              "line": 161
            },
            {
              "name": "node::Value::with_metadata",
              "kind": "function_item",
              "signature": "pub fn with_metadata(data: Vec<u8>, metadata: ValueMetadata) -> Self;",
              "docs": "Create a value with metadata",
              "attributes": "",
              "line": 169
            },
            {
              "name": "node::ValueMetadata",
              "kind": "struct_item",
              "signature": "pub struct ValueMetadata {\n/// Timestamp\n\npub timestamp: u64,\n/// Custom tags\n\npub tags: Vec<String>,\n/// Content type\n\npub content_type: Option<String>\n}",
              "docs": "Value metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 179
            },
            {
              "name": "node::BlockPointer",
              "kind": "struct_item",
              "signature": "pub struct BlockPointer {\n/// Block index in strand\n\npub index: u64,\n/// Cached minimum key (for optimization)\n\npub min_key_hash: Option<u64>,\n/// Cached maximum key (for optimization)\n\npub max_key_hash: Option<u64>\n}",
              "docs": "Pointer to a block in the strand",
              "attributes": "#[derive(Debug, Clone, Copy, Serialize, Deserialize)]",
              "line": 192
            },
            {
              "name": "node::BlockPointer::new",
              "kind": "function_item",
              "signature": "pub fn new(index: u64) -> Self;",
              "docs": "Create a new block pointer",
              "attributes": "",
              "line": 205
            },
            {
              "name": "node::BlockPointer::with_range",
              "kind": "function_item",
              "signature": "pub fn with_range(index: u64, min_hash: u64, max_hash: u64) -> Self;",
              "docs": "Create with key range hints",
              "attributes": "",
              "line": 214
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "snapshot",
          "source": "sigil/weave/models/lens/src/snapshot.rs",
          "sha256": "f1aa54c8b1992f07a64ee4359af47cf909f50ba8a8d21ff5cdad59b9ff956a57",
          "attributes": "",
          "items": [
            {
              "name": "snapshot::SnapshotId",
              "kind": "type_item",
              "signature": "pub type SnapshotId = Uuid;",
              "docs": "Unique identifier for a snapshot",
              "attributes": "",
              "line": 6
            },
            {
              "name": "snapshot::Snapshot",
              "kind": "struct_item",
              "signature": "pub struct Snapshot {\n/// Unique identifier\n\npub id: SnapshotId,\n/// Root block index at snapshot time\n\npub root_index: Option<u64>,\n/// Strand length at snapshot time\n\npub strand_length: u64,\n/// Creation timestamp\n\npub created_at: std::time::SystemTime,\n/// Optional name\n\npub name: Option<String>,\n/// Metadata\n\npub metadata: SnapshotMetadata\n}",
              "docs": "A point-in-time snapshot of the database",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 10
            },
            {
              "name": "snapshot::SnapshotMetadata",
              "kind": "struct_item",
              "signature": "pub struct SnapshotMetadata {\n/// Number of entries\n\npub entries: u64,\n/// Total size in bytes\n\npub size_bytes: u64,\n/// Tree depth\n\npub depth: u32\n}",
              "docs": "Metadata for a snapshot",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 32
            },
            {
              "name": "snapshot::Snapshot::new",
              "kind": "function_item",
              "signature": "pub fn new(root_index: Option<u64>, strand_length: u64, metadata: SnapshotMetadata) -> Self;",
              "docs": "Create a new snapshot",
              "attributes": "",
              "line": 45
            },
            {
              "name": "snapshot::Snapshot::with_name",
              "kind": "function_item",
              "signature": "pub fn with_name(mut self, name: String) -> Self;",
              "docs": "Create a named snapshot",
              "attributes": "",
              "line": 57
            },
            {
              "name": "snapshot::Snapshot::is_valid_at",
              "kind": "function_item",
              "signature": "pub fn is_valid_at(&self, current_length: u64) -> bool;",
              "docs": "Check if snapshot is valid at given strand length",
              "attributes": "",
              "line": 63
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "sub",
          "source": "sigil/weave/models/lens/src/sub.rs",
          "sha256": "e693d5e56d793cdf1d77ea0f9072df388117a596477620461d319446284a0ced",
          "attributes": "",
          "items": [
            {
              "name": "sub::SubOptions",
              "kind": "struct_item",
              "signature": "pub struct SubOptions {\n/// Prefix separator (default: \"/\")\n\npub separator: String,\n/// Inherit parent configuration\n\npub inherit_config: bool,\n/// Custom cache size for sub-db\n\npub cache_size: Option<usize>\n}",
              "docs": "Options for creating a sub-database",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 8
            },
            {
              "name": "sub::SubDatabase",
              "kind": "struct_item",
              "signature": "pub struct SubDatabase {\n\n}",
              "docs": "A sub-database with a key prefix",
              "attributes": "",
              "line": 30
            },
            {
              "name": "sub::SubDatabase::new",
              "kind": "function_item",
              "signature": "pub fn new(parent: Arc<Lens>, prefix: Vec<u8>, options: SubOptions) -> Self;",
              "docs": "Create a new sub-database",
              "attributes": "",
              "line": 43
            },
            {
              "name": "sub::SubDatabase::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, key: &[u8], value: &[u8]) -> Result<()>;",
              "docs": "Put a value in the sub-database",
              "attributes": "",
              "line": 62
            },
            {
              "name": "sub::SubDatabase::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a value from the sub-database",
              "attributes": "",
              "line": 68
            },
            {
              "name": "sub::SubDatabase::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, key: &[u8]) -> Result<()>;",
              "docs": "Delete a key from the sub-database",
              "attributes": "",
              "line": 74
            },
            {
              "name": "sub::SubDatabase::exists",
              "kind": "function_item",
              "signature": "pub async fn exists(&self, key: &[u8]) -> Result<bool>;",
              "docs": "Check if key exists in sub-database",
              "attributes": "",
              "line": 80
            },
            {
              "name": "sub::SubDatabase::sub",
              "kind": "function_item",
              "signature": "pub fn sub(&self, name: &str) -> SubDatabase;",
              "docs": "Create a nested sub-database",
              "attributes": "",
              "line": 86
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        },
        {
          "module": "utils",
          "source": "sigil/weave/models/lens/src/utils.rs",
          "sha256": "ed4ec370a8944c72e8c20eb243ff12d809e3fcd3bf13115e9e71414dcd14fa72",
          "attributes": "",
          "items": [
            {
              "name": "utils::encode_key",
              "kind": "function_item",
              "signature": "pub fn encode_key(key: &[u8]) -> Vec<u8>;",
              "docs": "Encode a key for consistent hashing and lexicographic ordering",
              "attributes": "",
              "line": 7
            },
            {
              "name": "utils::_hash_key",
              "kind": "function_item",
              "signature": "pub fn _hash_key(key: &[u8]) -> u64;",
              "docs": "Hash a key for quick lookups",
              "attributes": "",
              "line": 30
            },
            {
              "name": "utils::_compare_keys",
              "kind": "function_item",
              "signature": "pub fn _compare_keys(a: &[u8], b: &[u8]) -> std::cmp::Ordering;",
              "docs": "Compare two keys",
              "attributes": "",
              "line": 37
            },
            {
              "name": "utils::_key_in_range",
              "kind": "function_item",
              "signature": "pub fn _key_in_range(\n    key: &[u8],\n    start: Option<&[u8]>,\n    end: Option<&[u8]>,\n    include_start: bool,\n    include_end: bool,\n) -> bool;",
              "docs": "Check if a key is within range",
              "attributes": "",
              "line": 42
            },
            {
              "name": "utils::_estimate_node_size",
              "kind": "function_item",
              "signature": "pub fn _estimate_node_size(node: &crate::Node) -> usize;",
              "docs": "Estimate size of a node in bytes",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current batching helper rejects multiple operations instead of implementing atomic batch commits. Cache/compaction/retention configuration fields do not establish running background compaction. See /libraries/lens/overview."
        }
      ]
    },
    {
      "name": "weave-locus",
      "version": "0.1.0",
      "source": "sigil/weave/models/locus",
      "manifestSha256": "ab55ed8c247587c8360f5d4d9ec8205ad12dc6cef0caacaf501221c1c4f5fe93",
      "features": {
        "default": [],
        "mock": [],
        "policy-hooks": [],
        "fips": []
      },
      "publish": true,
      "url": "/reference/rust/weave-locus",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/locus/src/lib.rs",
          "sha256": "47a09744794590460265c3ff30b4f13979a7f78d6210e6a7778f4a74d00121ff",
          "attributes": "",
          "items": [
            {
              "name": "pub use config::{LocusConfig, MountOptions};",
              "kind": "use_declaration",
              "signature": "pub use config::{LocusConfig, MountOptions};",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use entry::{BlobId, EntryType, FileEntry, FileMetadata};",
              "kind": "use_declaration",
              "signature": "pub use entry::{BlobId, EntryType, FileEntry, FileMetadata};",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "pub use error::{LocusError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{LocusError, Result};",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "pub use journal::{JournalOp, JournalRecord, JournalState, LocusJournal};",
              "kind": "use_declaration",
              "signature": "pub use journal::{JournalOp, JournalRecord, JournalState, LocusJournal};",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "pub use locus::{GovernanceType, Locus};",
              "kind": "use_declaration",
              "signature": "pub use locus::{GovernanceType, Locus};",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "pub use metadata::PermissionMode;",
              "kind": "use_declaration",
              "signature": "pub use metadata::PermissionMode;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "pub use mount::{MountPoint, MountTable};",
              "kind": "use_declaration",
              "signature": "pub use mount::{MountPoint, MountTable};",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "pub use ops::{CreateOptions, OpenOptions, WriteOptions};",
              "kind": "use_declaration",
              "signature": "pub use ops::{CreateOptions, OpenOptions, WriteOptions};",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "pub use stat::{Stat, StatExt};",
              "kind": "use_declaration",
              "signature": "pub use stat::{Stat, StatExt};",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "pub use stream::{ReadStream, WriteStream};",
              "kind": "use_declaration",
              "signature": "pub use stream::{ReadStream, WriteStream};",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "pub use watcher::{WatchEvent, Watcher, WatcherId};",
              "kind": "use_declaration",
              "signature": "pub use watcher::{WatchEvent, Watcher, WatcherId};",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "pub use policy::{set_locus_policy, AllowAllLocusPolicy, LocusPolicy};",
              "kind": "use_declaration",
              "signature": "pub use policy::{set_locus_policy, AllowAllLocusPolicy, LocusPolicy};",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 80
            },
            {
              "name": "pub use bytes::Bytes;",
              "kind": "use_declaration",
              "signature": "pub use bytes::Bytes;",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "pub use mime::Mime;",
              "kind": "use_declaration",
              "signature": "pub use mime::Mime;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "::DEFAULT_FILE_MODE",
              "kind": "const_item",
              "signature": "pub const DEFAULT_FILE_MODE: u32;",
              "docs": "Default file permissions (644)",
              "attributes": "",
              "line": 87
            },
            {
              "name": "::DEFAULT_DIR_MODE",
              "kind": "const_item",
              "signature": "pub const DEFAULT_DIR_MODE: u32;",
              "docs": "Default directory permissions (755)",
              "attributes": "",
              "line": 90
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "config",
          "source": "sigil/weave/models/locus/src/config.rs",
          "sha256": "2b9e4f5e3a3068419d3bca5c43afe2ac245ba528ff080fc97b77a52439fa5324",
          "attributes": "",
          "items": [
            {
              "name": "config::LocusConfig",
              "kind": "struct_item",
              "signature": "pub struct LocusConfig {\n/// Maximum file size in bytes\n\npub max_file_size: u64,\n/// Maximum path depth\n\npub max_path_depth: usize,\n/// Enable file watching\n\npub enable_watching: bool,\n/// Watch debounce duration\n\npub watch_debounce: Duration,\n/// Enable symlinks\n\npub enable_symlinks: bool,\n/// Maximum symlink depth\n\npub max_symlink_depth: usize,\n/// Cache configuration\n\npub cache_size: usize,\n/// Default file mode\n\npub default_file_mode: u32,\n/// Default directory mode\n\npub default_dir_mode: u32,\n/// Read-only mode. When true, `Locus::new` will not bootstrap the\n\n/// root directory entry on the metadata Lens \u2014 useful for\n\n/// receiver-side replication (e.g. `loom clone`) where the root is\n\n/// expected to arrive via DHT replication of the source's metadata\n\n/// strand.\n\n#[serde(default)]\npub read_only: bool\n}",
              "docs": "Configuration for Locus file system",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "config::MountOptions",
              "kind": "struct_item",
              "signature": "pub struct MountOptions {\n/// Read-only mount\n\npub read_only: bool,\n/// Allow execution\n\npub allow_exec: bool,\n/// Follow symlinks\n\npub follow_symlinks: bool,\n/// Case sensitivity\n\npub case_sensitive: bool\n}",
              "docs": "Options for mounting a file system",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 64
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "entry",
          "source": "sigil/weave/models/locus/src/entry.rs",
          "sha256": "4072d2610e69035c7f879b1c06e6f6e85489c4a1ddfef7e653e17f609348e6c2",
          "attributes": "",
          "items": [
            {
              "name": "entry::BlobId",
              "kind": "type_item",
              "signature": "pub type BlobId = [u8; 32];",
              "docs": "Blob identifier",
              "attributes": "",
              "line": 8
            },
            {
              "name": "entry::EntryType",
              "kind": "enum_item",
              "signature": "pub enum EntryType {\n    /// Regular file\n    File,\n    /// Directory\n    Directory,\n    /// Symbolic link\n    Symlink,\n}",
              "docs": "Entry type (file, directory, symlink)",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "entry::FileMetadata",
              "kind": "struct_item",
              "signature": "pub struct FileMetadata {\n/// Entry ID\n\npub id: Uuid,\n/// Entry type\n\npub entry_type: EntryType,\n/// Size in bytes (0 for directories)\n\npub size: u64,\n/// Permissions mode\n\npub mode: u32,\n/// Creation time\n\npub created: SystemTime,\n/// Modified time\n\npub modified: SystemTime,\n/// Accessed time\n\npub accessed: SystemTime,\n/// Blob ID for file content (None for directories)\n\npub blob_id: Option<BlobId>,\n/// Target path for symlinks\n\npub symlink_target: Option<String>,\n/// Version number\n\npub version: u64,\n/// Extended attributes\n\npub xattrs: Option<serde_json::Value>\n}",
              "docs": "File metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "entry::FileMetadata::new_file",
              "kind": "function_item",
              "signature": "pub fn new_file(size: u64, mode: u32, blob_id: BlobId) -> Self;",
              "docs": "Create metadata for a new file",
              "attributes": "",
              "line": 60
            },
            {
              "name": "entry::FileMetadata::new_directory",
              "kind": "function_item",
              "signature": "pub fn new_directory(mode: u32) -> Self;",
              "docs": "Create metadata for a new directory",
              "attributes": "",
              "line": 78
            },
            {
              "name": "entry::FileMetadata::new_symlink",
              "kind": "function_item",
              "signature": "pub fn new_symlink(target: String, mode: u32) -> Self;",
              "docs": "Create metadata for a new symlink",
              "attributes": "",
              "line": 96
            },
            {
              "name": "entry::FileMetadata::is_file",
              "kind": "function_item",
              "signature": "pub fn is_file(&self) -> bool;",
              "docs": "Check if this is a file",
              "attributes": "",
              "line": 114
            },
            {
              "name": "entry::FileMetadata::is_directory",
              "kind": "function_item",
              "signature": "pub fn is_directory(&self) -> bool;",
              "docs": "Check if this is a directory",
              "attributes": "",
              "line": 119
            },
            {
              "name": "entry::FileMetadata::is_symlink",
              "kind": "function_item",
              "signature": "pub fn is_symlink(&self) -> bool;",
              "docs": "Check if this is a symlink",
              "attributes": "",
              "line": 124
            },
            {
              "name": "entry::FileEntry",
              "kind": "struct_item",
              "signature": "pub struct FileEntry {\n/// Entry ID\n\npub id: Uuid,\n/// Parent directory ID\n\npub parent_id: Option<Uuid>,\n/// Entry name\n\npub name: String,\n/// Full path\n\npub path: String,\n/// Metadata\n\npub metadata: FileMetadata\n}",
              "docs": "A file system entry",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 131
            },
            {
              "name": "entry::FileEntry::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        parent_id: Option<Uuid>,\n        name: String,\n        path: String,\n        metadata: FileMetadata,\n    ) -> Self;",
              "docs": "Create a new file entry",
              "attributes": "",
              "line": 150
            },
            {
              "name": "entry::FileEntry::entry_type",
              "kind": "function_item",
              "signature": "pub fn entry_type(&self) -> EntryType;",
              "docs": "Get the entry type",
              "attributes": "",
              "line": 166
            },
            {
              "name": "entry::FileEntry::is_root",
              "kind": "function_item",
              "signature": "pub fn is_root(&self) -> bool;",
              "docs": "Check if this is the root directory",
              "attributes": "",
              "line": 171
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/models/locus/src/error.rs",
          "sha256": "4aff4b17ec852789194d8768a67822e6c9647eeb12a3a559942aad0f8da06ac8",
          "attributes": "",
          "items": [
            {
              "name": "error::LocusError",
              "kind": "enum_item",
              "signature": "pub enum LocusError {\n    #[error(\"File not found: {0}\")]\n    FileNotFound(String),\n\n    #[error(\"Directory not found: {0}\")]\n    DirectoryNotFound(String),\n\n    #[error(\"Path already exists: {0}\")]\n    AlreadyExists(String),\n\n    #[error(\"Not a directory: {0}\")]\n    NotADirectory(String),\n\n    #[error(\"Not a file: {0}\")]\n    NotAFile(String),\n\n    #[error(\"Directory not empty: {0}\")]\n    DirectoryNotEmpty(String),\n\n    #[error(\"Invalid path: {0}\")]\n    InvalidPath(String),\n\n    #[error(\"Permission denied: {0}\")]\n    PermissionDenied(String),\n\n    #[error(\"Symlink loop detected\")]\n    SymlinkLoop,\n\n    #[error(\"Mount point error: {0}\")]\n    MountError(String),\n\n    #[error(\"Version conflict: expected {expected}, got {actual}\")]\n    VersionConflict { expected: u64, actual: u64 },\n\n    #[error(\"Blob error: {0}\")]\n    BlobError(String),\n\n    #[error(\"Metadata error: {0}\")]\n    MetadataError(String),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] StrandError),\n\n    #[error(\"Lens error: {0}\")]\n    Lens(#[from] lens::LensError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    #[error(\"Access denied: agent {0} not authorized\")]\n    AccessDenied(String),\n\n    #[error(\"Invalid operation: {0}\")]\n    InvalidOperation(String),\n}",
              "docs": "Errors that can occur during locus operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, LocusError>;",
              "docs": "Result type for locus operations",
              "attributes": "",
              "line": 68
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "journal",
          "source": "sigil/weave/models/locus/src/journal.rs",
          "sha256": "e7174fed3fc63ebfbeffc124f168832b1160704ace3c687796eace7f2f349b73",
          "attributes": "",
          "items": [
            {
              "name": "journal::JournalOp",
              "kind": "enum_item",
              "signature": "pub enum JournalOp {\n    CreateDir { path: String },\n    WriteFile { path: String, size: u64 },\n    Remove { path: String },\n}",
              "docs": "Journal entry kinds",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "journal::JournalState",
              "kind": "enum_item",
              "signature": "pub enum JournalState {\n    Prepared,\n    Applied,\n    Committed,\n}",
              "docs": "Journal entry state",
              "attributes": "#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 18
            },
            {
              "name": "journal::JournalRecord",
              "kind": "struct_item",
              "signature": "pub struct JournalRecord {\npub id: Uuid,\npub op: JournalOp,\npub state: JournalState,\npub created_at: i64\n}",
              "docs": "A journal record for one operation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "journal::JournalRecord::new",
              "kind": "function_item",
              "signature": "pub fn new(op: JournalOp) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "journal::JournalStore",
              "kind": "struct_item",
              "signature": "pub struct JournalStore<'a> {\npub prefix: &'a str\n}",
              "docs": "Utilities for persisting journal entries into Lens metadata",
              "attributes": "",
              "line": 45
            },
            {
              "name": "journal::JournalStore<'a>::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "journal::JournalStore<'a>::key_for",
              "kind": "function_item",
              "signature": "pub fn key_for(&self, id: &Uuid) -> String;",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "journal::LocusJournal",
              "kind": "trait_item",
              "signature": "pub trait LocusJournal {\n    fn journal_store<'a>() -> JournalStore<'a> ;\n    fn serialize(rec: &JournalRecord) -> Result<Vec<u8>> ;\n    fn deserialize(bytes: &[u8]) -> Result<JournalRecord> ;\n}",
              "docs": "Locus journal API mixed into Locus (implemented in locus.rs)",
              "attributes": "",
              "line": 62
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "locus",
          "source": "sigil/weave/models/locus/src/locus.rs",
          "sha256": "954352fa8fe2a85d137e2d7f46419cc12acbc61e4a4fdc687739de156f309ccf",
          "attributes": "",
          "items": [
            {
              "name": "locus::GovernanceType",
              "kind": "enum_item",
              "signature": "pub enum GovernanceType {\n    /// Single human root (opaque identity string)\n    HumanRoot(String),\n    /// Multi-human root\n    MultiHumanRoot {\n        /// Root identities (opaque strings)\n        roots: Vec<String>,\n        /// Threshold required\n        threshold: u32,\n    },\n}",
              "docs": "Governance type for the organization",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "locus::Locus",
              "kind": "struct_item",
              "signature": "pub struct Locus {\n\n}",
              "docs": "Locus distributed file system",
              "attributes": "",
              "line": 47
            },
            {
              "name": "locus::Locus::new",
              "kind": "function_item",
              "signature": "pub async fn new(\n        metadata: Arc<Lens>,\n        blobs: Arc<BlobStore>,\n        config: LocusConfig,\n        governance: GovernanceType,\n    ) -> Result<Self>;",
              "docs": "Create a new Locus file system with identity adapter (recommended)",
              "attributes": "",
              "line": 76
            },
            {
              "name": "locus::Locus::governance",
              "kind": "function_item",
              "signature": "pub fn governance(&self) -> &GovernanceType;",
              "docs": "Get the governance type",
              "attributes": "",
              "line": 123
            },
            {
              "name": "locus::Locus::write_file",
              "kind": "function_item",
              "signature": "pub async fn write_file<P: AsRef<Path>>(\n        &self,\n        path: P,\n        data: &[u8],\n        options: Option<WriteOptions>,\n    ) -> Result<()>;",
              "docs": "Write a file",
              "attributes": "",
              "line": 128
            },
            {
              "name": "locus::Locus::read_file",
              "kind": "function_item",
              "signature": "pub async fn read_file<P: AsRef<Path>>(&self, path: P) -> Result<Vec<u8>>;",
              "docs": "Read a file",
              "attributes": "",
              "line": 233
            },
            {
              "name": "locus::Locus::mkdir",
              "kind": "function_item",
              "signature": "pub async fn mkdir<P: AsRef<Path>>(&self, path: P, options: CreateOptions) -> Result<()>;",
              "docs": "Create a directory",
              "attributes": "",
              "line": 271
            },
            {
              "name": "locus::Locus::readdir",
              "kind": "function_item",
              "signature": "pub async fn readdir<P: AsRef<Path>>(&self, path: P) -> Result<Vec<String>>;",
              "docs": "List directory contents",
              "attributes": "",
              "line": 362
            },
            {
              "name": "locus::Locus::remove",
              "kind": "function_item",
              "signature": "pub async fn remove<P: AsRef<Path>>(&self, path: P) -> Result<()>;",
              "docs": "Remove a file or directory",
              "attributes": "",
              "line": 403
            },
            {
              "name": "locus::Locus::stat",
              "kind": "function_item",
              "signature": "pub async fn stat<P: AsRef<Path>>(&self, path: P) -> Result<Stat>;",
              "docs": "Get file statistics",
              "attributes": "",
              "line": 450
            },
            {
              "name": "locus::Locus::exists",
              "kind": "function_item",
              "signature": "pub async fn exists<P: AsRef<Path>>(&self, path: P) -> Result<bool>;",
              "docs": "Check if a path exists",
              "attributes": "",
              "line": 468
            },
            {
              "name": "locus::Locus::watch",
              "kind": "function_item",
              "signature": "pub fn watch(&self) -> Watcher;",
              "docs": "Create a new watcher",
              "attributes": "",
              "line": 602
            },
            {
              "name": "locus::Locus::unwatch",
              "kind": "function_item",
              "signature": "pub fn unwatch(&self, id: WatcherId);",
              "docs": "Remove a watcher",
              "attributes": "",
              "line": 609
            },
            {
              "name": "locus::Locus::snapshot",
              "kind": "function_item",
              "signature": "pub async fn snapshot(&self, name: Option<&str>) -> Result<uuid::Uuid>;",
              "docs": "Create a filesystem snapshot (logical: capture root marker)",
              "attributes": "",
              "line": 614
            },
            {
              "name": "locus::Locus::rollback",
              "kind": "function_item",
              "signature": "pub async fn rollback(&self, _id: uuid::Uuid) -> Result<()>;",
              "docs": "Roll back metadata to a snapshot marker (best-effort: user-level repair uses fsck)",
              "attributes": "",
              "line": 632
            },
            {
              "name": "locus::Locus::fsck",
              "kind": "function_item",
              "signature": "pub async fn fsck(&self) -> Result<serde_json::Value>;",
              "docs": "fsck/repair: scan metadata keys and report missing entries",
              "attributes": "",
              "line": 647
            },
            {
              "name": "locus::Locus::read_file_range",
              "kind": "function_item",
              "signature": "pub async fn read_file_range<P: AsRef<Path>>(\n        &self,\n        path: P,\n        offset: u64,\n        length: Option<u64>,\n    ) -> Result<Vec<u8>>;",
              "docs": "Read a range from a file with offset and optional length",
              "attributes": "",
              "line": 658
            },
            {
              "name": "locus::Locus::write_file_range",
              "kind": "function_item",
              "signature": "pub async fn write_file_range<P: AsRef<Path>>(\n        &self,\n        path: P,\n        offset: u64,\n        data: &[u8],\n        options: Option<WriteOptions>,\n    ) -> Result<()>;",
              "docs": "Write bytes at an offset (resume support). Creates file if not exists when offset==0.",
              "attributes": "",
              "line": 677
            },
            {
              "name": "locus::Locus::ingest_metadata_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_metadata_block(\n        &self,\n        seq: u64,\n        header: &strand::Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote strand block into metadata strand (delegates to underlying strand)",
              "attributes": "",
              "line": 743
            },
            {
              "name": "locus::Locus::ingest_blob_meta_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_blob_meta_block(\n        &self,\n        seq: u64,\n        header: &strand::Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote strand block into blob metadata strand (delegates to blob store)",
              "attributes": "",
              "line": 757
            },
            {
              "name": "locus::Locus::ingest_blob_data_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_blob_data_block(\n        &self,\n        seq: u64,\n        header: &strand::Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote strand block into blob data strand (delegates to blob store)",
              "attributes": "",
              "line": 770
            },
            {
              "name": "locus::Locus::metadata_strand_for_replication",
              "kind": "function_item",
              "signature": "pub async fn metadata_strand_for_replication(&self) -> Arc<tokio::sync::RwLock<Strand>>;",
              "docs": "Get the underlying metadata strand for replication announcements.\n\nThis returns a clone of the strand wrapped for async access.",
              "attributes": "",
              "line": 785
            },
            {
              "name": "locus::Locus::blob_metadata_strand_for_replication",
              "kind": "function_item",
              "signature": "pub fn blob_metadata_strand_for_replication(&self) -> Arc<tokio::sync::RwLock<Strand>>;",
              "docs": "Get the underlying blob metadata strand for replication announcements.\n\nThis returns a clone of the strand wrapped for sync access.",
              "attributes": "",
              "line": 792
            },
            {
              "name": "locus::Locus::blob_data_strand_for_replication",
              "kind": "function_item",
              "signature": "pub fn blob_data_strand_for_replication(&self) -> Arc<tokio::sync::RwLock<Strand>>;",
              "docs": "Get the underlying blob data strand for replication announcements.\n\nThis returns a clone of the strand wrapped for sync access.",
              "attributes": "",
              "line": 799
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "metadata",
          "source": "sigil/weave/models/locus/src/metadata.rs",
          "sha256": "a5bede6d658a65b2807e28a4119ce9a1ef1f86448cc1f4c97f93fb0dc57e9440",
          "attributes": "",
          "items": [
            {
              "name": "metadata::PermissionMode",
              "kind": "struct_item",
              "signature": "pub struct PermissionMode(pub u32);",
              "docs": "Permission mode bits",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "metadata::PermissionMode::OWNER_READ",
              "kind": "const_item",
              "signature": "pub const OWNER_READ: u32;",
              "docs": "Owner read permission",
              "attributes": "",
              "line": 11
            },
            {
              "name": "metadata::PermissionMode::OWNER_WRITE",
              "kind": "const_item",
              "signature": "pub const OWNER_WRITE: u32;",
              "docs": "Owner write permission",
              "attributes": "",
              "line": 13
            },
            {
              "name": "metadata::PermissionMode::OWNER_EXEC",
              "kind": "const_item",
              "signature": "pub const OWNER_EXEC: u32;",
              "docs": "Owner execute permission",
              "attributes": "",
              "line": 15
            },
            {
              "name": "metadata::PermissionMode::GROUP_READ",
              "kind": "const_item",
              "signature": "pub const GROUP_READ: u32;",
              "docs": "Group read permission",
              "attributes": "",
              "line": 18
            },
            {
              "name": "metadata::PermissionMode::GROUP_WRITE",
              "kind": "const_item",
              "signature": "pub const GROUP_WRITE: u32;",
              "docs": "Group write permission",
              "attributes": "",
              "line": 20
            },
            {
              "name": "metadata::PermissionMode::GROUP_EXEC",
              "kind": "const_item",
              "signature": "pub const GROUP_EXEC: u32;",
              "docs": "Group execute permission",
              "attributes": "",
              "line": 22
            },
            {
              "name": "metadata::PermissionMode::OTHER_READ",
              "kind": "const_item",
              "signature": "pub const OTHER_READ: u32;",
              "docs": "Others read permission",
              "attributes": "",
              "line": 25
            },
            {
              "name": "metadata::PermissionMode::OTHER_WRITE",
              "kind": "const_item",
              "signature": "pub const OTHER_WRITE: u32;",
              "docs": "Others write permission",
              "attributes": "",
              "line": 27
            },
            {
              "name": "metadata::PermissionMode::OTHER_EXEC",
              "kind": "const_item",
              "signature": "pub const OTHER_EXEC: u32;",
              "docs": "Others execute permission",
              "attributes": "",
              "line": 29
            },
            {
              "name": "metadata::PermissionMode::new",
              "kind": "function_item",
              "signature": "pub fn new(mode: u32) -> Self;",
              "docs": "Create a new permission mode",
              "attributes": "",
              "line": 32
            },
            {
              "name": "metadata::PermissionMode::owner_can_read",
              "kind": "function_item",
              "signature": "pub fn owner_can_read(&self) -> bool;",
              "docs": "Check if owner can read",
              "attributes": "",
              "line": 37
            },
            {
              "name": "metadata::PermissionMode::owner_can_write",
              "kind": "function_item",
              "signature": "pub fn owner_can_write(&self) -> bool;",
              "docs": "Check if owner can write",
              "attributes": "",
              "line": 42
            },
            {
              "name": "metadata::PermissionMode::owner_can_exec",
              "kind": "function_item",
              "signature": "pub fn owner_can_exec(&self) -> bool;",
              "docs": "Check if owner can execute",
              "attributes": "",
              "line": 47
            },
            {
              "name": "metadata::PermissionMode::group_can_read",
              "kind": "function_item",
              "signature": "pub fn group_can_read(&self) -> bool;",
              "docs": "Check if group can read",
              "attributes": "",
              "line": 52
            },
            {
              "name": "metadata::PermissionMode::group_can_write",
              "kind": "function_item",
              "signature": "pub fn group_can_write(&self) -> bool;",
              "docs": "Check if group can write",
              "attributes": "",
              "line": 57
            },
            {
              "name": "metadata::PermissionMode::group_can_exec",
              "kind": "function_item",
              "signature": "pub fn group_can_exec(&self) -> bool;",
              "docs": "Check if group can execute",
              "attributes": "",
              "line": 62
            },
            {
              "name": "metadata::PermissionMode::other_can_read",
              "kind": "function_item",
              "signature": "pub fn other_can_read(&self) -> bool;",
              "docs": "Check if others can read",
              "attributes": "",
              "line": 67
            },
            {
              "name": "metadata::PermissionMode::other_can_write",
              "kind": "function_item",
              "signature": "pub fn other_can_write(&self) -> bool;",
              "docs": "Check if others can write",
              "attributes": "",
              "line": 72
            },
            {
              "name": "metadata::PermissionMode::other_can_exec",
              "kind": "function_item",
              "signature": "pub fn other_can_exec(&self) -> bool;",
              "docs": "Check if others can execute",
              "attributes": "",
              "line": 77
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "mount",
          "source": "sigil/weave/models/locus/src/mount.rs",
          "sha256": "2c3bea129718daf2aa79d64ca05d3e0d0f38bfd354fdbf3b0f2c466e323800ce",
          "attributes": "",
          "items": [
            {
              "name": "mount::MountPoint",
              "kind": "struct_item",
              "signature": "pub struct MountPoint {\n/// Mount path\n\npub path: String,\n/// Source locus (if external mount)\n\npub source: Option<MountSource>,\n/// Mount options\n\npub options: MountOptions\n}",
              "docs": "A mount point in the file system",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "mount::MountSource",
              "kind": "enum_item",
              "signature": "pub enum MountSource {\n    /// Another locus instance\n    Locus {\n        /// Identity of the source locus\n        identity: String,\n    },\n    /// External file system\n    External {\n        /// Type of external system\n        fs_type: String,\n        /// Connection parameters\n        params: serde_json::Value,\n    },\n}",
              "docs": "Source of a mount",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "mount::MountTable",
              "kind": "struct_item",
              "signature": "pub struct MountTable {\n\n}",
              "docs": "Mount table managing all mount points",
              "attributes": "#[derive(Clone)]",
              "line": 45
            },
            {
              "name": "mount::MountTable::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new mount table",
              "attributes": "",
              "line": 52
            },
            {
              "name": "mount::MountTable::mount",
              "kind": "function_item",
              "signature": "pub fn mount(\n        &self,\n        path: String,\n        source: Option<MountSource>,\n        options: MountOptions,\n    ) -> Result<()>;",
              "docs": "Mount a file system at a path",
              "attributes": "",
              "line": 59
            },
            {
              "name": "mount::MountTable::unmount",
              "kind": "function_item",
              "signature": "pub fn unmount(&self, path: &str) -> Result<()>;",
              "docs": "Unmount a file system",
              "attributes": "",
              "line": 89
            },
            {
              "name": "mount::MountTable::find_mount",
              "kind": "function_item",
              "signature": "pub fn find_mount(&self, path: &str) -> Option<MountPoint>;",
              "docs": "Find the mount point for a path",
              "attributes": "",
              "line": 101
            },
            {
              "name": "mount::MountTable::list_mounts",
              "kind": "function_item",
              "signature": "pub fn list_mounts(&self) -> Vec<MountPoint>;",
              "docs": "List all mount points",
              "attributes": "",
              "line": 124
            },
            {
              "name": "mount::MountTable::is_mount_point",
              "kind": "function_item",
              "signature": "pub fn is_mount_point(&self, path: &str) -> bool;",
              "docs": "Check if a path is a mount point",
              "attributes": "",
              "line": 129
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "ops",
          "source": "sigil/weave/models/locus/src/ops.rs",
          "sha256": "d7a0ab8599d480c538c6777e7a8bcfb4bf9cceac45706115b607bc595057fc1d",
          "attributes": "",
          "items": [
            {
              "name": "ops::CreateOptions",
              "kind": "struct_item",
              "signature": "pub struct CreateOptions {\n/// File permissions mode\n\npub mode: Option<u32>,\n/// Create parent directories if needed\n\npub create_parents: bool,\n/// Fail if already exists\n\npub exclusive: bool,\n/// Extended attributes\n\npub xattrs: Option<serde_json::Value>\n}",
              "docs": "Options for creating files/directories",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "ops::OpenOptions",
              "kind": "struct_item",
              "signature": "pub struct OpenOptions {\n/// Open for reading\n\npub read: bool,\n/// Open for writing\n\npub write: bool,\n/// Open for appending\n\npub append: bool,\n/// Truncate file on open\n\npub truncate: bool,\n/// Create if doesn't exist\n\npub create: bool,\n/// Fail if doesn't exist\n\npub exclusive: bool,\n/// Permissions for new file\n\npub mode: Option<u32>\n}",
              "docs": "Options for opening files",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "ops::OpenOptions::read",
              "kind": "function_item",
              "signature": "pub fn read() -> Self;",
              "docs": "Open for reading only",
              "attributes": "",
              "line": 48
            },
            {
              "name": "ops::OpenOptions::write",
              "kind": "function_item",
              "signature": "pub fn write() -> Self;",
              "docs": "Open for writing (truncate)",
              "attributes": "",
              "line": 56
            },
            {
              "name": "ops::OpenOptions::append",
              "kind": "function_item",
              "signature": "pub fn append() -> Self;",
              "docs": "Open for appending",
              "attributes": "",
              "line": 66
            },
            {
              "name": "ops::WriteOptions",
              "kind": "struct_item",
              "signature": "pub struct WriteOptions {\n/// Expected version (for optimistic concurrency)\n\npub version: Option<u64>,\n/// Offset to write at\n\npub offset: Option<u64>,\n/// Create parent directories\n\npub create_parents: bool,\n/// File mode if creating\n\npub mode: Option<u32>\n}",
              "docs": "Options for writing files",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 78
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "stat",
          "source": "sigil/weave/models/locus/src/stat.rs",
          "sha256": "63ea747e41d0ae98dd4d81a067ec44f6241b679085c8063d8fe998edf3eef269",
          "attributes": "",
          "items": [
            {
              "name": "stat::Stat",
              "kind": "struct_item",
              "signature": "pub struct Stat {\n/// Entry ID\n\npub id: Uuid,\n/// Entry type\n\npub entry_type: EntryType,\n/// Size in bytes\n\npub size: u64,\n/// Permissions mode\n\npub mode: u32,\n/// Creation time\n\npub created: SystemTime,\n/// Modified time\n\npub modified: SystemTime,\n/// Accessed time\n\npub accessed: SystemTime,\n/// Version number\n\npub version: u64,\n/// Number of hard links\n\npub nlinks: u32\n}",
              "docs": "File statistics",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "stat::StatExt",
              "kind": "struct_item",
              "signature": "pub struct StatExt {\n/// Basic stats\n\npub stat: Stat,\n/// Extended attributes\n\npub xattrs: Option<serde_json::Value>,\n/// Symlink target\n\npub symlink_target: Option<String>,\n/// Blob ID for content\n\npub blob_id: Option<[u8; 32]>\n}",
              "docs": "Extended file statistics",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 58
            },
            {
              "name": "stat::StatExt::from_metadata",
              "kind": "function_item",
              "signature": "pub fn from_metadata(id: Uuid, metadata: &FileMetadata) -> Self;",
              "docs": "Create from metadata",
              "attributes": "",
              "line": 74
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "stream",
          "source": "sigil/weave/models/locus/src/stream.rs",
          "sha256": "bb8b074d9b96ba0f89a8858dd97b048896499edadbf699aed581694000b5c190",
          "attributes": "",
          "items": [
            {
              "name": "stream::ReadStream",
              "kind": "struct_item",
              "signature": "pub struct ReadStream {\n\n}",
              "docs": "Stream for reading file data",
              "attributes": "",
              "line": 14
            },
            {
              "name": "stream::ReadStream::new",
              "kind": "function_item",
              "signature": "pub fn new(data: Bytes) -> Self;",
              "docs": "Create a new read stream",
              "attributes": "",
              "line": 24
            },
            {
              "name": "stream::ReadStream::remaining",
              "kind": "function_item",
              "signature": "pub fn remaining(&self) -> usize;",
              "docs": "Get the remaining bytes",
              "attributes": "",
              "line": 29
            },
            {
              "name": "stream::WriteStream",
              "kind": "struct_item",
              "signature": "pub struct WriteStream {\n\n}",
              "docs": "Stream for writing file data",
              "attributes": "",
              "line": 53
            },
            {
              "name": "stream::WriteStream::new",
              "kind": "function_item",
              "signature": "pub fn new(max_size: usize) -> Self;",
              "docs": "Create a new write stream",
              "attributes": "",
              "line": 66
            },
            {
              "name": "stream::WriteStream::with_flush_callback",
              "kind": "function_item",
              "signature": "pub fn with_flush_callback<F>(mut self, callback: F) -> Self\n    where\n        F: Fn(Bytes) -> Result<()> + Send + Sync + 'static,;",
              "docs": "Set flush callback",
              "attributes": "",
              "line": 75
            },
            {
              "name": "stream::WriteStream::into_bytes",
              "kind": "function_item",
              "signature": "pub fn into_bytes(self) -> Bytes;",
              "docs": "Get the accumulated data",
              "attributes": "",
              "line": 84
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "watcher",
          "source": "sigil/weave/models/locus/src/watcher.rs",
          "sha256": "cdab7534f2043b6c62366a4b4dd492584e53ba4a0ddc4de147701c32d1176dae",
          "attributes": "",
          "items": [
            {
              "name": "watcher::WatcherId",
              "kind": "type_item",
              "signature": "pub type WatcherId = Uuid;",
              "docs": "Watcher ID type",
              "attributes": "",
              "line": 12
            },
            {
              "name": "watcher::WatchEvent",
              "kind": "enum_item",
              "signature": "pub enum WatchEvent {\n    /// File created\n    Created { path: String, is_dir: bool },\n\n    /// File modified\n    Modified { path: String, is_dir: bool },\n\n    /// File deleted\n    Deleted { path: String, is_dir: bool },\n\n    /// File moved\n    Moved {\n        from: String,\n        to: String,\n        is_dir: bool,\n    },\n\n    /// Metadata changed\n    MetadataChanged { path: String, is_dir: bool },\n}",
              "docs": "Event emitted by file watcher",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "watcher::Watcher",
              "kind": "struct_item",
              "signature": "pub struct Watcher {\n\n}",
              "docs": "File watcher",
              "attributes": "",
              "line": 38
            },
            {
              "name": "watcher::Watcher::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new watcher",
              "attributes": "",
              "line": 66
            },
            {
              "name": "watcher::Watcher::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> WatcherId;",
              "docs": "Get the watcher ID",
              "attributes": "",
              "line": 77
            },
            {
              "name": "watcher::Watcher::subscribe",
              "kind": "function_item",
              "signature": "pub fn subscribe(&self) -> broadcast::Receiver<WatchEvent>;",
              "docs": "Subscribe to watch events",
              "attributes": "",
              "line": 82
            },
            {
              "name": "watcher::Watcher::emit",
              "kind": "function_item",
              "signature": "pub fn emit(&self, event: WatchEvent);",
              "docs": "Emit an event",
              "attributes": "",
              "line": 87
            },
            {
              "name": "watcher::Watcher::emit_created",
              "kind": "function_item",
              "signature": "pub fn emit_created(&self, path: String, is_dir: bool);",
              "docs": "Emit created event",
              "attributes": "",
              "line": 100
            },
            {
              "name": "watcher::Watcher::emit_modified",
              "kind": "function_item",
              "signature": "pub fn emit_modified(&self, path: String, is_dir: bool);",
              "docs": "Emit modified event",
              "attributes": "",
              "line": 105
            },
            {
              "name": "watcher::Watcher::emit_deleted",
              "kind": "function_item",
              "signature": "pub fn emit_deleted(&self, path: String, is_dir: bool);",
              "docs": "Emit deleted event",
              "attributes": "",
              "line": 110
            },
            {
              "name": "watcher::Watcher::emit_moved",
              "kind": "function_item",
              "signature": "pub fn emit_moved(&self, from: String, to: String, is_dir: bool);",
              "docs": "Emit moved event",
              "attributes": "",
              "line": 115
            },
            {
              "name": "watcher::Watcher::emit_metadata_changed",
              "kind": "function_item",
              "signature": "pub fn emit_metadata_changed(&self, path: String, is_dir: bool);",
              "docs": "Emit metadata changed event",
              "attributes": "",
              "line": 120
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        },
        {
          "module": "policy",
          "source": "sigil/weave/models/locus/src/policy.rs",
          "sha256": "8365ff587a3dc32b6c053ae97d5330fc14109f2798943cd05139ebb83594c78f",
          "attributes": "#[cfg(feature = \"policy-hooks\")]",
          "items": [
            {
              "name": "policy::LocusPolicy",
              "kind": "trait_item",
              "signature": "pub trait LocusPolicy: Send + Sync + 'static {\n    fn before_write_file(&self, path: &str, size: u64) -> bool;\n    fn before_delete(&self, path: &str) -> bool;\n    fn before_mkdir(&self, path: &str) -> bool;\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 3
            },
            {
              "name": "policy::AllowAllLocusPolicy",
              "kind": "struct_item",
              "signature": "pub struct AllowAllLocusPolicy;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 9
            },
            {
              "name": "policy::LOCUS_POLICY",
              "kind": "static_item",
              "signature": "pub static LOCUS_POLICY: OnceCell<Box<dyn LocusPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 23
            },
            {
              "name": "policy::set_locus_policy",
              "kind": "function_item",
              "signature": "pub fn set_locus_policy(policy: Box<dyn LocusPolicy>) -> Result<(), Box<dyn LocusPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 25
            }
          ],
          "parseErrors": false,
          "reviewNote": "Rollback records a marker; mount descriptions and governance metadata alone do not execute mounting or enforce signature authorization. Operations can have separate metadata/blob failure points. See /libraries/locus/overview."
        }
      ]
    },
    {
      "name": "weave-nexus",
      "version": "0.1.0",
      "source": "sigil/weave/models/nexus",
      "manifestSha256": "d4453fa8f8eb9c728df806b4c0da0173c854fce0162b90139a934f4457d75c4d",
      "features": {
        "nexus-auto-update": []
      },
      "publish": true,
      "url": "/reference/rust/weave-nexus",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/nexus/src/lib.rs",
          "sha256": "11838dc0257bc0fca189f575630b42c9a7bfca9da03b0604dcff9b7c3a57b0ba",
          "attributes": "",
          "items": [
            {
              "name": "pub use config::{NexusConfig, ViewConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{NexusConfig, ViewConfig};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use error::{NexusError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{NexusError, Result};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use governance::{\n    AllowAllPolicy, GovernanceAuthority, GovernancePolicy, GovernanceRules, NexusPolicy,\n};",
              "kind": "use_declaration",
              "signature": "pub use governance::{\n    AllowAllPolicy, GovernanceAuthority, GovernancePolicy, GovernanceRules, NexusPolicy,\n};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use nexus::{Nexus, NexusEvent};",
              "kind": "use_declaration",
              "signature": "pub use nexus::{Nexus, NexusEvent};",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "pub use ordering::{CustomOrdering, OrderingStrategy, TimestampOrdering, UnorderedEntry};",
              "kind": "use_declaration",
              "signature": "pub use ordering::{CustomOrdering, OrderingStrategy, TimestampOrdering, UnorderedEntry};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use strand_input::{InputStrand, StrandStats};",
              "kind": "use_declaration",
              "signature": "pub use strand_input::{InputStrand, StrandStats};",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "pub use view::{\n    MemoryView, NexusCursor, NexusView, NexusViewAdapter, Page, StrandViewAdapter, ViewEntry,\n    ViewManager, ViewMetadata, ViewMetrics, ViewStrategy,\n};",
              "kind": "use_declaration",
              "signature": "pub use view::{\n    MemoryView, NexusCursor, NexusView, NexusViewAdapter, Page, StrandViewAdapter, ViewEntry,\n    ViewManager, ViewMetadata, ViewMetrics, ViewStrategy,\n};",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "pub use strand::Strand;",
              "kind": "use_declaration",
              "signature": "pub use strand::Strand;",
              "docs": "",
              "attributes": "",
              "line": 68
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/models/nexus/src/config.rs",
          "sha256": "12dc6a17f35cc3e22a90b73d2f2fd0d927d444459d99c5ca0743400c7af777ad",
          "attributes": "",
          "items": [
            {
              "name": "config::NexusConfig",
              "kind": "struct_item",
              "signature": "pub struct NexusConfig {\n/// Maximum number of input strands\n\npub max_input_strands: usize,\n/// View update interval\n\npub update_interval: Duration,\n/// Maximum view size in entries\n\npub max_view_entries: usize,\n/// Enable automatic view updates\n\npub auto_update: bool,\n/// View cache configuration\n\npub view_config: ViewConfig,\n/// Governance rules (optional)\n\npub governance: Option<GovernanceRules>,\n/// Enable event streaming\n\npub enable_events: bool,\n/// Batch size for processing entries\n\npub batch_size: usize,\n/// Maximum bytes per batch before a flush\n\npub max_batch_bytes: usize\n}",
              "docs": "Configuration for Nexus",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "config::ViewConfig",
              "kind": "struct_item",
              "signature": "pub struct ViewConfig {\n/// Cache generated views\n\npub cache_enabled: bool,\n/// View cache size\n\npub cache_size: usize,\n/// View retention period\n\npub retention: Duration,\n/// Enable view persistence\n\npub persist_views: bool\n}",
              "docs": "Configuration for view generation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/models/nexus/src/error.rs",
          "sha256": "103e7bc86252881020a786cbe3eaee045b06f6ab293d70fc9ba4e706323deef1",
          "attributes": "",
          "items": [
            {
              "name": "error::NexusError",
              "kind": "enum_item",
              "signature": "pub enum NexusError {\n    #[error(\"Unauthorized organization: {0}\")]\n    UnauthorizedOrganization(String),\n\n    #[error(\"Agent not found: {0}\")]\n    AgentNotFound(String),\n\n    #[error(\"Strand not found for agent: {0}\")]\n    StrandNotFound(String),\n\n    #[error(\"Invalid view state: {0}\")]\n    InvalidViewState(String),\n\n    #[error(\"Governance policy violation: {0}\")]\n    GovernanceViolation(String),\n\n    #[error(\"View generation failed: {0}\")]\n    ViewGenerationFailed(String),\n\n    #[error(\"Synchronization error: {0}\")]\n    SyncError(String),\n\n    #[error(\"Ordering strategy error: {0}\")]\n    OrderingError(String),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] strand::StrandError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] bincode::Error),\n\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Governance consensus failed: {obtained}/{required} approvals\")]\n    ConsensusFailed { obtained: usize, required: usize },\n}",
              "docs": "Errors that can occur in nexus operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, NexusError>;",
              "docs": "Convenience type alias for Results",
              "attributes": "",
              "line": 47
            }
          ],
          "parseErrors": false
        },
        {
          "module": "governance",
          "source": "sigil/weave/models/nexus/src/governance.rs",
          "sha256": "f26b4cbce3c9dd821f54a65df2099ddc94e2874f7a24c6d65c4144d19d205088",
          "attributes": "",
          "items": [
            {
              "name": "governance::NexusPolicy",
              "kind": "trait_item",
              "signature": "pub trait NexusPolicy: Send + Sync {\n    /// Allow or deny a candidate node before it enters the view\n    async fn allow(&self, writer_key: &str, index: u64, timestamp: SystemTime) -> bool;\n}",
              "docs": "Nexus policy hook for admission/filtering/backpressure (identity-agnostic)",
              "attributes": "#[async_trait]",
              "line": 16
            },
            {
              "name": "governance::AllowAllPolicy",
              "kind": "struct_item",
              "signature": "pub struct AllowAllPolicy;",
              "docs": "Default policy for tests and open deployments",
              "attributes": "",
              "line": 22
            },
            {
              "name": "governance::GovernanceRules",
              "kind": "struct_item",
              "signature": "pub struct GovernanceRules {\n/// Who makes decisions about participation\n\npub authority: GovernanceAuthority,\n/// Policy for adding/removing agents\n\npub policy: GovernancePolicy\n}",
              "docs": "Rules governing which agents can participate in a nexus",
              "attributes": "#[derive(Clone, Serialize, Deserialize)]",
              "line": 68
            },
            {
              "name": "governance::GovernanceAuthority",
              "kind": "enum_item",
              "signature": "pub enum GovernanceAuthority {\n    /// Single founder key decides (hex-encoded 32-byte public key)\n    SingleKey(String),\n\n    /// Multiple founder keys decide via threshold (M-of-N). Keys are hex-encoded\n    /// 32-byte public keys from Strand/Strand Vault contexts.\n    MultiKeyThreshold {\n        founders: Vec<String>,\n        threshold: u32,\n    },\n\n    /// Any agent from specified organizations\n    OrganizationList(Vec<String>),\n}",
              "docs": "Authority for governance decisions (key-only)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 91
            },
            {
              "name": "governance::GovernancePolicy",
              "kind": "struct_item",
              "signature": "pub struct GovernancePolicy {\n/// Allow agents from same organization automatically\n\npub allow_same_org: bool,\n/// Require explicit approval for each agent\n\npub require_approval: bool,\n/// Whitelist of approved organizations\n\npub approved_orgs: Vec<String>,\n/// Blacklist of denied organizations\n\npub denied_orgs: Vec<String>,\n/// Maximum agents per organization\n\npub max_agents_per_org: Option<usize>\n}",
              "docs": "Policy for agent participation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 108
            },
            {
              "name": "governance::GovernanceRules::submit_approval",
              "kind": "function_item",
              "signature": "pub async fn submit_approval(\n        founder_key_hex: &str,\n        target_key_hex: &str,\n        record: ApprovalRecord,\n    ) -> Result<()>;",
              "docs": "Record an approval from a founder for a target (key-only auth path).\n\nThis is a minimal, key-only mechanism suitable for MHR-style governance\nwithout requiring any external identity resolution. Approvals are stored\nprocess-wide in a concurrent map for the duration of the process.",
              "attributes": "",
              "line": 143
            },
            {
              "name": "governance::GovernanceRules::is_organization_authorized",
              "kind": "function_item",
              "signature": "pub async fn is_organization_authorized(&self, org_did: &str) -> Result<bool>;",
              "docs": "Check if an organization is authorized to participate",
              "attributes": "",
              "line": 154
            },
            {
              "name": "governance::GovernanceRules::check_org_limits",
              "kind": "function_item",
              "signature": "pub fn check_org_limits(&self, org_did: &str) -> Result<()>;",
              "docs": "Check if adding another agent from an organization would exceed limits",
              "attributes": "",
              "line": 198
            },
            {
              "name": "governance::GovernanceRules::open",
              "kind": "function_item",
              "signature": "pub fn open() -> Self;",
              "docs": "Create open governance (any agent can join)",
              "attributes": "",
              "line": 214
            },
            {
              "name": "governance::ApprovalRecord",
              "kind": "struct_item",
              "signature": "pub struct ApprovalRecord {\npub public_key: [u8; 32],\npub signature: [u8; 64],\npub timestamp: chrono::DateTime<chrono::Utc>\n}",
              "docs": "Approval record stored in governance system (keys-only)",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 333
            },
            {
              "name": "governance::OrganizationGovernance",
              "kind": "trait_item",
              "signature": "pub trait OrganizationGovernance: Send + Sync {\n    async fn has_approved(&self, org_did: &str) -> Result<bool>;\n}",
              "docs": "Interface for organization governance systems (MHR feature)",
              "attributes": "#[allow(dead_code)]\n#[async_trait::async_trait]",
              "line": 344
            }
          ],
          "parseErrors": false
        },
        {
          "module": "nexus",
          "source": "sigil/weave/models/nexus/src/nexus.rs",
          "sha256": "b6cb97338bbc568b6e325aaae9e83bec46fea2c266e7549a90e1105a048d6404",
          "attributes": "",
          "items": [
            {
              "name": "nexus::NexusEvent",
              "kind": "enum_item",
              "signature": "pub enum NexusEvent {\n    /// New strand added\n    StrandAdded { writer_key: String },\n\n    /// Strand removed\n    StrandRemoved { writer_key: String },\n\n    /// View updated\n    ViewUpdated {\n        entries_added: usize,\n        total_entries: usize,\n    },\n\n    /// Error occurred\n    Error { message: String },\n}",
              "docs": "Events emitted by Nexus",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "nexus::Nexus",
              "kind": "struct_item",
              "signature": "pub struct Nexus {\n\n}",
              "docs": "Multi-source view aggregator",
              "attributes": "",
              "line": 44
            },
            {
              "name": "nexus::Nexus::new",
              "kind": "function_item",
              "signature": "pub async fn new(\n        viewing_node: String,\n        ordering_strategy: Box<dyn OrderingStrategy>,\n        config: NexusConfig,\n    ) -> Result<Self>;",
              "docs": "Create a new nexus for aggregating views with identity adapter (recommended)",
              "attributes": "",
              "line": 73
            },
            {
              "name": "nexus::Nexus::viewing_node",
              "kind": "function_item",
              "signature": "pub fn viewing_node(&self) -> &str;",
              "docs": "Return the viewing node identifier",
              "attributes": "",
              "line": 99
            },
            {
              "name": "nexus::Nexus::add_input_strand",
              "kind": "function_item",
              "signature": "pub async fn add_input_strand(&self, strand: Arc<Strand>) -> Result<()>;",
              "docs": "Add an agent's strand as input source",
              "attributes": "",
              "line": 104
            },
            {
              "name": "nexus::Nexus::with_policy",
              "kind": "function_item",
              "signature": "pub fn with_policy(mut self, policy: Arc<dyn crate::governance::NexusPolicy>) -> Self;",
              "docs": "Install a policy hook prior to use",
              "attributes": "",
              "line": 144
            },
            {
              "name": "nexus::Nexus::paginate",
              "kind": "function_item",
              "signature": "pub fn paginate(&self, cursor: Option<NexusCursor>, limit: usize) -> Page;",
              "docs": "Paginate the current view",
              "attributes": "",
              "line": 150
            },
            {
              "name": "nexus::Nexus::enable_strand_view_sink",
              "kind": "function_item",
              "signature": "pub async fn enable_strand_view_sink(\n        &self,\n        strand: Arc<tokio::sync::Mutex<Strand>>,\n    ) -> Result<()>;",
              "docs": "Configure a Strand-backed view sink",
              "attributes": "",
              "line": 156
            },
            {
              "name": "nexus::Nexus::remove_input_strand",
              "kind": "function_item",
              "signature": "pub async fn remove_input_strand(&self, writer_key: &str) -> Result<()>;",
              "docs": "Remove an input strand",
              "attributes": "",
              "line": 168
            },
            {
              "name": "nexus::Nexus::generate_view",
              "kind": "function_item",
              "signature": "pub async fn generate_view(&self) -> Result<Vec<ViewEntry>>;",
              "docs": "Generate linearized view from all input strands",
              "attributes": "",
              "line": 266
            },
            {
              "name": "nexus::Nexus::update_view",
              "kind": "function_item",
              "signature": "pub async fn update_view(&self) -> Result<()>;",
              "docs": "Update view incrementally",
              "attributes": "",
              "line": 337
            },
            {
              "name": "nexus::Nexus::current_view",
              "kind": "function_item",
              "signature": "pub fn current_view(&self) -> Vec<ViewEntry>;",
              "docs": "Get current view",
              "attributes": "",
              "line": 349
            },
            {
              "name": "nexus::Nexus::view_range",
              "kind": "function_item",
              "signature": "pub fn view_range(&self, start: usize, end: usize) -> Vec<ViewEntry>;",
              "docs": "Get view range",
              "attributes": "",
              "line": 354
            },
            {
              "name": "nexus::Nexus::stats",
              "kind": "function_item",
              "signature": "pub async fn stats(&self) -> Result<Vec<StrandStats>>;",
              "docs": "Get statistics about input strands",
              "attributes": "",
              "line": 359
            },
            {
              "name": "nexus::Nexus::subscribe",
              "kind": "function_item",
              "signature": "pub fn subscribe(&self) -> broadcast::Receiver<NexusEvent>;",
              "docs": "Subscribe to events",
              "attributes": "",
              "line": 370
            },
            {
              "name": "nexus::Nexus::get_agent_count_for_org",
              "kind": "function_item",
              "signature": "pub fn get_agent_count_for_org(&self, org_did: &str) -> usize;",
              "docs": "Get the number of agents from a specific organization",
              "attributes": "",
              "line": 375
            },
            {
              "name": "nexus::Nexus::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&self) -> Result<()>;",
              "docs": "Shutdown the nexus",
              "attributes": "",
              "line": 532
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ordering",
          "source": "sigil/weave/models/nexus/src/ordering.rs",
          "sha256": "a48537d8d16d4331f4a4990aa104cb154fa1bc2f1e1d3aaf38c9b4e272a534eb",
          "attributes": "",
          "items": [
            {
              "name": "ordering::UnorderedEntry",
              "kind": "struct_item",
              "signature": "pub struct UnorderedEntry {\n/// DID of the source agent\n\npub source_agent: String,\n/// Index in the source strand\n\npub source_index: u64,\n/// Entry data\n\npub data: Vec<u8>,\n/// Timestamp\n\npub timestamp: SystemTime,\n/// Additional metadata\n\npub metadata: Option<serde_json::Value>\n}",
              "docs": "Unordered entry from an input strand",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "ordering::UnorderedEntry::into_view_entry",
              "kind": "function_item",
              "signature": "pub fn into_view_entry(self) -> ViewEntry;",
              "docs": "Convert to view entry",
              "attributes": "",
              "line": 34
            },
            {
              "name": "ordering::OrderingStrategy",
              "kind": "trait_item",
              "signature": "pub trait OrderingStrategy: Send + Sync {\n    /// Order entries from multiple sources\n    fn order(&self, entries: Vec<UnorderedEntry>) -> Vec<ViewEntry>;\n\n    /// Update ordering with new entries (for incremental updates)\n    fn update(&mut self, new_entries: Vec<UnorderedEntry>) -> Vec<ViewEntry>;\n\n    /// Get strategy name\n    fn name(&self) -> &str;\n}",
              "docs": "Strategy for ordering entries from multiple strands",
              "attributes": "#[async_trait]",
              "line": 47
            },
            {
              "name": "ordering::TimestampOrdering",
              "kind": "struct_item",
              "signature": "pub struct TimestampOrdering {\n/// Whether to break ties by agent DID\n\npub stable_sort: bool\n}",
              "docs": "Timestamp-based ordering (most common)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 60
            },
            {
              "name": "ordering::TimestampOrdering::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create new timestamp ordering",
              "attributes": "",
              "line": 71
            },
            {
              "name": "ordering::TimestampOrdering::with_stable_sort",
              "kind": "function_item",
              "signature": "pub fn with_stable_sort(stable_sort: bool) -> Self;",
              "docs": "Create with stable sort option",
              "attributes": "",
              "line": 79
            },
            {
              "name": "ordering::CustomOrdering",
              "kind": "struct_item",
              "signature": "pub struct CustomOrdering<F> {\n\n}",
              "docs": "Custom application-defined ordering",
              "attributes": "",
              "line": 143
            },
            {
              "name": "ordering::CustomOrdering<F>::new",
              "kind": "function_item",
              "signature": "pub fn new(name: String, order_fn: F) -> Self;",
              "docs": "Create custom ordering with comparison function",
              "attributes": "",
              "line": 155
            },
            {
              "name": "ordering::IndexOrdering",
              "kind": "struct_item",
              "signature": "pub struct IndexOrdering;",
              "docs": "Index-based ordering (preserves strand order)",
              "attributes": "#[derive(Debug, Clone, Default)]\n#[allow(dead_code)]",
              "line": 183
            }
          ],
          "parseErrors": false
        },
        {
          "module": "strand_input",
          "source": "sigil/weave/models/nexus/src/strand_input.rs",
          "sha256": "3c1505ecda62725e1d841e8b5493ea2ca21926548e9ea3fb706c4983fa911d62",
          "attributes": "",
          "items": [
            {
              "name": "strand_input::InputStrand",
              "kind": "struct_item",
              "signature": "pub struct InputStrand {\n/// The strand (single-writer by definition)\n\npub strand: Arc<Strand>,\n/// The writer public key (hex or raw repr as string)\n\npub writer_key: String,\n/// Current length we've processed\n\npub processed_length: Arc<AtomicU64>,\n/// When this strand joined the nexus\n\npub joined_at: SystemTime\n}",
              "docs": "Represents an input strand from a single agent",
              "attributes": "#[derive(Clone)]",
              "line": 15
            },
            {
              "name": "strand_input::InputStrand::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<Strand>) -> Self;",
              "docs": "Create new input strand",
              "attributes": "",
              "line": 31
            },
            {
              "name": "strand_input::InputStrand::processed_length",
              "kind": "function_item",
              "signature": "pub fn processed_length(&self) -> u64;",
              "docs": "Get current processed length",
              "attributes": "",
              "line": 43
            },
            {
              "name": "strand_input::InputStrand::set_processed_length",
              "kind": "function_item",
              "signature": "pub fn set_processed_length(&self, length: u64);",
              "docs": "Update processed length",
              "attributes": "",
              "line": 48
            },
            {
              "name": "strand_input::InputStrand::unprocessed_count",
              "kind": "function_item",
              "signature": "pub async fn unprocessed_count(&self) -> crate::Result<u64>;",
              "docs": "Get unprocessed entries count",
              "attributes": "",
              "line": 53
            },
            {
              "name": "strand_input::InputStrand::has_new_entries",
              "kind": "function_item",
              "signature": "pub async fn has_new_entries(&self) -> crate::Result<bool>;",
              "docs": "Check if strand has new entries",
              "attributes": "",
              "line": 60
            },
            {
              "name": "strand_input::StrandStats",
              "kind": "struct_item",
              "signature": "pub struct StrandStats {\n/// Writer key (string)\n\npub writer_key: String,\n/// Total entries in strand\n\npub total_entries: u64,\n/// Processed entries\n\npub processed_entries: u64,\n/// Unprocessed entries\n\npub unprocessed_entries: u64,\n/// When strand joined\n\npub joined_at: SystemTime,\n/// Last processed timestamp\n\npub last_processed: Option<SystemTime>\n}",
              "docs": "Statistics about an input strand",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 67
            },
            {
              "name": "strand_input::StrandStats::from_input_strand",
              "kind": "function_item",
              "signature": "pub async fn from_input_strand(input: &InputStrand) -> crate::Result<Self>;",
              "docs": "Create stats from input strand",
              "attributes": "",
              "line": 89
            }
          ],
          "parseErrors": false
        },
        {
          "module": "view",
          "source": "sigil/weave/models/nexus/src/view.rs",
          "sha256": "dfbabd057e591939b894791f5e2c981f787e6e779db90ac5dca6c6ecad19896b",
          "attributes": "",
          "items": [
            {
              "name": "view::NexusView",
              "kind": "trait_item",
              "signature": "pub trait NexusView: Send + Sync {\n    /// Append a batch of entries to the persisted view\n    async fn append_batch(&self, batch: &[ViewEntry]) -> Result<()>;\n}",
              "docs": "View persistence adapter API",
              "attributes": "#[async_trait]",
              "line": 22
            },
            {
              "name": "view::NexusViewAdapter",
              "kind": "trait_item",
              "signature": "pub trait NexusViewAdapter: Send + Sync {\n    async fn open(&self) -> Result<Arc<dyn NexusView>>;\n}",
              "docs": "Adapter that opens a concrete persisted view",
              "attributes": "#[async_trait]",
              "line": 29
            },
            {
              "name": "view::MemoryView",
              "kind": "struct_item",
              "signature": "pub struct MemoryView;",
              "docs": "In-memory no-op view for tests and non-persistent deployments",
              "attributes": "",
              "line": 34
            },
            {
              "name": "view::StrandView",
              "kind": "struct_item",
              "signature": "pub struct StrandView {\n\n}",
              "docs": "Strand-backed persistent view",
              "attributes": "",
              "line": 44
            },
            {
              "name": "view::StrandView::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<tokio::sync::Mutex<Strand>>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "view::StrandViewAdapter",
              "kind": "struct_item",
              "signature": "pub struct StrandViewAdapter {\n\n}",
              "docs": "Adapter opening a Strand-backed view",
              "attributes": "",
              "line": 72
            },
            {
              "name": "view::StrandViewAdapter::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<tokio::sync::Mutex<Strand>>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "view::NexusCursor",
              "kind": "struct_item",
              "signature": "pub struct NexusCursor(pub Vec<u8>);",
              "docs": "Opaque pagination cursor (encodes an offset)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 90
            },
            {
              "name": "view::NexusCursor::from_offset",
              "kind": "function_item",
              "signature": "pub fn from_offset(offset: usize) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "view::NexusCursor::to_offset",
              "kind": "function_item",
              "signature": "pub fn to_offset(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "view::Page",
              "kind": "struct_item",
              "signature": "pub struct Page {\npub items: Vec<ViewEntry>,\npub next: Option<NexusCursor>,\npub prev: Option<NexusCursor>,\npub total: usize\n}",
              "docs": "Page result for view pagination",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 106
            },
            {
              "name": "view::ViewEntry",
              "kind": "struct_item",
              "signature": "pub struct ViewEntry {\n/// Which agent produced this entry\n\npub source_agent: String,\n/// Index in the source strand\n\npub source_index: u64,\n/// Entry data\n\npub data: Vec<u8>,\n/// Timestamp from source strand\n\npub timestamp: SystemTime,\n/// Optional metadata\n\npub metadata: Option<ViewMetadata>\n}",
              "docs": "Entry in a linearized view",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 115
            },
            {
              "name": "view::ViewMetadata",
              "kind": "struct_item",
              "signature": "pub struct ViewMetadata {\n/// Hash of the entry\n\npub hash: [u8; 32],\n/// Size in bytes\n\npub size: u64,\n/// Custom application metadata\n\npub app_metadata: Option<Vec<u8>>\n}",
              "docs": "Metadata for view entries",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 134
            },
            {
              "name": "view::ViewMetadata::from_data",
              "kind": "function_item",
              "signature": "pub fn from_data(data: &[u8], app_metadata: Option<Vec<u8>>) -> Self;",
              "docs": "Create metadata from data",
              "attributes": "",
              "line": 147
            },
            {
              "name": "view::ViewManager",
              "kind": "struct_item",
              "signature": "pub struct ViewManager {\n\n}",
              "docs": "Manages the linearized view of multiple strands",
              "attributes": "",
              "line": 157
            },
            {
              "name": "view::ViewManager::new",
              "kind": "function_item",
              "signature": "pub fn new(ordering: Box<dyn OrderingStrategy>) -> Self;",
              "docs": "Create a new view manager",
              "attributes": "",
              "line": 180
            },
            {
              "name": "view::ViewManager::attach_view_strand",
              "kind": "function_item",
              "signature": "pub fn attach_view_strand(&self, strand: Arc<Strand>);",
              "docs": "Attach a read-only Strand as an indexable view backing store",
              "attributes": "",
              "line": 195
            },
            {
              "name": "view::ViewManager::has_view_strand",
              "kind": "function_item",
              "signature": "pub fn has_view_strand(&self) -> bool;",
              "docs": "Check if a view strand is attached",
              "attributes": "",
              "line": 200
            },
            {
              "name": "view::ViewManager::set_sink",
              "kind": "function_item",
              "signature": "pub fn set_sink(&self, sink: Arc<dyn NexusView>);",
              "docs": "Install a persistence sink",
              "attributes": "",
              "line": 205
            },
            {
              "name": "view::ViewManager::current_view",
              "kind": "function_item",
              "signature": "pub fn current_view(&self) -> Vec<ViewEntry>;",
              "docs": "Get current view",
              "attributes": "",
              "line": 217
            },
            {
              "name": "view::ViewManager::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get view length",
              "attributes": "",
              "line": 222
            },
            {
              "name": "view::ViewManager::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if view is empty",
              "attributes": "",
              "line": 227
            },
            {
              "name": "view::ViewManager::last_update",
              "kind": "function_item",
              "signature": "pub fn last_update(&self) -> SystemTime;",
              "docs": "Get last update time",
              "attributes": "",
              "line": 232
            },
            {
              "name": "view::ViewManager::add_entries",
              "kind": "function_item",
              "signature": "pub fn add_entries(\n        &mut self,\n        new_entries: Vec<UnorderedEntry>,\n    ) -> Result<Option<PersistBatch>>;",
              "docs": "Add new entries incrementally",
              "attributes": "",
              "line": 237
            },
            {
              "name": "view::ViewManager::regenerate_view",
              "kind": "function_item",
              "signature": "pub fn regenerate_view(\n        &mut self,\n        all_entries: Vec<UnorderedEntry>,\n    ) -> Result<Option<PersistBatch>>;",
              "docs": "Generate view from scratch",
              "attributes": "",
              "line": 270
            },
            {
              "name": "view::ViewManager::get_range",
              "kind": "function_item",
              "signature": "pub fn get_range(&self, start: usize, end: usize) -> Vec<ViewEntry>;",
              "docs": "Get entries in a range",
              "attributes": "",
              "line": 299
            },
            {
              "name": "view::ViewManager::paginate",
              "kind": "function_item",
              "signature": "pub fn paginate(&self, cursor: Option<NexusCursor>, limit: usize) -> Page;",
              "docs": "Paginate current view using cursor+limit",
              "attributes": "",
              "line": 311
            },
            {
              "name": "view::ViewManager::find_by_agent",
              "kind": "function_item",
              "signature": "pub fn find_by_agent(&self, agent_did: &str) -> Vec<ViewEntry>;",
              "docs": "Find entries by agent",
              "attributes": "",
              "line": 347
            },
            {
              "name": "view::ViewManager::metrics",
              "kind": "function_item",
              "signature": "pub fn metrics(&self) -> ViewMetrics;",
              "docs": "Metrics snapshot",
              "attributes": "",
              "line": 357
            },
            {
              "name": "view::ViewMetrics",
              "kind": "struct_item",
              "signature": "pub struct ViewMetrics {\npub applied_batches_total: u64,\npub applied_entries_total: u64,\npub applied_bytes_total: u64,\npub apply_latency_ms_hist: Vec<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 368
            },
            {
              "name": "view::ViewStrategy",
              "kind": "trait_item",
              "signature": "pub trait ViewStrategy: Send + Sync {\n    /// Generate view from input strands\n    async fn generate_view(&self, entries: Vec<UnorderedEntry>) -> Result<Vec<ViewEntry>>;\n\n    /// Strategy name\n    fn name(&self) -> &str;\n}",
              "docs": "Strategy for generating views",
              "attributes": "#[async_trait]",
              "line": 377
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-strand",
      "version": "0.1.0",
      "source": "sigil/weave/models/strand",
      "manifestSha256": "b754d8a4290b340fb50dad0cd43ba504a31549df41bc300b5c5495b50e54737c",
      "features": {
        "default": [],
        "policy-hooks": [],
        "fips": []
      },
      "publish": true,
      "url": "/reference/rust/weave-strand",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/strand/src/lib.rs",
          "sha256": "f09f7bcde22336051417cbcc71553f88c632f22b6e4ac63ebc86f2252ea2ee73",
          "attributes": "",
          "items": [
            {
              "name": "pub use bitfield::Bitfield;",
              "kind": "use_declaration",
              "signature": "pub use bitfield::Bitfield;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "pub use merkle_tree::{MerkleTree, Node, Proof as MerkleProof};",
              "kind": "use_declaration",
              "signature": "pub use merkle_tree::{MerkleTree, Node, Proof as MerkleProof};",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "pub use storage::{FileStorage, MemoryStorage, Storage};",
              "kind": "use_declaration",
              "signature": "pub use storage::{FileStorage, MemoryStorage, Storage};",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "::Config",
              "kind": "type_item",
              "signature": "pub type Config = StrandConfig;",
              "docs": "Type alias for compatibility",
              "attributes": "",
              "line": 69
            },
            {
              "name": "::StrandError",
              "kind": "enum_item",
              "signature": "pub enum StrandError {\n    /// Storage backend error\n    #[error(\"Storage error: {0}\")]\n    Storage(#[from] storage::StorageError),\n\n    /// Invalid configuration\n    #[error(\"Configuration error: {0}\")]\n    Configuration(String),\n\n    /// Cryptographic verification failed\n    #[error(\"Verification failed: {0}\")]\n    VerificationFailed(String),\n\n    /// Block not found\n    #[error(\"Block not found: {0}\")]\n    BlockNotFound(u64),\n\n    /// Invalid merkle proof\n    #[error(\"Invalid proof\")]\n    InvalidProof,\n\n    /// Invalid block sequence\n    #[error(\"Invalid sequence: expected {expected}, got {actual}\")]\n    InvalidSequence {\n        /// Expected sequence number\n        expected: u64,\n        /// Actual sequence number received\n        actual: u64,\n    },\n\n    /// Sparse mode error\n    #[error(\"Sparse mode error: {0}\")]\n    SparseError(String),\n\n    /// Corrupted data\n    #[error(\"Data corruption detected: {0}\")]\n    CorruptedData(String),\n\n    /// I/O error\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Serialization error\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    // Network and identity errors are handled at higher layers\n    /// Not implemented yet (used only for cross-crate sequencing gates)\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n}",
              "docs": "Error types for strand operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 73
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, StrandError>;",
              "docs": "Result type for strand operations",
              "attributes": "",
              "line": 126
            },
            {
              "name": "::recover_remote_writer_public_key",
              "kind": "function_item",
              "signature": "pub fn recover_remote_writer_public_key(path: impl AsRef<Path>) -> Result<Option<[u8; 32]>>;",
              "docs": "Recover and verify the immutable writer key for a legacy read-only on-disk\nreplica that predates the SDK's `remote_public_key` sidecar.\n\nA local writer store (one with a persisted secret key) returns `Ok(None)`.\nA keyless store must contain at least one complete, consistently signed\nblock; empty or conflicting keyless stores fail closed instead of being\nreopened under a newly generated writable identity.",
              "attributes": "",
              "line": 135
            },
            {
              "name": "::StrandConfig",
              "kind": "struct_item",
              "signature": "pub struct StrandConfig {\n/// Optional storage path for persistence\n\npub storage_path: Option<PathBuf>,\n/// Encryption settings\n\npub encrypted: bool,\n/// Sparse mode (download blocks on demand)\n\npub sparse: bool,\n/// Value encoding (e.g., \"binary\", \"utf-8\", \"json\")\n\npub value_encoding: String,\n/// Optional keypair for the writer (raw Ed25519 keys)\n\n#[serde(skip)]\npub keypair: Option<zer0_crypto::KeyPair>,\n/// Optional public key for read-only strands\n\n#[serde(skip)]\npub public_key: Option<[u8; 32]>\n}",
              "docs": "Configuration for a strand log",
              "attributes": "#[derive(Clone, Serialize, Deserialize, Default)]",
              "line": 168
            },
            {
              "name": "::StrandConfig::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new config with default settings",
              "attributes": "",
              "line": 203
            },
            {
              "name": "::StrandConfig::with_storage",
              "kind": "function_item",
              "signature": "pub fn with_storage(mut self, path: impl AsRef<Path>) -> Self;",
              "docs": "Set the storage path",
              "attributes": "",
              "line": 215
            },
            {
              "name": "::StrandConfig::with_encryption",
              "kind": "function_item",
              "signature": "pub fn with_encryption(mut self) -> Self;",
              "docs": "Enable encryption",
              "attributes": "",
              "line": 221
            },
            {
              "name": "::StrandConfig::with_sparse",
              "kind": "function_item",
              "signature": "pub fn with_sparse(mut self) -> Self;",
              "docs": "Set sparse mode",
              "attributes": "",
              "line": 227
            },
            {
              "name": "::StrandConfig::with_keypair",
              "kind": "function_item",
              "signature": "pub fn with_keypair(mut self, keypair: zer0_crypto::KeyPair) -> Self;",
              "docs": "Set the keypair",
              "attributes": "",
              "line": 233
            },
            {
              "name": "::StrandConfig::with_public_key",
              "kind": "function_item",
              "signature": "pub fn with_public_key(mut self, public_key: [u8; 32]) -> Self;",
              "docs": "Set the public key for read-only strands",
              "attributes": "",
              "line": 239
            },
            {
              "name": "::Header",
              "kind": "struct_item",
              "signature": "pub struct Header {\n/// Protocol version\n\npub version: u8,\n/// Block sequence number\n\npub seq: u64,\n/// Length of the data\n\npub length: u64,\n/// Byte offset in the data file\n\n#[serde(rename = \"byteOffset\")]\npub byte_offset: u64,\n/// Hash of the previous signed block header and payload.\n\n#[serde(default)]\npub prev_hash: [u8; 32],\n/// Writer public key\n\npub writer_public_key: [u8; 32],\n/// Timestamp when block was created\n\npub timestamp: u64,\n/// Signature of the block\n\npub signature: Vec<u8>\n}",
              "docs": "Header information for each block",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 247
            },
            {
              "name": "::Stats",
              "kind": "struct_item",
              "signature": "pub struct Stats {\n/// Number of blocks uploaded\n\npub uploaded: u64,\n/// Number of blocks downloaded\n\npub downloaded: u64,\n/// Number of bytes uploaded\n\npub uploaded_bytes: u64,\n/// Number of bytes downloaded\n\npub downloaded_bytes: u64,\n/// Number of peers connected\n\npub peers: usize,\n/// Number of blocks verified\n\npub verified: u64,\n/// Number of blocks rejected (invalid signature, etc.)\n\npub rejected: u64\n}",
              "docs": "Replication statistics",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 277
            },
            {
              "name": "::ReplicationStream",
              "kind": "struct_item",
              "signature": "pub struct ReplicationStream {\n\n}",
              "docs": "Replication stream for strand data",
              "attributes": "",
              "line": 295
            },
            {
              "name": "::ReplicationStream::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<Strand>) -> Self;",
              "docs": "Create a new replication stream",
              "attributes": "",
              "line": 303
            },
            {
              "name": "::ReplicationStream::handshake",
              "kind": "function_item",
              "signature": "pub async fn handshake(&mut self) -> Result<()>;",
              "docs": "Prepare the stream for range iteration.\n\nNetwork transport handshake lives in weave-sdk. This local API only\nsucceeds when a [`ReplicationClient`] is installed (sparse/network\nmode) or the strand already has local blocks to iterate. It never\nreports fake network success.",
              "attributes": "",
              "line": 317
            },
            {
              "name": "::ReplicationStream::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> &Stats;",
              "docs": "Get current replication statistics",
              "attributes": "",
              "line": 327
            },
            {
              "name": "::ReplicationStream::download_range",
              "kind": "function_item",
              "signature": "pub async fn download_range(&mut self, start: u64, end: u64, linear: bool) -> Result<()>;",
              "docs": "Begin downloading a range from the remote peer via the installed client.",
              "attributes": "",
              "line": 332
            },
            {
              "name": "::ReplicationStream::cancel_range",
              "kind": "function_item",
              "signature": "pub async fn cancel_range(&mut self, _start: u64, _end: u64) -> Result<()>;",
              "docs": "Cancel a previously scheduled range (best-effort local marker).",
              "attributes": "",
              "line": 345
            },
            {
              "name": "::ReplicationStream::next",
              "kind": "function_item",
              "signature": "pub async fn next(&mut self) -> Option<(u64, Vec<u8>)>;",
              "docs": "Get the next block in the stream",
              "attributes": "",
              "line": 350
            },
            {
              "name": "::Strand",
              "kind": "struct_item",
              "signature": "pub struct Strand {\n\n}",
              "docs": "Single-writer append-only log with cryptographic integrity",
              "attributes": "",
              "line": 366
            },
            {
              "name": "::Strand::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: StrandConfig) -> Result<Self>;",
              "docs": "Create a new strand log",
              "attributes": "",
              "line": 538
            },
            {
              "name": "::Strand::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> &[u8];",
              "docs": "Get the public key",
              "attributes": "",
              "line": 632
            },
            {
              "name": "::Strand::can_sign_provider_delegation",
              "kind": "function_item",
              "signature": "pub fn can_sign_provider_delegation(&self) -> bool;",
              "docs": "Whether this handle owns the immutable writer key and can issue a\npublic provider delegation. Read-only replicas return false.",
              "attributes": "",
              "line": 638
            },
            {
              "name": "::Strand::sign_provider_delegation",
              "kind": "function_item",
              "signature": "pub fn sign_provider_delegation(&self, payload: &[u8]) -> Result<Vec<u8>>;",
              "docs": "Sign a public discovery-provider delegation with this Strand's writer\nkey. Read-only replicas cannot issue provider delegations; public DHT\nadvertisements are therefore anchored in the immutable resource writer\nidentity rather than a provider's self-asserted DID.",
              "attributes": "",
              "line": 646
            },
            {
              "name": "::Strand::discovery_key",
              "kind": "function_item",
              "signature": "pub fn discovery_key(&self) -> &[u8; 32];",
              "docs": "Get the discovery key",
              "attributes": "",
              "line": 659
            },
            {
              "name": "::Strand::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> u64;",
              "docs": "Get the current length",
              "attributes": "",
              "line": 664
            },
            {
              "name": "::Strand::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if the log is empty",
              "attributes": "",
              "line": 673
            },
            {
              "name": "::Strand::set_history_ceiling",
              "kind": "function_item",
              "signature": "pub fn set_history_ceiling(&self, ceiling: Option<u64>);",
              "docs": "Install or clear a higher-layer signed history ceiling.\n\nA ceiling is the number of admissible blocks: a ceiling of `N` permits\nsequence numbers `0..N` and rejects `N` or later. Lowering a ceiling is\nallowed; raising or clearing it must be authorized by the caller's own\nsigned control plane.",
              "attributes": "",
              "line": 683
            },
            {
              "name": "::Strand::history_ceiling",
              "kind": "function_item",
              "signature": "pub fn history_ceiling(&self) -> Option<u64>;",
              "docs": "Return the currently enforced exclusive history ceiling.",
              "attributes": "",
              "line": 691
            },
            {
              "name": "::Strand::history_checkpoint",
              "kind": "function_item",
              "signature": "pub fn history_checkpoint(&self) -> (Option<u64>, Option<[u8; 32]>);",
              "docs": "Return the complete higher-layer checkpoint currently enforced by\nthis handle. Replication handles must copy this pair atomically rather\nthan reopening the same storage with an unconstrained default.",
              "attributes": "",
              "line": 698
            },
            {
              "name": "::Strand::set_history_checkpoint",
              "kind": "function_item",
              "signature": "pub fn set_history_checkpoint(\n        &self,\n        ceiling: u64,\n        terminal_hash: Option<[u8; 32]>,\n    ) -> Result<()>;",
              "docs": "Install a complete signed terminal checkpoint. A nonzero terminal\nlength requires the exact terminal block-link hash.",
              "attributes": "",
              "line": 704
            },
            {
              "name": "::Strand::terminal_checkpoint",
              "kind": "function_item",
              "signature": "pub fn terminal_checkpoint(&self) -> Result<(u64, Option<[u8; 32]>)>;",
              "docs": "Verify the complete locally stored chain and return its immutable\nterminal length and terminal block-link hash.",
              "attributes": "",
              "line": 748
            },
            {
              "name": "::Strand::refresh_from_storage",
              "kind": "function_item",
              "signature": "pub fn refresh_from_storage(&self) -> Result<()>;",
              "docs": "Refresh in-memory metadata from the backing store.\n\nThis lets one handle observe blocks appended or replicated through a\nsecond handle that shares the same storage path.",
              "attributes": "",
              "line": 779
            },
            {
              "name": "::Strand::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &StrandConfig;",
              "docs": "Access the configuration",
              "attributes": "",
              "line": 795
            },
            {
              "name": "::Strand::append_sync",
              "kind": "function_item",
              "signature": "pub fn append_sync(&mut self, data: &[u8]) -> Result<u64>;",
              "docs": "Append data to the log (synchronous)",
              "attributes": "",
              "line": 800
            },
            {
              "name": "::Strand::append",
              "kind": "function_item",
              "signature": "pub async fn append(&mut self, data: &[u8]) -> Result<u64>;",
              "docs": "Append data to the log (async wrapper)",
              "attributes": "",
              "line": 898
            },
            {
              "name": "::Strand::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, seq: u64) -> Result<Vec<u8>>;",
              "docs": "Get data at a specific sequence number.\n\nIn sparse mode, a missing local block is fetched through the installed\n[`ReplicationClient`]. Without a client, sparse misses fail closed\ninstead of pretending the block exists.",
              "attributes": "",
              "line": 911
            },
            {
              "name": "::Strand::get_local",
              "kind": "function_item",
              "signature": "pub async fn get_local(&self, seq: u64) -> Result<Vec<u8>>;",
              "docs": "Read a block that is already local without invoking the sparse client.\nUsed by network hooks to avoid recursive fetch loops.",
              "attributes": "",
              "line": 976
            },
            {
              "name": "::Strand::fork",
              "kind": "function_item",
              "signature": "pub async fn fork(&self, new_path: Option<&std::path::Path>) -> Result<Strand>;",
              "docs": "Fork the log (shallow copy of storage path if filesystem-backed)",
              "attributes": "",
              "line": 989
            },
            {
              "name": "::Strand::user_get",
              "kind": "function_item",
              "signature": "pub fn user_get(&self, key: &str) -> Option<Vec<u8>>;",
              "docs": "Read a value from user metadata KV",
              "attributes": "",
              "line": 998
            },
            {
              "name": "::Strand::user_get_fresh",
              "kind": "function_item",
              "signature": "pub fn user_get_fresh(&self, key: &str) -> Result<Option<Vec<u8>>>;",
              "docs": "Read metadata from the authoritative backing store and refresh the\nprocess-local projection.",
              "attributes": "",
              "line": 1004
            },
            {
              "name": "::Strand::user_set",
              "kind": "function_item",
              "signature": "pub fn user_set(&self, key: String, value: Vec<u8>) -> Result<()>;",
              "docs": "Set a value in user metadata KV and persist",
              "attributes": "",
              "line": 1013
            },
            {
              "name": "::Strand::user_compare_and_set",
              "kind": "function_item",
              "signature": "pub fn user_compare_and_set(\n        &self,\n        key: String,\n        expected: Option<&[u8]>,\n        value: Vec<u8>,\n    ) -> Result<bool>;",
              "docs": "Compare and replace one metadata value under the cross-process storage\nlease. A stale expected value returns `Ok(false)` and refreshes the\nlocal metadata projection without publishing the candidate.",
              "attributes": "",
              "line": 1025
            },
            {
              "name": "::Strand::telemetry",
              "kind": "function_item",
              "signature": "pub fn telemetry(&self) -> (u64, u64);",
              "docs": "Telemetry counters",
              "attributes": "",
              "line": 1044
            },
            {
              "name": "::Strand::replication",
              "kind": "function_item",
              "signature": "pub async fn replication(&self, opts: ReplicationOptions) -> ReplicationHandle;",
              "docs": "Create a replication handle for scheduling range downloads (no network deps)",
              "attributes": "",
              "line": 1049
            },
            {
              "name": "::Strand::get_header",
              "kind": "function_item",
              "signature": "pub async fn get_header(&self, seq: u64) -> Result<Header>;",
              "docs": "Get header at a specific sequence number",
              "attributes": "",
              "line": 1054
            },
            {
              "name": "::Strand::proof",
              "kind": "function_item",
              "signature": "pub async fn proof(&self, seq: u64) -> Result<MerkleProof>;",
              "docs": "Create a proof for a specific block",
              "attributes": "",
              "line": 1077
            },
            {
              "name": "::Strand::verify_proof",
              "kind": "function_item",
              "signature": "pub async fn verify_proof(&self, proof: &MerkleProof, data: &[u8]) -> Result<bool>;",
              "docs": "Verify a proof",
              "attributes": "",
              "line": 1087
            },
            {
              "name": "::Strand::set_replication_client",
              "kind": "function_item",
              "signature": "pub fn set_replication_client(&self, client: replication_client::SharedReplicationClient);",
              "docs": "Install (or replace) the sparse/network download hook.",
              "attributes": "",
              "line": 1094
            },
            {
              "name": "::Strand::clear_replication_client",
              "kind": "function_item",
              "signature": "pub fn clear_replication_client(&self);",
              "docs": "Remove any installed download hook.",
              "attributes": "",
              "line": 1099
            },
            {
              "name": "::Strand::has_replication_client",
              "kind": "function_item",
              "signature": "pub fn has_replication_client(&self) -> bool;",
              "docs": "Whether a download hook is currently installed.",
              "attributes": "",
              "line": 1104
            },
            {
              "name": "::Strand::replication_client",
              "kind": "function_item",
              "signature": "pub fn replication_client(&self) -> Option<replication_client::SharedReplicationClient>;",
              "docs": "Clone the installed download hook, if any.",
              "attributes": "",
              "line": 1109
            },
            {
              "name": "::Strand::is_sparse",
              "kind": "function_item",
              "signature": "pub fn is_sparse(&self) -> bool;",
              "docs": "Whether sparse mode is enabled on this handle.",
              "attributes": "",
              "line": 1114
            },
            {
              "name": "::Strand::has_block",
              "kind": "function_item",
              "signature": "pub fn has_block(&self, seq: u64) -> bool;",
              "docs": "Whether block `seq` is present in the local bitfield.",
              "attributes": "",
              "line": 1119
            },
            {
              "name": "::Strand::clear_cache",
              "kind": "function_item",
              "signature": "pub fn clear_cache(&mut self);",
              "docs": "Clear cached data",
              "attributes": "",
              "line": 1124
            },
            {
              "name": "::Strand::ingest_remote_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_remote_block(&self, seq: u64, header: &Header, data: &[u8]) -> Result<()>;",
              "docs": "Ingest a verified remote block sequentially into local storage",
              "attributes": "",
              "line": 1223
            },
            {
              "name": "::replicate",
              "kind": "function_item",
              "signature": "pub fn replicate(strand: Arc<Strand>) -> ReplicationStream;",
              "docs": "Create a replication stream for this log",
              "attributes": "",
              "line": 1359
            },
            {
              "name": "pub use policy::{set_strand_policy, AllowAllPolicy, StrandPolicy};",
              "kind": "use_declaration",
              "signature": "pub use policy::{set_strand_policy, AllowAllPolicy, StrandPolicy};",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 1364
            },
            {
              "name": "pub use replication_api::{RangeHandle, RangeSpec, ReplicationHandle, ReplicationOptions};",
              "kind": "use_declaration",
              "signature": "pub use replication_api::{RangeHandle, RangeSpec, ReplicationHandle, ReplicationOptions};",
              "docs": "",
              "attributes": "",
              "line": 1366
            },
            {
              "name": "pub use replication_client::{\n    ReplicationClient, SharedReplicationClient, UnsupportedReplicationClient,\n};",
              "kind": "use_declaration",
              "signature": "pub use replication_client::{\n    ReplicationClient, SharedReplicationClient, UnsupportedReplicationClient,\n};",
              "docs": "",
              "attributes": "",
              "line": 1367
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bitfield",
          "source": "sigil/weave/models/strand/src/bitfield.rs",
          "sha256": "f88939dd54880e0585d85918942524896634ecf9b14bd8179d85498913674222",
          "attributes": "",
          "items": [
            {
              "name": "bitfield::Bitfield",
              "kind": "struct_item",
              "signature": "pub struct Bitfield {\n\n}",
              "docs": "A growable bitfield for tracking which blocks are downloaded",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "bitfield::Bitfield::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty bitfield",
              "attributes": "",
              "line": 17
            },
            {
              "name": "bitfield::Bitfield::with_capacity",
              "kind": "function_item",
              "signature": "pub fn with_capacity(bits: usize) -> Self;",
              "docs": "Create a bitfield with a specific capacity",
              "attributes": "",
              "line": 25
            },
            {
              "name": "bitfield::Bitfield::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, index: usize) -> bool;",
              "docs": "Get the value of a bit",
              "attributes": "",
              "line": 34
            },
            {
              "name": "bitfield::Bitfield::set",
              "kind": "function_item",
              "signature": "pub fn set(&mut self, index: usize, value: bool);",
              "docs": "Set a bit to a value",
              "attributes": "",
              "line": 46
            },
            {
              "name": "bitfield::Bitfield::count",
              "kind": "function_item",
              "signature": "pub fn count(&self) -> usize;",
              "docs": "Count the number of set bits",
              "attributes": "",
              "line": 71
            },
            {
              "name": "bitfield::Bitfield::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get the length in bits",
              "attributes": "",
              "line": 76
            },
            {
              "name": "bitfield::Bitfield::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if the bitfield is empty",
              "attributes": "",
              "line": 81
            },
            {
              "name": "bitfield::Bitfield::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&mut self);",
              "docs": "Clear all bits",
              "attributes": "",
              "line": 86
            },
            {
              "name": "bitfield::Bitfield::iter",
              "kind": "function_item",
              "signature": "pub fn iter(&self) -> BitfieldIterator<'_>;",
              "docs": "Get an iterator over set bit indices",
              "attributes": "",
              "line": 92
            },
            {
              "name": "bitfield::Bitfield::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: Vec<u8>) -> Self;",
              "docs": "Create a bitfield from raw bytes",
              "attributes": "",
              "line": 100
            },
            {
              "name": "bitfield::Bitfield::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "Get the raw bytes",
              "attributes": "",
              "line": 112
            },
            {
              "name": "bitfield::Bitfield::get_range",
              "kind": "function_item",
              "signature": "pub fn get_range(&self, start: usize, end: usize) -> Vec<bool>;",
              "docs": "Get a range of bits",
              "attributes": "",
              "line": 117
            },
            {
              "name": "bitfield::Bitfield::set_range",
              "kind": "function_item",
              "signature": "pub fn set_range(&mut self, start: usize, end: usize, value: bool);",
              "docs": "Set a range of bits",
              "attributes": "",
              "line": 122
            },
            {
              "name": "bitfield::Bitfield::first_unset",
              "kind": "function_item",
              "signature": "pub fn first_unset(&self) -> Option<usize>;",
              "docs": "Find the first unset bit",
              "attributes": "",
              "line": 129
            },
            {
              "name": "bitfield::Bitfield::last_set",
              "kind": "function_item",
              "signature": "pub fn last_set(&self) -> Option<usize>;",
              "docs": "Find the last set bit",
              "attributes": "",
              "line": 146
            },
            {
              "name": "bitfield::BitfieldIterator",
              "kind": "struct_item",
              "signature": "pub struct BitfieldIterator<'a> {\n\n}",
              "docs": "Iterator over set bits in a bitfield",
              "attributes": "",
              "line": 168
            }
          ],
          "parseErrors": false
        },
        {
          "module": "merkle_tree",
          "source": "sigil/weave/models/strand/src/merkle_tree.rs",
          "sha256": "e07689743692335d133001f4c2cfff5667b50148743e9cf1729ff86755ac25fc",
          "attributes": "",
          "items": [
            {
              "name": "merkle_tree::Node",
              "kind": "struct_item",
              "signature": "pub struct Node {\n/// The flat-tree index of this node\n\npub index: u64,\n/// The size of data this node represents\n\npub size: u64,\n/// The hash of this node\n\npub hash: [u8; 32]\n}",
              "docs": "A node in the merkle tree",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "merkle_tree::Proof",
              "kind": "struct_item",
              "signature": "pub struct Proof {\n/// The index of the block being proven\n\npub index: u64,\n/// The nodes needed to verify the proof\n\npub nodes: Vec<Node>,\n/// The signature over the tree root (optional)\n\npub signature: Option<Vec<u8>>\n}",
              "docs": "A proof that a specific block is part of the merkle tree",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "merkle_tree::MerkleTree",
              "kind": "struct_item",
              "signature": "pub struct MerkleTree {\n\n}",
              "docs": "Merkle tree for efficient cryptographic verification",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 35
            },
            {
              "name": "merkle_tree::MerkleTree::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new empty merkle tree",
              "attributes": "",
              "line": 45
            },
            {
              "name": "merkle_tree::MerkleTree::add",
              "kind": "function_item",
              "signature": "pub fn add(&mut self, node: Node);",
              "docs": "Add a new leaf node to the tree",
              "attributes": "",
              "line": 53
            },
            {
              "name": "merkle_tree::MerkleTree::root_hash",
              "kind": "function_item",
              "signature": "pub fn root_hash(&self) -> [u8; 32];",
              "docs": "Get the current root hash",
              "attributes": "",
              "line": 68
            },
            {
              "name": "merkle_tree::MerkleTree::roots",
              "kind": "function_item",
              "signature": "pub fn roots(&self) -> Vec<Node>;",
              "docs": "Get the current roots",
              "attributes": "",
              "line": 83
            },
            {
              "name": "merkle_tree::MerkleTree::peaks",
              "kind": "function_item",
              "signature": "pub fn peaks(&self) -> Vec<Node>;",
              "docs": "Get the peaks (roots) of the tree",
              "attributes": "",
              "line": 88
            },
            {
              "name": "merkle_tree::MerkleTree::proof",
              "kind": "function_item",
              "signature": "pub fn proof(&self, index: u64) -> Option<Proof>;",
              "docs": "Create a proof for a specific block",
              "attributes": "",
              "line": 93
            },
            {
              "name": "merkle_tree::MerkleTree::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, proof: &Proof, node: &Node) -> Result<bool, String>;",
              "docs": "Verify a proof against a node",
              "attributes": "",
              "line": 126
            },
            {
              "name": "merkle_tree::MerkleTree::verify_proof",
              "kind": "function_item",
              "signature": "pub fn verify_proof(&self, proof: &Proof, data: &[u8]) -> Result<bool, String>;",
              "docs": "Verify a proof with data",
              "attributes": "",
              "line": 131
            },
            {
              "name": "merkle_tree::flat_tree",
              "kind": "module",
              "signature": "pub mod flat_tree;",
              "docs": "Flat-tree indexing scheme",
              "attributes": "",
              "line": 237
            },
            {
              "name": "merkle_tree::flat_tree::depth",
              "kind": "function_item",
              "signature": "pub fn depth(index: u64) -> u64;",
              "docs": "Get the depth of a node",
              "attributes": "",
              "line": 239
            },
            {
              "name": "merkle_tree::flat_tree::parent",
              "kind": "function_item",
              "signature": "pub fn parent(index: u64) -> u64;",
              "docs": "Get the parent index",
              "attributes": "",
              "line": 245
            },
            {
              "name": "merkle_tree::flat_tree::sibling",
              "kind": "function_item",
              "signature": "pub fn sibling(index: u64) -> u64;",
              "docs": "Get the sibling index",
              "attributes": "",
              "line": 256
            }
          ],
          "parseErrors": false
        },
        {
          "module": "policy",
          "source": "sigil/weave/models/strand/src/policy.rs",
          "sha256": "114bd9e3647e5e523fc6728905bcfab5dc3c1c994df23bb218cc98560a977cd7",
          "attributes": "#[cfg(feature = \"policy-hooks\")]",
          "items": [
            {
              "name": "policy::StrandPolicy",
              "kind": "trait_item",
              "signature": "pub trait StrandPolicy: Send + Sync + 'static {\n    /// Decide if a block can be appended\n    fn can_append(&self, writer_public_key: &[u8; 32], data: &[u8]) -> bool;\n}",
              "docs": "Strand policy hook for append operations",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 4
            },
            {
              "name": "policy::AllowAllPolicy",
              "kind": "struct_item",
              "signature": "pub struct AllowAllPolicy;",
              "docs": "Allow-all default policy for convenience",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 10
            },
            {
              "name": "policy::TRACE_POLICY",
              "kind": "static_item",
              "signature": "pub static TRACE_POLICY: OnceCell<Box<dyn StrandPolicy>>;",
              "docs": "Global policy instance (optional)",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 19
            },
            {
              "name": "policy::set_strand_policy",
              "kind": "function_item",
              "signature": "pub fn set_strand_policy(policy: Box<dyn StrandPolicy>) -> Result<(), Box<dyn StrandPolicy>>;",
              "docs": "Set the global strand policy. Returns Err if already set.",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 22
            }
          ],
          "parseErrors": false
        },
        {
          "module": "replication_api",
          "source": "sigil/weave/models/strand/src/replication_api.rs",
          "sha256": "758ab0f0e0dc1bb6320c0626ae0461ac481012d508d7e601b3561af03db793b8",
          "attributes": "",
          "items": [
            {
              "name": "replication_api::ReplicationOptions",
              "kind": "struct_item",
              "signature": "pub struct ReplicationOptions {\n/// Whether this side initiated the transport connection (reserved)\n\npub is_initiator: bool,\n/// Prefer linear download scheduling (sequential)\n\npub linear: bool,\n/// When true, `download` may walk local storage only (no network).\n\n/// Default false: missing network client fails closed.\n\npub local_only: bool\n}",
              "docs": "Options controlling replication behavior (network-agnostic)",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 10
            },
            {
              "name": "replication_api::RangeSpec",
              "kind": "struct_item",
              "signature": "pub struct RangeSpec {\n/// Start index (inclusive)\n\npub start: u64,\n/// Optional end index (exclusive). None means unbounded to current len\n\npub end: Option<u64>,\n/// Prefer linear scheduling within range\n\npub linear: bool\n}",
              "docs": "Range specification for scheduling block fetches",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 22
            },
            {
              "name": "replication_api::RangeHandle",
              "kind": "struct_item",
              "signature": "pub struct RangeHandle {\n\n}",
              "docs": "Handle for a scheduled range; cancel to stop processing",
              "attributes": "",
              "line": 32
            },
            {
              "name": "replication_api::RangeHandle::cancel",
              "kind": "function_item",
              "signature": "pub fn cancel(&mut self);",
              "docs": "Request cancellation of this range (best-effort)",
              "attributes": "",
              "line": 39
            },
            {
              "name": "replication_api::RangeHandle::cancel_async",
              "kind": "function_item",
              "signature": "pub async fn cancel_async(mut self) -> Result<()>;",
              "docs": "Cancel and await termination",
              "attributes": "",
              "line": 46
            },
            {
              "name": "replication_api::ReplicationHandle",
              "kind": "struct_item",
              "signature": "pub struct ReplicationHandle {\n\n}",
              "docs": "Replication session handle for local scheduling / sparse client I/O",
              "attributes": "",
              "line": 56
            },
            {
              "name": "replication_api::ReplicationHandle::new",
              "kind": "function_item",
              "signature": "pub fn new(strand: Arc<Mutex<Strand>>, opts: ReplicationOptions) -> Self;",
              "docs": "Create a new handle bound to a given strand",
              "attributes": "",
              "line": 63
            },
            {
              "name": "replication_api::ReplicationHandle::download",
              "kind": "function_item",
              "signature": "pub async fn download(&self, range: RangeSpec) -> Result<RangeHandle>;",
              "docs": "Request a range download. Returns a handle which can be cancelled.\n\n- If a [`crate::ReplicationClient`] is installed, performs real sparse I/O.\n- If `opts.local_only`, walks already-local blocks only.\n- Otherwise fails closed (no fake network success).",
              "attributes": "",
              "line": 72
            },
            {
              "name": "replication_api::ReplicationHandle::poll_once",
              "kind": "function_item",
              "signature": "pub async fn poll_once(&self) -> Result<()>;",
              "docs": "Advance replication loop once (no-op when idle)",
              "attributes": "",
              "line": 94
            },
            {
              "name": "replication_api::create_handle",
              "kind": "function_item",
              "signature": "pub async fn create_handle(strand: &Strand, opts: ReplicationOptions) -> ReplicationHandle;",
              "docs": "Create a replication handle with a shallow-cloned strand sharing storage backend",
              "attributes": "",
              "line": 174
            }
          ],
          "parseErrors": false
        },
        {
          "module": "replication_client",
          "source": "sigil/weave/models/strand/src/replication_client.rs",
          "sha256": "33e817099e04f94b9103c7dacaced5236bff26f4e114eb0eb861fd80e35e03e3",
          "attributes": "",
          "items": [
            {
              "name": "replication_client::ReplicationClient",
              "kind": "trait_item",
              "signature": "pub trait ReplicationClient: Send + Sync {\n    /// Fetch one missing block and ensure it is durable in local storage\n    /// before returning its bytes.\n    async fn fetch_block(&self, _seq: u64) -> Result<Vec<u8>>;\n\n    /// Ensure every block in `[start, end)` (or `[start, len)` when `end` is\n    /// `None`) is present locally. May perform network I/O.\n    async fn ensure_range(&self, start: u64, end: Option<u64>) -> Result<()>;\n}",
              "docs": "Network-facing sparse download surface used by Strand when a block is\nmissing locally. Implementations live in weave-sdk (session + DHT I/O).",
              "attributes": "#[async_trait]",
              "line": 17
            },
            {
              "name": "replication_client::UnsupportedReplicationClient",
              "kind": "struct_item",
              "signature": "pub struct UnsupportedReplicationClient;",
              "docs": "Fail-closed client used when sparse mode is enabled but no real network\nhook was installed. Never reports success for missing blocks.",
              "attributes": "#[derive(Debug, Default, Clone, Copy)]",
              "line": 30
            },
            {
              "name": "replication_client::SharedReplicationClient",
              "kind": "type_item",
              "signature": "pub type SharedReplicationClient = Arc<dyn ReplicationClient>;",
              "docs": "Shared handle installed on a Strand.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "replication_client::unsupported_network",
              "kind": "function_item",
              "signature": "pub fn unsupported_network(op: &'static str) -> StrandError;",
              "docs": "Helper: return the fail-closed unsupported error for APIs that previously\npretended network work succeeded.",
              "attributes": "",
              "line": 53
            }
          ],
          "parseErrors": false
        },
        {
          "module": "storage",
          "source": "sigil/weave/models/strand/src/storage.rs",
          "sha256": "e032dd53a3f17bae8191d6722e2824e3bbf97052fcfb158bbf1f06da7b22d65a",
          "attributes": "",
          "items": [
            {
              "name": "storage::StorageError",
              "kind": "enum_item",
              "signature": "pub enum StorageError {\n    /// IO error\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Serialization error\n    #[error(\"Serialization error: {0}\")]\n    Serialization(String),\n\n    /// Not found\n    #[error(\"Not found\")]\n    NotFound,\n}",
              "docs": "Storage errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 39
            },
            {
              "name": "storage::Info",
              "kind": "struct_item",
              "signature": "pub struct Info {\n/// Current length\n\npub length: u64,\n/// Total byte length\n\npub byte_length: u64,\n/// Downloaded blocks bitfield\n\npub bitfield: Bitfield,\n/// Byte offsets for each block\n\npub offsets: Vec<u64>\n}",
              "docs": "Storage info",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 71
            },
            {
              "name": "storage::StorageLockGuard",
              "kind": "trait_item",
              "signature": "pub trait StorageLockGuard: Send {}",
              "docs": "Process-scoped ownership of a storage mutation lease.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "storage::Storage",
              "kind": "trait_item",
              "signature": "pub trait Storage: Send + Sync {\n    /// Acquire an exclusive mutation lease for this Strand. Filesystem\n    /// implementations must serialize across processes, not only threads.\n    fn lock_exclusive(&self) -> Result<Box<dyn StorageLockGuard>, StorageError>;\n\n    /// Read the config\n    fn read_config(&self) -> Result<Config, StorageError>;\n\n    /// Write the config\n    fn write_config(&self, config: &Config) -> Result<(), StorageError>;\n\n    /// Read the secret key\n    fn read_secret_key(&self) -> Result<[u8; 64], StorageError>;\n\n    /// Write the secret key\n    fn write_secret_key(&self, key: &[u8; 64]) -> Result<(), StorageError>;\n\n    /// Read info\n    fn read_info(&self) -> Result<Info, StorageError>;\n\n    /// Write info\n    fn write_info(&self, info: &Info) -> Result<(), StorageError>;\n\n    /// Read data at sequence\n    fn read_data(&self, seq: u64) -> Result<Vec<u8>, StorageError>;\n\n    /// Write data at sequence\n    fn write_data(&self, seq: u64, data: &[u8]) -> Result<(), StorageError>;\n\n    /// Read header at sequence\n    fn read_header(&self, seq: u64) -> Result<Header, StorageError>;\n\n    /// Write header at sequence\n    fn write_header(&self, seq: u64, header: &Header) -> Result<(), StorageError>;\n\n    /// Get the byte offset for a sequence number\n    fn data_offset(&self, seq: u64) -> Result<u64, StorageError>;\n\n    /// Update offsets after writing data\n    fn update_offsets(&self, seq: u64, data_len: u64) -> Result<u64, StorageError>;\n\n    /// Read user metadata key-value store\n    fn read_user_kv(&self) -> Result<HashMap<String, Vec<u8>>, StorageError>;\n\n    /// Write user metadata key-value store\n    fn write_user_kv(&self, map: &HashMap<String, Vec<u8>>) -> Result<(), StorageError>;\n}",
              "docs": "Storage backend trait",
              "attributes": "",
              "line": 89
            },
            {
              "name": "storage::FileStorage",
              "kind": "struct_item",
              "signature": "pub struct FileStorage {\n\n}",
              "docs": "File-based storage. Flat layout: 8 files per Strand,\nnot two per event. See module docs for the file roster.\n\nFiles are opened on-demand per operation rather than cached as long-lived\nhandles. This trades a small amount of throughput for resilience: if a\ncaller wraps the strand path in a `TempDir` whose Drop deletes the\ndirectory between operations (a common pattern in downstream tests),\noperations will lazily re-create the directory and files instead of\nfailing on stale handles to unlinked inodes.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "storage::FileStorage::new",
              "kind": "function_item",
              "signature": "pub fn new(path: impl AsRef<Path>) -> Result<Self, StorageError>;",
              "docs": "Open or create a Strand directory at `path`.\n\nCreates the four flat files (`data.bin`, `data.idx`, `headers.bin`,\n`headers.idx`) if absent. Existing files are opened append-mode for\nthe .bin twins and read+write for the .idx twins (random-access seeks).",
              "attributes": "",
              "line": 179
            },
            {
              "name": "storage::MemoryStorage",
              "kind": "struct_item",
              "signature": "pub struct MemoryStorage {\n\n}",
              "docs": "In-memory storage",
              "attributes": "",
              "line": 687
            },
            {
              "name": "storage::MemoryStorage::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create new memory storage",
              "attributes": "",
              "line": 699
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "strand-blobs",
      "version": "0.1.0",
      "source": "sigil/weave/models/strand-blobs",
      "manifestSha256": "01886f3b99878f722af2409d8bcbb94f20a1a038f16e86e778b58043d994bead",
      "features": {
        "default": [],
        "mock": [],
        "zstd": [
          "dep:zstd"
        ],
        "lz4": [
          "dep:lz4"
        ],
        "snap": [
          "dep:snap"
        ],
        "policy-hooks": [],
        "fips": []
      },
      "publish": true,
      "url": "/reference/rust/strand-blobs",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/strand-blobs/src/lib.rs",
          "sha256": "d3b9d11903de2d30fa0c00865aa0a5a57b5720636aa8c837b9a4a1ae1d6c2e99",
          "attributes": "",
          "items": [
            {
              "name": "pub use blob::{BlobId, BlobInfo, BlobMetadata, ChunkRef, DeletionMarker};",
              "kind": "use_declaration",
              "signature": "pub use blob::{BlobId, BlobInfo, BlobMetadata, ChunkRef, DeletionMarker};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use cache::ChunkCache;",
              "kind": "use_declaration",
              "signature": "pub use cache::ChunkCache;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pub use chunk::{BlobEntry, ChunkEntry, ChunkIndex, DedupStats};",
              "kind": "use_declaration",
              "signature": "pub use chunk::{BlobEntry, ChunkEntry, ChunkIndex, DedupStats};",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "pub use config::{BlobConfig, CompressionType};",
              "kind": "use_declaration",
              "signature": "pub use config::{BlobConfig, CompressionType};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use error::{BlobError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{BlobError, Result};",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "pub use metrics::{BlobMetrics, BlobMetricsSnapshot};",
              "kind": "use_declaration",
              "signature": "pub use metrics::{BlobMetrics, BlobMetricsSnapshot};",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "pub use policy::{set_blob_policy, AllowAllBlobPolicy, BlobPolicy};",
              "kind": "use_declaration",
              "signature": "pub use policy::{set_blob_policy, AllowAllBlobPolicy, BlobPolicy};",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 64
            },
            {
              "name": "pub use reader::BlobReader;",
              "kind": "use_declaration",
              "signature": "pub use reader::BlobReader;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "pub use repair::{ChunkCandidate, GcPlan, QuarantineMarker, RepairReport};",
              "kind": "use_declaration",
              "signature": "pub use repair::{ChunkCandidate, GcPlan, QuarantineMarker, RepairReport};",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use store::{BlobStore, ListOptions, ListResult};",
              "kind": "use_declaration",
              "signature": "pub use store::{BlobStore, ListOptions, ListResult};",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "pub use writer::BlobWriter;",
              "kind": "use_declaration",
              "signature": "pub use writer::BlobWriter;",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "pub use blake3;",
              "kind": "use_declaration",
              "signature": "pub use blake3;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "pub use bytes::Bytes;",
              "kind": "use_declaration",
              "signature": "pub use bytes::Bytes;",
              "docs": "",
              "attributes": "",
              "line": 72
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "blob",
          "source": "sigil/weave/models/strand-blobs/src/blob.rs",
          "sha256": "c9d9d1114015a41ca227500f06e78f2ca0ee5bd469a33d8c42d526e629d4a231",
          "attributes": "",
          "items": [
            {
              "name": "blob::BlobId",
              "kind": "struct_item",
              "signature": "pub struct BlobId(pub [u8; 32]);",
              "docs": "Unique identifier for a blob (content hash)",
              "attributes": "#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "blob::BlobId::new",
              "kind": "function_item",
              "signature": "pub fn new(bytes: [u8; 32]) -> Self;",
              "docs": "Create a new blob ID from bytes",
              "attributes": "",
              "line": 12
            },
            {
              "name": "blob::BlobId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "Get the bytes of the blob ID",
              "attributes": "",
              "line": 17
            },
            {
              "name": "blob::BlobId::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "Convert to hex string",
              "attributes": "",
              "line": 22
            },
            {
              "name": "blob::BlobId::from_hex",
              "kind": "function_item",
              "signature": "pub fn from_hex(s: &str) -> Result<Self, hex::FromHexError>;",
              "docs": "Parse from hex string",
              "attributes": "",
              "line": 27
            },
            {
              "name": "blob::ChunkRef",
              "kind": "struct_item",
              "signature": "pub struct ChunkRef {\n/// Index of the chunk in the data strand (packed bytes)\n\npub index: u64,\n/// Uncompressed content size\n\npub length: u32,\n/// Stored (packed) size\n\npub packed_length: u64,\n/// Blake3 hash of the uncompressed content\n\npub content_hash: [u8; 32],\n/// Blake3 hash of the stored (packed) bytes\n\npub packed_hash: [u8; 32]\n}",
              "docs": "Reference to a chunk stored in the data strand with integrity metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "blob::BlobMetadata",
              "kind": "struct_item",
              "signature": "pub struct BlobMetadata {\n/// Unique blob ID (content hash)\n\npub id: BlobId,\n/// Total size in bytes\n\npub size: u64,\n/// Chunk size used\n\npub chunk_size: u32,\n/// List of chunk indices in data strand (deprecated - use chunk_refs)\n\n#[serde(default)]\npub chunks: Vec<u64>,\n/// Chunk references with integrity information\n\n#[serde(default)]\npub chunk_refs: Vec<ChunkRef>,\n/// Optional user metadata\n\npub metadata: Option<serde_json::Value>,\n/// Creation timestamp (Unix epoch seconds)\n\npub created_at: u64,\n/// Compression type used (if any)\n\npub compression: Option<String>\n}",
              "docs": "Metadata for a stored blob",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 65
            },
            {
              "name": "blob::DeletionMarker",
              "kind": "struct_item",
              "signature": "pub struct DeletionMarker {\npub id: BlobId,\npub deleted_at: u64\n}",
              "docs": "Durable deletion marker appended to the metadata strand during delete.\nUsed by GC/repair to identify blobs that should no longer be referenced.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 96
            },
            {
              "name": "blob::BlobInfo",
              "kind": "struct_item",
              "signature": "pub struct BlobInfo {\n/// Blob identifier\n\npub id: BlobId,\n/// Size in bytes\n\npub size: u64,\n/// Creation timestamp\n\npub created_at: u64,\n/// User metadata (if any)\n\npub metadata: Option<serde_json::Value>\n}",
              "docs": "Basic blob information for listing",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 103
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "cache",
          "source": "sigil/weave/models/strand-blobs/src/cache.rs",
          "sha256": "30530429d98e48c32ad034c1260f09c8aaf584b12693c8063d2b6925fa2e25c5",
          "attributes": "",
          "items": [
            {
              "name": "cache::ChunkCache",
              "kind": "struct_item",
              "signature": "pub struct ChunkCache {\n\n}",
              "docs": "Thread-safe LRU cache for chunks",
              "attributes": "",
              "line": 11
            },
            {
              "name": "cache::ChunkCache::new",
              "kind": "function_item",
              "signature": "pub fn new(max_size: usize) -> Self;",
              "docs": "Create a new chunk cache with the specified maximum size in bytes",
              "attributes": "",
              "line": 21
            },
            {
              "name": "cache::ChunkCache::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, index: &u64) -> Option<Bytes>;",
              "docs": "Get a chunk from the cache",
              "attributes": "",
              "line": 36
            },
            {
              "name": "cache::ChunkCache::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&self, index: u64, data: Bytes);",
              "docs": "Insert a chunk into the cache",
              "attributes": "",
              "line": 47
            },
            {
              "name": "cache::ChunkCache::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&self);",
              "docs": "Clear the cache",
              "attributes": "",
              "line": 69
            },
            {
              "name": "cache::ChunkCache::size",
              "kind": "function_item",
              "signature": "pub fn size(&self) -> usize;",
              "docs": "Get current cache size in bytes",
              "attributes": "",
              "line": 75
            },
            {
              "name": "cache::ChunkCache::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get number of cached chunks",
              "attributes": "",
              "line": 80
            },
            {
              "name": "cache::ChunkCache::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if cache is empty",
              "attributes": "",
              "line": 85
            },
            {
              "name": "cache::ChunkCache::hits",
              "kind": "function_item",
              "signature": "pub fn hits(&self) -> u64;",
              "docs": "Cache hit count",
              "attributes": "",
              "line": 90
            },
            {
              "name": "cache::ChunkCache::misses",
              "kind": "function_item",
              "signature": "pub fn misses(&self) -> u64;",
              "docs": "Cache miss count",
              "attributes": "",
              "line": 95
            },
            {
              "name": "cache::new_cache",
              "kind": "function_item",
              "signature": "pub fn new_cache(max_size: usize) -> Arc<ChunkCache>;",
              "docs": "Create a new Arc<ChunkCache>",
              "attributes": "",
              "line": 108
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "chunk",
          "source": "sigil/weave/models/strand-blobs/src/chunk.rs",
          "sha256": "922445e00ebb641e699d98ef1d8ffc17508ba2ad02d4a7fb07db570279c72ef6",
          "attributes": "",
          "items": [
            {
              "name": "chunk::ChunkEntry",
              "kind": "struct_item",
              "signature": "pub struct ChunkEntry {\n/// Index of the packed bytes in the data strand\n\npub index: u64,\n/// Packed (stored) size in bytes\n\npub packed_length: u64,\n/// Blake3 hash of the packed bytes\n\npub packed_hash: [u8; 32],\n/// Current reference count across all blobs\n\npub refcount: u64\n}",
              "docs": "Entry describing a stored chunk and its reference count",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "chunk::BlobEntry",
              "kind": "struct_item",
              "signature": "pub struct BlobEntry {\n/// Index of the metadata entry in the metadata strand\n\npub meta_index: u64,\n/// Whether a deletion marker has been observed\n\npub deleted: bool\n}",
              "docs": "Entry mapping a blob id to its metadata position and state",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "chunk::ChunkIndex",
              "kind": "struct_item",
              "signature": "pub struct ChunkIndex {\n\n}",
              "docs": "Index for tracking chunks and blobs; enables deduplication and GC",
              "attributes": "",
              "line": 33
            },
            {
              "name": "chunk::ChunkIndex::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new chunk index",
              "attributes": "",
              "line": 43
            },
            {
              "name": "chunk::ChunkIndex::snapshot_blobs",
              "kind": "function_item",
              "signature": "pub fn snapshot_blobs(&self) -> Vec<([u8; 32], BlobEntry)>;",
              "docs": "Snapshot blob index for external iteration (copy)",
              "attributes": "",
              "line": 51
            },
            {
              "name": "chunk::ChunkIndex::snapshot_chunks",
              "kind": "function_item",
              "signature": "pub fn snapshot_chunks(&self) -> Vec<([u8; 32], ChunkEntry)>;",
              "docs": "Snapshot chunk index for external iteration (copy)",
              "attributes": "",
              "line": 59
            },
            {
              "name": "chunk::ChunkIndex::find_chunk",
              "kind": "function_item",
              "signature": "pub fn find_chunk(&self, hash: &[u8; 32]) -> Option<ChunkEntry>;",
              "docs": "Find a chunk by its hash",
              "attributes": "",
              "line": 67
            },
            {
              "name": "chunk::ChunkIndex::add_chunk",
              "kind": "function_item",
              "signature": "pub fn add_chunk(&self, hash: [u8; 32], index: u64, packed_length: u64, packed_hash: [u8; 32]);",
              "docs": "Add a chunk to the index",
              "attributes": "",
              "line": 72
            },
            {
              "name": "chunk::ChunkIndex::incr_chunk_refcount",
              "kind": "function_item",
              "signature": "pub fn incr_chunk_refcount(&self, hash: &[u8; 32], by: u64);",
              "docs": "Increase the reference count for a content hash",
              "attributes": "",
              "line": 85
            },
            {
              "name": "chunk::ChunkIndex::decr_chunk_refcount",
              "kind": "function_item",
              "signature": "pub fn decr_chunk_refcount(&self, hash: &[u8; 32], by: u64);",
              "docs": "Decrease the reference count for a content hash",
              "attributes": "",
              "line": 92
            },
            {
              "name": "chunk::ChunkIndex::find_blob",
              "kind": "function_item",
              "signature": "pub fn find_blob(&self, id: &[u8; 32]) -> Option<BlobEntry>;",
              "docs": "Find blob metadata by ID",
              "attributes": "",
              "line": 99
            },
            {
              "name": "chunk::ChunkIndex::add_blob",
              "kind": "function_item",
              "signature": "pub fn add_blob(&self, id: [u8; 32], index: u64);",
              "docs": "Add a blob to the index",
              "attributes": "",
              "line": 104
            },
            {
              "name": "chunk::ChunkIndex::mark_blob_deleted",
              "kind": "function_item",
              "signature": "pub fn mark_blob_deleted(&self, id: &[u8; 32]);",
              "docs": "Mark blob as deleted in index",
              "attributes": "",
              "line": 115
            },
            {
              "name": "chunk::ChunkIndex::remove_blob",
              "kind": "function_item",
              "signature": "pub fn remove_blob(&self, id: &[u8; 32]);",
              "docs": "Remove blob metadata from the index",
              "attributes": "",
              "line": 122
            },
            {
              "name": "chunk::ChunkIndex::unique_chunks",
              "kind": "function_item",
              "signature": "pub fn unique_chunks(&self) -> usize;",
              "docs": "Get total number of unique chunks",
              "attributes": "",
              "line": 127
            },
            {
              "name": "chunk::ChunkIndex::blob_count",
              "kind": "function_item",
              "signature": "pub fn blob_count(&self) -> usize;",
              "docs": "Get total number of blobs",
              "attributes": "",
              "line": 132
            },
            {
              "name": "chunk::ChunkIndex::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&self);",
              "docs": "Clear the index",
              "attributes": "",
              "line": 137
            },
            {
              "name": "chunk::DedupStats",
              "kind": "struct_item",
              "signature": "pub struct DedupStats {\n/// Total number of chunks stored\n\npub total_chunks: u64,\n/// Number of unique chunks\n\npub unique_chunks: usize,\n/// Deduplication ratio (0.0 to 1.0)\n\npub dedup_ratio: f64,\n/// Total bytes saved through deduplication\n\npub bytes_saved: u64,\n/// Average chunk size\n\npub avg_chunk_size: u64\n}",
              "docs": "Statistics about deduplication",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 151
            },
            {
              "name": "chunk::DedupStats::calculate",
              "kind": "function_item",
              "signature": "pub fn calculate(total_chunks: u64, unique_chunks: usize, avg_chunk_size: u64) -> Self;",
              "docs": "Calculate stats from chunk counts",
              "attributes": "",
              "line": 170
            },
            {
              "name": "chunk::ChunkMetadata",
              "kind": "struct_item",
              "signature": "pub struct ChunkMetadata {\n/// Blake3 hash of the chunk contents (matches the deduplication key).\n\npub hash: [u8; 32],\n/// Original uncompressed size of the chunk in bytes.\n\npub size: u32,\n/// Sequence number of the chunk in the data strand.\n\npub index: u64\n}",
              "docs": "Metadata for an individual chunk.\n\nThis struct is primarily used by unit tests and higher-level tooling to\nverify that chunks are stored and retrieved correctly. In production it can\nalso be serialised as part of a diagnostic or telemetry payload. Fields are\nintentionally kept minimal to avoid unnecessary overhead at runtime.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, Default)]\n#[allow(dead_code)]",
              "line": 201
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "config",
          "source": "sigil/weave/models/strand-blobs/src/config.rs",
          "sha256": "3799d82145582dafdfb9ee8a539b0708b1921914f20f912f014facb83a459528",
          "attributes": "",
          "items": [
            {
              "name": "config::BlobConfig",
              "kind": "struct_item",
              "signature": "pub struct BlobConfig {\n/// Size of chunks in bytes\n\npub chunk_size: usize,\n/// Maximum cache size in bytes\n\npub cache_size: usize,\n/// Enable compression\n\npub compression: Option<CompressionType>,\n/// Verify chunk hashes on read\n\npub verify_chunks: bool,\n/// Parallel chunk uploads\n\npub parallel_chunks: usize,\n/// Maximum blob size in bytes (0 = unlimited)\n\npub max_blob_size: u64\n}",
              "docs": "Configuration for the blob store",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "config::CompressionType",
              "kind": "enum_item",
              "signature": "pub enum CompressionType {\n    /// No compression\n    None,\n    /// Zstandard compression\n    #[cfg(feature = \"zstd\")]\n    Zstd,\n    /// LZ4 compression\n    #[cfg(feature = \"lz4\")]\n    Lz4,\n    /// Snappy compression\n    #[cfg(feature = \"snap\")]\n    Snappy,\n}",
              "docs": "Compression types supported",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "config::CompressionType::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "Get string representation",
              "attributes": "",
              "line": 58
            },
            {
              "name": "config::CompressionType::parse",
              "kind": "function_item",
              "signature": "pub fn parse(s: &str) -> Option<Self>;",
              "docs": "Parse from string.",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/models/strand-blobs/src/error.rs",
          "sha256": "04ad0fe2e9994a26996f54463c2910d8b5280b64ff369e81958cfc022900a9e8",
          "attributes": "",
          "items": [
            {
              "name": "error::BlobError",
              "kind": "enum_item",
              "signature": "pub enum BlobError {\n    #[error(\"Blob not found: {0:?}\")]\n    BlobNotFound(BlobId),\n\n    #[error(\"Chunk not found at index {0}\")]\n    ChunkNotFound(u64),\n\n    #[error(\"Metadata not found at index {0}\")]\n    MetadataNotFound(u64),\n\n    #[error(\"Metadata corruption at index {0}\")]\n    MetadataCorruption(u64),\n\n    #[error(\"Checksum mismatch for chunk {0}\")]\n    ChecksumMismatch(u64),\n\n    #[error(\"Invalid chunk size: {0}\")]\n    InvalidChunkSize(usize),\n\n    #[error(\"Blob too large: {0} bytes (max: {1})\")]\n    BlobTooLarge(u64, u64),\n\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] strand::StrandError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] bincode::Error),\n\n    #[error(\"System time error: {0}\")]\n    SystemTime(#[from] std::time::SystemTimeError),\n\n    #[error(\"Access denied: {0}\")]\n    AccessDenied(String),\n\n    #[error(\"Compression error: {0}\")]\n    Compression(String),\n}",
              "docs": "Errors that can occur in blob operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, BlobError>;",
              "docs": "Convenience type alias for Results",
              "attributes": "",
              "line": 52
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "metrics",
          "source": "sigil/weave/models/strand-blobs/src/metrics.rs",
          "sha256": "af748bd11b4f3f7a32bdb2fdf3ed3968178d70cc1f288cc955a49ef757b86eb0",
          "attributes": "",
          "items": [
            {
              "name": "metrics::BlobMetrics",
              "kind": "struct_item",
              "signature": "pub struct BlobMetrics {\npub bytes_in_total: AtomicU64,\npub bytes_out_total: AtomicU64,\npub chunks_in_total: AtomicU64,\npub chunks_out_total: AtomicU64,\npub gc_runs_total: AtomicU64,\npub put_ops_total: AtomicU64,\npub put_latency_total_ms: AtomicU64,\npub get_ops_total: AtomicU64,\npub get_latency_total_ms: AtomicU64\n}",
              "docs": "Runtime counters for blob operations",
              "attributes": "#[derive(Debug, Default)]",
              "line": 7
            },
            {
              "name": "metrics::BlobMetrics::snapshot",
              "kind": "function_item",
              "signature": "pub fn snapshot(&self) -> BlobMetricsSnapshot;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "metrics::BlobMetricsSnapshot",
              "kind": "struct_item",
              "signature": "pub struct BlobMetricsSnapshot {\npub bytes_in_total: u64,\npub bytes_out_total: u64,\npub chunks_in_total: u64,\npub chunks_out_total: u64,\npub gc_runs_total: u64,\npub put_ops_total: u64,\npub put_latency_total_ms: u64,\npub get_ops_total: u64,\npub get_latency_total_ms: u64,\npub cache_hits: u64,\npub cache_misses: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy)]",
              "line": 38
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "policy",
          "source": "sigil/weave/models/strand-blobs/src/policy.rs",
          "sha256": "c642c64d1775a4887af70f8d9168f8b799bc3859a04b31903f3b6ef33d2f6429",
          "attributes": "#[cfg(feature = \"policy-hooks\")]",
          "items": [
            {
              "name": "policy::BlobPolicy",
              "kind": "trait_item",
              "signature": "pub trait BlobPolicy: Send + Sync + 'static {\n    fn can_put(&self, size: u64, metadata: &Option<serde_json::Value>) -> bool;\n    fn can_delete(&self, id_hex: &str) -> bool;\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 3
            },
            {
              "name": "policy::AllowAllBlobPolicy",
              "kind": "struct_item",
              "signature": "pub struct AllowAllBlobPolicy;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 8
            },
            {
              "name": "policy::BLOB_POLICY",
              "kind": "static_item",
              "signature": "pub static BLOB_POLICY: OnceCell<Box<dyn BlobPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 19
            },
            {
              "name": "policy::set_blob_policy",
              "kind": "function_item",
              "signature": "pub fn set_blob_policy(policy: Box<dyn BlobPolicy>) -> Result<(), Box<dyn BlobPolicy>>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"policy-hooks\")]",
              "line": 21
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "reader",
          "source": "sigil/weave/models/strand-blobs/src/reader.rs",
          "sha256": "946868e92710b84c93dcd8a495af15458e85571016d7ef2cd9bfbb8b61f15bcf",
          "attributes": "",
          "items": [
            {
              "name": "reader::BlobReader",
              "kind": "struct_item",
              "signature": "pub struct BlobReader {\n\n}",
              "docs": "Reader for streaming blob data",
              "attributes": "",
              "line": 22
            },
            {
              "name": "reader::BlobReader::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        data: Arc<RwLock<Strand>>,\n        metadata: BlobMetadata,\n        cache: Arc<ChunkCache>,\n        compression: Option<CompressionType>,\n        verify_chunks: bool,\n    ) -> Self;",
              "docs": "Create a new blob reader",
              "attributes": "",
              "line": 63
            },
            {
              "name": "reader::BlobReader::with_metrics",
              "kind": "function_item",
              "signature": "pub fn with_metrics(mut self, metrics: std::sync::Arc<BlobMetrics>) -> Self;",
              "docs": "Attach metrics to the reader",
              "attributes": "",
              "line": 118
            },
            {
              "name": "reader::BlobReader::metadata",
              "kind": "function_item",
              "signature": "pub fn metadata(&self) -> &BlobMetadata;",
              "docs": "Get the blob metadata",
              "attributes": "",
              "line": 124
            },
            {
              "name": "reader::BlobReader::size",
              "kind": "function_item",
              "signature": "pub fn size(&self) -> u64;",
              "docs": "Get the total size of the blob",
              "attributes": "",
              "line": 129
            },
            {
              "name": "reader::BlobReader::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> &crate::BlobId;",
              "docs": "Get the blob ID",
              "attributes": "",
              "line": 134
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "repair",
          "source": "sigil/weave/models/strand-blobs/src/repair.rs",
          "sha256": "6b890c5e3dcd6787718e2cb1d7b198efd373db34fe5c925faceae3cba465f0a8",
          "attributes": "",
          "items": [
            {
              "name": "repair::ChunkCandidate",
              "kind": "struct_item",
              "signature": "pub struct ChunkCandidate {\npub content_hash: [u8; 32],\npub packed_length: u64,\npub index: u64\n}",
              "docs": "Candidate chunk for garbage collection",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "repair::GcPlan",
              "kind": "struct_item",
              "signature": "pub struct GcPlan {\npub candidates: Vec<ChunkCandidate>,\npub total_reclaimable_bytes: u64\n}",
              "docs": "GC plan computed by gc_sweep",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "repair::QuarantineMarker",
              "kind": "struct_item",
              "signature": "pub struct QuarantineMarker {\npub index: u64,\npub content_hash: [u8; 32]\n}",
              "docs": "Marker indicating a quarantined chunk (non-destructive)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "repair::RepairReport",
              "kind": "struct_item",
              "signature": "pub struct RepairReport {\npub checked_blobs: u64,\npub fixed_manifests: u64,\npub orphaned_chunks: u64,\npub recovered_bytes: u64,\npub errors: Vec<RepairError>\n}",
              "docs": "Minimal repair report schema",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "repair::RepairError",
              "kind": "struct_item",
              "signature": "pub struct RepairError {\npub blob_id_hex: String,\npub message: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 38
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "store",
          "source": "sigil/weave/models/strand-blobs/src/store.rs",
          "sha256": "6ef355c275e1308d1f71871e3916a5e0435a011b31c49f666dc171da3097aec2",
          "attributes": "",
          "items": [
            {
              "name": "store::BlobStore",
              "kind": "struct_item",
              "signature": "pub struct BlobStore {\n\n}",
              "docs": "A content-addressed blob store built on Strand",
              "attributes": "",
              "line": 31
            },
            {
              "name": "store::ListOptions",
              "kind": "struct_item",
              "signature": "pub struct ListOptions {\n/// Starting offset\n\npub offset: Option<u64>,\n/// Maximum number of results\n\npub limit: Option<u64>,\n/// Filter by metadata key\n\npub filter_key: Option<String>,\n/// Filter by metadata value\n\npub filter_value: Option<serde_json::Value>\n}",
              "docs": "Options for listing blobs",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 71
            },
            {
              "name": "store::ListResult",
              "kind": "struct_item",
              "signature": "pub struct ListResult {\n/// List of blobs\n\npub blobs: Vec<BlobInfo>,\n/// Total number of blobs\n\npub total: u64,\n/// Whether there are more results\n\npub has_more: bool\n}",
              "docs": "Result of listing blobs",
              "attributes": "#[derive(Debug, Serialize, Deserialize)]",
              "line": 87
            },
            {
              "name": "store::BlobStore::new",
              "kind": "function_item",
              "signature": "pub async fn new(metadata: Strand, data: Strand, config: BlobConfig) -> Result<Self>;",
              "docs": "Create a blob store over existing metadata/data strands.\n\nOn open, rebuilds in-memory chunk/blob indexes and the listing index from\npersisted metadata so a fresh process can put/get against durable strands.",
              "attributes": "",
              "line": 118
            },
            {
              "name": "store::BlobStore::compact",
              "kind": "function_item",
              "signature": "pub async fn compact(&self) -> Result<GcPlan>;",
              "docs": "Compact metadata by scanning and appending quarantine markers for unreferenced chunks.\nFuture versions may rewrite metadata or relocate chunks.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "store::BlobStore::put",
              "kind": "function_item",
              "signature": "pub async fn put<R>(&self, reader: R, metadata: Option<serde_json::Value>) -> Result<BlobId>\n    where\n        R: AsyncRead + Unpin,;",
              "docs": "Store a blob from a reader",
              "attributes": "",
              "line": 161
            },
            {
              "name": "store::BlobStore::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, id: &BlobId) -> Result<Option<BlobReader>>;",
              "docs": "Get a blob by ID",
              "attributes": "",
              "line": 324
            },
            {
              "name": "store::BlobStore::metrics_snapshot",
              "kind": "function_item",
              "signature": "pub fn metrics_snapshot(&self) -> BlobMetricsSnapshot;",
              "docs": "Export current metrics snapshot",
              "attributes": "",
              "line": 412
            },
            {
              "name": "store::BlobStore::ingest_metadata_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_metadata_block(\n        &self,\n        seq: u64,\n        header: &strand::Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote block into the metadata strand",
              "attributes": "",
              "line": 417
            },
            {
              "name": "store::BlobStore::ingest_data_block",
              "kind": "function_item",
              "signature": "pub async fn ingest_data_block(\n        &self,\n        seq: u64,\n        header: &strand::Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote block into the data strand",
              "attributes": "",
              "line": 432
            },
            {
              "name": "store::BlobStore::metadata_strand_handle",
              "kind": "function_item",
              "signature": "pub fn metadata_strand_handle(&self) -> Arc<RwLock<Strand>>;",
              "docs": "Get a handle to the metadata strand for read-only replication pulls",
              "attributes": "",
              "line": 447
            },
            {
              "name": "store::BlobStore::data_strand_handle",
              "kind": "function_item",
              "signature": "pub fn data_strand_handle(&self) -> Arc<RwLock<Strand>>;",
              "docs": "Get a handle to the data strand for read-only replication pulls",
              "attributes": "",
              "line": 452
            },
            {
              "name": "store::BlobStore::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, id: &BlobId) -> Result<()>;",
              "docs": "Delete a blob (marks as deleted, doesn't free chunks due to dedup)",
              "attributes": "",
              "line": 457
            },
            {
              "name": "store::BlobStore::gc_sweep",
              "kind": "function_item",
              "signature": "pub async fn gc_sweep(&self) -> Result<GcPlan>;",
              "docs": "Sweep deletion markers and compute a GC plan (non-destructive)",
              "attributes": "",
              "line": 494
            },
            {
              "name": "store::BlobStore::gc_apply",
              "kind": "function_item",
              "signature": "pub async fn gc_apply(&self, plan: &GcPlan) -> Result<()>;",
              "docs": "Apply a GC plan by appending quarantine markers for auditability",
              "attributes": "",
              "line": 536
            },
            {
              "name": "store::BlobStore::create_writer",
              "kind": "function_item",
              "signature": "pub fn create_writer(&self, metadata: Option<serde_json::Value>) -> BlobWriter;",
              "docs": "Create a writer for streaming blob creation",
              "attributes": "",
              "line": 552
            },
            {
              "name": "store::BlobStore::repair_reindex",
              "kind": "function_item",
              "signature": "pub async fn repair_reindex(&self) -> Result<crate::repair::RepairReport>;",
              "docs": "Rebuild in-memory indexes by scanning the metadata strand and\nreturn a minimal repair report.",
              "attributes": "",
              "line": 563
            },
            {
              "name": "store::BlobStore::list",
              "kind": "function_item",
              "signature": "pub async fn list(&self, options: ListOptions) -> Result<ListResult>;",
              "docs": "List all blobs with pagination",
              "attributes": "",
              "line": 646
            },
            {
              "name": "store::BlobStore::dedup_stats",
              "kind": "function_item",
              "signature": "pub async fn dedup_stats(&self) -> Result<DedupStats>;",
              "docs": "Get deduplication statistics",
              "attributes": "",
              "line": 700
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        },
        {
          "module": "writer",
          "source": "sigil/weave/models/strand-blobs/src/writer.rs",
          "sha256": "1f9f6ec73cfc952a69c325197f37944ea73f774a97691e5c550899180ba8cf8e",
          "attributes": "",
          "items": [
            {
              "name": "writer::BlobWriter",
              "kind": "struct_item",
              "signature": "pub struct BlobWriter {\n\n}",
              "docs": "Writer for streaming blob creation",
              "attributes": "",
              "line": 25
            },
            {
              "name": "writer::BlobWriter::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        store: Arc<BlobStore>,\n        metadata: Option<serde_json::Value>,\n        chunk_size: usize,\n        compression: Option<CompressionType>,\n    ) -> Self;",
              "docs": "Create a new blob writer",
              "attributes": "",
              "line": 65
            },
            {
              "name": "writer::BlobWriter::bytes_written",
              "kind": "function_item",
              "signature": "pub fn bytes_written(&self) -> u64;",
              "docs": "Get the total bytes written so far",
              "attributes": "",
              "line": 317
            },
            {
              "name": "writer::BlobWriter::chunks_written",
              "kind": "function_item",
              "signature": "pub fn chunks_written(&self) -> usize;",
              "docs": "Get the number of chunks written",
              "attributes": "",
              "line": 322
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current GC path quarantines records without reclaiming their stored files. Check actual writer/list/report interfaces and partial-write behavior in /libraries/strand-blobs/overview."
        }
      ]
    },
    {
      "name": "weave-weft",
      "version": "0.1.0",
      "source": "sigil/weave/models/weft",
      "manifestSha256": "db585a2052b5a0f5105562f221f7af5432fe8e96ea7aea375038022aa8529ee8",
      "features": {
        "default": [],
        "dht": [
          "dep:weave-dht"
        ]
      },
      "publish": true,
      "url": "/reference/rust/weave-weft",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/weft/src/lib.rs",
          "sha256": "d5531eaf83134cb13bb094b72213b67b72bfeb8afccdceb7917abc52a0328c6e",
          "attributes": "",
          "items": [
            {
              "name": "chunk",
              "kind": "module",
              "signature": "pub mod chunk;",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "dht",
              "kind": "module",
              "signature": "pub mod dht;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "discovery",
              "kind": "module",
              "signature": "pub mod discovery;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "fetch",
              "kind": "module",
              "signature": "pub mod fetch;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "live",
              "kind": "module",
              "signature": "pub mod live;",
              "docs": "",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 23
            },
            {
              "name": "local",
              "kind": "module",
              "signature": "pub mod local;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "manifest",
              "kind": "module",
              "signature": "pub mod manifest;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "tree",
              "kind": "module",
              "signature": "pub mod tree;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "pub use error::{Result, WeftError};",
              "kind": "use_declaration",
              "signature": "pub use error::{Result, WeftError};",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "::WeftHash",
              "kind": "struct_item",
              "signature": "pub struct WeftHash([u8; 32]);",
              "docs": "A 32-byte BLAKE3-derived Weft hash.",
              "attributes": "#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]",
              "line": 36
            },
            {
              "name": "::WeftHash::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: [u8; 32]) -> Self;",
              "docs": "Construct a hash from exactly 32 bytes.",
              "attributes": "",
              "line": 40
            },
            {
              "name": "::WeftHash::from_hex",
              "kind": "function_item",
              "signature": "pub fn from_hex(value: &str) -> Result<Self>;",
              "docs": "Parse a lowercase or uppercase hex hash, with an optional `0x` prefix.",
              "attributes": "",
              "line": 45
            },
            {
              "name": "::WeftHash::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "docs": "Borrow the hash bytes.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "::WeftHash::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "Return the lowercase hex representation.",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use dht::{DhtKv, InMemoryDhtKv, WeftDhtStore};",
              "kind": "use_declaration",
              "signature": "pub use dht::{DhtKv, InMemoryDhtKv, WeftDhtStore};",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "pub use discovery::{\n    AdvertisementScope, AvailabilityAdvertisement, AvailabilitySet, DiscoveryPublisher,\n    InMemoryDiscovery, PeerId, WEFT_AVAILABILITY_PROTOCOL,\n};",
              "kind": "use_declaration",
              "signature": "pub use discovery::{\n    AdvertisementScope, AvailabilityAdvertisement, AvailabilitySet, DiscoveryPublisher,\n    InMemoryDiscovery, PeerId, WEFT_AVAILABILITY_PROTOCOL,\n};",
              "docs": "",
              "attributes": "",
              "line": 129
            },
            {
              "name": "pub use live::{\n    connect_primary_trio, connect_with_bootstrap, store_from_handle, LiveWeftDht, PRIMARY_TRIO_DNS4,\n};",
              "kind": "use_declaration",
              "signature": "pub use live::{\n    connect_primary_trio, connect_with_bootstrap, store_from_handle, LiveWeftDht, PRIMARY_TRIO_DNS4,\n};",
              "docs": "",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 135
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "chunk",
          "source": "sigil/weave/models/weft/src/chunk.rs",
          "sha256": "904783c8a95a70647b026d2858643ba92db3e4ec9e91d5e707b1dccd703170e5",
          "attributes": "",
          "items": [
            {
              "name": "chunk::DEFAULT_CHUNK_SIZE",
              "kind": "const_item",
              "signature": "pub const DEFAULT_CHUNK_SIZE: usize;",
              "docs": "Default Weft chunk size: 4 MiB.",
              "attributes": "",
              "line": 8
            },
            {
              "name": "chunk::MAX_CHUNK_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_CHUNK_SIZE: usize;",
              "docs": "Largest single chunk accepted by the core model: 64 MiB.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "chunk::CHUNK_ID_DOMAIN",
              "kind": "const_item",
              "signature": "pub const CHUNK_ID_DOMAIN: &[u8];",
              "docs": "Domain tag for BLAKE3 chunk content IDs.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "chunk::ChunkConfig",
              "kind": "struct_item",
              "signature": "pub struct ChunkConfig {\n\n}",
              "docs": "Chunker configuration.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "chunk::ChunkConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(chunk_size: usize) -> Result<Self>;",
              "docs": "Create a config with an explicit chunk size.",
              "attributes": "",
              "line": 24
            },
            {
              "name": "chunk::ChunkConfig::chunk_size",
              "kind": "function_item",
              "signature": "pub fn chunk_size(&self) -> usize;",
              "docs": "Return the configured chunk size.",
              "attributes": "",
              "line": 35
            },
            {
              "name": "chunk::ChunkDescriptor",
              "kind": "struct_item",
              "signature": "pub struct ChunkDescriptor {\n/// Zero-based chunk index.\n\npub index: u64,\n/// Byte offset in the original payload.\n\npub offset: u64,\n/// Chunk length in bytes.\n\npub len: u32,\n/// Domain-separated BLAKE3 content ID of this chunk.\n\npub id: WeftHash\n}",
              "docs": "Descriptor for one chunk in a Weft payload.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 50
            },
            {
              "name": "chunk::ChunkPayload",
              "kind": "struct_item",
              "signature": "pub struct ChunkPayload {\n/// Descriptor committed in the manifest.\n\npub descriptor: ChunkDescriptor,\n/// Exact chunk bytes.\n\npub bytes: Vec<u8>\n}",
              "docs": "A chunk descriptor plus its bytes.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 63
            },
            {
              "name": "chunk::chunk_id_for_bytes",
              "kind": "function_item",
              "signature": "pub fn chunk_id_for_bytes(bytes: &[u8]) -> WeftHash;",
              "docs": "Compute the deterministic Weft chunk ID for exact chunk bytes.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "chunk::chunk_bytes",
              "kind": "function_item",
              "signature": "pub fn chunk_bytes(data: &[u8], config: ChunkConfig) -> Result<Vec<ChunkDescriptor>>;",
              "docs": "Split bytes into deterministic chunk descriptors.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "chunk::chunk_payloads",
              "kind": "function_item",
              "signature": "pub fn chunk_payloads(data: &[u8], config: ChunkConfig) -> Result<Vec<ChunkPayload>>;",
              "docs": "Split bytes into deterministic chunk payloads.",
              "attributes": "",
              "line": 86
            },
            {
              "name": "chunk::Chunker",
              "kind": "struct_item",
              "signature": "pub struct Chunker<R> {\n\n}",
              "docs": "Streaming-friendly chunker over any `Read` source.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "chunk::Chunker<R>::new",
              "kind": "function_item",
              "signature": "pub fn new(reader: R, config: ChunkConfig) -> Self;",
              "docs": "Create a new chunker.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "chunk::Chunker<R>::next_chunk",
              "kind": "function_item",
              "signature": "pub fn next_chunk(&mut self) -> Result<Option<ChunkPayload>>;",
              "docs": "Read and return the next chunk. Returns `Ok(None)` at EOF.",
              "attributes": "",
              "line": 132
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "dht",
          "source": "sigil/weave/models/weft/src/dht.rs",
          "sha256": "103c328a5317188414f23446b71a256d08f93fe3d8c2decccab59a28c79aefc6",
          "attributes": "",
          "items": [
            {
              "name": "dht::DhtKv",
              "kind": "trait_item",
              "signature": "pub trait DhtKv: Send + Sync {\n    /// Put one record under an exact key.\n    async fn put(&self, key: Vec<u8>, value: Vec<u8>) -> Result<()>;\n\n    /// Get one record by exact key.\n    async fn get(&self, key: Vec<u8>) -> Result<Option<Vec<u8>>>;\n}",
              "docs": "Minimal DHT key/value surface Weft needs.",
              "attributes": "#[async_trait]",
              "line": 22
            },
            {
              "name": "dht::WeftDhtStore",
              "kind": "struct_item",
              "signature": "pub struct WeftDhtStore<K> {\n\n}",
              "docs": "Weft adapter over a DHT-compatible key/value backend.",
              "attributes": "#[derive(Debug)]",
              "line": 32
            },
            {
              "name": "dht::WeftDhtStore<K>::new",
              "kind": "function_item",
              "signature": "pub fn new(kv: Arc<K>) -> Self;",
              "docs": "Create a Weft DHT adapter.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "dht::WeftDhtStore<K>::manifest_key",
              "kind": "function_item",
              "signature": "pub fn manifest_key(root: WeftHash) -> Vec<u8>;",
              "docs": "Deterministic manifest record key.",
              "attributes": "",
              "line": 54
            },
            {
              "name": "dht::WeftDhtStore<K>::chunk_key",
              "kind": "function_item",
              "signature": "pub fn chunk_key(chunk_id: WeftHash) -> Vec<u8>;",
              "docs": "Deterministic chunk record key.",
              "attributes": "",
              "line": 59
            },
            {
              "name": "dht::WeftDhtStore<K>::availability_key",
              "kind": "function_item",
              "signature": "pub fn availability_key(root: WeftHash) -> Vec<u8>;",
              "docs": "Deterministic availability record key.",
              "attributes": "",
              "line": 64
            },
            {
              "name": "dht::WeftDhtStore<K>::publish_bytes",
              "kind": "function_item",
              "signature": "pub async fn publish_bytes(\n        &self,\n        bytes: &[u8],\n        config: ChunkConfig,\n        producer: ManifestProducer,\n        artifact: ArtifactMetadata,\n        peer: PeerId,\n    ) -> Result<PublishedWeft>;",
              "docs": "Publish payload bytes into DHT-compatible records.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "dht::WeftDhtStore<K>::serve_manifest",
              "kind": "function_item",
              "signature": "pub async fn serve_manifest(&self, root: WeftHash) -> Result<Option<WeftManifest>>;",
              "docs": "Serve a manifest by root from DHT-compatible records.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "dht::WeftDhtStore<K>::fetch_payload",
              "kind": "function_item",
              "signature": "pub async fn fetch_payload(&self, root: WeftHash, max_parallelism: usize) -> Result<Vec<u8>>;",
              "docs": "Discover advertisements, fetch chunks, and verify/reassemble a payload.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "dht::InMemoryDhtKv",
              "kind": "struct_item",
              "signature": "pub struct InMemoryDhtKv {\n\n}",
              "docs": "Deterministic in-process DHT KV used by adapter tests and local embedding.",
              "attributes": "#[derive(Debug, Default)]",
              "line": 196
            },
            {
              "name": "dht::InMemoryDhtKv::contains_key",
              "kind": "function_item",
              "signature": "pub fn contains_key(&self, key: Vec<u8>) -> Result<bool>;",
              "docs": "Return whether a key exists.",
              "attributes": "",
              "line": 202
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "discovery",
          "source": "sigil/weave/models/weft/src/discovery.rs",
          "sha256": "db68b147ef56c44ca3afd063d3fc465fe436380bc60fd10b7c7f8f85629e0c45",
          "attributes": "",
          "items": [
            {
              "name": "discovery::WEFT_AVAILABILITY_PROTOCOL",
              "kind": "const_item",
              "signature": "pub const WEFT_AVAILABILITY_PROTOCOL: &str;",
              "docs": "Protocol identifier for Weft availability records.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "discovery::PeerId",
              "kind": "struct_item",
              "signature": "pub struct PeerId(String);",
              "docs": "Stable peer identifier used by Weft adapter boundaries.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "discovery::PeerId::new",
              "kind": "function_item",
              "signature": "pub fn new(value: impl Into<String>) -> Result<Self>;",
              "docs": "Create a peer id from non-empty text.",
              "attributes": "",
              "line": 19
            },
            {
              "name": "discovery::PeerId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Borrow the peer id text.",
              "attributes": "",
              "line": 28
            },
            {
              "name": "discovery::AvailabilitySet",
              "kind": "enum_item",
              "signature": "pub enum AvailabilitySet {\n    /// The peer advertises every chunk in the manifest.\n    All,\n    /// The peer advertises explicit chunk indexes.\n    Explicit(BTreeSet<u64>),\n}",
              "docs": "Which chunks a peer advertises for a Weft root.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 36
            },
            {
              "name": "discovery::AdvertisementScope",
              "kind": "enum_item",
              "signature": "pub enum AdvertisementScope {\n    /// Original or authoritative provider.\n    Provider,\n    /// Durable mirror.\n    Mirror,\n    /// Opportunistic cache.\n    Cache,\n}",
              "docs": "Why the peer is advertising the chunks.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 46
            },
            {
              "name": "discovery::AvailabilityAdvertisement",
              "kind": "struct_item",
              "signature": "pub struct AvailabilityAdvertisement {\n/// Protocol identifier.\n\npub protocol: String,\n/// Weft Merkle root.\n\npub root: WeftHash,\n/// Manifest chunk size.\n\npub chunk_size: u64,\n/// Manifest chunk count.\n\npub chunk_count: u64,\n/// Original payload length.\n\npub total_len: u64,\n/// Advertising peer.\n\npub peer: PeerId,\n/// Advertised chunk indexes.\n\npub chunks: AvailabilitySet,\n/// Advertisement scope.\n\npub scope: AdvertisementScope,\n/// Time-to-live in seconds.\n\npub ttl_secs: u64\n}",
              "docs": "Bounded chunk availability advertisement.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "discovery::AvailabilityAdvertisement::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        root: WeftHash,\n        chunk_size: u64,\n        chunk_count: u64,\n        total_len: u64,\n        peer: PeerId,\n        chunks: AvailabilitySet,\n        scope: AdvertisementScope,\n        ttl_secs: u64,\n    ) -> Result<Self>;",
              "docs": "Construct and validate an advertisement.",
              "attributes": "#[allow(clippy::too_many_arguments)]",
              "line": 81
            },
            {
              "name": "discovery::AvailabilityAdvertisement::covers",
              "kind": "function_item",
              "signature": "pub fn covers(&self, chunk_index: u64) -> bool;",
              "docs": "Return true if this advertisement covers the given chunk index.",
              "attributes": "",
              "line": 128
            },
            {
              "name": "discovery::DiscoveryPublisher",
              "kind": "trait_item",
              "signature": "pub trait DiscoveryPublisher: Send + Sync {\n    /// Advertise local availability.\n    async fn advertise(&self, advertisement: AvailabilityAdvertisement) -> Result<()>;\n\n    /// Discover advertisements for a Weft root.\n    async fn discover(&self, root: WeftHash) -> Result<Vec<AvailabilityAdvertisement>>;\n}",
              "docs": "Discovery boundary implemented by DHT/libp2p adapters.",
              "attributes": "#[async_trait]",
              "line": 138
            },
            {
              "name": "discovery::InMemoryDiscovery",
              "kind": "struct_item",
              "signature": "pub struct InMemoryDiscovery {\n\n}",
              "docs": "Deterministic in-memory discovery implementation for tests and local use.",
              "attributes": "#[derive(Default)]",
              "line": 148
            },
            {
              "name": "discovery::FailClosedDiscovery",
              "kind": "struct_item",
              "signature": "pub struct FailClosedDiscovery;",
              "docs": "Deprecated placeholder that always returns [`crate::WeftError::Unsupported`].\n\n**Not a production adapter.** Product discovery must construct\n[`crate::dht::WeftDhtStore`] over a live `weave_dht::DhtHandle`\n(see [`crate::live::store_from_handle`] / [`crate::live::connect_primary_trio`]\nwhen the `dht` feature is enabled). Kept only so accidental links fail loudly.",
              "attributes": "#[deprecated(\n    since = \"0.1.0\",\n    note = \"production must use WeftDhtStore over a live DhtHandle (feature = \\\"dht\\\"); FailClosedDiscovery is not a discovery adapter\"\n)]\n#[derive(Debug, Default, Clone, Copy)]",
              "line": 186
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "error",
          "source": "sigil/weave/models/weft/src/error.rs",
          "sha256": "0d3153589074cd0f3d6f03d25e2af91366454721cdc95cf97839f16352b04f8c",
          "attributes": "",
          "items": [
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, WeftError>;",
              "docs": "Result type for Weft operations.",
              "attributes": "",
              "line": 4
            },
            {
              "name": "error::WeftError",
              "kind": "enum_item",
              "signature": "pub enum WeftError {\n    /// Chunk size was outside supported bounds.\n    #[error(\"invalid chunk size {size}; expected 1..={max}\")]\n    InvalidChunkSize {\n        /// Requested chunk size.\n        size: usize,\n        /// Maximum supported chunk size.\n        max: usize,\n    },\n\n    /// Hash text did not decode to a 32-byte digest.\n    #[error(\"invalid hash: {0}\")]\n    InvalidHash(String),\n\n    /// A read from an input stream failed.\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Serialization or deserialization failed.\n    #[error(\"serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    /// Merkle tree or proof verification failed.\n    #[error(\"merkle error: {0}\")]\n    Merkle(String),\n\n    /// Manifest fields are inconsistent or unsupported.\n    #[error(\"manifest error: {0}\")]\n    Manifest(String),\n\n    /// Fetched bytes failed integrity checks.\n    #[error(\"integrity error: {0}\")]\n    Integrity(String),\n\n    /// Required data was not available from any advertised peer.\n    #[error(\"not found: {0}\")]\n    NotFound(String),\n\n    /// Discovery or advertisement data is invalid.\n    #[error(\"discovery error: {0}\")]\n    Discovery(String),\n\n    /// Adapter boundary is intentionally not linked.\n    #[error(\"unsupported: {0}\")]\n    Unsupported(String),\n}",
              "docs": "Errors produced by Weft chunking, verification, fetch, and discovery.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "fetch",
          "source": "sigil/weave/models/weft/src/fetch.rs",
          "sha256": "bc90031fdebac8714faeeff324d1ed92e0e5c3fd90ad28271f3b5add45035a16",
          "attributes": "",
          "items": [
            {
              "name": "fetch::FetchRequest",
              "kind": "struct_item",
              "signature": "pub struct FetchRequest {\n/// Manifest to fetch.\n\npub manifest: WeftManifest,\n/// Chunk index to candidate peers.\n\npub availability: BTreeMap<u64, Vec<PeerId>>,\n/// Maximum concurrent chunk fetches.\n\npub max_parallelism: usize\n}",
              "docs": "Request to fetch and verify a full Weft manifest payload.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 15
            },
            {
              "name": "fetch::ChunkSource",
              "kind": "trait_item",
              "signature": "pub trait ChunkSource: Send + Sync {\n    /// Fetch a chunk from one peer. `Ok(None)` means the peer does not have it.\n    async fn fetch_chunk(&self, peer: &PeerId, chunk: &ChunkDescriptor) -> Result<Option<Vec<u8>>>;\n}",
              "docs": "Adapter boundary for retrieving chunks from peers.",
              "attributes": "#[async_trait]",
              "line": 26
            },
            {
              "name": "fetch::fetch_manifest",
              "kind": "function_item",
              "signature": "pub async fn fetch_manifest<S>(request: FetchRequest, source: Arc<S>) -> Result<Vec<u8>>\nwhere\n    S: ChunkSource + 'static,;",
              "docs": "Fetch, verify, and reassemble a Weft payload.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "fetch::InMemoryChunkSource",
              "kind": "struct_item",
              "signature": "pub struct InMemoryChunkSource {\n\n}",
              "docs": "Deterministic in-memory source for tests.",
              "attributes": "#[derive(Default)]",
              "line": 153
            },
            {
              "name": "fetch::InMemoryChunkSource::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&self, peer: PeerId, id: WeftHash, bytes: Vec<u8>) -> Result<()>;",
              "docs": "Insert bytes under a peer and chunk id. The bytes are intentionally not\npre-verified so tests can model dishonest peers.",
              "attributes": "",
              "line": 160
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "live",
          "source": "sigil/weave/models/weft/src/live.rs",
          "sha256": "41b130325d8a55558c8a9da65aee24ed2e86ca5cfdddf406c1b075a693e5517c",
          "attributes": "#[cfg(feature = \"dht\")]",
          "items": [
            {
              "name": "live::PRIMARY_TRIO_DNS4",
              "kind": "const_item",
              "signature": "pub const PRIMARY_TRIO_DNS4: &[&str];",
              "docs": "Live primary trio bootstrap multiaddrs (dns4) \u2014 warm spares untouched.",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 23
            },
            {
              "name": "live::store_from_handle",
              "kind": "function_item",
              "signature": "pub fn store_from_handle(handle: weave_dht::DhtHandle) -> WeftDhtStore<weave_dht::DhtHandle>;",
              "docs": "Wrap an existing shared [`weave_dht::DhtHandle`] (e.g. from NetworkManager).\n\nThis is the production constructor. Callers that already own a live handle\nfrom `WeaveNode::start_network()` must use this \u2014 no second bootstrap.",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 33
            },
            {
              "name": "live::LiveWeftDht",
              "kind": "struct_item",
              "signature": "pub struct LiveWeftDht {\n/// Running DHT node \u2014 drop last to shut down the swarm.\n\npub node: weave_dht::DhtNode,\n/// Weft adapter over the node handle.\n\npub store: WeftDhtStore<weave_dht::DhtHandle>\n}",
              "docs": "Result of a standalone live DHT connect (keeps the swarm task alive).",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 38
            },
            {
              "name": "live::LiveWeftDht::handle",
              "kind": "function_item",
              "signature": "pub fn handle(&self) -> weave_dht::DhtHandle;",
              "docs": "Borrow the underlying DHT handle (for sharing with other adapters).",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 47
            },
            {
              "name": "live::LiveWeftDht::peer_id_string",
              "kind": "function_item",
              "signature": "pub fn peer_id_string(&self) -> String;",
              "docs": "Local libp2p peer id string.",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 52
            },
            {
              "name": "live::connect_primary_trio",
              "kind": "function_item",
              "signature": "pub async fn connect_primary_trio() -> Result<LiveWeftDht>;",
              "docs": "Start a standalone DHT client bootstrapped to the live primary trio.\n\nPrefer [`store_from_handle`] when a `WeaveNode` / `NetworkManager` already\nowns the mesh. This helper is for library dogfood / prove binaries only.",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 61
            },
            {
              "name": "live::connect_with_bootstrap",
              "kind": "function_item",
              "signature": "pub async fn connect_with_bootstrap(bootstrap: &[&str]) -> Result<LiveWeftDht>;",
              "docs": "Start a standalone DHT client with explicit bootstrap multiaddrs.",
              "attributes": "#[cfg(feature = \"dht\")]",
              "line": 66
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "local",
          "source": "sigil/weave/models/weft/src/local.rs",
          "sha256": "3471cb4ab174325a5d12f09a5e7f119d24086b843f971e97e848920f2b76a8e1",
          "attributes": "",
          "items": [
            {
              "name": "local::LocalWeftStore",
              "kind": "struct_item",
              "signature": "pub struct LocalWeftStore {\n\n}",
              "docs": "Filesystem-backed local Weft store.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 25
            },
            {
              "name": "local::PublishedWeft",
              "kind": "struct_item",
              "signature": "pub struct PublishedWeft {\n/// Validated manifest for the payload.\n\npub manifest: WeftManifest,\n/// Canonical manifest bytes committed by Sigil.\n\npub manifest_bytes: Vec<u8>,\n/// Availability advertisement written for the local peer.\n\npub advertisement: AvailabilityAdvertisement\n}",
              "docs": "Result of publishing bytes into a local Weft store.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 35
            },
            {
              "name": "local::LocalWeftStatus",
              "kind": "struct_item",
              "signature": "pub struct LocalWeftStatus {\n/// Number of locally known Weft roots.\n\npub roots: u64,\n/// Number of locally stored chunks.\n\npub chunks: u64,\n/// Total bytes across locally stored chunks.\n\npub bytes: u64,\n/// Peers represented by local advertisements.\n\npub peers: Vec<PeerId>\n}",
              "docs": "Minimal operator-facing store status.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "local::LocalWeftStore::in_memory",
              "kind": "function_item",
              "signature": "pub fn in_memory() -> Self;",
              "docs": "Create an in-memory local store.",
              "attributes": "",
              "line": 65
            },
            {
              "name": "local::LocalWeftStore::open",
              "kind": "function_item",
              "signature": "pub fn open(path: impl AsRef<Path>) -> Result<Self>;",
              "docs": "Open or create a filesystem-backed local store.",
              "attributes": "",
              "line": 76
            },
            {
              "name": "local::LocalWeftStore::publish_bytes",
              "kind": "function_item",
              "signature": "pub fn publish_bytes(\n        &self,\n        bytes: &[u8],\n        config: ChunkConfig,\n        producer: ManifestProducer,\n        artifact: ArtifactMetadata,\n        peer: PeerId,\n    ) -> Result<PublishedWeft>;",
              "docs": "Publish a payload as canonical chunks, manifest bytes, and availability.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "local::LocalWeftStore::publish_reader",
              "kind": "function_item",
              "signature": "pub fn publish_reader<R: Read>(\n        &self,\n        reader: R,\n        config: ChunkConfig,\n        producer: ManifestProducer,\n        artifact: ArtifactMetadata,\n        peer: PeerId,\n    ) -> Result<PublishedWeft>;",
              "docs": "Publish bytes from a reader without requiring one contiguous input buffer.",
              "attributes": "",
              "line": 162
            },
            {
              "name": "local::LocalWeftStore::serve_manifest",
              "kind": "function_item",
              "signature": "pub fn serve_manifest(&self, root: WeftHash) -> Result<Option<WeftManifest>>;",
              "docs": "Serve a validated manifest by root.",
              "attributes": "",
              "line": 241
            },
            {
              "name": "local::LocalWeftStore::serve_manifest_bytes",
              "kind": "function_item",
              "signature": "pub fn serve_manifest_bytes(&self, root: WeftHash) -> Result<Option<Vec<u8>>>;",
              "docs": "Serve canonical manifest bytes by root.",
              "attributes": "",
              "line": 273
            },
            {
              "name": "local::LocalWeftStore::serve_chunk",
              "kind": "function_item",
              "signature": "pub fn serve_chunk(&self, chunk: &ChunkDescriptor) -> Result<Option<Vec<u8>>>;",
              "docs": "Serve one chunk by descriptor.",
              "attributes": "",
              "line": 289
            },
            {
              "name": "local::LocalWeftStore::fetch_payload",
              "kind": "function_item",
              "signature": "pub async fn fetch_payload(&self, root: WeftHash, max_parallelism: usize) -> Result<Vec<u8>>;",
              "docs": "Discover advertisements, fetch chunks, and verify/reassemble a payload.",
              "attributes": "",
              "line": 316
            },
            {
              "name": "local::LocalWeftStore::status",
              "kind": "function_item",
              "signature": "pub fn status(&self) -> Result<LocalWeftStatus>;",
              "docs": "Return local store status.",
              "attributes": "",
              "line": 344
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "manifest",
          "source": "sigil/weave/models/weft/src/manifest.rs",
          "sha256": "cb7be6078a653f6e254367b19df694084345eca58b0aa709c2a3a335e336e040",
          "attributes": "",
          "items": [
            {
              "name": "manifest::WEFT_MANIFEST_SCHEMA",
              "kind": "const_item",
              "signature": "pub const WEFT_MANIFEST_SCHEMA: &str;",
              "docs": "Canonical schema string for Weft manifests.",
              "attributes": "",
              "line": 9
            },
            {
              "name": "manifest::WEFT_MANIFEST_VERSION",
              "kind": "const_item",
              "signature": "pub const WEFT_MANIFEST_VERSION: u16;",
              "docs": "Current manifest version.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "manifest::ManifestProducer",
              "kind": "struct_item",
              "signature": "pub struct ManifestProducer {\n/// Producer DID.\n\npub did: String,\n/// Optional key id, normally a DID URL.\n\npub signing_key_id: Option<String>,\n/// Signature over [`WeftManifest::signing_payload`].\n\npub signature: Vec<u8>\n}",
              "docs": "Producer identity and signature bytes.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "manifest::ArtifactMetadata",
              "kind": "struct_item",
              "signature": "pub struct ArtifactMetadata {\n/// Optional asset id supplied by an external registry such as MARS.\n\npub artifact_id: Option<String>,\n/// Media type of the original payload.\n\npub media_type: String,\n/// Schema for interpreting the original payload.\n\npub schema: String,\n/// Optional MARS asset id. Informational until a concrete transaction is linked.\n\npub mars_asset_id: Option<String>,\n/// Optional Sigil artifact commitment CID for the manifest or payload.\n\npub sigil_commitment_cid: Option<String>\n}",
              "docs": "Higher-level artifact metadata carried by the manifest.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "manifest::ParitySpec",
              "kind": "struct_item",
              "signature": "pub struct ParitySpec {\n/// Scheme name, for example `reed-solomon`.\n\npub scheme: String,\n/// Data shard count.\n\npub data_shards: u16,\n/// Parity shard count.\n\npub parity_shards: u16,\n/// Must be true until parity fetch/reconstruction is implemented.\n\npub experimental: bool\n}",
              "docs": "Reserved parity/erasure-coding metadata.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "manifest::WeftManifest",
              "kind": "struct_item",
              "signature": "pub struct WeftManifest {\n/// Schema identifier.\n\npub schema: String,\n/// Manifest version.\n\npub version: u16,\n/// Merkle root over ordered chunk IDs.\n\npub root: WeftHash,\n/// Chunk size used for all chunks except the final chunk.\n\npub chunk_size: u64,\n/// Number of chunks.\n\npub chunk_count: u64,\n/// Original payload length in bytes.\n\npub total_len: u64,\n/// Ordered chunk descriptors.\n\npub chunks: Vec<ChunkDescriptor>,\n/// Reserved parity metadata.\n\npub parity: Option<ParitySpec>,\n/// Producer DID and signature.\n\npub producer: ManifestProducer,\n/// Artifact metadata for registry and Sigil consumers.\n\npub artifact: ArtifactMetadata\n}",
              "docs": "A signed manifest committing a large artifact to chunk IDs and a Merkle root.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 54
            },
            {
              "name": "manifest::WeftManifest::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(\n        bytes: &[u8],\n        config: ChunkConfig,\n        producer: ManifestProducer,\n        artifact: ArtifactMetadata,\n    ) -> Result<Self>;",
              "docs": "Build a manifest directly from payload bytes.",
              "attributes": "",
              "line": 79
            },
            {
              "name": "manifest::WeftManifest::from_chunk_descriptors",
              "kind": "function_item",
              "signature": "pub fn from_chunk_descriptors(\n        total_len: u64,\n        config: ChunkConfig,\n        chunks: Vec<ChunkDescriptor>,\n        producer: ManifestProducer,\n        artifact: ArtifactMetadata,\n    ) -> Result<Self>;",
              "docs": "Build a manifest from precomputed ordered chunk descriptors.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "manifest::WeftManifest::to_canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn to_canonical_bytes(&self) -> Result<Vec<u8>>;",
              "docs": "Serialize with deterministic field order.",
              "attributes": "",
              "line": 134
            },
            {
              "name": "manifest::WeftManifest::from_canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn from_canonical_bytes(bytes: &[u8]) -> Result<Self>;",
              "docs": "Deserialize canonical manifest bytes.",
              "attributes": "",
              "line": 139
            },
            {
              "name": "manifest::WeftManifest::signing_payload",
              "kind": "function_item",
              "signature": "pub fn signing_payload(&self) -> Result<Vec<u8>>;",
              "docs": "Return the bytes a producer signs. The signature field is cleared.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "manifest::WeftManifest::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "Validate internal manifest consistency.",
              "attributes": "",
              "line": 153
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        },
        {
          "module": "tree",
          "source": "sigil/weave/models/weft/src/tree.rs",
          "sha256": "9a56d7eabd75e8df973d4c4de4d1d61f204ad40f7d445f1961dd52899118993a",
          "attributes": "",
          "items": [
            {
              "name": "tree::TREE_EMPTY_DOMAIN",
              "kind": "const_item",
              "signature": "pub const TREE_EMPTY_DOMAIN: &[u8];",
              "docs": "Domain tag for the empty Weft tree root.",
              "attributes": "",
              "line": 7
            },
            {
              "name": "tree::TREE_LEAF_DOMAIN",
              "kind": "const_item",
              "signature": "pub const TREE_LEAF_DOMAIN: &[u8];",
              "docs": "Domain tag for leaf nodes.",
              "attributes": "",
              "line": 9
            },
            {
              "name": "tree::TREE_NODE_DOMAIN",
              "kind": "const_item",
              "signature": "pub const TREE_NODE_DOMAIN: &[u8];",
              "docs": "Domain tag for internal nodes.",
              "attributes": "",
              "line": 11
            },
            {
              "name": "tree::ProofPosition",
              "kind": "enum_item",
              "signature": "pub enum ProofPosition {\n    /// Sibling is on the left side.\n    Left,\n    /// Sibling is on the right side.\n    Right,\n}",
              "docs": "Sibling position relative to the current proof path node.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]",
              "line": 16
            },
            {
              "name": "tree::ProofSibling",
              "kind": "struct_item",
              "signature": "pub struct ProofSibling {\n/// Sibling position.\n\npub position: ProofPosition,\n/// Sibling hash at this level.\n\npub hash: WeftHash\n}",
              "docs": "One sibling hash in a Merkle proof.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "tree::MerkleProof",
              "kind": "struct_item",
              "signature": "pub struct MerkleProof {\n/// Zero-based leaf index.\n\npub leaf_index: u64,\n/// Total number of leaves in the tree.\n\npub leaf_count: u64,\n/// Sibling path. Odd unpaired leaves are promoted and do not add siblings.\n\npub siblings: Vec<ProofSibling>\n}",
              "docs": "Merkle proof for a single chunk ID.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "tree::MerkleTree",
              "kind": "struct_item",
              "signature": "pub struct MerkleTree {\n\n}",
              "docs": "A deterministic binary Merkle tree over Weft chunk IDs.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 45
            },
            {
              "name": "tree::MerkleTree::from_leaves",
              "kind": "function_item",
              "signature": "pub fn from_leaves(leaves: Vec<WeftHash>) -> Result<Self>;",
              "docs": "Build a tree from chunk IDs.",
              "attributes": "",
              "line": 53
            },
            {
              "name": "tree::MerkleTree::root",
              "kind": "function_item",
              "signature": "pub fn root(&self) -> WeftHash;",
              "docs": "Return the Merkle root.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "tree::MerkleTree::proof",
              "kind": "function_item",
              "signature": "pub fn proof(&self, index: u64) -> Result<MerkleProof>;",
              "docs": "Return a Merkle proof for one leaf index.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "tree::MerkleTree::verify_proof",
              "kind": "function_item",
              "signature": "pub fn verify_proof(root: WeftHash, leaf: WeftHash, proof: &MerkleProof) -> Result<bool>;",
              "docs": "Verify a proof for a chunk ID against a root.",
              "attributes": "",
              "line": 136
            }
          ],
          "parseErrors": false,
          "reviewNote": "Producer signatures must be computed over the exact manifest before validate/from_bytes or publication; an empty signature is rejected. Reader interfaces do not establish constant-memory storage, and chain reference metadata alone does not submit or prove anchoring. See /libraries/weft/publish."
        }
      ]
    },
    {
      "name": "weave-woven",
      "version": "0.1.0",
      "source": "sigil/weave/models/woven",
      "manifestSha256": "bfc5621f6ee955caed8f1466ceecc1ba29830f675d54680cd74493ba23cc60d6",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-woven",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/models/woven/src/lib.rs",
          "sha256": "4fcca901177f16555a7cb3a455bc25d3fc5272b59e585a3aa760242348bcc3cb",
          "attributes": "",
          "items": [
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, WovenError>;",
              "docs": "Result type for WOVEN protocol operations.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "::WovenError",
              "kind": "enum_item",
              "signature": "pub enum WovenError {\n    /// A typed identifier is empty or uses the wrong scheme.\n    #[error(\"invalid {kind}: {value}\")]\n    InvalidIdentifier {\n        /// Identifier kind.\n        kind: &'static str,\n        /// Rejected value.\n        value: String,\n    },\n\n    /// An event kind is empty or malformed.\n    #[error(\"invalid event kind: {0}\")]\n    InvalidKind(String),\n\n    /// A JSON value could not be encoded canonically.\n    #[error(\"canonical encoding failed: {0}\")]\n    CanonicalEncoding(String),\n\n    /// A strand record is not a WOVEN event envelope.\n    #[error(\"invalid strand record: {0}\")]\n    InvalidStrandRecord(String),\n\n    /// A Strand operation failed.\n    #[error(\"strand operation failed: {0}\")]\n    Strand(String),\n\n    /// A Nexus operation failed.\n    #[error(\"nexus operation failed: {0}\")]\n    Nexus(String),\n\n    /// A transport operation failed.\n    #[error(\"transport operation failed: {0}\")]\n    Transport(String),\n\n    /// A stored event failed signature verification.\n    #[error(\"event signature verification failed at strand sequence {seq}\")]\n    VerificationFailed {\n        /// Strand sequence containing the rejected event.\n        seq: u64,\n    },\n\n    /// A typed application schema could not parse an event.\n    #[error(\"schema error: {0}\")]\n    Schema(String),\n}",
              "docs": "Errors returned by WOVEN protocol operations.",
              "attributes": "#[derive(Debug, Error, PartialEq, Eq)]",
              "line": 22
            },
            {
              "name": "::SpaceId",
              "kind": "struct_item",
              "signature": "pub struct SpaceId(String);",
              "docs": "A WOVEN app space, such as `woven://dsocial/global`.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(transparent)]",
              "line": 71
            },
            {
              "name": "::SpaceId::new",
              "kind": "function_item",
              "signature": "pub fn new(value: impl Into<String>) -> Result<Self>;",
              "docs": "Parse and validate a WOVEN space identifier.",
              "attributes": "",
              "line": 75
            },
            {
              "name": "::SpaceId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Return the identifier as a string slice.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "::EventRef",
              "kind": "struct_item",
              "signature": "pub struct EventRef(String);",
              "docs": "A reference to a WOVEN event or object.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(transparent)]",
              "line": 96
            },
            {
              "name": "::EventRef::new",
              "kind": "function_item",
              "signature": "pub fn new(value: impl Into<String>) -> Result<Self>;",
              "docs": "Parse and validate a WOVEN reference.",
              "attributes": "",
              "line": 100
            },
            {
              "name": "::EventRef::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Return the reference as a string slice.",
              "attributes": "",
              "line": 113
            },
            {
              "name": "::Event",
              "kind": "struct_item",
              "signature": "pub struct Event {\n\n}",
              "docs": "A signed WOVEN event.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 120
            },
            {
              "name": "::EventRecord",
              "kind": "struct_item",
              "signature": "pub struct EventRecord {\n/// Strand sequence number.\n\npub seq: u64,\n/// Verified event.\n\npub event: Event\n}",
              "docs": "A WOVEN event with its Strand sequence.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 136
            },
            {
              "name": "::AggregatedEventRecord",
              "kind": "struct_item",
              "signature": "pub struct AggregatedEventRecord {\n/// Source writer key from the Nexus view.\n\npub source_writer: String,\n/// Sequence number in the source Strand.\n\npub seq: u64,\n/// Verified event.\n\npub event: Event\n}",
              "docs": "A verified event from a Nexus-merged multi-writer feed.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 145
            },
            {
              "name": "::NexusEventFeed",
              "kind": "struct_item",
              "signature": "pub struct NexusEventFeed {\n\n}",
              "docs": "Nexus-backed WOVEN feed over many single-writer strands.",
              "attributes": "",
              "line": 155
            },
            {
              "name": "::WovenTransport",
              "kind": "struct_item",
              "signature": "pub struct WovenTransport;",
              "docs": "WOVEN transport helpers over weave-swarm.",
              "attributes": "",
              "line": 160
            },
            {
              "name": "::WovenTransport::topic_for_space",
              "kind": "function_item",
              "signature": "pub fn topic_for_space(space: &SpaceId) -> weave_swarm::TopicId;",
              "docs": "Derive the swarm discovery topic for a WOVEN space.",
              "attributes": "",
              "line": 164
            },
            {
              "name": "::WovenTransport::encode_event",
              "kind": "function_item",
              "signature": "pub fn encode_event(event: &Event) -> Result<Vec<u8>>;",
              "docs": "Encode an event as a WOVEN transport payload.",
              "attributes": "",
              "line": 169
            },
            {
              "name": "::WovenTransport::decode_event",
              "kind": "function_item",
              "signature": "pub fn decode_event(bytes: &[u8]) -> Result<Event>;",
              "docs": "Decode and verify a WOVEN transport payload.",
              "attributes": "",
              "line": 180
            },
            {
              "name": "::WovenTransport::join_space",
              "kind": "function_item",
              "signature": "pub async fn join_space(swarm: &weave_swarm::Swarm, space: &SpaceId) -> Result<()>;",
              "docs": "Join the swarm topic for a WOVEN space.",
              "attributes": "",
              "line": 207
            },
            {
              "name": "::WovenTransport::broadcast_event",
              "kind": "function_item",
              "signature": "pub async fn broadcast_event(swarm: &weave_swarm::Swarm, event: &Event) -> Result<usize>;",
              "docs": "Broadcast a WOVEN event to currently connected swarm peers.",
              "attributes": "",
              "line": 218
            },
            {
              "name": "::WovenTransportService",
              "kind": "struct_item",
              "signature": "pub struct WovenTransportService {\n\n}",
              "docs": "Stateful receiver for WOVEN payloads delivered by weave-swarm.\n\nThe service verifies incoming transport envelopes, rejects events for spaces\nit did not join, deduplicates by deterministic event ID, and persists accepted\nevents into a Strand.",
              "attributes": "",
              "line": 232
            },
            {
              "name": "::WovenTransportService::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        spaces: impl IntoIterator<Item = SpaceId>,\n        strand: Arc<Mutex<strand::Strand>>,\n    ) -> Self;",
              "docs": "Create a transport service over a shared local Strand.\n\nDedup state starts empty. Prefer [`Self::open`] when reopening an\nexisting durable Strand so already-persisted event IDs are hydrated.",
              "attributes": "",
              "line": 243
            },
            {
              "name": "::WovenTransportService::open",
              "kind": "function_item",
              "signature": "pub async fn open(\n        spaces: impl IntoIterator<Item = SpaceId>,\n        strand: Arc<Mutex<strand::Strand>>,\n    ) -> Result<Self>;",
              "docs": "Open a transport service and hydrate dedup state from the Strand.\n\nEnsures a fresh process does not re-accept events already persisted on\nthe backing Strand.",
              "attributes": "",
              "line": 258
            },
            {
              "name": "::WovenTransportService::strand",
              "kind": "function_item",
              "signature": "pub fn strand(&self) -> &Arc<Mutex<strand::Strand>>;",
              "docs": "Return the shared Strand used by this service.",
              "attributes": "",
              "line": 280
            },
            {
              "name": "::WovenTransportService::spaces",
              "kind": "function_item",
              "signature": "pub fn spaces(&self) -> &BTreeSet<SpaceId>;",
              "docs": "Return the joined WOVEN spaces accepted by this receiver.",
              "attributes": "",
              "line": 285
            },
            {
              "name": "::WovenTransportService::join_spaces",
              "kind": "function_item",
              "signature": "pub async fn join_spaces(&self, swarm: &weave_swarm::Swarm) -> Result<()>;",
              "docs": "Join every configured WOVEN space on the provided swarm.",
              "attributes": "",
              "line": 290
            },
            {
              "name": "::WovenTransportService::handle_payload",
              "kind": "function_item",
              "signature": "pub async fn handle_payload(&self, payload: &[u8]) -> Result<Option<EventRecord>>;",
              "docs": "Decode, verify, deduplicate, and persist one transport payload.\n\nReturns `Ok(None)` when the event was already accepted earlier.",
              "attributes": "",
              "line": 300
            },
            {
              "name": "::WovenTransportService::handle_swarm_event",
              "kind": "function_item",
              "signature": "pub async fn handle_swarm_event(\n        &self,\n        event: weave_swarm::SwarmEvent,\n    ) -> Result<Option<EventRecord>>;",
              "docs": "Handle a single swarm event if it carries WOVEN application data.",
              "attributes": "",
              "line": 322
            },
            {
              "name": "::WovenTransportService::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, filter: &EventFilter) -> Result<Vec<EventRecord>>;",
              "docs": "Query verified local events from the service Strand.",
              "attributes": "",
              "line": 343
            },
            {
              "name": "::NexusEventFeed::new",
              "kind": "function_item",
              "signature": "pub async fn new(viewing_node: impl Into<String>) -> Result<Self>;",
              "docs": "Create a new WOVEN feed.",
              "attributes": "",
              "line": 391
            },
            {
              "name": "::NexusEventFeed::add_strand",
              "kind": "function_item",
              "signature": "pub async fn add_strand(&self, strand: Arc<strand::Strand>) -> Result<()>;",
              "docs": "Add a single-writer Strand to the feed.",
              "attributes": "",
              "line": 403
            },
            {
              "name": "::NexusEventFeed::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, filter: &EventFilter) -> Result<Vec<AggregatedEventRecord>>;",
              "docs": "Generate a verified, filtered multi-writer feed.",
              "attributes": "",
              "line": 411
            },
            {
              "name": "::EventStream",
              "kind": "struct_item",
              "signature": "pub struct EventStream;",
              "docs": "Strand-backed storage adapter for WOVEN events.",
              "attributes": "",
              "line": 444
            },
            {
              "name": "::EventStream::append",
              "kind": "function_item",
              "signature": "pub async fn append(strand: &mut strand::Strand, event: &Event) -> Result<EventRecord>;",
              "docs": "Append a signed WOVEN event to a Strand.",
              "attributes": "",
              "line": 448
            },
            {
              "name": "::EventStream::read_all",
              "kind": "function_item",
              "signature": "pub async fn read_all(strand: &strand::Strand) -> Result<Vec<EventRecord>>;",
              "docs": "Read and verify every WOVEN event in a Strand.",
              "attributes": "",
              "line": 461
            },
            {
              "name": "::EventStream::query",
              "kind": "function_item",
              "signature": "pub async fn query(strand: &strand::Strand, filter: &EventFilter) -> Result<Vec<EventRecord>>;",
              "docs": "Read, verify, and filter WOVEN events from a Strand.",
              "attributes": "",
              "line": 476
            },
            {
              "name": "::Event::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> &EventRef;",
              "docs": "Return this event's deterministic ID.",
              "attributes": "",
              "line": 487
            },
            {
              "name": "::Event::author",
              "kind": "function_item",
              "signature": "pub fn author(&self) -> &str;",
              "docs": "Return the author DID or identity URI.",
              "attributes": "",
              "line": 492
            },
            {
              "name": "::Event::space",
              "kind": "function_item",
              "signature": "pub fn space(&self) -> &SpaceId;",
              "docs": "Return this event's app space.",
              "attributes": "",
              "line": 497
            },
            {
              "name": "::Event::kind",
              "kind": "function_item",
              "signature": "pub fn kind(&self) -> &str;",
              "docs": "Return the event kind, such as `social.post`.",
              "attributes": "",
              "line": 502
            },
            {
              "name": "::Event::refs",
              "kind": "function_item",
              "signature": "pub fn refs(&self) -> &[EventRef];",
              "docs": "Return referenced events/objects.",
              "attributes": "",
              "line": 507
            },
            {
              "name": "::Event::attachments",
              "kind": "function_item",
              "signature": "pub fn attachments(&self) -> &[String];",
              "docs": "Return attachment references, usually Locus refs.",
              "attributes": "",
              "line": 512
            },
            {
              "name": "::Event::capabilities",
              "kind": "function_item",
              "signature": "pub fn capabilities(&self) -> &[String];",
              "docs": "Return capability references attached to this event.",
              "attributes": "",
              "line": 517
            },
            {
              "name": "::Event::body",
              "kind": "function_item",
              "signature": "pub fn body(&self) -> &Value;",
              "docs": "Return the JSON body.",
              "attributes": "",
              "line": 522
            },
            {
              "name": "::Event::created_at",
              "kind": "function_item",
              "signature": "pub fn created_at(&self) -> u64;",
              "docs": "Return the creation timestamp in seconds.",
              "attributes": "",
              "line": 527
            },
            {
              "name": "::Event::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> &[u8; 32];",
              "docs": "Return the signer public key.",
              "attributes": "",
              "line": 532
            },
            {
              "name": "::Event::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, public_key: &[u8; 32]) -> Result<bool>;",
              "docs": "Verify the deterministic event ID and Ed25519 signature.",
              "attributes": "",
              "line": 537
            },
            {
              "name": "::Event::to_strand_bytes",
              "kind": "function_item",
              "signature": "pub fn to_strand_bytes(&self) -> Result<Vec<u8>>;",
              "docs": "Encode this event for storage in a Strand block.",
              "attributes": "",
              "line": 556
            },
            {
              "name": "::Event::from_strand_bytes",
              "kind": "function_item",
              "signature": "pub fn from_strand_bytes(bytes: &[u8]) -> Result<Self>;",
              "docs": "Decode a WOVEN event from a Strand block payload.",
              "attributes": "",
              "line": 566
            },
            {
              "name": "::EventBuilder",
              "kind": "struct_item",
              "signature": "pub struct EventBuilder {\n\n}",
              "docs": "Builder for signed WOVEN events.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 621
            },
            {
              "name": "::EventBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new(author: impl Into<String>, space: SpaceId, kind: impl Into<String>) -> Self;",
              "docs": "Create a new event builder.",
              "attributes": "",
              "line": 634
            },
            {
              "name": "::EventBuilder::body",
              "kind": "function_item",
              "signature": "pub fn body(mut self, body: Value) -> Self;",
              "docs": "Set the JSON body.",
              "attributes": "",
              "line": 648
            },
            {
              "name": "::EventBuilder::created_at",
              "kind": "function_item",
              "signature": "pub fn created_at(mut self, created_at: u64) -> Self;",
              "docs": "Set the creation timestamp in seconds.",
              "attributes": "",
              "line": 654
            },
            {
              "name": "::EventBuilder::ref_event",
              "kind": "function_item",
              "signature": "pub fn ref_event(mut self, event_ref: EventRef) -> Self;",
              "docs": "Add an event/object reference.",
              "attributes": "",
              "line": 660
            },
            {
              "name": "::EventBuilder::attachment",
              "kind": "function_item",
              "signature": "pub fn attachment(mut self, attachment: impl Into<String>) -> Self;",
              "docs": "Add an attachment reference, typically a Locus URL/ref.",
              "attributes": "",
              "line": 666
            },
            {
              "name": "::EventBuilder::capability",
              "kind": "function_item",
              "signature": "pub fn capability(mut self, capability: impl Into<String>) -> Self;",
              "docs": "Add a capability reference.",
              "attributes": "",
              "line": 672
            },
            {
              "name": "::EventBuilder::sign",
              "kind": "function_item",
              "signature": "pub fn sign(self, keypair: &weave_crypto::KeyPair) -> Result<Event>;",
              "docs": "Sign and build the event.",
              "attributes": "",
              "line": 678
            },
            {
              "name": "::EventBuilder::sign_with",
              "kind": "function_item",
              "signature": "pub fn sign_with<F>(self, public_key: [u8; 32], signer: F) -> Result<Event>\n    where\n        F: FnOnce(&[u8]) -> Result<Vec<u8>>,;",
              "docs": "Sign and build the event with an external signing adapter.",
              "attributes": "",
              "line": 685
            },
            {
              "name": "::EventFilter",
              "kind": "struct_item",
              "signature": "pub struct EventFilter {\n\n}",
              "docs": "Query filter for event streams and local indexes.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 726
            },
            {
              "name": "::EventFilter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create an empty filter. Empty fields are wildcards.",
              "attributes": "",
              "line": 737
            },
            {
              "name": "::EventFilter::space",
              "kind": "function_item",
              "signature": "pub fn space(mut self, space: SpaceId) -> Self;",
              "docs": "Match a space.",
              "attributes": "",
              "line": 742
            },
            {
              "name": "::EventFilter::kind",
              "kind": "function_item",
              "signature": "pub fn kind(mut self, kind: impl Into<String>) -> Self;",
              "docs": "Match an event kind.",
              "attributes": "",
              "line": 748
            },
            {
              "name": "::EventFilter::author",
              "kind": "function_item",
              "signature": "pub fn author(mut self, author: impl Into<String>) -> Self;",
              "docs": "Match an author.",
              "attributes": "",
              "line": 754
            },
            {
              "name": "::EventFilter::references",
              "kind": "function_item",
              "signature": "pub fn references(mut self, reference: EventRef) -> Self;",
              "docs": "Match an event/object reference.",
              "attributes": "",
              "line": 760
            },
            {
              "name": "::EventFilter::since",
              "kind": "function_item",
              "signature": "pub fn since(mut self, timestamp: u64) -> Self;",
              "docs": "Match events at or after this timestamp.",
              "attributes": "",
              "line": 766
            },
            {
              "name": "::EventFilter::until",
              "kind": "function_item",
              "signature": "pub fn until(mut self, timestamp: u64) -> Self;",
              "docs": "Match events at or before this timestamp.",
              "attributes": "",
              "line": 772
            },
            {
              "name": "::EventFilter::matches",
              "kind": "function_item",
              "signature": "pub fn matches(&self, event: &Event) -> bool;",
              "docs": "Return true when the event satisfies every populated filter field.",
              "attributes": "",
              "line": 778
            },
            {
              "name": "dsocial",
              "kind": "module",
              "signature": "pub mod dsocial;",
              "docs": "dSocial typed event schemas over WOVEN.",
              "attributes": "",
              "line": 887
            },
            {
              "name": "dsocial::Profile",
              "kind": "struct_item",
              "signature": "pub struct Profile {\n/// Display name shown in clients.\n\npub display_name: String,\n/// Optional profile bio.\n\npub bio: Option<String>,\n/// Optional avatar Locus reference.\n\npub avatar: Option<String>\n}",
              "docs": "dSocial profile event body.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 894
            },
            {
              "name": "dsocial::Profile::KIND",
              "kind": "const_item",
              "signature": "pub const KIND: &'static str;",
              "docs": "WOVEN event kind for profile updates.",
              "attributes": "",
              "line": 905
            },
            {
              "name": "dsocial::Profile::new",
              "kind": "function_item",
              "signature": "pub fn new(display_name: impl Into<String>) -> Self;",
              "docs": "Create a profile body.",
              "attributes": "",
              "line": 908
            },
            {
              "name": "dsocial::Profile::bio",
              "kind": "function_item",
              "signature": "pub fn bio(mut self, bio: impl Into<String>) -> Self;",
              "docs": "Set profile bio.",
              "attributes": "",
              "line": 917
            },
            {
              "name": "dsocial::Profile::avatar",
              "kind": "function_item",
              "signature": "pub fn avatar(mut self, avatar: impl Into<String>) -> Self;",
              "docs": "Set avatar reference.",
              "attributes": "",
              "line": 923
            },
            {
              "name": "dsocial::Profile::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n            &self,\n            author: impl Into<String>,\n            space: SpaceId,\n            created_at: u64,\n            keypair: &weave_crypto::KeyPair,\n        ) -> Result<Event>;",
              "docs": "Sign as a WOVEN event.",
              "attributes": "",
              "line": 929
            },
            {
              "name": "dsocial::Profile::parse",
              "kind": "function_item",
              "signature": "pub fn parse(event: &Event) -> Result<Self>;",
              "docs": "Parse from a WOVEN event.",
              "attributes": "",
              "line": 940
            },
            {
              "name": "dsocial::Post",
              "kind": "struct_item",
              "signature": "pub struct Post {\n/// Post text.\n\npub text: String,\n/// Attachment Locus references.\n\npub attachments: Vec<String>\n}",
              "docs": "dSocial post event body.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 947
            },
            {
              "name": "dsocial::Post::KIND",
              "kind": "const_item",
              "signature": "pub const KIND: &'static str;",
              "docs": "WOVEN event kind for posts.",
              "attributes": "",
              "line": 956
            },
            {
              "name": "dsocial::Post::new",
              "kind": "function_item",
              "signature": "pub fn new(text: impl Into<String>) -> Self;",
              "docs": "Create a post body.",
              "attributes": "",
              "line": 959
            },
            {
              "name": "dsocial::Post::attachment",
              "kind": "function_item",
              "signature": "pub fn attachment(mut self, attachment: impl Into<String>) -> Self;",
              "docs": "Add an attachment reference.",
              "attributes": "",
              "line": 967
            },
            {
              "name": "dsocial::Post::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n            &self,\n            author: impl Into<String>,\n            space: SpaceId,\n            created_at: u64,\n            keypair: &weave_crypto::KeyPair,\n        ) -> Result<Event>;",
              "docs": "Sign as a WOVEN event.",
              "attributes": "",
              "line": 973
            },
            {
              "name": "dsocial::Post::parse",
              "kind": "function_item",
              "signature": "pub fn parse(event: &Event) -> Result<Self>;",
              "docs": "Parse from a WOVEN event.",
              "attributes": "",
              "line": 990
            },
            {
              "name": "dsocial::Reply",
              "kind": "struct_item",
              "signature": "pub struct Reply {\n/// Parent post/reply reference.\n\npub parent: EventRef,\n/// Reply text.\n\npub text: String\n}",
              "docs": "dSocial reply event body.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 997
            },
            {
              "name": "dsocial::Reply::KIND",
              "kind": "const_item",
              "signature": "pub const KIND: &'static str;",
              "docs": "WOVEN event kind for replies.",
              "attributes": "",
              "line": 1006
            },
            {
              "name": "dsocial::Reply::new",
              "kind": "function_item",
              "signature": "pub fn new(parent: EventRef, text: impl Into<String>) -> Self;",
              "docs": "Create a reply.",
              "attributes": "",
              "line": 1009
            },
            {
              "name": "dsocial::Reply::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n            &self,\n            author: impl Into<String>,\n            space: SpaceId,\n            created_at: u64,\n            keypair: &weave_crypto::KeyPair,\n        ) -> Result<Event>;",
              "docs": "Sign as a WOVEN event.",
              "attributes": "",
              "line": 1017
            },
            {
              "name": "dsocial::Reply::parse",
              "kind": "function_item",
              "signature": "pub fn parse(event: &Event) -> Result<Self>;",
              "docs": "Parse from a WOVEN event.",
              "attributes": "",
              "line": 1032
            },
            {
              "name": "dsocial::Follow",
              "kind": "struct_item",
              "signature": "pub struct Follow {\n/// Target DID being followed.\n\npub target: String\n}",
              "docs": "dSocial follow event body.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 1046
            },
            {
              "name": "dsocial::Follow::KIND",
              "kind": "const_item",
              "signature": "pub const KIND: &'static str;",
              "docs": "WOVEN event kind for follows.",
              "attributes": "",
              "line": 1053
            },
            {
              "name": "dsocial::Follow::new",
              "kind": "function_item",
              "signature": "pub fn new(target: impl Into<String>) -> Self;",
              "docs": "Create a follow body.",
              "attributes": "",
              "line": 1056
            },
            {
              "name": "dsocial::Follow::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n            &self,\n            author: impl Into<String>,\n            space: SpaceId,\n            created_at: u64,\n            keypair: &weave_crypto::KeyPair,\n        ) -> Result<Event>;",
              "docs": "Sign as a WOVEN event.",
              "attributes": "",
              "line": 1063
            },
            {
              "name": "dsocial::Follow::parse",
              "kind": "function_item",
              "signature": "pub fn parse(event: &Event) -> Result<Self>;",
              "docs": "Parse from a WOVEN event.",
              "attributes": "",
              "line": 1074
            },
            {
              "name": "dsocial::Reaction",
              "kind": "struct_item",
              "signature": "pub struct Reaction {\n/// Target event reference.\n\npub target: EventRef,\n/// Reaction value, for example `+`.\n\npub reaction: String\n}",
              "docs": "dSocial reaction event body.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 1081
            },
            {
              "name": "dsocial::Reaction::KIND",
              "kind": "const_item",
              "signature": "pub const KIND: &'static str;",
              "docs": "WOVEN event kind for reactions.",
              "attributes": "",
              "line": 1090
            },
            {
              "name": "dsocial::Reaction::new",
              "kind": "function_item",
              "signature": "pub fn new(target: EventRef, reaction: impl Into<String>) -> Self;",
              "docs": "Create a reaction.",
              "attributes": "",
              "line": 1093
            },
            {
              "name": "dsocial::Reaction::sign",
              "kind": "function_item",
              "signature": "pub fn sign(\n            &self,\n            author: impl Into<String>,\n            space: SpaceId,\n            created_at: u64,\n            keypair: &weave_crypto::KeyPair,\n        ) -> Result<Event>;",
              "docs": "Sign as a WOVEN event.",
              "attributes": "",
              "line": 1101
            },
            {
              "name": "dsocial::Reaction::parse",
              "kind": "function_item",
              "signature": "pub fn parse(event: &Event) -> Result<Self>;",
              "docs": "Parse from a WOVEN event.",
              "attributes": "",
              "line": 1116
            }
          ],
          "parseErrors": false,
          "reviewNote": "Use open when persisted dedup hydration is needed; in-process broadcast does not prove remote acceptance or durable replication. See /libraries/woven/overview."
        }
      ]
    },
    {
      "name": "weave-agentfs",
      "version": "0.1.0",
      "source": "sigil/weave/local/agentfs",
      "manifestSha256": "753fd7326727b163027c3e831ff61e948dd2c7e31091392de5b39ce7532453e2",
      "features": {
        "default": [],
        "mock": []
      },
      "publish": true,
      "url": "/reference/rust/weave-agentfs",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/local/agentfs/src/lib.rs",
          "sha256": "38fc618329b353bf9859c5a404cb408e16454cf6c1e639ce76769ae8619fdd52",
          "attributes": "",
          "items": [
            {
              "name": "pub use config::{AgentFSConfig, AtomicMode};",
              "kind": "use_declaration",
              "signature": "pub use config::{AgentFSConfig, AtomicMode};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use entry::{LocalEntry, LocalMetadata};",
              "kind": "use_declaration",
              "signature": "pub use entry::{LocalEntry, LocalMetadata};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use error::{AgentFSError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{AgentFSError, Result};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use fs::AgentFS;",
              "kind": "use_declaration",
              "signature": "pub use fs::AgentFS;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pub use metadata::{MetadataHooks, MetadataStore};",
              "kind": "use_declaration",
              "signature": "pub use metadata::{MetadataHooks, MetadataStore};",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "pub use permissions::{AgentPermission, PermissionChecker};",
              "kind": "use_declaration",
              "signature": "pub use permissions::{AgentPermission, PermissionChecker};",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "pub use sync::{SyncDirection, SyncManager, SyncOptions};",
              "kind": "use_declaration",
              "signature": "pub use sync::{SyncDirection, SyncManager, SyncOptions};",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "pub use watcher::{FSWatcher, WatchEvent};",
              "kind": "use_declaration",
              "signature": "pub use watcher::{FSWatcher, WatchEvent};",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "pub use locus::{\n    BlobId, CreateOptions, EntryType, FileMetadata, OpenOptions, ReadStream, Stat, StatExt,\n    WriteOptions, WriteStream, DEFAULT_DIR_MODE, DEFAULT_FILE_MODE,\n};",
              "kind": "use_declaration",
              "signature": "pub use locus::{\n    BlobId, CreateOptions, EntryType, FileMetadata, OpenOptions, ReadStream, Stat, StatExt,\n    WriteOptions, WriteStream, DEFAULT_DIR_MODE, DEFAULT_FILE_MODE,\n};",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "pub use weave_identity::{Ed25519Adapter, Identity, WeaveIdentityAdapter};",
              "kind": "use_declaration",
              "signature": "pub use weave_identity::{Ed25519Adapter, Identity, WeaveIdentityAdapter};",
              "docs": "",
              "attributes": "",
              "line": 71
            }
          ],
          "parseErrors": false
        },
        {
          "module": "agent",
          "source": "sigil/weave/local/agentfs/src/agent.rs",
          "sha256": "73a7fcee3bf598a04b29626cbf7b5be95193339243307bf010cc1def88a50c92",
          "attributes": "",
          "items": [
            {
              "name": "agent::AgentContext",
              "kind": "struct_item",
              "signature": "pub struct AgentContext {\n/// Agent identity performing the operation\n\npub agent_identity: Identity,\n/// Organization identity the agent belongs to\n\npub organization_identity: Identity,\n/// Agent capabilities\n\npub capabilities: Vec<String>\n}",
              "docs": "Agent context for file operations",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "agent::AgentContext::new",
              "kind": "function_item",
              "signature": "pub fn new(agent_identity: Identity, organization_identity: Identity) -> Self;",
              "docs": "Create a new agent context",
              "attributes": "",
              "line": 26
            },
            {
              "name": "agent::AgentContext::verify_organization",
              "kind": "function_item",
              "signature": "pub async fn verify_organization(\n        &self,\n        org_identity: &Identity,\n        _adapter: &Arc<dyn WeaveIdentityAdapter>,\n    ) -> Result<()>;",
              "docs": "Check if agent belongs to organization using the adapter",
              "attributes": "#[allow(dead_code)]",
              "line": 36
            },
            {
              "name": "agent::AgentContext::has_capability",
              "kind": "function_item",
              "signature": "pub fn has_capability(&self, capability: &str) -> bool;",
              "docs": "Check if agent has capability",
              "attributes": "#[allow(dead_code)]",
              "line": 55
            },
            {
              "name": "agent::AgentContext::add_capability",
              "kind": "function_item",
              "signature": "pub fn add_capability(&mut self, capability: String);",
              "docs": "Add capability to agent",
              "attributes": "#[allow(dead_code)]",
              "line": 61
            },
            {
              "name": "agent::AgentContext::remote_locus",
              "kind": "function_item",
              "signature": "pub fn remote_locus(&self) -> Result<std::sync::Arc<locus::Locus>>;",
              "docs": "Remote Locus networking is not wired in this build \u2014 fail-closed.\nCallers must not treat a missing handle as \"not connected yet\"; it is Unsupported.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "agent::AgentRegistry",
              "kind": "struct_item",
              "signature": "pub struct AgentRegistry {\n\n}",
              "docs": "Agent registry for tracking active agents",
              "attributes": "#[derive(Debug, Default)]",
              "line": 76
            },
            {
              "name": "agent::AgentRegistry::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new agent registry",
              "attributes": "",
              "line": 83
            },
            {
              "name": "agent::AgentRegistry::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, context: AgentContext);",
              "docs": "Register an agent",
              "attributes": "",
              "line": 88
            },
            {
              "name": "agent::AgentRegistry::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, agent_identity: &Identity) -> Option<&AgentContext>;",
              "docs": "Get agent context by identity",
              "attributes": "#[allow(dead_code)]",
              "line": 95
            },
            {
              "name": "agent::AgentRegistry::unregister",
              "kind": "function_item",
              "signature": "pub fn unregister(&mut self, agent_identity: &Identity) -> Option<AgentContext>;",
              "docs": "Remove agent",
              "attributes": "#[allow(dead_code)]",
              "line": 101
            },
            {
              "name": "agent::AgentRegistry::list_agents",
              "kind": "function_item",
              "signature": "pub fn list_agents(&self) -> Vec<&Identity>;",
              "docs": "List all registered agent identities",
              "attributes": "#[allow(dead_code)]",
              "line": 107
            },
            {
              "name": "agent::AgentRegistry::is_registered",
              "kind": "function_item",
              "signature": "pub fn is_registered(&self, agent_identity: &Identity) -> bool;",
              "docs": "Check if agent is registered",
              "attributes": "#[allow(dead_code)]",
              "line": 116
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/local/agentfs/src/config.rs",
          "sha256": "44ac6b171255f12f70c219b5e2c9374091f0cc9fd8cea59236ff56c1fbf2f0d6",
          "attributes": "",
          "items": [
            {
              "name": "config::AtomicMode",
              "kind": "enum_item",
              "signature": "pub enum AtomicMode {\n    /// No atomic operations\n    Disabled,\n    /// Use temporary files for atomic writes\n    #[default]\n    TempFile,\n    /// Use rename operations for atomicity\n    Rename,\n}",
              "docs": "Atomic operation mode",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]",
              "line": 8
            },
            {
              "name": "config::AgentFSConfig",
              "kind": "struct_item",
              "signature": "pub struct AgentFSConfig {\n/// Follow symbolic links when reading\n\npub follow_links: bool,\n/// Follow external symbolic links (outside root)\n\npub follow_external_links: bool,\n/// Enable atomic operations\n\npub atomic_mode: AtomicMode,\n/// Enable metadata storage\n\npub enable_metadata: bool,\n/// Metadata storage path (relative to root)\n\npub metadata_dir: PathBuf,\n/// Default file permissions\n\npub default_file_mode: u32,\n/// Default directory permissions\n\npub default_dir_mode: u32,\n/// Enable file watching\n\npub enable_watch: bool,\n/// Maximum symlink recursion depth\n\npub max_symlink_depth: usize,\n/// Ignore patterns for listing operations\n\npub ignore_patterns: Vec<String>,\n/// Enable content hashing for deduplication detection\n\npub enable_content_hash: bool,\n/// Buffer size for file operations\n\npub buffer_size: usize,\n/// Enable sync with remote Locus\n\npub enable_sync: bool\n}",
              "docs": "Configuration for AgentFS",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "config::AgentFSConfig::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new configuration with custom root",
              "attributes": "",
              "line": 87
            },
            {
              "name": "config::AgentFSConfig::with_follow_links",
              "kind": "function_item",
              "signature": "pub fn with_follow_links(mut self, follow: bool) -> Self;",
              "docs": "Set follow links mode",
              "attributes": "",
              "line": 92
            },
            {
              "name": "config::AgentFSConfig::with_atomic_mode",
              "kind": "function_item",
              "signature": "pub fn with_atomic_mode(mut self, mode: AtomicMode) -> Self;",
              "docs": "Set atomic operation mode",
              "attributes": "",
              "line": 98
            },
            {
              "name": "config::AgentFSConfig::with_ignore_pattern",
              "kind": "function_item",
              "signature": "pub fn with_ignore_pattern(mut self, pattern: String) -> Self;",
              "docs": "Add ignore pattern",
              "attributes": "",
              "line": 104
            }
          ],
          "parseErrors": false
        },
        {
          "module": "entry",
          "source": "sigil/weave/local/agentfs/src/entry.rs",
          "sha256": "7c5927eb890cf4952c9d96e2ce28b214d36941ef8758cccd588b49a06c2ec4a2",
          "attributes": "",
          "items": [
            {
              "name": "entry::LocalEntry",
              "kind": "struct_item",
              "signature": "pub struct LocalEntry {\n/// File path (relative to root)\n\npub path: PathBuf,\n/// Entry type\n\npub entry_type: EntryType,\n/// File metadata\n\npub metadata: LocalMetadata,\n/// Owner agent identity\n\npub owner_agent: Identity,\n/// Creation time\n\npub created_at: SystemTime,\n/// Last modification time\n\npub modified_at: SystemTime,\n/// File size (for regular files)\n\npub size: Option<u64>,\n/// Content hash (for regular files)\n\npub content_hash: Option<String>,\n/// Symlink target (for symlinks)\n\npub link_target: Option<PathBuf>\n}",
              "docs": "Local file entry with agent ownership",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "entry::LocalMetadata",
              "kind": "struct_item",
              "signature": "pub struct LocalMetadata {\n/// POSIX permissions\n\npub mode: u32,\n/// Whether file is executable\n\npub executable: bool,\n/// MIME type\n\npub mime_type: Option<String>,\n/// Custom metadata\n\npub custom: Option<serde_json::Value>,\n/// Agent-specific metadata\n\npub agent_metadata: Option<serde_json::Value>\n}",
              "docs": "Local metadata storage",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "entry::LocalEntry::new_file",
              "kind": "function_item",
              "signature": "pub fn new_file(path: PathBuf, owner_agent: Identity, size: u64, mode: u32) -> Self;",
              "docs": "Create a new file entry",
              "attributes": "",
              "line": 61
            },
            {
              "name": "entry::LocalEntry::new_directory",
              "kind": "function_item",
              "signature": "pub fn new_directory(path: PathBuf, owner_agent: Identity, mode: u32) -> Self;",
              "docs": "Create a new directory entry",
              "attributes": "",
              "line": 82
            },
            {
              "name": "entry::LocalEntry::new_symlink",
              "kind": "function_item",
              "signature": "pub fn new_symlink(path: PathBuf, owner_agent: Identity, target: PathBuf, mode: u32) -> Self;",
              "docs": "Create a new symlink entry",
              "attributes": "",
              "line": 103
            },
            {
              "name": "entry::LocalEntry::to_locus_metadata",
              "kind": "function_item",
              "signature": "pub fn to_locus_metadata(&self) -> FileMetadata;",
              "docs": "Convert to Locus-compatible FileMetadata",
              "attributes": "",
              "line": 124
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/local/agentfs/src/error.rs",
          "sha256": "d2046a61195ab653a02764d1263c054bdea066fe4516b9e4ff6f043c20670e35",
          "attributes": "",
          "items": [
            {
              "name": "error::AgentFSError",
              "kind": "enum_item",
              "signature": "pub enum AgentFSError {\n    #[error(\"File not found: {0}\")]\n    FileNotFound(PathBuf),\n\n    #[error(\"Directory not found: {0}\")]\n    DirectoryNotFound(PathBuf),\n\n    #[error(\"Path already exists: {0}\")]\n    AlreadyExists(PathBuf),\n\n    #[error(\"Not a directory: {0}\")]\n    NotADirectory(PathBuf),\n\n    #[error(\"Not a file: {0}\")]\n    NotAFile(PathBuf),\n\n    #[error(\"Directory not empty: {0}\")]\n    DirectoryNotEmpty(PathBuf),\n\n    #[error(\"Invalid path: {0}\")]\n    InvalidPath(String),\n\n    #[error(\"Permission denied: agent {agent} cannot {permission} on {path}\")]\n    PermissionDenied {\n        agent: String,\n        path: String,\n        permission: String,\n    },\n\n    #[error(\"Symlink loop detected at: {0}\")]\n    SymlinkLoop(PathBuf),\n\n    #[error(\"Agent not authorized: {0}\")]\n    AgentNotAuthorized(String),\n\n    #[error(\"Organization mismatch: expected {expected}, got {actual}\")]\n    OrganizationMismatch { expected: String, actual: String },\n\n    #[error(\"Metadata error: {0}\")]\n    MetadataError(String),\n\n    #[error(\"Sync error: {0}\")]\n    SyncError(String),\n\n    #[error(\"Watch error: {0}\")]\n    WatchError(String),\n\n    #[error(\"Atomic operation error: {0}\")]\n    AtomicError(String),\n\n    #[error(\"Invalid symlink target: {0}\")]\n    InvalidSymlink(String),\n\n    #[error(\"External symlink not allowed: {0}\")]\n    ExternalSymlinkNotAllowed(PathBuf),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    #[error(\"Locus compatibility error: {0}\")]\n    LocusCompat(#[from] LocusError),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] StrandError),\n\n    #[error(\"Walk directory error: {0}\")]\n    WalkDir(#[from] walkdir::Error),\n\n    #[error(\"Notify error: {0}\")]\n    Notify(#[from] notify::Error),\n\n    #[error(\"Identity error: {0}\")]\n    IdentityError(String),\n\n    #[error(\"Sync in progress: {0}\")]\n    SyncInProgress(PathBuf),\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n}",
              "docs": "Errors that can occur during AgentFS operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 10
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, AgentFSError>;",
              "docs": "Result type for AgentFS operations",
              "attributes": "",
              "line": 95
            },
            {
              "name": "error::AgentFSError::is_not_found",
              "kind": "function_item",
              "signature": "pub fn is_not_found(&self) -> bool;",
              "docs": "Check if this error represents a \"not found\" condition",
              "attributes": "",
              "line": 99
            },
            {
              "name": "error::AgentFSError::is_permission_denied",
              "kind": "function_item",
              "signature": "pub fn is_permission_denied(&self) -> bool;",
              "docs": "Check if this error represents a permission issue",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "fs",
          "source": "sigil/weave/local/agentfs/src/fs.rs",
          "sha256": "5b1c11ce16fb37a7c0115cf785e9e30cd93e75c5f97a8092f476af4b84984254",
          "attributes": "",
          "items": [
            {
              "name": "fs::AgentFS",
              "kind": "struct_item",
              "signature": "pub struct AgentFS {\n\n}",
              "docs": "AgentFS - Local file system with agent-based ownership",
              "attributes": "",
              "line": 31
            },
            {
              "name": "fs::AgentFS::new",
              "kind": "function_item",
              "signature": "pub async fn new(\n        root: impl AsRef<Path>,\n        config: AgentFSConfig,\n        agent_identity: Identity,\n        organization_identity: Identity,\n        identity_adapter: std::sync::Arc<dyn WeaveIdentityAdapter>,\n    ) -> Result<Self>;",
              "docs": "Create a new AgentFS instance",
              "attributes": "",
              "line": 89
            },
            {
              "name": "fs::AgentFS::root",
              "kind": "function_item",
              "signature": "pub fn root(&self) -> &Path;",
              "docs": "Get the root directory path",
              "attributes": "",
              "line": 155
            },
            {
              "name": "fs::AgentFS::agent_identity",
              "kind": "function_item",
              "signature": "pub fn agent_identity(&self) -> &Identity;",
              "docs": "Get the managing agent identity",
              "attributes": "",
              "line": 160
            },
            {
              "name": "fs::AgentFS::organization_identity",
              "kind": "function_item",
              "signature": "pub fn organization_identity(&self) -> &Identity;",
              "docs": "Get the organization identity",
              "attributes": "",
              "line": 165
            },
            {
              "name": "fs::AgentFS::identity_adapter",
              "kind": "function_item",
              "signature": "pub fn identity_adapter(&self) -> &std::sync::Arc<dyn WeaveIdentityAdapter>;",
              "docs": "Get the identity adapter",
              "attributes": "",
              "line": 170
            },
            {
              "name": "fs::AgentFS::set_metadata_schema",
              "kind": "function_item",
              "signature": "pub fn set_metadata_schema(&self, schema: &Value) -> Result<()>;",
              "docs": "Set metadata JSON schema for validation",
              "attributes": "",
              "line": 175
            },
            {
              "name": "fs::AgentFS::put_metadata",
              "kind": "function_item",
              "signature": "pub async fn put_metadata(&self, path: impl AsRef<Path>, value: Value) -> Result<()>;",
              "docs": "Put metadata with optional schema validation",
              "attributes": "",
              "line": 182
            },
            {
              "name": "fs::AgentFS::get_metadata",
              "kind": "function_item",
              "signature": "pub async fn get_metadata(&self, path: impl AsRef<Path>) -> Result<Option<Value>>;",
              "docs": "Get metadata value for a path",
              "attributes": "",
              "line": 195
            },
            {
              "name": "fs::AgentFS::read_file",
              "kind": "function_item",
              "signature": "pub async fn read_file(&self, path: impl AsRef<Path>) -> Result<Bytes>;",
              "docs": "Read a file",
              "attributes": "",
              "line": 280
            },
            {
              "name": "fs::AgentFS::write_file",
              "kind": "function_item",
              "signature": "pub async fn write_file(&self, path: impl AsRef<Path>, content: &[u8]) -> Result<()>;",
              "docs": "Write a file",
              "attributes": "",
              "line": 306
            },
            {
              "name": "fs::AgentFS::mkdir",
              "kind": "function_item",
              "signature": "pub async fn mkdir(&self, path: impl AsRef<Path>, recursive: bool) -> Result<()>;",
              "docs": "Create a directory",
              "attributes": "",
              "line": 357
            },
            {
              "name": "fs::AgentFS::readdir",
              "kind": "function_item",
              "signature": "pub async fn readdir(&self, path: impl AsRef<Path>) -> Result<Vec<String>>;",
              "docs": "List directory contents",
              "attributes": "",
              "line": 385
            },
            {
              "name": "fs::AgentFS::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, path: impl AsRef<Path>) -> Result<()>;",
              "docs": "Delete a file or directory",
              "attributes": "",
              "line": 423
            },
            {
              "name": "fs::AgentFS::exists",
              "kind": "function_item",
              "signature": "pub async fn exists(&self, path: impl AsRef<Path>) -> Result<bool>;",
              "docs": "Check if path exists",
              "attributes": "",
              "line": 454
            },
            {
              "name": "fs::AgentFS::stat",
              "kind": "function_item",
              "signature": "pub async fn stat(&self, path: impl AsRef<Path>) -> Result<LocalEntry>;",
              "docs": "Get file/directory metadata",
              "attributes": "",
              "line": 461
            },
            {
              "name": "fs::AgentFS::symlink",
              "kind": "function_item",
              "signature": "pub async fn symlink(&self, path: impl AsRef<Path>, target: impl AsRef<Path>) -> Result<()>;",
              "docs": "Create a symbolic link",
              "attributes": "",
              "line": 512
            },
            {
              "name": "fs::AgentFS::read_file_streamed",
              "kind": "function_item",
              "signature": "pub async fn read_file_streamed<W>(&self, path: impl AsRef<Path>, mut writer: W) -> Result<u64>\n    where\n        W: tokio::io::AsyncWrite + Unpin + Send,;",
              "docs": "Stream read a file with backpressure via provided writer",
              "attributes": "",
              "line": 586
            },
            {
              "name": "fs::AgentFS::write_file_streamed",
              "kind": "function_item",
              "signature": "pub async fn write_file_streamed<R>(&self, path: impl AsRef<Path>, mut reader: R) -> Result<u64>\n    where\n        R: tokio::io::AsyncRead + Unpin + Send,;",
              "docs": "Stream write a file with backpressure from provided reader",
              "attributes": "",
              "line": 616
            },
            {
              "name": "fs::AgentFS::readdir_paged",
              "kind": "function_item",
              "signature": "pub async fn readdir_paged(\n        &self,\n        path: impl AsRef<Path>,\n        page: usize,\n        page_size: usize,\n    ) -> Result<Vec<String>>;",
              "docs": "Paged directory listing with ignore patterns",
              "attributes": "",
              "line": 653
            },
            {
              "name": "fs::AgentFS::metrics",
              "kind": "function_item",
              "signature": "pub fn metrics(&self) -> FsMetrics;",
              "docs": "Export simple telemetry metrics",
              "attributes": "",
              "line": 669
            },
            {
              "name": "fs::AgentFS::fsck_scan",
              "kind": "function_item",
              "signature": "pub async fn fsck_scan(&self) -> Result<FsckReport>;",
              "docs": "fsck: scan for basic inconsistencies between metadata store and filesystem",
              "attributes": "",
              "line": 680
            },
            {
              "name": "fs::AgentFS::sync",
              "kind": "function_item",
              "signature": "pub async fn sync(&self, local: &Path, remote: &Path, options: SyncOptions) -> Result<()>;",
              "docs": "Sync with remote Locus (transactional preview/apply)",
              "attributes": "",
              "line": 714
            },
            {
              "name": "fs::FsMetrics",
              "kind": "struct_item",
              "signature": "pub struct FsMetrics {\npub files_read: u64,\npub files_written: u64,\npub dirs_listed: u64,\npub bytes_read: u64,\npub bytes_written: u64\n}",
              "docs": "Simple metrics snapshot for AgentFS",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 734
            },
            {
              "name": "fs::FsckReport",
              "kind": "struct_item",
              "signature": "pub struct FsckReport {\npub missing_entries: Vec<PathBuf>,\npub stale_metadata: Vec<PathBuf>\n}",
              "docs": "Basic fsck report",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 744
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metadata",
          "source": "sigil/weave/local/agentfs/src/metadata.rs",
          "sha256": "980c7dfd43efddc509dd76db632dd3e0c9d48e10b9405ebab14f1443808494c0",
          "attributes": "",
          "items": [
            {
              "name": "metadata::MetadataValidator",
              "kind": "struct_item",
              "signature": "pub struct MetadataValidator {\n\n}",
              "docs": "JSON Schema validator for metadata",
              "attributes": "",
              "line": 15
            },
            {
              "name": "metadata::MetadataValidator::new",
              "kind": "function_item",
              "signature": "pub fn new(schema: &serde_json::Value) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "metadata::MetadataValidator::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, value: &serde_json::Value) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "metadata::MetadataStore",
              "kind": "trait_item",
              "signature": "pub trait MetadataStore: Send + Sync {\n    /// Get metadata for a path\n    async fn get(&self, path: &Path) -> Result<Option<Value>>;\n\n    /// Put metadata for a path\n    async fn put(&self, path: &Path, value: Value) -> Result<()>;\n\n    /// Delete metadata for a path\n    async fn del(&self, path: &Path) -> Result<()>;\n\n    /// List all metadata keys\n    async fn list(&self) -> Result<Vec<PathBuf>>;\n}",
              "docs": "Metadata storage trait",
              "attributes": "#[async_trait]",
              "line": 41
            },
            {
              "name": "metadata::MemoryMetadataStore",
              "kind": "struct_item",
              "signature": "pub struct MemoryMetadataStore {\n\n}",
              "docs": "In-memory metadata store",
              "attributes": "#[derive(Debug, Default)]",
              "line": 57
            },
            {
              "name": "metadata::MemoryMetadataStore::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "metadata::MetadataHooks",
              "kind": "struct_item",
              "signature": "pub struct MetadataHooks {\n/// Get hook\n\npub get: Option<MetadataGetHook>,\n/// Put hook\n\npub put: Option<MetadataPutHook>,\n/// Delete hook\n\npub del: Option<MetadataDeleteHook>\n}",
              "docs": "Metadata hooks for custom metadata handling",
              "attributes": "#[derive(Default)]",
              "line": 94
            },
            {
              "name": "metadata::MetadataHooks::from_map",
              "kind": "function_item",
              "signature": "pub fn from_map(map: std::sync::Arc<tokio::sync::RwLock<HashMap<PathBuf, Value>>>) -> Self;",
              "docs": "Create hooks from a HashMap",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "permissions",
          "source": "sigil/weave/local/agentfs/src/permissions.rs",
          "sha256": "118efaaafca9273864ece4fbf326540cb47459233d12dbe8cd3a99ce081ea026",
          "attributes": "",
          "items": [
            {
              "name": "permissions::Permission",
              "kind": "enum_item",
              "signature": "pub enum Permission {\n    Read,\n    Write,\n    Execute,\n    Delete,\n    Admin,\n}",
              "docs": "Permission types",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "permissions::AgentPermission",
              "kind": "struct_item",
              "signature": "pub struct AgentPermission {\n/// Agent identity\n\npub agent_identity: Identity,\n/// Granted permissions\n\npub permissions: Vec<Permission>,\n/// Path pattern (glob)\n\npub path_pattern: String\n}",
              "docs": "Agent permission entry",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "permissions::AgentPermission::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        agent_identity: Identity,\n        permissions: Vec<Permission>,\n        path_pattern: String,\n    ) -> Self;",
              "docs": "Create new permission entry",
              "attributes": "",
              "line": 35
            },
            {
              "name": "permissions::AgentPermission::has_permission",
              "kind": "function_item",
              "signature": "pub fn has_permission(&self, permission: Permission) -> bool;",
              "docs": "Check if permission is granted",
              "attributes": "",
              "line": 48
            },
            {
              "name": "permissions::AgentPermission::matches_path",
              "kind": "function_item",
              "signature": "pub fn matches_path(&self, path: &Path) -> bool;",
              "docs": "Check if path matches pattern",
              "attributes": "",
              "line": 53
            },
            {
              "name": "permissions::PermissionChecker",
              "kind": "struct_item",
              "signature": "pub struct PermissionChecker {\n\n}",
              "docs": "Permission checker for file operations",
              "attributes": "#[derive(Debug, Default)]",
              "line": 74
            },
            {
              "name": "permissions::PermissionChecker::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create new permission checker",
              "attributes": "",
              "line": 81
            },
            {
              "name": "permissions::PermissionChecker::add_permission",
              "kind": "function_item",
              "signature": "pub fn add_permission(&mut self, permission: AgentPermission);",
              "docs": "Add permission entry",
              "attributes": "",
              "line": 86
            },
            {
              "name": "permissions::PermissionChecker::check_permission",
              "kind": "function_item",
              "signature": "pub fn check_permission(\n        &self,\n        agent_identity: &Identity,\n        path: &Path,\n        permission: Permission,\n    ) -> Result<()>;",
              "docs": "Check if agent has permission for path",
              "attributes": "",
              "line": 91
            },
            {
              "name": "permissions::PermissionChecker::check_ownership",
              "kind": "function_item",
              "signature": "pub fn check_ownership(&self, agent_identity: &Identity, entry: &LocalEntry) -> Result<()>;",
              "docs": "Check if agent owns entry",
              "attributes": "",
              "line": 117
            }
          ],
          "parseErrors": false
        },
        {
          "module": "sync",
          "source": "sigil/weave/local/agentfs/src/sync.rs",
          "sha256": "34c987d62d373f621865f8b0e194b6cdce420408be553caf2d00fe4f9db7af13",
          "attributes": "",
          "items": [
            {
              "name": "sync::SyncDirection",
              "kind": "enum_item",
              "signature": "pub enum SyncDirection {\n    /// Push from AgentFS to Locus\n    Push,\n    /// Pull from Locus to AgentFS\n    Pull,\n    /// Bidirectional sync\n    Bidirectional,\n}",
              "docs": "Sync direction",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 15
            },
            {
              "name": "sync::SyncOptions",
              "kind": "struct_item",
              "signature": "pub struct SyncOptions {\n/// Sync direction\n\npub direction: SyncDirection,\n/// Delete files not in source\n\npub delete: bool,\n/// Follow symlinks\n\npub follow_links: bool,\n/// Ignore patterns\n\npub ignore_patterns: Vec<String>,\n/// Preview only (don't actually sync). Use `apply=true` to perform changes.\n\npub preview: bool,\n/// Apply changes (if false and preview=false, defaults to safe preview)\n\npub apply: bool,\n/// Progress callback\n\n#[serde(skip)]\npub progress_callback: Option<std::sync::Arc<dyn Fn(SyncProgress) + Send + Sync>>,\n/// Maximum number of concurrent sync operations\n\npub concurrency: usize\n}",
              "docs": "Sync options",
              "attributes": "#[derive(Clone, Serialize, Deserialize)]\n#[serde(default)]",
              "line": 27
            },
            {
              "name": "sync::SyncProgress",
              "kind": "struct_item",
              "signature": "pub struct SyncProgress {\n/// Current file being synced\n\npub current_file: PathBuf,\n/// Total files to sync\n\npub total_files: usize,\n/// Files synced so far\n\npub synced_files: usize,\n/// Bytes transferred\n\npub bytes_transferred: u64\n}",
              "docs": "Sync progress information",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 88
            },
            {
              "name": "sync::SyncManager",
              "kind": "struct_item",
              "signature": "pub struct SyncManager {\n\n}",
              "docs": "Sync manager for AgentFS",
              "attributes": "",
              "line": 103
            },
            {
              "name": "sync::SyncManager::new",
              "kind": "function_item",
              "signature": "pub fn new(agent_identity: Identity) -> Self;",
              "docs": "Create a new sync manager",
              "attributes": "",
              "line": 114
            },
            {
              "name": "sync::SyncManager::connect",
              "kind": "function_item",
              "signature": "pub async fn connect(&mut self, locus: Arc<Locus>) -> Result<()>;",
              "docs": "Connect to remote Locus",
              "attributes": "",
              "line": 122
            },
            {
              "name": "sync::SyncManager::disconnect",
              "kind": "function_item",
              "signature": "pub fn disconnect(&mut self);",
              "docs": "Disconnect from remote Locus",
              "attributes": "",
              "line": 128
            },
            {
              "name": "sync::SyncManager::is_connected",
              "kind": "function_item",
              "signature": "pub fn is_connected(&self) -> bool;",
              "docs": "Check if connected",
              "attributes": "",
              "line": 133
            },
            {
              "name": "sync::SyncManager::sync",
              "kind": "function_item",
              "signature": "pub async fn sync(\n        &self,\n        local_path: &Path,\n        remote_path: &Path,\n        options: SyncOptions,\n    ) -> Result<()>;",
              "docs": "Perform sync operation",
              "attributes": "",
              "line": 138
            }
          ],
          "parseErrors": false
        },
        {
          "module": "watcher",
          "source": "sigil/weave/local/agentfs/src/watcher.rs",
          "sha256": "b0bc3e6719c3464d5698229c5f8d2203e343498295cb44d6a540890a782aea41",
          "attributes": "",
          "items": [
            {
              "name": "watcher::WatchEvent",
              "kind": "enum_item",
              "signature": "pub enum WatchEvent {\n    /// File created\n    Created(PathBuf),\n\n    /// File modified\n    Modified(PathBuf),\n\n    /// File deleted\n    Deleted(PathBuf),\n\n    /// File renamed\n    Renamed { from: PathBuf, to: PathBuf },\n\n    /// Directory created\n    DirCreated(PathBuf),\n\n    /// Directory deleted\n    DirDeleted(PathBuf),\n}",
              "docs": "Watch event types",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 12
            },
            {
              "name": "watcher::FSWatcher",
              "kind": "struct_item",
              "signature": "pub struct FSWatcher {\n\n}",
              "docs": "File system watcher",
              "attributes": "",
              "line": 33
            },
            {
              "name": "watcher::FSWatcher::new",
              "kind": "function_item",
              "signature": "pub fn new(root: PathBuf) -> Result<Self>;",
              "docs": "Create a new file system watcher",
              "attributes": "",
              "line": 49
            },
            {
              "name": "watcher::FSWatcher::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> Uuid;",
              "docs": "Get watcher ID",
              "attributes": "",
              "line": 101
            },
            {
              "name": "watcher::FSWatcher::root",
              "kind": "function_item",
              "signature": "pub fn root(&self) -> &Path;",
              "docs": "Get root path",
              "attributes": "",
              "line": 106
            },
            {
              "name": "watcher::FSWatcher::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&mut self) -> Option<WatchEvent>;",
              "docs": "Receive next event",
              "attributes": "",
              "line": 111
            },
            {
              "name": "watcher::FSWatcher::try_recv",
              "kind": "function_item",
              "signature": "pub fn try_recv(&mut self) -> Option<WatchEvent>;",
              "docs": "Try to receive event without blocking",
              "attributes": "",
              "line": 116
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-agentfs-diff",
      "version": "0.1.0",
      "source": "sigil/weave/local/agentfs-diff",
      "manifestSha256": "8f55fb7487b610d5df8bab91482d6bb6f3222cdbd0ee3bb1cfa910df5392ab91",
      "features": {
        "default": [],
        "mock": [],
        "watch": [
          "agentfs-watch"
        ]
      },
      "publish": true,
      "url": "/reference/rust/weave-agentfs-diff",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/local/agentfs-diff/src/lib.rs",
          "sha256": "f613b56ada6fbd1cfe36c1a978b68daaaf04dfc5f5e35d96f87ea99491efbc36",
          "attributes": "",
          "items": [
            {
              "name": "pub use comparison::{FileSystem, FileSystemType};",
              "kind": "use_declaration",
              "signature": "pub use comparison::{FileSystem, FileSystemType};",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "pub use diff::{Diff, DiffDetails, DiffKind, FileDiff, MetadataDiff};",
              "kind": "use_declaration",
              "signature": "pub use diff::{Diff, DiffDetails, DiffKind, FileDiff, MetadataDiff};",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "pub use engine::{ComparisonMode, DiffEngine, DiffOptions};",
              "kind": "use_declaration",
              "signature": "pub use engine::{ComparisonMode, DiffEngine, DiffOptions};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use error::{DiffError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{DiffError, Result};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use stream::{DiffEvent, DiffStream};",
              "kind": "use_declaration",
              "signature": "pub use stream::{DiffEvent, DiffStream};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use watcher::{DiffWatcher, WatchOptions};",
              "kind": "use_declaration",
              "signature": "pub use watcher::{DiffWatcher, WatchOptions};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use chrono::DateTime;",
              "kind": "use_declaration",
              "signature": "pub use chrono::DateTime;",
              "docs": "",
              "attributes": "",
              "line": 60
            }
          ],
          "parseErrors": false
        },
        {
          "module": "comparison",
          "source": "sigil/weave/local/agentfs-diff/src/comparison.rs",
          "sha256": "edb061c2c6e3131d50bfa3dff833363a9935ce5db1e4b79e9357863ec56e7208",
          "attributes": "",
          "items": [
            {
              "name": "comparison::FileSystemType",
              "kind": "enum_item",
              "signature": "pub enum FileSystemType {\n    /// Local AgentFS\n    AgentFS,\n    /// Remote Locus\n    Locus,\n    /// Generic/Unknown\n    Generic,\n}",
              "docs": "Type of file system",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "comparison::EntryInfo",
              "kind": "struct_item",
              "signature": "pub struct EntryInfo {\n/// Entry path\n\npub path: String,\n/// Entry type (file, directory, symlink)\n\npub entry_type: EntryType,\n/// Size (for files)\n\npub size: Option<u64>,\n/// Owner agent identity\n\npub owner: Identity,\n/// Modification time\n\npub mtime: Option<std::time::SystemTime>,\n/// Permissions\n\npub mode: Option<u32>,\n/// Symlink target\n\npub link_target: Option<String>\n}",
              "docs": "Entry information for comparison",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 23
            },
            {
              "name": "comparison::EntryType",
              "kind": "enum_item",
              "signature": "pub enum EntryType {\n    File,\n    Directory,\n    Symlink,\n}",
              "docs": "Entry type",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 42
            },
            {
              "name": "comparison::FileSystem",
              "kind": "trait_item",
              "signature": "pub trait FileSystem: Send + Sync {\n    /// Get file system type\n    fn fs_type(&self) -> FileSystemType;\n\n    /// Get managing agent identity\n    fn agent_identity(&self) -> &Identity;\n\n    /// List entries in a directory\n    async fn list_entries(&self, path: &Path) -> Result<Vec<EntryInfo>>;\n\n    /// Get entry information\n    async fn get_entry(&self, path: &Path) -> Result<Option<EntryInfo>>;\n\n    /// Read file content\n    async fn read_content(&self, path: &Path) -> Result<Bytes>;\n\n    /// Write file content\n    async fn write_content(&self, path: &Path, content: Bytes) -> Result<()>;\n\n    /// Delete a path\n    async fn delete(&self, path: &Path) -> Result<()>;\n\n    /// Calculate content hash\n    async fn content_hash(&self, path: &Path) -> Result<String>;\n}",
              "docs": "Trait for file system operations needed for comparison",
              "attributes": "#[async_trait]",
              "line": 50
            },
            {
              "name": "comparison::AgentFSWrapper",
              "kind": "struct_item",
              "signature": "pub struct AgentFSWrapper {\n\n}",
              "docs": "Wrapper for AgentFS to implement FileSystem trait",
              "attributes": "#[allow(dead_code)]",
              "line": 78
            }
          ],
          "parseErrors": false
        },
        {
          "module": "diff",
          "source": "sigil/weave/local/agentfs-diff/src/diff.rs",
          "sha256": "85189316d858f9e3f817333fcaeeebc97d467b158b83c28bbea2c89ed20c26e5",
          "attributes": "",
          "items": [
            {
              "name": "diff::DiffKind",
              "kind": "enum_item",
              "signature": "pub enum DiffKind {\n    /// File/directory added in target\n    Added,\n    /// File/directory modified\n    Modified,\n    /// File/directory deleted from source\n    Deleted,\n    /// File/directory moved/renamed\n    Moved,\n    /// Metadata changed only\n    MetadataOnly,\n    /// Content changed only\n    ContentOnly,\n}",
              "docs": "Kind of difference between files/directories",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "diff::Diff",
              "kind": "struct_item",
              "signature": "pub struct Diff {\n/// Path in source file system\n\npub source_path: Option<PathBuf>,\n/// Path in target file system\n\npub target_path: Option<PathBuf>,\n/// Kind of difference\n\npub kind: DiffKind,\n/// Detailed diff information\n\npub details: DiffDetails,\n/// Timestamp when diff was detected\n\npub timestamp: DateTime<Utc>\n}",
              "docs": "A single difference between two file systems",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 27
            },
            {
              "name": "diff::DiffDetails",
              "kind": "enum_item",
              "signature": "pub enum DiffDetails {\n    /// File difference details\n    File(FileDiff),\n    /// Directory difference details\n    Directory(DirectoryDiff),\n    /// Symlink difference details\n    Symlink(SymlinkDiff),\n}",
              "docs": "Detailed information about a difference",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "diff::FileDiff",
              "kind": "struct_item",
              "signature": "pub struct FileDiff {\n/// Size in source\n\npub source_size: Option<u64>,\n/// Size in target\n\npub target_size: Option<u64>,\n/// Content hash in source\n\npub source_hash: Option<String>,\n/// Content hash in target\n\npub target_hash: Option<String>,\n/// Metadata differences\n\npub metadata_diff: Option<MetadataDiff>\n}",
              "docs": "File-specific diff information",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 57
            },
            {
              "name": "diff::DirectoryDiff",
              "kind": "struct_item",
              "signature": "pub struct DirectoryDiff {\n/// Number of entries in source\n\npub source_entries: Option<usize>,\n/// Number of entries in target\n\npub target_entries: Option<usize>,\n/// Metadata differences\n\npub metadata_diff: Option<MetadataDiff>\n}",
              "docs": "Directory-specific diff information",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 76
            },
            {
              "name": "diff::SymlinkDiff",
              "kind": "struct_item",
              "signature": "pub struct SymlinkDiff {\n/// Target in source\n\npub source_target: Option<PathBuf>,\n/// Target in target\n\npub target_target: Option<PathBuf>\n}",
              "docs": "Symlink-specific diff information",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 89
            },
            {
              "name": "diff::MetadataDiff",
              "kind": "struct_item",
              "signature": "pub struct MetadataDiff {\n/// Permission differences\n\npub permissions_changed: bool,\n/// Owner agent changed\n\npub owner_changed: bool,\n/// Source owner identity\n\npub source_owner: Option<Identity>,\n/// Target owner identity\n\npub target_owner: Option<Identity>,\n/// Modified time changed\n\npub mtime_changed: bool,\n/// Source modified time\n\npub source_mtime: Option<DateTime<Utc>>,\n/// Target modified time\n\npub target_mtime: Option<DateTime<Utc>>\n}",
              "docs": "Metadata differences",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 99
            },
            {
              "name": "diff::Diff::path",
              "kind": "function_item",
              "signature": "pub fn path(&self) -> &PathBuf;",
              "docs": "Get the primary path for this diff",
              "attributes": "",
              "line": 124
            },
            {
              "name": "diff::Diff::is_content_change",
              "kind": "function_item",
              "signature": "pub fn is_content_change(&self) -> bool;",
              "docs": "Check if this is a content change",
              "attributes": "",
              "line": 132
            },
            {
              "name": "diff::Diff::is_metadata_only",
              "kind": "function_item",
              "signature": "pub fn is_metadata_only(&self) -> bool;",
              "docs": "Check if this is a metadata-only change",
              "attributes": "",
              "line": 137
            }
          ],
          "parseErrors": false
        },
        {
          "module": "engine",
          "source": "sigil/weave/local/agentfs-diff/src/engine.rs",
          "sha256": "2206821012bcc123f528fd1f4df821038e3cc634352d47284bf6f5195055a94b",
          "attributes": "",
          "items": [
            {
              "name": "engine::ComparisonMode",
              "kind": "enum_item",
              "signature": "pub enum ComparisonMode {\n    /// Fast comparison (size and mtime only)\n    Fast,\n    /// Content comparison (hash files)\n    Content,\n    /// Full comparison (content + metadata)\n    Full,\n}",
              "docs": "Comparison mode",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "engine::DiffOptions",
              "kind": "struct_item",
              "signature": "pub struct DiffOptions {\n/// Comparison mode\n\npub mode: ComparisonMode,\n/// Compare file content\n\npub compare_content: bool,\n/// Compare metadata\n\npub compare_metadata: bool,\n/// Follow symlinks\n\npub follow_symlinks: bool,\n/// Ignore patterns\n\npub ignore_patterns: Vec<String>,\n/// Maximum parallel comparisons\n\npub max_parallel: usize,\n/// Include unchanged files in results\n\npub include_unchanged: bool,\n/// Optional path to a persistent cache file for content hashes\n\npub cache_path: Option<String>,\n/// Optional cancellation flag for cooperative cancellation\n\n#[serde(skip)]\npub cancel_flag: Option<Arc<AtomicBool>>\n}",
              "docs": "Options for diff operations",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 36
            },
            {
              "name": "engine::DiffOptions::with_content_comparison",
              "kind": "function_item",
              "signature": "pub fn with_content_comparison(mut self, enabled: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "engine::DiffOptions::with_metadata_comparison",
              "kind": "function_item",
              "signature": "pub fn with_metadata_comparison(mut self, enabled: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 98
            },
            {
              "name": "engine::DiffOptions::with_mode",
              "kind": "function_item",
              "signature": "pub fn with_mode(mut self, mode: ComparisonMode) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "engine::DiffEngine",
              "kind": "struct_item",
              "signature": "pub struct DiffEngine {\n\n}",
              "docs": "Diff engine for comparing file systems",
              "attributes": "#[derive(Clone)]",
              "line": 111
            },
            {
              "name": "engine::DiffEngine::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new diff engine",
              "attributes": "",
              "line": 128
            },
            {
              "name": "engine::DiffEngine::with_parallel",
              "kind": "function_item",
              "signature": "pub fn with_parallel(max_parallel: usize) -> Self;",
              "docs": "Create a diff engine with custom parallelism for hashing",
              "attributes": "",
              "line": 136
            },
            {
              "name": "engine::DiffEngine::compare",
              "kind": "function_item",
              "signature": "pub async fn compare(\n        &self,\n        source: Arc<dyn FileSystem>,\n        target: Arc<dyn FileSystem>,\n        options: DiffOptions,\n    ) -> Result<Vec<Diff>>;",
              "docs": "Compare two file systems",
              "attributes": "",
              "line": 187
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/local/agentfs-diff/src/error.rs",
          "sha256": "96dbc2dc6b110b72ba3e4640544c365907237ceb03e6356c6e91fbbf68fab991",
          "attributes": "",
          "items": [
            {
              "name": "error::DiffError",
              "kind": "enum_item",
              "signature": "pub enum DiffError {\n    #[error(\"File system not accessible: {0}\")]\n    FileSystemNotAccessible(String),\n\n    #[error(\"Path not found in source: {0}\")]\n    SourcePathNotFound(PathBuf),\n\n    #[error(\"Path not found in target: {0}\")]\n    TargetPathNotFound(PathBuf),\n\n    #[error(\"Incompatible file systems: {0}\")]\n    IncompatibleFileSystems(String),\n\n    #[error(\"Agent mismatch: source {source_agent}, target {target}\")]\n    AgentMismatch {\n        source_agent: String,\n        target: String,\n    },\n\n    #[error(\"Content hash mismatch for {path}\")]\n    ContentMismatch { path: PathBuf },\n\n    #[error(\"Metadata comparison failed: {0}\")]\n    MetadataComparisonFailed(String),\n\n    #[error(\"Watch error: {0}\")]\n    WatchError(String),\n\n    #[error(\"Stream error: {0}\")]\n    StreamError(String),\n\n    #[error(\"Comparison aborted: {0}\")]\n    ComparisonAborted(String),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"AgentFS error: {0}\")]\n    AgentFS(#[from] agentfs::AgentFSError),\n\n    #[error(\"Locus error: {0}\")]\n    Locus(#[from] locus::LocusError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Errors that can occur during diff operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, DiffError>;",
              "docs": "Result type for diff operations",
              "attributes": "",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "stream",
          "source": "sigil/weave/local/agentfs-diff/src/stream.rs",
          "sha256": "bd77ec4614ff864a42d4eb2757c6cf291a6ff1e7d3cd495d8ac8af10fc18f9c6",
          "attributes": "",
          "items": [
            {
              "name": "stream::DiffEvent",
              "kind": "enum_item",
              "signature": "pub enum DiffEvent {\n    /// Starting comparison\n    Started {\n        source_type: String,\n        target_type: String,\n    },\n\n    /// Found a difference\n    DiffFound(Box<Diff>),\n\n    /// Progress update\n    Progress {\n        current_path: String,\n        files_compared: usize,\n    },\n\n    /// Comparison completed\n    Completed {\n        total_diffs: usize,\n        duration_ms: u64,\n    },\n\n    /// Error occurred\n    Error(String),\n}",
              "docs": "Events emitted during diff streaming",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "stream::DiffStream",
              "kind": "struct_item",
              "signature": "pub struct DiffStream {\n\n}",
              "docs": "Streaming diff implementation",
              "attributes": "#[pin_project]",
              "line": 48
            },
            {
              "name": "stream::DiffStream::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        source: std::sync::Arc<dyn FileSystem>,\n        target: std::sync::Arc<dyn FileSystem>,\n        options: DiffOptions,\n    ) -> Self;",
              "docs": "Create a new diff stream",
              "attributes": "",
              "line": 56
            },
            {
              "name": "stream::DiffStream::abort",
              "kind": "function_item",
              "signature": "pub fn abort(&mut self);",
              "docs": "Abort the comparison",
              "attributes": "",
              "line": 104
            }
          ],
          "parseErrors": false
        },
        {
          "module": "watcher",
          "source": "sigil/weave/local/agentfs-diff/src/watcher.rs",
          "sha256": "905ba8287889078fb8700090df0d87d3cbd67b9dad801f8b642361a9d49c6b9f",
          "attributes": "",
          "items": [
            {
              "name": "watcher::WatchOptions",
              "kind": "struct_item",
              "signature": "pub struct WatchOptions {\n/// Polling interval\n\npub interval: Duration,\n/// Initial scan on start\n\npub initial_scan: bool,\n/// Diff options\n\npub diff_options: DiffOptions,\n/// Debounce duration for changes\n\npub debounce: Duration\n}",
              "docs": "Watch options for real-time monitoring",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "watcher::DiffWatcher",
              "kind": "struct_item",
              "signature": "pub struct DiffWatcher {\n\n}",
              "docs": "Real-time diff watcher",
              "attributes": "",
              "line": 52
            },
            {
              "name": "watcher::DiffWatcher::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        source: Arc<dyn FileSystem>,\n        target: Arc<dyn FileSystem>,\n        options: WatchOptions,\n    ) -> Self;",
              "docs": "Create a new diff watcher",
              "attributes": "",
              "line": 77
            },
            {
              "name": "watcher::DiffWatcher::start",
              "kind": "function_item",
              "signature": "pub async fn start(&mut self) -> Result<()>;",
              "docs": "Start watching for changes",
              "attributes": "",
              "line": 96
            },
            {
              "name": "watcher::DiffWatcher::stop",
              "kind": "function_item",
              "signature": "pub fn stop(&mut self);",
              "docs": "Stop watching",
              "attributes": "",
              "line": 172
            },
            {
              "name": "watcher::DiffWatcher::receiver",
              "kind": "function_item",
              "signature": "pub fn receiver(&mut self) -> Option<mpsc::UnboundedReceiver<Diff>>;",
              "docs": "Get receiver for diff events",
              "attributes": "",
              "line": 179
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-agentfs-mirror",
      "version": "1.1.0",
      "source": "sigil/weave/local/agentfs-mirror",
      "manifestSha256": "e36c56dbf0405632e15abaee1d469969683ff4b96c8d760564afd983f5ecdd8c",
      "features": {
        "default": [],
        "mock": []
      },
      "publish": true,
      "url": "/reference/rust/weave-agentfs-mirror",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/local/agentfs-mirror/src/lib.rs",
          "sha256": "37226d426fab3865b0f49909cbff2507fa68e1ae9aae6d133e210aba1338eaa5",
          "attributes": "",
          "items": [
            {
              "name": "pub use conflict::{ConflictResolution, ConflictResolver, ConflictStrategy};",
              "kind": "use_declaration",
              "signature": "pub use conflict::{ConflictResolution, ConflictResolver, ConflictStrategy};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use error::{MirrorError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{MirrorError, Result};",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "pub use mirror::Mirror;",
              "kind": "use_declaration",
              "signature": "pub use mirror::Mirror;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "pub use options::{MirrorOptions, SyncDirection, SyncMode};",
              "kind": "use_declaration",
              "signature": "pub use options::{MirrorOptions, SyncDirection, SyncMode};",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "pub use progress::{ProgressEvent, ProgressReporter};",
              "kind": "use_declaration",
              "signature": "pub use progress::{ProgressEvent, ProgressReporter};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use sparse::{SparseOptions, SparseSync};",
              "kind": "use_declaration",
              "signature": "pub use sparse::{SparseOptions, SparseSync};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use stats::{FileStats, SyncStats};",
              "kind": "use_declaration",
              "signature": "pub use stats::{FileStats, SyncStats};",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "pub use sync::{SyncEngine, SyncState};",
              "kind": "use_declaration",
              "signature": "pub use sync::{SyncEngine, SyncState};",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "pub use watcher::{MirrorWatcher, WatchEvent};",
              "kind": "use_declaration",
              "signature": "pub use watcher::{MirrorWatcher, WatchEvent};",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "pub use oas_did::OasDid;",
              "kind": "use_declaration",
              "signature": "pub use oas_did::OasDid;",
              "docs": "",
              "attributes": "",
              "line": 61
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "conflict",
          "source": "sigil/weave/local/agentfs-mirror/src/conflict.rs",
          "sha256": "19b2548447210f19d6fe8e37f77dc8f68bbb007acbbebfe846074c88303fc953",
          "attributes": "",
          "items": [
            {
              "name": "conflict::ConflictStrategy",
              "kind": "enum_item",
              "signature": "pub enum ConflictStrategy {\n    /// Newer file wins\n    NewerWins,\n    /// Older file wins\n    OlderWins,\n    /// Source always wins\n    SourceWins,\n    /// Target always wins\n    TargetWins,\n    /// Skip conflicts\n    Skip,\n    /// Interactive resolution\n    Interactive,\n    /// Agent-based (owner agent wins)\n    AgentBased,\n}",
              "docs": "Conflict resolution strategy",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "conflict::ConflictResolution",
              "kind": "enum_item",
              "signature": "pub enum ConflictResolution {\n    /// Use source version\n    UseSource,\n    /// Use target version\n    UseTarget,\n    /// Skip this file\n    Skip,\n    /// Merge versions (for text files)\n    Merge,\n    /// Rename one version\n    Rename {\n        source_name: String,\n        target_name: String,\n    },\n}",
              "docs": "Resolution for a specific conflict",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 29
            },
            {
              "name": "conflict::Conflict",
              "kind": "struct_item",
              "signature": "pub struct Conflict {\n/// Path with conflict\n\npub path: PathBuf,\n/// Source file info\n\npub source_info: FileInfo,\n/// Target file info\n\npub target_info: FileInfo,\n/// Conflict type\n\npub conflict_type: ConflictType\n}",
              "docs": "Conflict information",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 47
            },
            {
              "name": "conflict::FileInfo",
              "kind": "struct_item",
              "signature": "pub struct FileInfo {\n/// File size\n\npub size: u64,\n/// Modification time\n\npub mtime: DateTime<Utc>,\n/// Owner agent identity\n\npub owner: Identity,\n/// Content hash\n\npub hash: Option<String>\n}",
              "docs": "File information for conflict resolution",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 63
            },
            {
              "name": "conflict::ConflictType",
              "kind": "enum_item",
              "signature": "pub enum ConflictType {\n    /// Both files modified\n    BothModified,\n    /// Delete vs modify\n    DeleteModify,\n    /// Type mismatch (file vs directory)\n    TypeMismatch,\n}",
              "docs": "Type of conflict",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 79
            },
            {
              "name": "conflict::ConflictResolver",
              "kind": "struct_item",
              "signature": "pub struct ConflictResolver {\n\n}",
              "docs": "Conflict resolver",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 90
            },
            {
              "name": "conflict::ConflictResolver::new",
              "kind": "function_item",
              "signature": "pub fn new(strategy: ConflictStrategy) -> Self;",
              "docs": "Create a new conflict resolver",
              "attributes": "",
              "line": 96
            },
            {
              "name": "conflict::ConflictResolver::resolve",
              "kind": "function_item",
              "signature": "pub async fn resolve(&self, conflict: &Conflict) -> ConflictResolution;",
              "docs": "Resolve a conflict",
              "attributes": "",
              "line": 101
            },
            {
              "name": "conflict::ConflictResolver::is_conflict",
              "kind": "function_item",
              "signature": "pub fn is_conflict(\n        source_mtime: DateTime<Utc>,\n        target_mtime: DateTime<Utc>,\n        threshold: chrono::Duration,\n    ) -> bool;",
              "docs": "Check if two files conflict",
              "attributes": "",
              "line": 133
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/local/agentfs-mirror/src/error.rs",
          "sha256": "615cd4d2cbc0ffd81165d709a0a2f4cbffdb7af1f763a36382bf9454357fbe69",
          "attributes": "",
          "items": [
            {
              "name": "error::MirrorError",
              "kind": "enum_item",
              "signature": "pub enum MirrorError {\n    #[error(\"Source not accessible: {0}\")]\n    SourceNotAccessible(String),\n\n    #[error(\"Target not accessible: {0}\")]\n    TargetNotAccessible(String),\n\n    #[error(\"Sync conflict: {path} modified in both locations\")]\n    SyncConflict {\n        path: PathBuf,\n        source_mtime: std::time::SystemTime,\n        target_mtime: std::time::SystemTime,\n    },\n\n    #[error(\"Agent mismatch: {0}\")]\n    AgentMismatch(String),\n\n    #[error(\"Permission denied: {0}\")]\n    PermissionDenied(String),\n\n    #[error(\"Sparse replication error: {0}\")]\n    SparseError(String),\n\n    #[error(\"Watch error: {0}\")]\n    WatchError(String),\n\n    #[error(\"Sync aborted by user\")]\n    SyncAborted,\n\n    #[error(\"Invalid sync direction for operation\")]\n    InvalidDirection,\n\n    #[error(\"File too large for sync: {path} ({size} bytes)\")]\n    FileTooLarge { path: PathBuf, size: u64 },\n\n    #[error(\"Checksum mismatch after sync: {0}\")]\n    ChecksumMismatch(PathBuf),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"AgentFS error: {0}\")]\n    AgentFS(#[from] agentfs::AgentFSError),\n\n    #[error(\"Locus error: {0}\")]\n    Locus(#[from] locus::LocusError),\n\n    #[error(\"Diff error: {0}\")]\n    Diff(#[from] agentfs_diff::DiffError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(String),\n}",
              "docs": "Errors that can occur during mirror operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 8
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, MirrorError>;",
              "docs": "Result type for mirror operations",
              "attributes": "",
              "line": 66
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "mirror",
          "source": "sigil/weave/local/agentfs-mirror/src/mirror.rs",
          "sha256": "2d133842a31ea1d85f36f5b01e32087e50f11073f4caa81a6c9bc1775389048d",
          "attributes": "",
          "items": [
            {
              "name": "mirror::Mirror",
              "kind": "struct_item",
              "signature": "pub struct Mirror {\n\n}",
              "docs": "Mirror for bidirectional synchronization",
              "attributes": "",
              "line": 19
            },
            {
              "name": "mirror::Mirror::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        source: Arc<dyn FileSystem>,\n        target: Arc<dyn FileSystem>,\n        options: MirrorOptions,\n    ) -> Self;",
              "docs": "Create new mirror",
              "attributes": "",
              "line": 38
            },
            {
              "name": "mirror::Mirror::sync",
              "kind": "function_item",
              "signature": "pub async fn sync(&self) -> Result<SyncStats>;",
              "docs": "Perform one-time sync",
              "attributes": "",
              "line": 65
            },
            {
              "name": "mirror::Mirror::watch",
              "kind": "function_item",
              "signature": "pub async fn watch(&mut self) -> Result<()>;",
              "docs": "Start watching for changes",
              "attributes": "",
              "line": 98
            },
            {
              "name": "mirror::Mirror::stop_watch",
              "kind": "function_item",
              "signature": "pub fn stop_watch(&mut self);",
              "docs": "Stop watching",
              "attributes": "",
              "line": 124
            },
            {
              "name": "mirror::Mirror::watch_receiver",
              "kind": "function_item",
              "signature": "pub fn watch_receiver(\n        &mut self,\n    ) -> Option<tokio::sync::mpsc::UnboundedReceiver<crate::watcher::WatchEvent>>;",
              "docs": "Get watch event receiver",
              "attributes": "",
              "line": 131
            },
            {
              "name": "mirror::Mirror::source",
              "kind": "function_item",
              "signature": "pub fn source(&self) -> &Arc<dyn FileSystem>;",
              "docs": "Get source file system",
              "attributes": "",
              "line": 138
            },
            {
              "name": "mirror::Mirror::target",
              "kind": "function_item",
              "signature": "pub fn target(&self) -> &Arc<dyn FileSystem>;",
              "docs": "Get target file system",
              "attributes": "",
              "line": 143
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "options",
          "source": "sigil/weave/local/agentfs-mirror/src/options.rs",
          "sha256": "464b8970f9e668c25e26a1fb2bc1cb1c2e587e69944b5e3d2674ff60aae4fa63",
          "attributes": "",
          "items": [
            {
              "name": "options::SyncDirection",
              "kind": "enum_item",
              "signature": "pub enum SyncDirection {\n    /// Push from source to target\n    Push,\n    /// Pull from target to source\n    Pull,\n    /// Bidirectional sync\n    Bidirectional,\n}",
              "docs": "Sync direction",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "options::SyncMode",
              "kind": "enum_item",
              "signature": "pub enum SyncMode {\n    /// Copy only new/modified files\n    Update,\n    /// Mirror exactly (may delete files)\n    Mirror,\n    /// Archive mode (preserve everything)\n    Archive,\n}",
              "docs": "Sync mode",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 19
            },
            {
              "name": "options::MirrorOptions",
              "kind": "struct_item",
              "signature": "pub struct MirrorOptions {\n/// Sync direction\n\npub direction: SyncDirection,\n/// Sync mode\n\npub mode: SyncMode,\n/// Enable sparse replication\n\npub sparse: bool,\n/// Delete files not in source\n\npub delete: bool,\n/// Follow symbolic links\n\npub follow_links: bool,\n/// Preserve permissions\n\npub preserve_permissions: bool,\n/// Preserve timestamps\n\npub preserve_timestamps: bool,\n/// Verify after sync\n\npub verify: bool,\n/// Dry run (don't actually sync)\n\npub dry_run: bool,\n/// Maximum file size to sync\n\npub max_file_size: Option<u64>,\n/// Ignore patterns\n\npub ignore_patterns: Vec<String>,\n/// Conflict resolution strategy\n\npub conflict_strategy: ConflictStrategy,\n/// Watch for changes after sync\n\npub watch: bool,\n/// Watch interval\n\npub watch_interval: Duration,\n/// Progress reporting\n\npub progress: bool,\n/// Number of parallel operations\n\npub parallel_ops: usize\n}",
              "docs": "Mirror options",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 30
            },
            {
              "name": "options::MirrorOptions::with_direction",
              "kind": "function_item",
              "signature": "pub fn with_direction(mut self, direction: SyncDirection) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 104
            },
            {
              "name": "options::MirrorOptions::with_sparse",
              "kind": "function_item",
              "signature": "pub fn with_sparse(mut self, sparse: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "options::MirrorOptions::with_watch",
              "kind": "function_item",
              "signature": "pub fn with_watch(mut self, watch: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 114
            },
            {
              "name": "options::MirrorOptions::with_mode",
              "kind": "function_item",
              "signature": "pub fn with_mode(mut self, mode: SyncMode) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 119
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "progress",
          "source": "sigil/weave/local/agentfs-mirror/src/progress.rs",
          "sha256": "769feea9ea672578474b5555455cef6df5ede1445a2b680a3be465cb8e284aff",
          "attributes": "",
          "items": [
            {
              "name": "progress::ProgressEvent",
              "kind": "enum_item",
              "signature": "pub enum ProgressEvent {\n    /// Sync started\n    Started {\n        total_files: usize,\n        total_bytes: u64,\n    },\n\n    /// File transfer started\n    FileStarted { path: PathBuf, size: u64 },\n\n    /// File transfer progress\n    FileProgress {\n        path: PathBuf,\n        bytes_transferred: u64,\n        total_bytes: u64,\n    },\n\n    /// File transfer completed\n    FileCompleted { path: PathBuf, success: bool },\n\n    /// Directory created\n    DirectoryCreated { path: PathBuf },\n\n    /// Conflict detected\n    ConflictDetected { path: PathBuf },\n\n    /// Sync completed\n    Completed { stats: crate::stats::SyncStats },\n\n    /// Error occurred\n    Error {\n        path: Option<PathBuf>,\n        message: String,\n    },\n}",
              "docs": "Progress event types",
              "attributes": "#[derive(Debug, Clone, Serialize)]",
              "line": 12
            },
            {
              "name": "progress::ProgressReporter",
              "kind": "struct_item",
              "signature": "pub struct ProgressReporter {\n\n}",
              "docs": "Progress reporter",
              "attributes": "",
              "line": 49
            },
            {
              "name": "progress::ProgressReporter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new progress reporter",
              "attributes": "",
              "line": 68
            },
            {
              "name": "progress::ProgressReporter::sender",
              "kind": "function_item",
              "signature": "pub fn sender(&self) -> mpsc::UnboundedSender<ProgressEvent>;",
              "docs": "Get event sender",
              "attributes": "",
              "line": 91
            },
            {
              "name": "progress::ProgressReporter::start",
              "kind": "function_item",
              "signature": "pub async fn start(mut self);",
              "docs": "Start progress display",
              "attributes": "",
              "line": 96
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "sparse",
          "source": "sigil/weave/local/agentfs-mirror/src/sparse.rs",
          "sha256": "a742d6a521d919cf11a3522557d1fa9710887addde7a23c59ad37b4b5a5b069d",
          "attributes": "",
          "items": [
            {
              "name": "sparse::SparseOptions",
              "kind": "struct_item",
              "signature": "pub struct SparseOptions {\n/// Only sync requested paths\n\npub paths: Vec<PathBuf>,\n/// Include dependencies\n\npub include_deps: bool,\n/// Depth limit for directory sync\n\npub max_depth: Option<usize>,\n/// Only sync files matching patterns\n\npub include_patterns: Vec<String>,\n/// Exclude patterns\n\npub exclude_patterns: Vec<String>,\n/// Minimum file size to sync\n\npub min_size: Option<u64>,\n/// Maximum file size to sync\n\npub max_size: Option<u64>\n}",
              "docs": "Sparse sync options",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "sparse::SparseSync",
              "kind": "struct_item",
              "signature": "pub struct SparseSync {\n\n}",
              "docs": "Sparse sync engine",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 49
            },
            {
              "name": "sparse::SparseSync::new",
              "kind": "function_item",
              "signature": "pub fn new(options: SparseOptions) -> Self;",
              "docs": "Create new sparse sync engine",
              "attributes": "",
              "line": 56
            },
            {
              "name": "sparse::SparseSync::should_sync",
              "kind": "function_item",
              "signature": "pub fn should_sync(&self, path: &Path) -> bool;",
              "docs": "Check if path should be synced",
              "attributes": "",
              "line": 64
            },
            {
              "name": "sparse::SparseSync::mark_synced",
              "kind": "function_item",
              "signature": "pub fn mark_synced(&mut self, path: PathBuf);",
              "docs": "Mark path as synced",
              "attributes": "",
              "line": 112
            },
            {
              "name": "sparse::SparseSync::is_synced",
              "kind": "function_item",
              "signature": "pub fn is_synced(&self, path: &Path) -> bool;",
              "docs": "Check if path was already synced",
              "attributes": "",
              "line": 117
            },
            {
              "name": "sparse::SparseSync::get_dependencies",
              "kind": "function_item",
              "signature": "pub async fn get_dependencies(&self, _path: &Path) -> Result<Vec<PathBuf>>;",
              "docs": "Get list of dependencies for a path",
              "attributes": "",
              "line": 122
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "stats",
          "source": "sigil/weave/local/agentfs-mirror/src/stats.rs",
          "sha256": "00a2123e64c13716fbdf85b9ed47f147834b30084ef5e6e65b590dd778f8bc2b",
          "attributes": "",
          "items": [
            {
              "name": "stats::SyncStats",
              "kind": "struct_item",
              "signature": "pub struct SyncStats {\n/// Total files processed\n\npub files_processed: usize,\n/// Files synced\n\npub files_synced: usize,\n/// Files skipped\n\npub files_skipped: usize,\n/// Files failed\n\npub files_failed: usize,\n/// Directories created\n\npub dirs_created: usize,\n/// Directories deleted\n\npub dirs_deleted: usize,\n/// Total bytes transferred\n\npub bytes_transferred: u64,\n/// Conflicts encountered\n\npub conflicts: usize,\n/// Conflicts resolved\n\npub conflicts_resolved: usize,\n/// Errors encountered\n\npub errors: Vec<String>,\n/// Start time\n\n#[serde(skip_serializing)]\npub start_time: Option<std::time::Instant>,\n/// End time\n\n#[serde(skip_serializing)]\npub end_time: Option<std::time::Instant>,\n/// Duration\n\n#[serde(skip_serializing)]\npub duration: Option<Duration>\n}",
              "docs": "Sync statistics",
              "attributes": "#[derive(Debug, Clone, Default, Serialize)]",
              "line": 8
            },
            {
              "name": "stats::SyncStats::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create new stats",
              "attributes": "",
              "line": 54
            },
            {
              "name": "stats::SyncStats::complete",
              "kind": "function_item",
              "signature": "pub fn complete(&mut self);",
              "docs": "Mark as completed",
              "attributes": "",
              "line": 62
            },
            {
              "name": "stats::SyncStats::add_error",
              "kind": "function_item",
              "signature": "pub fn add_error(&mut self, error: String);",
              "docs": "Add error",
              "attributes": "",
              "line": 71
            },
            {
              "name": "stats::SyncStats::success_rate",
              "kind": "function_item",
              "signature": "pub fn success_rate(&self) -> f64;",
              "docs": "Get success rate",
              "attributes": "",
              "line": 77
            },
            {
              "name": "stats::SyncStats::transfer_rate",
              "kind": "function_item",
              "signature": "pub fn transfer_rate(&self) -> f64;",
              "docs": "Get transfer rate (bytes/sec)",
              "attributes": "",
              "line": 86
            },
            {
              "name": "stats::FileStats",
              "kind": "struct_item",
              "signature": "pub struct FileStats {\n/// File path\n\npub path: String,\n/// File size\n\npub size: u64,\n/// Transfer time\n\npub transfer_time: Duration,\n/// Success status\n\npub success: bool,\n/// Error message if failed\n\npub error: Option<String>\n}",
              "docs": "Per-file statistics",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 101
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "sync",
          "source": "sigil/weave/local/agentfs-mirror/src/sync.rs",
          "sha256": "2c49fc5077f9e73c10120a2abe7b79aced98131d79a77738f5c7fe50f4a648bf",
          "attributes": "",
          "items": [
            {
              "name": "sync::SyncState",
              "kind": "struct_item",
              "signature": "pub struct SyncState {\n/// Current stats\n\npub stats: SyncStats,\n/// Sparse sync engine\n\npub sparse: Option<SparseSync>,\n/// Conflict resolver\n\npub resolver: ConflictResolver,\n/// Progress sender\n\npub progress_tx: Option<tokio::sync::mpsc::UnboundedSender<ProgressEvent>>\n}",
              "docs": "Sync state tracking",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 21
            },
            {
              "name": "sync::PlanOp",
              "kind": "struct_item",
              "signature": "pub struct PlanOp {\npub id: String,\npub kind: String,\npub src: Option<String>,\npub dst: Option<String>,\npub size: Option<u64>,\npub mtime: Option<i64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 36
            },
            {
              "name": "sync::Plan",
              "kind": "struct_item",
              "signature": "pub struct Plan {\npub plan_id: String,\npub ops: Vec<PlanOp>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 46
            },
            {
              "name": "sync::Checkpoint",
              "kind": "struct_item",
              "signature": "pub struct Checkpoint {\npub plan_id: String,\npub last_applied_index: i64,\npub applied: Vec<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, Default)]",
              "line": 52
            },
            {
              "name": "sync::SyncEngine",
              "kind": "struct_item",
              "signature": "pub struct SyncEngine {\n\n}",
              "docs": "Sync engine",
              "attributes": "",
              "line": 59
            },
            {
              "name": "sync::SyncEngine::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        source: Arc<dyn agentfs_diff::FileSystem>,\n        target: Arc<dyn agentfs_diff::FileSystem>,\n        options: MirrorOptions,\n    ) -> Self;",
              "docs": "Create new sync engine",
              "attributes": "",
              "line": 78
            },
            {
              "name": "sync::SyncEngine::sync",
              "kind": "function_item",
              "signature": "pub async fn sync(&self, state: &mut SyncState) -> Result<()>;",
              "docs": "Perform synchronization",
              "attributes": "",
              "line": 93
            },
            {
              "name": "sync::SyncEngine::plan_from_diffs",
              "kind": "function_item",
              "signature": "pub async fn plan_from_diffs(&self, diffs: Vec<Diff>) -> Result<Plan>;",
              "docs": "Create a deterministic plan from diffs",
              "attributes": "",
              "line": 278
            },
            {
              "name": "sync::SyncEngine::execute_plan",
              "kind": "function_item",
              "signature": "pub async fn execute_plan(&self, _plan: &Plan, _checkpoint: &mut Checkpoint) -> Result<()>;",
              "docs": "Execute a plan with checkpointing (skeleton)",
              "attributes": "",
              "line": 332
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        },
        {
          "module": "watcher",
          "source": "sigil/weave/local/agentfs-mirror/src/watcher.rs",
          "sha256": "7f3717550ce6bf85f72cf6b8bafe78f07f8306ff24ef794ecd7be7f4b540a298",
          "attributes": "",
          "items": [
            {
              "name": "watcher::WatchEvent",
              "kind": "enum_item",
              "signature": "pub enum WatchEvent {\n    /// File created\n    Created(PathBuf),\n\n    /// File modified\n    Modified(PathBuf),\n\n    /// File deleted\n    Deleted(PathBuf),\n\n    /// File renamed\n    Renamed { from: PathBuf, to: PathBuf },\n\n    /// Sync triggered\n    SyncTriggered,\n\n    /// Sync completed\n    SyncCompleted {\n        files_synced: usize,\n        duration: Duration,\n    },\n\n    /// Error occurred\n    Error(String),\n}",
              "docs": "Watch event types",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "watcher::MirrorWatcher",
              "kind": "struct_item",
              "signature": "pub struct MirrorWatcher {\n\n}",
              "docs": "Mirror watcher for real-time sync",
              "attributes": "",
              "line": 45
            },
            {
              "name": "watcher::MirrorWatcher::new",
              "kind": "function_item",
              "signature": "pub fn new(engine: Arc<SyncEngine>, interval: Duration) -> Self;",
              "docs": "Create new mirror watcher",
              "attributes": "",
              "line": 64
            },
            {
              "name": "watcher::MirrorWatcher::start",
              "kind": "function_item",
              "signature": "pub async fn start(&mut self, mut state: SyncState) -> Result<()>;",
              "docs": "Start watching",
              "attributes": "",
              "line": 77
            },
            {
              "name": "watcher::MirrorWatcher::stop",
              "kind": "function_item",
              "signature": "pub fn stop(&mut self);",
              "docs": "Stop watching",
              "attributes": "",
              "line": 120
            },
            {
              "name": "watcher::MirrorWatcher::receiver",
              "kind": "function_item",
              "signature": "pub fn receiver(&mut self) -> Option<mpsc::UnboundedReceiver<WatchEvent>>;",
              "docs": "Get event receiver",
              "attributes": "",
              "line": 127
            }
          ],
          "parseErrors": false,
          "reviewNote": "The mirror plan executor contains NotImplemented paths. A generated plan is not a successfully synchronized remote filesystem. See /libraries/agentfs-mirror/overview."
        }
      ]
    },
    {
      "name": "weave-agentfs-watch",
      "version": "0.1.0",
      "source": "sigil/weave/local/agentfs-watch",
      "manifestSha256": "1fa94e9c9b31d38048ec13ed66427b5b63abda8c833b4ff82512e3ada48670cf",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-agentfs-watch",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/local/agentfs-watch/src/lib.rs",
          "sha256": "41be3e764da366b3d49f34d47602a5dacd78cea2692bd000e8cb13e7da96327f",
          "attributes": "",
          "items": [
            {
              "name": "::WatchError",
              "kind": "enum_item",
              "signature": "pub enum WatchError {\n    #[error(\"notify error: {0}\")]\n    Notify(#[from] notify::Error),\n    #[error(\"io error: {0}\")]\n    Io(#[from] std::io::Error),\n    #[error(\"invalid config: {0}\")]\n    InvalidConfig(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error)]",
              "line": 25
            },
            {
              "name": "::EventType",
              "kind": "enum_item",
              "signature": "pub enum EventType {\n    Created,\n    Modified,\n    Deleted,\n    Renamed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]\n#[serde(rename_all = \"SCREAMING_SNAKE_CASE\")]",
              "line": 36
            },
            {
              "name": "::WatchEvent",
              "kind": "struct_item",
              "signature": "pub struct WatchEvent {\npub id: String,\npub r#type: EventType,\npub path: String,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub old_path: Option<String>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub is_dir: Option<bool>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub inode: Option<String>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub device: Option<String>,\npub ts_monotonic_ns: u128,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub ts_wall_clock: Option<DateTime<Utc>>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub coalesced: Option<bool>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 44
            },
            {
              "name": "::EventBatch",
              "kind": "struct_item",
              "signature": "pub struct EventBatch {\npub batch_id: String,\npub sequence: u64,\npub events: Vec<WatchEvent>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub emitted_at: Option<DateTime<Utc>>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub source: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 64
            },
            {
              "name": "::BackpressurePolicy",
              "kind": "enum_item",
              "signature": "pub enum BackpressurePolicy {\n    Block,\n    DropOldest,\n    DropNew,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\n#[serde(rename_all = \"SCREAMING_SNAKE_CASE\")]",
              "line": 76
            },
            {
              "name": "::RestartConfig",
              "kind": "struct_item",
              "signature": "pub struct RestartConfig {\npub enabled: bool,\npub min_backoff_ms: u64,\npub max_backoff_ms: u64,\npub jitter: f64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 83
            },
            {
              "name": "::WatchConfig",
              "kind": "struct_item",
              "signature": "pub struct WatchConfig {\npub roots: Vec<PathBuf>,\n#[serde(default = \"default_true\")]\npub recursive: bool,\n#[serde(default)]\npub include: Vec<String>,\n#[serde(default)]\npub exclude: Vec<String>,\n#[serde(default = \"default_debounce_ms\")]\npub debounce_ms: u64,\n#[serde(default = \"default_coalesce_window_ms\")]\npub coalesce_window_ms: u64,\n#[serde(default = \"default_batch_max_items\")]\npub batch_max_items: usize,\n#[serde(default = \"default_batch_max_ms\")]\npub batch_max_ms: u64,\n#[serde(default = \"default_queue_capacity\")]\npub queue_capacity: usize,\n#[serde(default = \"default_backpressure\")]\npub backpressure_policy: BackpressurePolicy,\n#[serde(default)]\npub restart: RestartConfig\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]",
              "line": 102
            },
            {
              "name": "::WatcherBuilder",
              "kind": "struct_item",
              "signature": "pub struct WatcherBuilder {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 148
            },
            {
              "name": "::WatcherBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 159
            },
            {
              "name": "::WatcherBuilder::roots",
              "kind": "function_item",
              "signature": "pub fn roots<I, P>(mut self, roots: I) -> Self\n    where\n        I: IntoIterator<Item = P>,\n        P: Into<PathBuf>,;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "::WatcherBuilder::include_globs",
              "kind": "function_item",
              "signature": "pub fn include_globs<I, S>(mut self, globs: I) -> Self\n    where\n        I: IntoIterator<Item = S>,\n        S: Into<String>,;",
              "docs": "",
              "attributes": "",
              "line": 185
            },
            {
              "name": "::WatcherBuilder::exclude_globs",
              "kind": "function_item",
              "signature": "pub fn exclude_globs<I, S>(mut self, globs: I) -> Self\n    where\n        I: IntoIterator<Item = S>,\n        S: Into<String>,;",
              "docs": "",
              "attributes": "",
              "line": 193
            },
            {
              "name": "::WatcherBuilder::debounce_ms",
              "kind": "function_item",
              "signature": "pub fn debounce_ms(mut self, v: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 201
            },
            {
              "name": "::WatcherBuilder::coalesce_window_ms",
              "kind": "function_item",
              "signature": "pub fn coalesce_window_ms(mut self, v: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 205
            },
            {
              "name": "::WatcherBuilder::batch_max_items",
              "kind": "function_item",
              "signature": "pub fn batch_max_items(mut self, v: usize) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 209
            },
            {
              "name": "::WatcherBuilder::batch_max_ms",
              "kind": "function_item",
              "signature": "pub fn batch_max_ms(mut self, v: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 213
            },
            {
              "name": "::WatcherBuilder::queue_capacity",
              "kind": "function_item",
              "signature": "pub fn queue_capacity(mut self, v: usize) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 217
            },
            {
              "name": "::WatcherBuilder::backpressure",
              "kind": "function_item",
              "signature": "pub fn backpressure(mut self, v: BackpressurePolicy) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 221
            },
            {
              "name": "::WatcherBuilder::recursive",
              "kind": "function_item",
              "signature": "pub fn recursive(mut self, v: bool) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 225
            },
            {
              "name": "::WatcherBuilder::build",
              "kind": "function_item",
              "signature": "pub fn build(self) -> Result<Watcher, WatchError>;",
              "docs": "",
              "attributes": "",
              "line": 229
            },
            {
              "name": "::Watcher",
              "kind": "struct_item",
              "signature": "pub struct Watcher {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 234
            },
            {
              "name": "::Watcher::builder",
              "kind": "function_item",
              "signature": "pub fn builder() -> WatcherBuilder;",
              "docs": "",
              "attributes": "",
              "line": 243
            },
            {
              "name": "::Watcher::includes",
              "kind": "function_item",
              "signature": "pub fn includes(&self) -> Option<&GlobSet>;",
              "docs": "",
              "attributes": "",
              "line": 247
            },
            {
              "name": "::Watcher::excludes",
              "kind": "function_item",
              "signature": "pub fn excludes(&self) -> Option<&GlobSet>;",
              "docs": "",
              "attributes": "",
              "line": 250
            },
            {
              "name": "::Watcher::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &WatchConfig;",
              "docs": "",
              "attributes": "",
              "line": 253
            },
            {
              "name": "::Watcher::new",
              "kind": "function_item",
              "signature": "pub fn new(config: WatchConfig) -> Result<Self, WatchError>;",
              "docs": "",
              "attributes": "",
              "line": 257
            },
            {
              "name": "::Watcher::into_stream",
              "kind": "function_item",
              "signature": "pub fn into_stream(self) -> impl Stream<Item = EventBatch>;",
              "docs": "",
              "attributes": "",
              "line": 469
            }
          ],
          "parseErrors": false,
          "reviewNote": "into_stream drops its watcher owner; debounce/coalescing settings are unused and event channels are unbounded in the checked implementation. See /libraries/agentfs-watch/overview."
        }
      ]
    },
    {
      "name": "strand-errors",
      "version": "0.1.1",
      "source": "sigil/weave/libs/strand-errors",
      "manifestSha256": "f505648030f96722d7041d94fbae2ba9f97bc03257eca52ff6483977a27952e9",
      "features": {
        "default": [],
        "serde": [
          "dep:serde",
          "dep:serde_json"
        ]
      },
      "publish": true,
      "url": "/reference/rust/strand-errors",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/strand-errors/src/lib.rs",
          "sha256": "55c2030c6ef9ca6f2b563374eab9f7b949d291a79e73882b89e67f9ea9bc7cda",
          "attributes": "",
          "items": [
            {
              "name": "::StorageError",
              "kind": "enum_item",
              "signature": "pub enum StorageError {\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Block not found: index {0}\")]\n    BlockNotFound(u64),\n\n    #[error(\"Corrupted block at index {index}: {reason}\")]\n    CorruptedBlock { index: u64, reason: String },\n\n    #[error(\"Storage backend unavailable: {0}\")]\n    BackendUnavailable(String),\n\n    #[error(\"Insufficient space: need {required} bytes, have {available}\")]\n    InsufficientSpace { required: u64, available: u64 },\n\n    #[error(\"Invalid storage path: {0}\")]\n    InvalidPath(String),\n}",
              "docs": "Storage-related errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 27
            },
            {
              "name": "::CryptoError",
              "kind": "enum_item",
              "signature": "pub enum CryptoError {\n    #[error(\"Invalid signature\")]\n    InvalidSignature,\n\n    #[error(\"Invalid public key: {0}\")]\n    InvalidPublicKey(String),\n\n    #[error(\"Invalid secret key\")]\n    InvalidSecretKey,\n\n    #[error(\"Key derivation failed: {0}\")]\n    KeyDerivationFailed(String),\n\n    #[error(\"Encryption failed: {0}\")]\n    EncryptionFailed(String),\n\n    #[error(\"Decryption failed: {0}\")]\n    DecryptionFailed(String),\n\n    #[error(\"Invalid key length: expected {expected}, got {actual}\")]\n    InvalidKeyLength { expected: usize, actual: usize },\n}",
              "docs": "Cryptographic operation errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 49
            },
            {
              "name": "::ProtocolError",
              "kind": "enum_item",
              "signature": "pub enum ProtocolError {\n    #[error(\"Version mismatch: local {local}, remote {remote}\")]\n    VersionMismatch { local: u32, remote: u32 },\n\n    #[error(\"Invalid message type: {0}\")]\n    InvalidMessageType(u8),\n\n    #[error(\"Protocol timeout after {0} seconds\")]\n    Timeout(u64),\n\n    #[error(\"Invalid state transition: from {from} to {to}\")]\n    InvalidStateTransition { from: String, to: String },\n\n    #[error(\"Handshake failed: {0}\")]\n    HandshakeFailed(String),\n\n    #[error(\"Channel closed unexpectedly\")]\n    ChannelClosed,\n\n    #[error(\"Message too large: {size} bytes (max: {max})\")]\n    MessageTooLarge { size: usize, max: usize },\n}",
              "docs": "Protocol-level errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 74
            },
            {
              "name": "::OwnershipError",
              "kind": "enum_item",
              "signature": "pub enum OwnershipError {\n    #[error(\"Invalid agent identity: {0}\")]\n    InvalidAgentIdentity(String),\n\n    #[error(\"Invalid organization identity: {0}\")]\n    InvalidOrganizationIdentity(String),\n\n    #[error(\"Agent {agent_identity} not authorized for action: {action}\")]\n    AgentNotAuthorized {\n        agent_identity: String,\n        action: String,\n    },\n\n    #[error(\"Agent {agent_identity} not part of organization {org_identity}\")]\n    AgentNotInOrganization {\n        agent_identity: String,\n        org_identity: String,\n    },\n\n    #[error(\"Writer mismatch: expected {expected}, got {actual}\")]\n    WriterMismatch { expected: String, actual: String },\n\n    #[error(\"Organization verification failed: {0}\")]\n    OrganizationVerificationFailed(String),\n\n    #[error(\"Multi-signatory consensus failed: {obtained}/{required} signatures\")]\n    MultiSignatoryConsensusFailed { obtained: usize, required: usize },\n\n    #[error(\"Governance approval required for: {action}\")]\n    GovernanceApprovalRequired { action: String },\n\n    #[error(\"Permission denied: {identity} cannot perform {permission}\")]\n    PermissionDenied {\n        identity: String,\n        permission: String,\n    },\n\n    #[error(\"Identity resolution failed: {0}\")]\n    IdentityResolutionFailed(String),\n\n    #[error(\"Invalid signature for identity: {identity}\")]\n    InvalidSignatureForIdentity { identity: String },\n}",
              "docs": "Ownership and permission errors (identity-system agnostic)",
              "attributes": "#[derive(Debug, Error)]",
              "line": 99
            },
            {
              "name": "::ReplicationError",
              "kind": "enum_item",
              "signature": "pub enum ReplicationError {\n    #[error(\"Sync failed: {0}\")]\n    SyncFailed(String),\n\n    #[error(\"Fork detected at index {0}\")]\n    ForkDetected(u64),\n\n    #[error(\"Invalid proof: {0}\")]\n    InvalidProof(String),\n\n    #[error(\"Peer disconnected during replication\")]\n    PeerDisconnected,\n\n    #[error(\"Bandwidth limit exceeded: {used}/{limit} bytes\")]\n    BandwidthExceeded { used: u64, limit: u64 },\n}",
              "docs": "Replication and synchronization errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 145
            },
            {
              "name": "::ValidationError",
              "kind": "enum_item",
              "signature": "pub enum ValidationError {\n    #[error(\"Invalid block size: {0} bytes\")]\n    InvalidBlockSize(usize),\n\n    #[error(\"Invalid tree state: {0}\")]\n    InvalidTreeState(String),\n\n    #[error(\"Checksum mismatch\")]\n    ChecksumMismatch,\n\n    #[error(\"Invalid index: {0}\")]\n    InvalidIndex(u64),\n\n    #[error(\"Schema validation failed: {0}\")]\n    SchemaValidation(String),\n}",
              "docs": "Data validation errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 164
            },
            {
              "name": "::StrandError",
              "kind": "enum_item",
              "signature": "pub enum StrandError {\n    #[error(transparent)]\n    Storage(#[from] StorageError),\n\n    #[error(transparent)]\n    Crypto(#[from] CryptoError),\n\n    #[error(transparent)]\n    Protocol(#[from] ProtocolError),\n\n    #[error(transparent)]\n    Ownership(#[from] OwnershipError),\n\n    #[error(transparent)]\n    Replication(#[from] ReplicationError),\n\n    #[error(transparent)]\n    Validation(#[from] ValidationError),\n\n    #[error(\"Internal error: {0}\")]\n    Internal(String),\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(String),\n}",
              "docs": "Master error type that encompasses all error categories",
              "attributes": "#[derive(Debug, Error)]",
              "line": 183
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, StrandError>;",
              "docs": "Convenience type alias for Results using StrandError",
              "attributes": "",
              "line": 210
            },
            {
              "name": "::ErrorContext",
              "kind": "trait_item",
              "signature": "pub trait ErrorContext<T> {\n    /// Add a simple string context to the error\n    fn context(self, msg: &str) -> Result<T>;\n\n    /// Add context using a closure (for expensive formatting)\n    fn with_context<F>(self, f: F) -> Result<T>\n    where\n        F: FnOnce() -> String;\n}",
              "docs": "Provides additional context for errors",
              "attributes": "",
              "line": 213
            },
            {
              "name": "::ErrorCode",
              "kind": "enum_item",
              "signature": "pub enum ErrorCode {\n    // Storage errors (1000-1999)\n    StorageIo = 1001,\n    BlockNotFound = 1002,\n    CorruptedBlock = 1003,\n\n    // Crypto errors (2000-2999)\n    InvalidSignature = 2001,\n    InvalidKey = 2002,\n\n    // Protocol errors (3000-3999)\n    VersionMismatch = 3001,\n    Timeout = 3002,\n\n    // Ownership errors (4000-4999)\n    PermissionDenied = 4001,\n    InvalidDid = 4002,\n\n    // Replication errors (5000-5999)\n    SyncFailed = 5001,\n    ForkDetected = 5002,\n\n    // Validation errors (6000-6999)\n    ValidationFailed = 6001,\n    ChecksumMismatch = 6002,\n\n    // General errors\n    InternalError = 9001,\n    NotImplemented = 9002,\n}",
              "docs": "Error codes for external APIs",
              "attributes": "#[repr(u32)]\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[cfg_attr(feature = \"serde\", derive(Serialize, Deserialize))]",
              "line": 240
            },
            {
              "name": "::ToIoErrorKind",
              "kind": "trait_item",
              "signature": "pub trait ToIoErrorKind {\n    /// Returns a corresponding io::ErrorKind when a meaningful mapping exists\n    fn to_io_error_kind(&self) -> Option<io::ErrorKind>;\n}",
              "docs": "Extension to map errors to io::ErrorKind when appropriate",
              "attributes": "",
              "line": 314
            },
            {
              "name": "::SerializedError",
              "kind": "struct_item",
              "signature": "pub struct SerializedError {\npub code: ErrorCode,\npub message: String,\npub details: Option<serde_json::Value>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"serde\")]\n#[derive(Debug, Serialize, Deserialize)]",
              "line": 451
            },
            {
              "name": "::StrandError::error_name",
              "kind": "function_item",
              "signature": "pub fn error_name(&self) -> &'static str;",
              "docs": "Get JavaScript-compatible error name",
              "attributes": "",
              "line": 471
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "strand-id-encoding",
      "version": "0.1.0",
      "source": "sigil/weave/libs/strand-id-encoding",
      "manifestSha256": "2d0ae9ac9f6b53278364938efdf4fb20f027edd52bc5e00ae9d18ad5c2f68d7d",
      "features": {},
      "publish": true,
      "url": "/reference/rust/strand-id-encoding",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/strand-id-encoding/src/lib.rs",
          "sha256": "de81cdb769390b0fafb60e4f1679d9d20cc6c20a23fde7c699cd111caa238e70",
          "attributes": "",
          "items": [
            {
              "name": "::StrandIdError",
              "kind": "enum_item",
              "signature": "pub enum StrandIdError {\n    #[error(\"Invalid key length: expected 32 bytes, got {0}\")]\n    InvalidKeyLength(usize),\n\n    #[error(\"Invalid z-base32 encoding: {0}\")]\n    InvalidZBase32(String),\n\n    #[error(\"Invalid hex encoding: {0}\")]\n    InvalidHex(String),\n\n    #[error(\"Invalid identity format: {0}\")]\n    InvalidIdentity(String),\n\n    #[error(\"Unsupported identity scheme: {0}\")]\n    UnsupportedIdentityScheme(String),\n\n    #[error(\"Invalid format\")]\n    InvalidFormat,\n\n    #[error(\"Invalid entity type: {0}\")]\n    InvalidEntityType(String),\n}",
              "docs": "Error types for strand ID encoding/decoding operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 36
            },
            {
              "name": "::StrandId",
              "kind": "struct_item",
              "signature": "pub struct StrandId(pub [u8; 32]);",
              "docs": "A wrapper around a 32-byte key to allow for trait implementations.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 61
            },
            {
              "name": "::StrandIdentity",
              "kind": "struct_item",
              "signature": "pub struct StrandIdentity(pub String);",
              "docs": "A wrapper around a String to represent a Strand identity.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 71
            },
            {
              "name": "::EntityType",
              "kind": "enum_item",
              "signature": "pub enum EntityType {\n    /// Strand entity\n    Strand,\n    /// Agent entity\n    Agent,\n    /// Human entity\n    Human,\n    /// Tool entity\n    Tool,\n    /// Organization entity\n    Org,\n}",
              "docs": "Entity types for identity encoding",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 81
            },
            {
              "name": "::EntityType::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "Convert entity type to string for identity",
              "attributes": "",
              "line": 96
            },
            {
              "name": "::encode",
              "kind": "function_item",
              "signature": "pub fn encode(key: &[u8; 32]) -> String;",
              "docs": "Encode a 32-byte key to z-base32",
              "attributes": "",
              "line": 134
            },
            {
              "name": "::encode_hex",
              "kind": "function_item",
              "signature": "pub fn encode_hex(key: &[u8; 32]) -> String;",
              "docs": "Encode a 32-byte key to hexadecimal",
              "attributes": "",
              "line": 139
            },
            {
              "name": "::encode_identity",
              "kind": "function_item",
              "signature": "pub fn encode_identity(key: &[u8; 32], entity_type: EntityType, scheme: &str) -> String;",
              "docs": "Encode a key as an identity string\n\nCreates an identity string in the format: `{scheme}:{entity_type}:{encoded_key}`\nwhere encoded_key is the z-base32 encoded representation of the key.",
              "attributes": "",
              "line": 147
            },
            {
              "name": "::decode",
              "kind": "function_item",
              "signature": "pub fn decode(encoded: &str) -> Result<[u8; 32], StrandIdError>;",
              "docs": "Decode from z-base32",
              "attributes": "",
              "line": 153
            },
            {
              "name": "::decode_hex",
              "kind": "function_item",
              "signature": "pub fn decode_hex(encoded: &str) -> Result<[u8; 32], StrandIdError>;",
              "docs": "Decode from hexadecimal",
              "attributes": "",
              "line": 158
            },
            {
              "name": "::decode_identity",
              "kind": "function_item",
              "signature": "pub fn decode_identity(identity_str: &str) -> Result<[u8; 32], StrandIdError>;",
              "docs": "Decode from identity string\n\nParses identity strings in the format: `{scheme}:{entity_type}:{encoded_key}`\nand returns the decoded 32-byte key.",
              "attributes": "",
              "line": 178
            },
            {
              "name": "compat",
              "kind": "module",
              "signature": "pub mod compat;",
              "docs": "Compatibility module for TypeScript interface parity",
              "attributes": "",
              "line": 276
            },
            {
              "name": "compat::normalize",
              "kind": "function_item",
              "signature": "pub fn normalize(input: &str) -> Result<String, StrandIdError>;",
              "docs": "Normalize any valid input format to z-base32",
              "attributes": "",
              "line": 280
            },
            {
              "name": "compat::is_valid",
              "kind": "function_item",
              "signature": "pub fn is_valid(input: &str) -> bool;",
              "docs": "Check if input is a valid strand ID in any supported format",
              "attributes": "",
              "line": 286
            },
            {
              "name": "compat::decode_any",
              "kind": "function_item",
              "signature": "pub fn decode_any(input: &str) -> Result<[u8; 32], StrandIdError>;",
              "docs": "Decode from any supported format",
              "attributes": "",
              "line": 291
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "strand-vault",
      "version": "0.1.0",
      "source": "sigil/weave/libs/strand-vault",
      "manifestSha256": "6a61cb01dd731c8f73c6acf38646e5ba16b6e18743f889e1d0fd993d93a947f8",
      "features": {},
      "publish": true,
      "url": "/reference/rust/strand-vault",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/strand-vault/src/lib.rs",
          "sha256": "5e04ab4d6628a557803b69f86c48bb94cfde571e3f2be6d46ec8e2cc346edefd",
          "attributes": "",
          "items": [
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "# strand-vault\n\nA factory for managing collections of Strand instances with namespace isolation,\nkey derivation, and efficient storage management with integrated L1feOS ownership tracking.\n\n## Features\n\n- Agent-based namespace isolation\n- Key derivation for deterministic strand creation\n- Multiple storage backends (filesystem, memory)\n- Integrated DID-based access control\n- Efficient caching and resource management\n- Replication support for multiple strands\n\nSee `README.md` for an end-to-end async example.",
              "attributes": "",
              "line": 17
            },
            {
              "name": "fsck",
              "kind": "module",
              "signature": "pub mod fsck;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "permissions",
              "kind": "module",
              "signature": "pub mod permissions;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "policy",
              "kind": "module",
              "signature": "pub mod policy;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "snapshot",
              "kind": "module",
              "signature": "pub mod snapshot;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "storage",
              "kind": "module",
              "signature": "pub mod storage;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "vault",
              "kind": "module",
              "signature": "pub mod vault;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "wal",
              "kind": "module",
              "signature": "pub mod wal;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "pub use config::{CreateOptions, VaultConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{CreateOptions, VaultConfig};",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "pub use error::{Result, VaultError};",
              "kind": "use_declaration",
              "signature": "pub use error::{Result, VaultError};",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "pub use permissions::{AgentPermissions, Permission};",
              "kind": "use_declaration",
              "signature": "pub use permissions::{AgentPermissions, Permission};",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "pub use replication::{ReplicationMode, ReplicationOptions, ReplicationStream};",
              "kind": "use_declaration",
              "signature": "pub use replication::{ReplicationMode, ReplicationOptions, ReplicationStream};",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "pub use storage::{MetadataStorage, Storage, StorageFactory, StrandStorage};",
              "kind": "use_declaration",
              "signature": "pub use storage::{MetadataStorage, Storage, StorageFactory, StrandStorage};",
              "docs": "",
              "attributes": "",
              "line": 32
            },
            {
              "name": "pub use storage::{NoopStoragePool, PooledStrandStorage, StoragePool, StoragePoolStats};",
              "kind": "use_declaration",
              "signature": "pub use storage::{NoopStoragePool, PooledStrandStorage, StoragePool, StoragePoolStats};",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "pub use vault::{SessionHandle, SessionMode, StrandId, StrandVault};",
              "kind": "use_declaration",
              "signature": "pub use vault::{SessionHandle, SessionMode, StrandId, StrandVault};",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use strand::{Config as StrandConfig, Strand};",
              "kind": "use_declaration",
              "signature": "pub use strand::{Config as StrandConfig, Strand};",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "::StrandVault::telemetry_counters",
              "kind": "function_item",
              "signature": "pub fn telemetry_counters(&self) -> (u64, u64, u64, u64);",
              "docs": "Get counters for basic telemetry (subset)",
              "attributes": "",
              "line": 42
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "config",
          "source": "sigil/weave/libs/strand-vault/src/config.rs",
          "sha256": "1515f5756474323ef192435a717baab16e12ba90cb7cad431dd253b064329c38",
          "attributes": "",
          "items": [
            {
              "name": "config::VaultConfig",
              "kind": "struct_item",
              "signature": "pub struct VaultConfig {\n/// Storage factory\n\npub storage_factory: Box<dyn StorageFactory>,\n/// Optional namespace\n\npub namespace: Option<String>,\n/// Default to sparse mode\n\npub sparse_by_default: bool,\n/// Cache size limit (number of strands)\n\npub cache_size: usize,\n/// Auto-close timeout for inactive strands\n\npub inactive_timeout: Option<Duration>,\n/// Enable strand compression\n\npub compression: bool,\n/// Enable encryption for all strands\n\npub encryption: bool,\n/// Allow public read access to strands\n\npub allow_public_read: bool,\n/// Storage pool maximum open strands\n\npub pool_max_open: usize,\n/// Storage pool idle TTL seconds\n\npub pool_idle_ttl_secs: u64,\n/// Quotas and backpressure\n\npub quotas: QuotaConfig,\n/// Optional write-ahead-log directory for recovery\n\npub wal_dir: Option<String>,\n/// Optional indexing configuration\n\npub indexing: Option<IndexingConfig>\n}",
              "docs": "Vault configuration",
              "attributes": "#[derive(Clone)]",
              "line": 9
            },
            {
              "name": "config::QuotaConfig",
              "kind": "struct_item",
              "signature": "pub struct QuotaConfig {\npub namespace_max_bytes: Option<u64>,\npub namespace_max_strands: Option<usize>,\npub storage_headroom_bytes: Option<u64>,\npub io_queue_bound: usize,\npub replication_queue_bound: usize\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Serialize, Deserialize)]",
              "line": 51
            },
            {
              "name": "config::IndexingConfig",
              "kind": "struct_item",
              "signature": "pub struct IndexingConfig {\npub mode: IndexingMode,\npub background: bool,\npub workers: usize\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Serialize, Deserialize)]",
              "line": 60
            },
            {
              "name": "config::IndexingMode",
              "kind": "enum_item",
              "signature": "pub enum IndexingMode {\n    Unindexed,\n    Key,\n    KeyValue,\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug, Serialize, Deserialize)]",
              "line": 67
            },
            {
              "name": "config::VaultConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), crate::error::VaultError>;",
              "docs": "",
              "attributes": "",
              "line": 102
            },
            {
              "name": "config::CreateOptions",
              "kind": "struct_item",
              "signature": "pub struct CreateOptions {\n/// Reserved for future custom keypair injection (not used in core)\n\n#[serde(skip_serializing, skip_deserializing)]\npub keypair: Option<()>,\n/// Custom name for the strand\n\npub name: Option<String>,\n/// Enable sparse mode\n\npub sparse: Option<bool>,\n/// Enable encryption\n\npub encrypted: Option<bool>,\n/// Value encoding (e.g., \"binary\", \"utf-8\", \"json\")\n\npub value_encoding: Option<String>,\n/// Initial metadata\n\npub metadata: Option<serde_json::Value>\n}",
              "docs": "Options for creating a new strand",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 124
            },
            {
              "name": "config::CreateOptions::named",
              "kind": "function_item",
              "signature": "pub fn named(name: impl Into<String>) -> Self;",
              "docs": "Create options with a specific name",
              "attributes": "",
              "line": 147
            },
            {
              "name": "config::CreateOptions::sparse",
              "kind": "function_item",
              "signature": "pub fn sparse() -> Self;",
              "docs": "Create options with sparse mode",
              "attributes": "",
              "line": 155
            },
            {
              "name": "config::CreateOptions::encrypted",
              "kind": "function_item",
              "signature": "pub fn encrypted() -> Self;",
              "docs": "Create options with encryption",
              "attributes": "",
              "line": 163
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/libs/strand-vault/src/error.rs",
          "sha256": "1202f599f433a4c7d5b403d99a7a4ecc4a9ad5b2d1eae4f73a17f13d82f54571",
          "attributes": "",
          "items": [
            {
              "name": "error::VaultError",
              "kind": "enum_item",
              "signature": "pub enum VaultError {\n    #[error(\"Storage error: {0}\")]\n    Storage(#[from] StorageError),\n\n    #[error(\"Strand error: {0}\")]\n    Strand(#[from] strand_errors::StrandError),\n\n    #[error(\"No organization DID configured\")]\n    NoOrganizationDid,\n\n    #[error(\"Unauthorized agent: {0}\")]\n    UnauthorizedAgent(String),\n\n    #[error(\"Invalid namespace: {0}\")]\n    InvalidNamespace(String),\n\n    #[error(\"Key derivation failed: {0}\")]\n    KeyDerivation(String),\n\n    #[error(\"Strand not found: {0:?}\")]\n    StrandNotFound(StrandId),\n\n    #[error(\"Permission denied: {0}\")]\n    PermissionDenied(String),\n\n    #[error(\"Invalid configuration: {0}\")]\n    InvalidConfig(String),\n\n    #[error(\"Quota exceeded: {0}\")]\n    QuotaExceeded(String),\n\n    #[error(\"Throttled: {0}\")]\n    Throttled(String),\n\n    #[error(\"Replication error: {0}\")]\n    Replication(String),\n\n    #[error(\"Capability rejected\")]\n    CapabilityRejected,\n\n    #[error(\"Replication divergence detected: {0}\")]\n    DivergenceDetected(String),\n\n    #[error(\"Replication lag high: {0}\")]\n    ReplicationLagHigh(String),\n\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    // Identity errors are not used in core vault; keep variant for forward compat behind feature gates if needed\n    #[error(\"Strand creation error: {0}\")]\n    StrandCreation(#[from] strand::StrandError),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] bincode::Error),\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n\n    #[error(\"Internal error: {0}\")]\n    Internal(String),\n}",
              "docs": "Vault-specific errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 9
            },
            {
              "name": "error::StorageError",
              "kind": "enum_item",
              "signature": "pub enum StorageError {\n    #[error(\"Backend unavailable: {0}\")]\n    BackendUnavailable(String),\n\n    #[error(\"Metadata corrupted: {0}\")]\n    MetadataCorrupted(String),\n\n    #[error(\"Storage full\")]\n    StorageFull,\n\n    #[error(\"Invalid path: {0}\")]\n    InvalidPath(String),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "Storage-specific errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 80
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, VaultError>;",
              "docs": "Result type alias",
              "attributes": "",
              "line": 98
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "fsck",
          "source": "sigil/weave/libs/strand-vault/src/fsck.rs",
          "sha256": "7c48f8a711e08a7d63d9a5153297d6cd3ccfb64224e2477fb5e415addb694116",
          "attributes": "",
          "items": [
            {
              "name": "fsck::FsckReport",
              "kind": "struct_item",
              "signature": "pub struct FsckReport {\npub strands_checked: usize,\npub errors: Vec<String>\n}",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "fsck::fsck",
              "kind": "function_item",
              "signature": "pub async fn fsck<V>(vault: &V) -> Result<FsckReport>\nwhere\n    V: FsckProvider,;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "fsck::FsckProvider",
              "kind": "trait_item",
              "signature": "pub trait FsckProvider {\n    async fn list_strands_ids(&self) -> Result<Vec<StrandId>>;\n    async fn check_strand(&self, id: &StrandId) -> Result<()>;\n}",
              "docs": "",
              "attributes": "#[async_trait::async_trait]",
              "line": 29
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "permissions",
          "source": "sigil/weave/libs/strand-vault/src/permissions.rs",
          "sha256": "6cf6fc50cda2a0bb8a70ffbf49b141f70e6847f4e900e00d945372b864c391a6",
          "attributes": "",
          "items": [
            {
              "name": "permissions::AgentPermissions",
              "kind": "struct_item",
              "signature": "pub struct AgentPermissions {\n/// Can create new strands\n\npub can_create: bool,\n/// Can delete strands\n\npub can_delete: bool,\n/// Can authorize other agents\n\npub can_authorize: bool,\n/// Maximum number of strands allowed (None = unlimited)\n\npub max_strands: Option<usize>,\n/// Maximum storage size in bytes (None = unlimited)\n\npub max_storage_bytes: Option<u64>,\n/// Allowed namespaces (None = all)\n\npub allowed_namespaces: Option<HashSet<String>>,\n/// Custom permissions\n\npub custom: HashSet<String>\n}",
              "docs": "Permissions for an agent within the vault",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "permissions::AgentPermissions::full_access",
              "kind": "function_item",
              "signature": "pub fn full_access() -> Self;",
              "docs": "Create permissions with all capabilities",
              "attributes": "",
              "line": 47
            },
            {
              "name": "permissions::AgentPermissions::read_only",
              "kind": "function_item",
              "signature": "pub fn read_only() -> Self;",
              "docs": "Create read-only permissions",
              "attributes": "",
              "line": 60
            },
            {
              "name": "permissions::AgentPermissions::has_permission",
              "kind": "function_item",
              "signature": "pub fn has_permission(&self, permission: Permission) -> bool;",
              "docs": "Check if a specific permission is granted",
              "attributes": "",
              "line": 73
            },
            {
              "name": "permissions::Permission",
              "kind": "enum_item",
              "signature": "pub enum Permission {\n    Create,\n    Delete,\n    Authorize,\n    Custom(String),\n}",
              "docs": "Individual permission types",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash)]",
              "line": 85
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "policy",
          "source": "sigil/weave/libs/strand-vault/src/policy.rs",
          "sha256": "dd306870e920c18bef3bd550245625e9f3f6b3f0de443d5e4446391e196700a8",
          "attributes": "",
          "items": [
            {
              "name": "policy::AccessPolicy",
              "kind": "trait_item",
              "signature": "pub trait AccessPolicy: Send + Sync {\n    fn can_read(&self, requesting_agent: Option<&str>, id: &StrandId) -> bool;\n    fn can_write(&self, requesting_agent: Option<&str>, id: &StrandId) -> bool;\n    fn can_delete(&self, requesting_agent: &str, id: &StrandId, perms: &AgentPermissions) -> bool;\n    fn can_authorize(&self, current_authorizers: usize, new_permissions: &AgentPermissions)\n        -> bool;\n}",
              "docs": "Access policy to control read/write/delete/authorization",
              "attributes": "",
              "line": 8
            },
            {
              "name": "policy::DefaultPolicy",
              "kind": "struct_item",
              "signature": "pub struct DefaultPolicy {\npub allow_public_read: bool\n}",
              "docs": "Default permissive policy with optional public-read flag",
              "attributes": "#[derive(Default)]",
              "line": 18
            },
            {
              "name": "policy::AccessPolicyRef",
              "kind": "type_item",
              "signature": "pub type AccessPolicyRef = Arc<dyn AccessPolicy>;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "policy::WriterOnlyPolicy",
              "kind": "struct_item",
              "signature": "pub struct WriterOnlyPolicy {\npub allow_public_read: bool\n}",
              "docs": "Writer-only policy: only agent namespace owner can write/delete; reads per allow flag",
              "attributes": "",
              "line": 67
            },
            {
              "name": "policy::OrgScopedPolicy",
              "kind": "struct_item",
              "signature": "pub struct OrgScopedPolicy {\npub allow_public_read: bool,\npub allowed_prefixes: Vec<String>\n}",
              "docs": "Org-scoped policy: only namespaces with allowed prefixes can write",
              "attributes": "",
              "line": 109
            },
            {
              "name": "policy::ReadOnlyMirrorPolicy",
              "kind": "struct_item",
              "signature": "pub struct ReadOnlyMirrorPolicy;",
              "docs": "Read-only mirror policy: no writes/deletes/authorizations",
              "attributes": "",
              "line": 159
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "replication",
          "source": "sigil/weave/libs/strand-vault/src/replication.rs",
          "sha256": "ec882f5e29ed5c7effecf365a4da97f499517ca462f6c926679878954fa9f7bc",
          "attributes": "",
          "items": [
            {
              "name": "replication::ReplicationMode",
              "kind": "enum_item",
              "signature": "pub enum ReplicationMode {\n    /// Push local changes to remote\n    Push,\n    /// Pull remote changes to local\n    Pull,\n    /// Bidirectional sync\n    Sync,\n}",
              "docs": "Replication mode",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 16
            },
            {
              "name": "replication::ReplicationOptions",
              "kind": "struct_item",
              "signature": "pub struct ReplicationOptions {\n/// Strands to replicate\n\npub strands: Vec<StrandId>,\n/// Replication mode\n\npub mode: ReplicationMode,\n/// Enable live mode (continuous replication)\n\npub live: bool,\n/// Enable encryption\n\npub encrypted: bool,\n/// Bandwidth limit in bytes/sec (None = unlimited)\n\npub bandwidth_limit: Option<u64>,\n/// Capability token for auth (opaque)\n\npub capability: Option<Vec<u8>>,\n/// Optional per-strand starting sequence for resumable replication\n\npub start_from: Option<Vec<(StrandId, u64)>>\n}",
              "docs": "Options for replication",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 27
            },
            {
              "name": "replication::ReplicationStream",
              "kind": "struct_item",
              "signature": "pub struct ReplicationStream {\n\n}",
              "docs": "Replication stream for multiple strands",
              "attributes": "",
              "line": 65
            },
            {
              "name": "replication::ReplicationStream::replicate",
              "kind": "function_item",
              "signature": "pub async fn replicate<S>(&mut self, mut stream: S) -> Result<()>\n    where\n        S: AsyncRead + AsyncWrite + Unpin + Send + 'static,;",
              "docs": "Run replication over a stream",
              "attributes": "#[instrument(name = \"strand_vault.replicate\", skip_all, fields(strands = %self.strands.len()))]",
              "line": 90
            },
            {
              "name": "replication::VaultReplicator",
              "kind": "struct_item",
              "signature": "pub struct VaultReplicator {\n\n}",
              "docs": "Handles incoming replication connections",
              "attributes": "",
              "line": 285
            },
            {
              "name": "replication::VaultReplicator::new",
              "kind": "function_item",
              "signature": "pub fn new(vault: StrandVault) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 290
            },
            {
              "name": "replication::VaultReplicator::handle_stream",
              "kind": "function_item",
              "signature": "pub async fn handle_stream<S>(&mut self, mut stream: S) -> Result<()>\n    where\n        S: AsyncRead + AsyncWrite + Unpin + Send + 'static,;",
              "docs": "Handle an incoming replication stream",
              "attributes": "",
              "line": 295
            },
            {
              "name": "replication::StrandVault::replicate",
              "kind": "function_item",
              "signature": "pub async fn replicate(&self, opts: ReplicationOptions) -> Result<ReplicationStream>;",
              "docs": "Create a replication stream for multiple strands",
              "attributes": "",
              "line": 450
            },
            {
              "name": "replication::StrandVault::accept_replication",
              "kind": "function_item",
              "signature": "pub async fn accept_replication<S>(&self, stream: S) -> Result<()>\n    where\n        S: AsyncRead + AsyncWrite + Unpin + Send + 'static,;",
              "docs": "Accept incoming replication",
              "attributes": "",
              "line": 477
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "snapshot",
          "source": "sigil/weave/libs/strand-vault/src/snapshot.rs",
          "sha256": "416417ac35486beb8d76cc8d096146da6b7adb8d4518648ebf9db744b5f19f6f",
          "attributes": "",
          "items": [
            {
              "name": "snapshot::SnapshotRef",
              "kind": "struct_item",
              "signature": "pub struct SnapshotRef {\npub path: PathBuf,\npub label: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 8
            },
            {
              "name": "snapshot::snapshot_dir",
              "kind": "function_item",
              "signature": "pub async fn snapshot_dir(src: &Path, dst: &Path) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "snapshot::restore_dir",
              "kind": "function_item",
              "signature": "pub async fn restore_dir(src: &Path, dst: &Path) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 21
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "storage",
          "source": "sigil/weave/libs/strand-vault/src/storage/mod.rs",
          "sha256": "3a6fd877ee2fb74f9c95d93ccdcb97c6012aae4e78ef0f375738bc73229d4941",
          "attributes": "",
          "items": [
            {
              "name": "storage::filesystem",
              "kind": "module",
              "signature": "pub mod filesystem;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "storage::memory",
              "kind": "module",
              "signature": "pub mod memory;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "storage::rocksdb",
              "kind": "module",
              "signature": "pub mod rocksdb;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "storage::Storage",
              "kind": "trait_item",
              "signature": "pub trait Storage: Send + Sync {\n    /// Get storage for a specific strand\n    async fn get_strand_storage(&self, id: &StrandId) -> Result<Box<dyn StrandStorage>>;\n\n    /// List all strand IDs in storage\n    async fn list_strands(&self) -> Result<Vec<StrandId>>;\n\n    /// Delete a strand from storage\n    async fn delete_strand(&self, id: &StrandId) -> Result<()>;\n\n    /// Get metadata storage\n    async fn get_metadata_storage(&self) -> Result<Box<dyn MetadataStorage>>;\n\n    /// Optional local filesystem path for a given strand, if applicable.\n    ///\n    /// Backends that are not directory-based should return None.\n    fn strand_local_path(&self, _id: &StrandId) -> Option<std::path::PathBuf> ;\n}",
              "docs": "Storage backend trait",
              "attributes": "#[async_trait]",
              "line": 17
            },
            {
              "name": "storage::StrandStorage",
              "kind": "trait_item",
              "signature": "pub trait StrandStorage: Send + Sync {\n    async fn read_block(&self, index: u64) -> Result<Option<Vec<u8>>>;\n    async fn write_block(&self, index: u64, data: &[u8]) -> Result<()>;\n    async fn delete_block(&self, index: u64) -> Result<()>;\n    async fn truncate(&self, length: u64) -> Result<()>;\n    async fn list_blocks(&self) -> Result<Vec<u64>>;\n}",
              "docs": "Storage for individual strand blocks",
              "attributes": "#[async_trait]",
              "line": 40
            },
            {
              "name": "storage::MetadataStorage",
              "kind": "trait_item",
              "signature": "pub trait MetadataStorage: Send + Sync {\n    async fn get_master_key(&self) -> Result<Option<KeyPair>>;\n    async fn set_master_key(&self, key: &KeyPair) -> Result<()>;\n\n    async fn get_authorized_agents(\n        &self,\n    ) -> Result<Option<dashmap::DashMap<String, AgentPermissions>>>;\n    async fn add_authorized_agent(&self, id: &str, perms: &AgentPermissions) -> Result<()>;\n    async fn remove_authorized_agent(&self, id: &str) -> Result<()>;\n\n    async fn get_namespace(&self) -> Result<Option<String>>;\n    async fn set_namespace(&self, namespace: &str) -> Result<()>;\n\n    /// Persisted policy identifier/config\n    async fn get_policy(&self) -> Result<Option<String>>;\n    async fn set_policy(&self, policy: &str) -> Result<()>;\n}",
              "docs": "Storage for vault metadata",
              "attributes": "#[async_trait]",
              "line": 50
            },
            {
              "name": "storage::StorageFactory",
              "kind": "trait_item",
              "signature": "pub trait StorageFactory: Send + Sync {\n    fn create(&self) -> Box<dyn Storage>;\n    fn clone_factory(&self) -> Box<dyn StorageFactory>;\n}",
              "docs": "Factory for creating storage backends",
              "attributes": "",
              "line": 69
            },
            {
              "name": "storage::parse_strand_id",
              "kind": "function_item",
              "signature": "pub fn parse_strand_id(s: impl AsRef<str>) -> Result<StrandId>;",
              "docs": "Parse a strand ID from a string",
              "attributes": "",
              "line": 82
            },
            {
              "name": "storage::StoragePoolStats",
              "kind": "struct_item",
              "signature": "pub struct StoragePoolStats {\npub open_strands: usize\n}",
              "docs": "Storage pooling interfaces (first slice)",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 119
            },
            {
              "name": "storage::StoragePool",
              "kind": "trait_item",
              "signature": "pub trait StoragePool: Send + Sync {\n    async fn acquire(&self, id: &StrandId) -> Result<PooledStrandStorage>;\n    fn stats(&self) -> StoragePoolStats;\n}",
              "docs": "",
              "attributes": "#[async_trait]",
              "line": 124
            },
            {
              "name": "storage::PooledStrandStorage",
              "kind": "struct_item",
              "signature": "pub struct PooledStrandStorage {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 129
            },
            {
              "name": "storage::PooledStrandStorage::new",
              "kind": "function_item",
              "signature": "pub fn new(inner: Box<dyn StrandStorage>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 134
            },
            {
              "name": "storage::PooledStrandStorage::into_inner",
              "kind": "function_item",
              "signature": "pub fn into_inner(self) -> Box<dyn StrandStorage>;",
              "docs": "",
              "attributes": "",
              "line": 138
            },
            {
              "name": "storage::NoopStoragePool",
              "kind": "struct_item",
              "signature": "pub struct NoopStoragePool {\n\n}",
              "docs": "Default no-op storage pool that just forwards to backend",
              "attributes": "",
              "line": 150
            },
            {
              "name": "storage::NoopStoragePool::new",
              "kind": "function_item",
              "signature": "pub fn new(backend: Arc<dyn Storage>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 155
            },
            {
              "name": "storage::LruStoragePool",
              "kind": "struct_item",
              "signature": "pub struct LruStoragePool {\n\n}",
              "docs": "Simple LRU storage pool with TTL and max-open",
              "attributes": "",
              "line": 173
            },
            {
              "name": "storage::LruStoragePool::new",
              "kind": "function_item",
              "signature": "pub fn new(backend: Arc<dyn Storage>, max_open: usize, idle_ttl: Duration) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 182
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "storage::filesystem",
          "source": "sigil/weave/libs/strand-vault/src/storage/filesystem.rs",
          "sha256": "27561a4bb041f183559da70d60306cc6673841c02fe922e70c8abd7b1ad6cb6e",
          "attributes": "",
          "items": [
            {
              "name": "storage::filesystem::FileSystemStorage",
              "kind": "struct_item",
              "signature": "pub struct FileSystemStorage {\n\n}",
              "docs": "Filesystem storage backend",
              "attributes": "",
              "line": 19
            },
            {
              "name": "storage::filesystem::FileSystemStorage::new",
              "kind": "function_item",
              "signature": "pub fn new(root: impl AsRef<Path>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "storage::filesystem::FileStrandStorage",
              "kind": "struct_item",
              "signature": "pub struct FileStrandStorage {\n\n}",
              "docs": "File-based strand storage",
              "attributes": "",
              "line": 104
            },
            {
              "name": "storage::filesystem::FileMetadataStorage",
              "kind": "struct_item",
              "signature": "pub struct FileMetadataStorage {\n\n}",
              "docs": "File-based metadata storage",
              "attributes": "",
              "line": 186
            },
            {
              "name": "storage::filesystem::FileSystemStorageFactory",
              "kind": "struct_item",
              "signature": "pub struct FileSystemStorageFactory {\n\n}",
              "docs": "Storage factory for filesystem backend",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 359
            },
            {
              "name": "storage::filesystem::FileSystemStorageFactory::new",
              "kind": "function_item",
              "signature": "pub fn new(root: impl AsRef<Path>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 364
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "storage::memory",
          "source": "sigil/weave/libs/strand-vault/src/storage/memory.rs",
          "sha256": "e3308c58dce8986a6cb87f06015d2572c44778f0123a5bb684c1393b4067bbcd",
          "attributes": "",
          "items": [
            {
              "name": "storage::memory::MemoryStorage",
              "kind": "struct_item",
              "signature": "pub struct MemoryStorage {\n\n}",
              "docs": "In-memory storage backend",
              "attributes": "#[derive(Clone)]",
              "line": 20
            },
            {
              "name": "storage::memory::MemoryStorage::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "storage::memory::MemoryStorageFactory",
              "kind": "struct_item",
              "signature": "pub struct MemoryStorageFactory;",
              "docs": "Storage factory for memory backend",
              "attributes": "#[derive(Clone, Default)]",
              "line": 193
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "storage::rocksdb",
          "source": "sigil/weave/libs/strand-vault/src/storage/rocksdb.rs",
          "sha256": "110203b3da0d9a28da5de4ba253a9a85b15b850e6e90b9c1d7cd5a1c4b11910c",
          "attributes": "",
          "items": [
            {
              "name": "storage::rocksdb::RocksDbStorage",
              "kind": "struct_item",
              "signature": "pub struct RocksDbStorage {\n\n}",
              "docs": "RocksDB storage backend",
              "attributes": "",
              "line": 22
            },
            {
              "name": "storage::rocksdb::RocksDbStorage::open",
              "kind": "function_item",
              "signature": "pub fn open(path: impl AsRef<Path>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "storage::rocksdb::RocksDbStrandStorage",
              "kind": "struct_item",
              "signature": "pub struct RocksDbStrandStorage {\n\n}",
              "docs": "RocksDB strand storage",
              "attributes": "",
              "line": 127
            },
            {
              "name": "storage::rocksdb::RocksDbMetadataStorage",
              "kind": "struct_item",
              "signature": "pub struct RocksDbMetadataStorage {\n\n}",
              "docs": "RocksDB metadata storage",
              "attributes": "",
              "line": 221
            },
            {
              "name": "storage::rocksdb::RocksDbStorageFactory",
              "kind": "struct_item",
              "signature": "pub struct RocksDbStorageFactory {\n\n}",
              "docs": "Storage factory for RocksDB backend",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 372
            },
            {
              "name": "storage::rocksdb::RocksDbStorageFactory::new",
              "kind": "function_item",
              "signature": "pub fn new(root: impl AsRef<Path>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 377
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "vault",
          "source": "sigil/weave/libs/strand-vault/src/vault.rs",
          "sha256": "b4715ae737c80fd0eaec560ff36c59f62c5004d6c81d9d6173ff7e09f03093bc",
          "attributes": "",
          "items": [
            {
              "name": "vault::StrandId",
              "kind": "enum_item",
              "signature": "pub enum StrandId {\n    /// Identified by public key\n    PublicKey([u8; 32]),\n    /// Identified by name\n    Name(String),\n    /// Identified by index\n    Index(u32),\n    /// Agent-namespaced strand (opaque namespace string)\n    AgentStrand {\n        agent_namespace: String,\n        strand_name: String,\n    },\n}",
              "docs": "Strand identifier types",
              "attributes": "#[derive(Debug, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 26
            },
            {
              "name": "vault::StrandVault",
              "kind": "struct_item",
              "signature": "pub struct StrandVault {\n\n}",
              "docs": "Main StrandVault structure",
              "attributes": "",
              "line": 57
            },
            {
              "name": "vault::VaultMetrics::cache_hits",
              "kind": "function_item",
              "signature": "pub fn cache_hits(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 114
            },
            {
              "name": "vault::VaultMetrics::policy_denied_read",
              "kind": "function_item",
              "signature": "pub fn policy_denied_read(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 117
            },
            {
              "name": "vault::VaultMetrics::policy_denied_delete",
              "kind": "function_item",
              "signature": "pub fn policy_denied_delete(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 121
            },
            {
              "name": "vault::VaultMetrics::divergence_detected",
              "kind": "function_item",
              "signature": "pub fn divergence_detected(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 125
            },
            {
              "name": "vault::VaultMetrics::replication_lag_high",
              "kind": "function_item",
              "signature": "pub fn replication_lag_high(&self) -> u64;",
              "docs": "",
              "attributes": "#[allow(dead_code)]",
              "line": 130
            },
            {
              "name": "vault::VaultHealth",
              "kind": "struct_item",
              "signature": "pub struct VaultHealth {\npub strands_cached: usize,\npub authorized_agents: usize,\npub cache_hits: u64,\npub policy_denied_read: u64,\npub policy_denied_delete: u64,\npub divergence_detected: u64,\npub replication_lag_high: u64,\npub io_permits_available: usize,\npub repl_permits_available: usize\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 137
            },
            {
              "name": "vault::AppendGuard",
              "kind": "struct_item",
              "signature": "pub struct AppendGuard {\npub agent_namespace: String,\npub strand_id: StrandId\n}",
              "docs": "",
              "attributes": "",
              "line": 149
            },
            {
              "name": "vault::StrandVault::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: VaultConfig) -> Result<Self>;",
              "docs": "Create a new vault",
              "attributes": "",
              "line": 160
            },
            {
              "name": "vault::StrandVault::derive_keypair",
              "kind": "function_item",
              "signature": "pub fn derive_keypair(&self, agent_namespace: &str, name: &str) -> Result<KeyPair>;",
              "docs": "Derive a keypair for an agent's named strand",
              "attributes": "",
              "line": 252
            },
            {
              "name": "vault::StrandVault::authorize_agent",
              "kind": "function_item",
              "signature": "pub async fn authorize_agent(\n        &self,\n        agent_id: String,\n        permissions: AgentPermissions,\n    ) -> Result<()>;",
              "docs": "Authorize an agent to create strands",
              "attributes": "",
              "line": 266
            },
            {
              "name": "vault::StrandVault::revoke_agent",
              "kind": "function_item",
              "signature": "pub async fn revoke_agent(&self, agent_id: &str) -> Result<()>;",
              "docs": "Revoke an agent's authorization",
              "attributes": "",
              "line": 284
            },
            {
              "name": "vault::StrandVault::get_agent_strand",
              "kind": "function_item",
              "signature": "pub async fn get_agent_strand(&self, agent_namespace: &str, name: &str) -> Result<Arc<Strand>>;",
              "docs": "Get or create a strand for a specific agent",
              "attributes": "",
              "line": 295
            },
            {
              "name": "vault::StrandVault::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, public_key: &[u8; 32]) -> Result<Arc<Strand>>;",
              "docs": "Get a strand by public key (must verify agent ownership)",
              "attributes": "",
              "line": 334
            },
            {
              "name": "vault::StrandVault::create_for_agent",
              "kind": "function_item",
              "signature": "pub async fn create_for_agent(\n        &self,\n        agent_namespace: &str,\n        opts: CreateOptions,\n    ) -> Result<Arc<Strand>>;",
              "docs": "Create a new strand for an agent",
              "attributes": "",
              "line": 359
            },
            {
              "name": "vault::StrandVault::get_by_name",
              "kind": "function_item",
              "signature": "pub async fn get_by_name(&self, name: &str) -> Result<Arc<Strand>>;",
              "docs": "Get a strand by name",
              "attributes": "",
              "line": 398
            },
            {
              "name": "vault::StrandVault::get_by_index",
              "kind": "function_item",
              "signature": "pub async fn get_by_index(&self, index: u32) -> Result<Arc<Strand>>;",
              "docs": "Get a strand by index",
              "attributes": "",
              "line": 409
            },
            {
              "name": "vault::StrandVault::list",
              "kind": "function_item",
              "signature": "pub async fn list(&self) -> Result<Vec<StrandId>>;",
              "docs": "List all strands",
              "attributes": "",
              "line": 420
            },
            {
              "name": "vault::StrandVault::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, id: &StrandId, requesting_agent: &str) -> Result<()>;",
              "docs": "Delete a strand",
              "attributes": "",
              "line": 436
            },
            {
              "name": "vault::StrandVault::check_headroom",
              "kind": "function_item",
              "signature": "pub fn check_headroom(&self, agent_namespace: &str, additional_bytes: u64) -> Result<()>;",
              "docs": "Check if appending bytes would exceed quotas or headroom",
              "attributes": "",
              "line": 526
            },
            {
              "name": "vault::StrandVault::record_append",
              "kind": "function_item",
              "signature": "pub fn record_append(&self, agent_namespace: &str, delta_bytes: u64);",
              "docs": "Record an append after it succeeds to update namespace byte accounting",
              "attributes": "",
              "line": 550
            },
            {
              "name": "vault::StrandVault::health",
              "kind": "function_item",
              "signature": "pub fn health(&self) -> VaultHealth;",
              "docs": "Health snapshot summarizing internal state",
              "attributes": "",
              "line": 559
            },
            {
              "name": "vault::StrandVault::reindex",
              "kind": "function_item",
              "signature": "pub async fn reindex(&self, _id: &StrandId) -> Result<()>;",
              "docs": "Trigger reindex for a strand's KV index.\n\nFail-closed until a real index builder ships \u2014 never silent success.",
              "attributes": "",
              "line": 591
            },
            {
              "name": "vault::StrandVault::export_prometheus_text",
              "kind": "function_item",
              "signature": "pub fn export_prometheus_text(&self) -> String;",
              "docs": "Export Prometheus-style metrics text for quick scraping",
              "attributes": "",
              "line": 596
            },
            {
              "name": "vault::StrandVault::health_json",
              "kind": "function_item",
              "signature": "pub fn health_json(&self) -> serde_json::Value;",
              "docs": "Export a simple health JSON snapshot",
              "attributes": "",
              "line": 628
            },
            {
              "name": "vault::StrandVault::snapshot",
              "kind": "function_item",
              "signature": "pub async fn snapshot(\n        &self,\n        set: &[StrandId],\n        label: &str,\n        dst_root: &std::path::Path,\n    ) -> Result<crate::snapshot::SnapshotRef>;",
              "docs": "Create a filesystem snapshot for a set of strands under a label",
              "attributes": "",
              "line": 644
            },
            {
              "name": "vault::StrandVault::restore",
              "kind": "function_item",
              "signature": "pub async fn restore(&self, snapshot: &crate::snapshot::SnapshotRef) -> Result<()>;",
              "docs": "Restore a snapshot into the storage root for the strands present",
              "attributes": "",
              "line": 667
            },
            {
              "name": "vault::StrandVault::begin_append",
              "kind": "function_item",
              "signature": "pub async fn begin_append(\n        &self,\n        agent_namespace: &str,\n        _strand_id: &StrandId,\n        additional_bytes: u64,\n    ) -> Result<AppendGuard>;",
              "docs": "Begin an append: enforce headroom and acquire an IO permit. Call `complete_append` when done.",
              "attributes": "#[instrument(skip(self))]",
              "line": 682
            },
            {
              "name": "vault::StrandVault::complete_append",
              "kind": "function_item",
              "signature": "pub async fn complete_append(&self, guard: AppendGuard, actual_bytes: u64) -> Result<()>;",
              "docs": "Complete an append: record accounting and write WAL entry if configured",
              "attributes": "#[instrument(skip(self, guard))]",
              "line": 705
            },
            {
              "name": "vault::StrandVault::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&self) -> Result<()>;",
              "docs": "Shutdown the vault",
              "attributes": "",
              "line": 725
            },
            {
              "name": "vault::StrandVault::get_strand_by_discovery_key",
              "kind": "function_item",
              "signature": "pub fn get_strand_by_discovery_key(&self, key: &[u8; 32]) -> Option<Arc<Strand>>;",
              "docs": "Find a cached strand by discovery key (if present)",
              "attributes": "",
              "line": 736
            },
            {
              "name": "vault::StrandVault::resolve_id_by_discovery_key",
              "kind": "function_item",
              "signature": "pub fn resolve_id_by_discovery_key(&self, key: &[u8; 32]) -> Option<StrandId>;",
              "docs": "Resolve a strand id by its discovery key (if present in cache)",
              "attributes": "",
              "line": 747
            },
            {
              "name": "vault::StrandVault::append_with_repl_permit",
              "kind": "function_item",
              "signature": "pub async fn append_with_repl_permit(&self, strand: &mut Strand, data: &[u8]) -> Result<u64>;",
              "docs": "Append to an existing strand using replication semaphore and tracing",
              "attributes": "#[instrument(skip(self, strand, data))]",
              "line": 759
            },
            {
              "name": "vault::StrandVault::ingest_block_with_repl_permit",
              "kind": "function_item",
              "signature": "pub async fn ingest_block_with_repl_permit(\n        &self,\n        discovery_key: &[u8; 32],\n        seq: u64,\n        header: &Header,\n        data: &[u8],\n    ) -> Result<()>;",
              "docs": "Ingest a verified remote block with replication backpressure and quota enforcement.\nThis is idempotent: if the block sequence was already applied, it is treated as success.",
              "attributes": "",
              "line": 775
            },
            {
              "name": "vault::StrandVault::checkout_by_discovery_key",
              "kind": "function_item",
              "signature": "pub fn checkout_by_discovery_key(\n        &self,\n        key: &[u8; 32],\n        mode: SessionMode,\n    ) -> Result<SessionHandle>;",
              "docs": "Checkout by discovery key for receiver-side exclusive writes",
              "attributes": "",
              "line": 841
            },
            {
              "name": "vault::StrandVault::record_divergence_detected",
              "kind": "function_item",
              "signature": "pub fn record_divergence_detected(&self);",
              "docs": "Metrics helpers for replication receiver",
              "attributes": "",
              "line": 863
            },
            {
              "name": "vault::StrandVault::record_replication_lag_high",
              "kind": "function_item",
              "signature": "pub fn record_replication_lag_high(&self);",
              "docs": "",
              "attributes": "",
              "line": 869
            },
            {
              "name": "vault::StrandVault::begin_atom",
              "kind": "function_item",
              "signature": "pub async fn begin_atom(&self, strands: &[StrandId]) -> Result<Atom>;",
              "docs": "Begin a multi-strand atom (WAL-backed)",
              "attributes": "",
              "line": 876
            },
            {
              "name": "vault::StrandVault::agent_namespace",
              "kind": "function_item",
              "signature": "pub fn agent_namespace(&self, agent_namespace: &str, namespace: &str) -> String;",
              "docs": "Create a namespaced view of the vault for a specific agent",
              "attributes": "",
              "line": 897
            },
            {
              "name": "vault::StrandVault::replay_wal",
              "kind": "function_item",
              "signature": "pub async fn replay_wal(&self, wal_dir: &std::path::Path) -> Result<()>;",
              "docs": "Run WAL replay on startup applying entries to storage and in-memory state",
              "attributes": "",
              "line": 907
            },
            {
              "name": "vault::StrandVault::checkout",
              "kind": "function_item",
              "signature": "pub fn checkout(&self, agent: &str, id: &StrandId, mode: SessionMode) -> Result<SessionHandle>;",
              "docs": "Session checkout modes",
              "attributes": "",
              "line": 935
            },
            {
              "name": "vault::Atom",
              "kind": "struct_item",
              "signature": "pub struct Atom {\n\n}",
              "docs": "Atom representing a multi-strand batch",
              "attributes": "",
              "line": 1009
            },
            {
              "name": "vault::Atom::append",
              "kind": "function_item",
              "signature": "pub fn append(&mut self, id: StrandId, bytes: Vec<u8>);",
              "docs": "Schedule an append to a strand within this atom",
              "attributes": "",
              "line": 1019
            },
            {
              "name": "vault::Atom::commit",
              "kind": "function_item",
              "signature": "pub async fn commit(mut self) -> Result<()>;",
              "docs": "Commit the atom: write WAL, then apply appends",
              "attributes": "",
              "line": 1024
            },
            {
              "name": "vault::Atom::rollback",
              "kind": "function_item",
              "signature": "pub fn rollback(self);",
              "docs": "Rollback: no-op since we only WAL on commit; drop the batch",
              "attributes": "",
              "line": 1050
            },
            {
              "name": "vault::SessionMode",
              "kind": "enum_item",
              "signature": "pub enum SessionMode {\n    Read,\n    WriteExclusive,\n}",
              "docs": "Session modes for checkout",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 1055
            },
            {
              "name": "vault::SessionHandle",
              "kind": "struct_item",
              "signature": "pub struct SessionHandle {\n\n}",
              "docs": "Session handle RAII",
              "attributes": "#[derive(Debug)]",
              "line": 1062
            },
            {
              "name": "vault::SessionHandle::read",
              "kind": "function_item",
              "signature": "pub fn read() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 1078
            },
            {
              "name": "vault::SessionHandle::write",
              "kind": "function_item",
              "signature": "pub fn write(key: [u8; 32], permit: OwnedSemaphorePermit) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 1085
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        },
        {
          "module": "wal",
          "source": "sigil/weave/libs/strand-vault/src/wal.rs",
          "sha256": "87f77b2d937e5b943d5b8039b34bf39bd919de77c635bfa3365b150a495c7ccf",
          "attributes": "",
          "items": [
            {
              "name": "wal::WalEntry",
              "kind": "enum_item",
              "signature": "pub enum WalEntry {\n    // Metadata updates\n    SetNamespace(String),\n    SetPolicy(String),\n    AddAgent {\n        id: String,\n        perms: crate::permissions::AgentPermissions,\n    },\n    RemoveAgent {\n        id: String,\n    },\n\n    // Strand ops\n    Append {\n        strand: String,\n        seq: u64,\n        size: u64,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Debug, serde::Serialize, serde::Deserialize)]",
              "line": 10
            },
            {
              "name": "wal::Wal",
              "kind": "struct_item",
              "signature": "pub struct Wal {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "wal::Wal::new",
              "kind": "function_item",
              "signature": "pub fn new(dir: impl Into<PathBuf>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "wal::Wal::append",
              "kind": "function_item",
              "signature": "pub async fn append(&self, entry: &WalEntry) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "wal::Wal::replay",
              "kind": "function_item",
              "signature": "pub async fn replay<F: FnMut(WalEntry) -> Result<()>>(&self, mut apply: F) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 59
            }
          ],
          "parseErrors": false,
          "reviewNote": "Vault construction does not automatically replay WAL entries. Snapshotting is a best-effort directory copy; replication mode/live settings are not implemented as runtime controls, and the capability preamble is not ACT authorization verification. See /libraries/strand-vault/overview."
        }
      ]
    },
    {
      "name": "weave-browser-engine",
      "version": "0.1.0",
      "source": "sigil/weave/libs/weave-browser-engine",
      "manifestSha256": "3adce9700feecb494df3a14a56cf725232a4510fea4422662a1bbe4b4b5624a5",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-browser-engine",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/weave-browser-engine/src/lib.rs",
          "sha256": "06277b915597eadf0e80abeb4c6ed11b3521a634f967f3f608c7737ebb5fbfa1",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "# Weave Browser Engine\n\nShared browser engine crate for the Weave P2P agent network. Provides\nURL fetching, HTML parsing, web search, file perception, deep research,\nprotocol resolution, and an HTTP API server \u2014 all designed for agent\nconsumption.\n\n## Architecture\n\nThe engine is split into independent, composable modules:\n\n| Module | Purpose |\n|--------|---------|\n| [`fetch`] | Fetch URLs (HTTP/HTTPS/weave://) and parse into structured JSON |\n| [`observation`] | Agent-native semantic observation frames for pages |\n| [`parse`] | HTML parsing primitives: text/link/image extraction, CSS selectors |\n| [`search`] | Web search via pluggable [`search::SearchEngine`] trait |\n| [`perceive`] | Multi-modal file analysis via [`perceive::PerceptionBackend`] trait |\n| [`research`] | Iterative deep research: search, fetch, extract, synthesize |\n| [`protocol`] | Protocol resolver trait and built-in weave://, hns://, http(s):// |\n| [`serve`] | HTTP API server (axum) exposing all capabilities |\n| [`error`] | Typed error enum for the whole crate |\n\n## Key Traits\n\n- **[`protocol::ProtocolResolver`]** \u2014 implement to add support for new URL schemes\n- **[`search::SearchEngine`]** \u2014 implement to add new search providers\n- **[`perceive::PerceptionBackend`]** \u2014 implement for advanced file analysis\n\n## Consumers\n\n- **dcli** \u2014 headless CLI browser for agents\n- **dBrowser** \u2014 Tauri desktop browser\n- Any Rust service via the library API or HTTP API\n\n## Example\n\n```rust,no_run\nuse weave_browser_engine::fetch::{fetch_url, FetchOptions};\nuse weave_browser_engine::search;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    // Fetch a page\n    let options = FetchOptions { extract_links: true, ..Default::default() };\n    let page = fetch_url(\"https://example.com\", &options).await?;\n    println!(\"{}\", serde_json::to_string_pretty(&page)?);\n\n    // Search the web\n    let results = search::search(\"Rust P2P\", 5, \"duckduckgo\").await?;\n    println!(\"{}\", serde_json::to_string_pretty(&results)?);\n\n    Ok(())\n}\n```",
              "attributes": "",
              "line": 57
            },
            {
              "name": "fetch",
              "kind": "module",
              "signature": "pub mod fetch;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "observation",
              "kind": "module",
              "signature": "pub mod observation;",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "parse",
              "kind": "module",
              "signature": "pub mod parse;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "perceive",
              "kind": "module",
              "signature": "pub mod perceive;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "protocol",
              "kind": "module",
              "signature": "pub mod protocol;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "research",
              "kind": "module",
              "signature": "pub mod research;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "search",
              "kind": "module",
              "signature": "pub mod search;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "serve",
              "kind": "module",
              "signature": "pub mod serve;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "::USER_AGENT",
              "kind": "const_item",
              "signature": "pub const USER_AGENT: &str;",
              "docs": "User-Agent string used for all outgoing HTTP requests.",
              "attributes": "",
              "line": 68
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "error",
          "source": "sigil/weave/libs/weave-browser-engine/src/error.rs",
          "sha256": "b4b08c73c9a6460daeb59a5543de6220c722641d4d440b1188b089b5c7cb23b6",
          "attributes": "",
          "items": [
            {
              "name": "error::BrowserError",
              "kind": "enum_item",
              "signature": "pub enum BrowserError {\n    /// HTTP request failed.\n    #[error(\"http request failed: {0}\")]\n    HttpRequest(String),\n\n    /// Failed to read the response body.\n    #[error(\"failed to read response body: {0}\")]\n    ResponseBody(String),\n\n    /// Invalid URL format.\n    #[error(\"invalid URL: {0}\")]\n    InvalidUrl(String),\n\n    /// Protocol resolution failed.\n    #[error(\"protocol error: {0}\")]\n    Protocol(String),\n\n    /// Weave URL parsing or resolution failed.\n    #[error(\"invalid weave URL: {0}\")]\n    InvalidWeaveUrl(String),\n\n    /// Locus drive read failed.\n    #[error(\"locus read failed: {0}\")]\n    LocusReadFailed(String),\n\n    /// Remote strand fetch failed.\n    #[error(\"remote fetch failed: {0}\")]\n    RemoteFetchFailed(String),\n\n    /// HNS resolution is not yet implemented.\n    #[error(\"HNS resolution pending\")]\n    HnsPending,\n\n    /// CSS selector parsing failed.\n    #[error(\"invalid CSS selector: {0}\")]\n    InvalidSelector(String),\n\n    /// Search engine error.\n    #[error(\"search failed: {0}\")]\n    SearchFailed(String),\n\n    /// File perception error.\n    #[error(\"perception error: {0}\")]\n    PerceptionError(String),\n\n    /// Research engine error.\n    #[error(\"research error: {0}\")]\n    ResearchError(String),\n\n    /// Server error.\n    #[error(\"server error: {0}\")]\n    ServerError(String),\n\n    /// File not found.\n    #[error(\"file not found: {0}\")]\n    FileNotFound(String),\n\n    /// I/O error.\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n}",
              "docs": "Error types for the browser engine.\nAll errors produced by the browser engine.",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 5
            },
            {
              "name": "error::BrowserResult",
              "kind": "type_item",
              "signature": "pub type BrowserResult<T> = Result<T, BrowserError>;",
              "docs": "Convenience Result alias.",
              "attributes": "",
              "line": 68
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "fetch",
          "source": "sigil/weave/libs/weave-browser-engine/src/fetch.rs",
          "sha256": "eb0e092d0d6004061ff0de0d9c0ce5ea0440a317618c515f9d830f5faacfab4c",
          "attributes": "",
          "items": [
            {
              "name": "fetch::FetchOptions",
              "kind": "struct_item",
              "signature": "pub struct FetchOptions {\n/// Include the raw HTML body in the result.\n\npub include_raw: bool,\n/// Extract all `<a>` links.\n\npub extract_links: bool,\n/// Extract all `<img>` images.\n\npub extract_images: bool,\n/// A CSS selector to extract specific elements.\n\npub css_selector: Option<String>\n}",
              "docs": "Options controlling what data the fetch operation should extract.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 15
            },
            {
              "name": "fetch::fetch_url",
              "kind": "function_item",
              "signature": "pub async fn fetch_url(url: &str, options: &FetchOptions) -> BrowserResult<Value>;",
              "docs": "Fetch a URL, parse it, and return structured JSON.\n\nSupports `http://`, `https://`, and `weave://` protocols. For weave:\nURLs, reads from the local filesystem fallback at `~/.dbrowser/sites/`.\n\nReturns a JSON object with:\n- `url`, `status`, `content_type`, `title`, `description`, `text`, `word_count`\n- Optionally: `raw_html`, `links`, `images`, `selected`, `structured_data`",
              "attributes": "",
              "line": 34
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "observation",
          "source": "sigil/weave/libs/weave-browser-engine/src/observation.rs",
          "sha256": "df411b753d71496e80ccff1bbd15a6992365bb9f22b30a5e11703becdb9b5765",
          "attributes": "",
          "items": [
            {
              "name": "observation::ObservationOptions",
              "kind": "struct_item",
              "signature": "pub struct ObservationOptions {\n/// Active browser profile.\n\npub profile_id: String,\n/// Browser tab being observed.\n\npub tab_id: String,\n/// Frame identifier within the tab.\n\npub frame_id: String,\n/// Navigation that produced this document.\n\npub navigation_id: String,\n/// Monotonic frame generation.\n\npub generation: u64,\n/// Observation timestamp in Unix milliseconds.\n\npub timestamp_ms: u64\n}",
              "docs": "Caller-supplied context for an observation frame.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 17
            },
            {
              "name": "observation::ObservationFrame",
              "kind": "struct_item",
              "signature": "pub struct ObservationFrame {\npub version: String,\npub profile_id: String,\npub tab_id: String,\npub frame_id: String,\npub url: String,\npub origin: String,\npub site: String,\npub navigation_id: String,\npub generation: u64,\npub timestamp_ms: u64,\npub trees: ObservationTrees,\npub events: ObservationEvents,\npub capabilities: ObservationCapabilities\n}",
              "docs": "Agent-native observation frame for a browser document.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 34
            },
            {
              "name": "observation::ObservationTrees",
              "kind": "struct_item",
              "signature": "pub struct ObservationTrees {\npub semantic: Vec<SemanticNode>,\npub accessibility: Vec<SemanticNode>,\npub layout: Vec<SemanticNode>\n}",
              "docs": "Structured page trees exposed to agents.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]",
              "line": 52
            },
            {
              "name": "observation::ObservationEvents",
              "kind": "struct_item",
              "signature": "pub struct ObservationEvents {\npub network: Vec<serde_json::Value>,\npub console: Vec<serde_json::Value>,\npub storage: Vec<serde_json::Value>\n}",
              "docs": "Event streams captured alongside the snapshot.",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]",
              "line": 60
            },
            {
              "name": "observation::ObservationCapabilities",
              "kind": "struct_item",
              "signature": "pub struct ObservationCapabilities {\npub can_navigate: bool,\npub can_click: bool,\npub can_type: bool,\npub can_submit: bool,\npub requires_approval: Vec<String>\n}",
              "docs": "High-level actions supported for this observation.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 68
            },
            {
              "name": "observation::NodeId",
              "kind": "struct_item",
              "signature": "pub struct NodeId {\npub frame_id: String,\npub local_id: String,\npub generation: u64\n}",
              "docs": "Stable node identity within an observation generation.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]",
              "line": 78
            },
            {
              "name": "observation::SemanticNode",
              "kind": "struct_item",
              "signature": "pub struct SemanticNode {\npub id: NodeId,\npub role: String,\npub name: Option<String>,\npub text: Option<String>,\npub bounds: Option<[f32; 4]>,\npub actionable: bool,\npub attributes: BTreeMap<String, String>\n}",
              "docs": "Semantic node exposed to agents.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 86
            },
            {
              "name": "observation::observe_html",
              "kind": "function_item",
              "signature": "pub fn observe_html(\n    raw_url: &str,\n    html: &str,\n    options: ObservationOptions,\n) -> BrowserResult<ObservationFrame>;",
              "docs": "Build an agent observation frame from static HTML.",
              "attributes": "",
              "line": 97
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "parse",
          "source": "sigil/weave/libs/weave-browser-engine/src/parse.rs",
          "sha256": "5b87ef8b1f9cc0fd6ace8ad2407a861aaeff12f68bf45e8133917107d2a7097f",
          "attributes": "",
          "items": [
            {
              "name": "parse::extract_text",
              "kind": "function_item",
              "signature": "pub fn extract_text(doc: &Html) -> String;",
              "docs": "Extract visible text from an HTML document, stripping scripts and styles.\n\nWalks the `<body>` element (or the root if no body exists) and collects\nall text nodes that are not inside `<script>` or `<style>` elements.",
              "attributes": "",
              "line": 14
            },
            {
              "name": "parse::extract_title",
              "kind": "function_item",
              "signature": "pub fn extract_title(doc: &Html) -> String;",
              "docs": "Extract the `<title>` element's text content.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "parse::extract_description",
              "kind": "function_item",
              "signature": "pub fn extract_description(doc: &Html) -> String;",
              "docs": "Extract the meta description from `<meta name=\"description\">`.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "parse::extract_links",
              "kind": "function_item",
              "signature": "pub fn extract_links(doc: &Html, base_url: &str) -> Vec<Value>;",
              "docs": "Extract all `<a href=\"...\">` links from the document.\n\nResolves relative URLs against `base_url`. Each result is a JSON\nobject with `\"href\"` and `\"text\"` fields.",
              "attributes": "",
              "line": 84
            },
            {
              "name": "parse::extract_images",
              "kind": "function_item",
              "signature": "pub fn extract_images(doc: &Html, base_url: &str) -> Vec<Value>;",
              "docs": "Extract all `<img src=\"...\">` images from the document.\n\nResolves relative `src` URLs against `base_url`. Each result is a\nJSON object with `\"src\"` and `\"alt\"` fields.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "parse::extract_by_selector",
              "kind": "function_item",
              "signature": "pub fn extract_by_selector(doc: &Html, selector: &str) -> Vec<Value>;",
              "docs": "Extract elements matching a CSS selector.\n\nReturns a JSON array. Each element has `\"text\"` and `\"html\"` fields.\nIf the selector is invalid, returns an array with a single error object.",
              "attributes": "",
              "line": 140
            },
            {
              "name": "parse::extract_structured_data",
              "kind": "function_item",
              "signature": "pub fn extract_structured_data(doc: &Html) -> Vec<Value>;",
              "docs": "Extract structured data (JSON-LD, Open Graph) from the document.\n\nReturns a vector of JSON objects, each with `\"type\"` and `\"data\"` fields.",
              "attributes": "",
              "line": 160
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "perceive",
          "source": "sigil/weave/libs/weave-browser-engine/src/perceive.rs",
          "sha256": "4046886514eef116a2968c69643f68b9be8a99f1db54160f554de866f78b58ed",
          "attributes": "",
          "items": [
            {
              "name": "perceive::PerceptionBackend",
              "kind": "trait_item",
              "signature": "pub trait PerceptionBackend: Send + Sync {\n    /// The name of this backend (e.g. `\"foundry\"`, `\"local-onnx\"`).\n    fn name(&self) -> &str;\n\n    /// Analyze a file and return structured metadata.\n    ///\n    /// The `file_type` is the classification from [`detect_type`].\n    async fn analyze(&self, path: &Path, file_type: &str) -> BrowserResult<Value>;\n}",
              "docs": "Backend for advanced file perception (image description, video\ntranscription, OCR, etc.).\n\nImplement this trait to connect to Foundry, local ML models, or\nany other analysis service.",
              "attributes": "#[async_trait]",
              "line": 22
            },
            {
              "name": "perceive::LocalPerceptionBackend",
              "kind": "struct_item",
              "signature": "pub struct LocalPerceptionBackend;",
              "docs": "Local-only perception backend.\n\nExtracts basic metadata (size, extension, line/word/char counts for\ntext files) without requiring an external service. Returns advisory\nmessages for file types that need a richer backend (images, video,\naudio).",
              "attributes": "",
              "line": 40
            },
            {
              "name": "perceive::detect_type",
              "kind": "function_item",
              "signature": "pub fn detect_type(ext: &str) -> &'static str;",
              "docs": "Classify a file extension into a broad content type.",
              "attributes": "",
              "line": 105
            },
            {
              "name": "perceive::mime_for_ext",
              "kind": "function_item",
              "signature": "pub fn mime_for_ext(ext: &str) -> &'static str;",
              "docs": "Return a MIME type string for common image extensions.",
              "attributes": "",
              "line": 123
            },
            {
              "name": "perceive::perceive",
              "kind": "function_item",
              "signature": "pub async fn perceive(input: &str) -> BrowserResult<Value>;",
              "docs": "Analyze a file and return structured metadata as JSON.\n\nUses `LocalPerceptionBackend` by default. Pass a custom backend for\nricher analysis (e.g. Foundry gateway).",
              "attributes": "",
              "line": 140
            },
            {
              "name": "perceive::perceive_with_backend",
              "kind": "function_item",
              "signature": "pub async fn perceive_with_backend(\n    input: &str,\n    backend: &dyn PerceptionBackend,\n) -> BrowserResult<Value>;",
              "docs": "Analyze a file using a specific [`PerceptionBackend`].",
              "attributes": "",
              "line": 145
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "protocol",
          "source": "sigil/weave/libs/weave-browser-engine/src/protocol.rs",
          "sha256": "a13db7a49dd80de00d7d8a29b2f9ac58ea80c6debce8b1b2742c224d811f9a12",
          "attributes": "",
          "items": [
            {
              "name": "protocol::ProtocolResolver",
              "kind": "trait_item",
              "signature": "pub trait ProtocolResolver: Send + Sync {\n    /// The URL scheme this resolver handles (e.g. `\"weave\"`, `\"ipfs\"`).\n    fn scheme(&self) -> &str;\n\n    /// Resolve a URL and return the raw response bytes.\n    async fn resolve(&self, url: &str) -> BrowserResult<Vec<u8>>;\n}",
              "docs": "A resolver that can handle a specific URL scheme.\n\nImplement this trait to add support for a new protocol. Register the\nresolver with a [`ProtocolRouter`] so that the fetch pipeline can\ndispatch URLs to the correct backend.",
              "attributes": "#[async_trait]",
              "line": 32
            },
            {
              "name": "protocol::ProtocolRouter",
              "kind": "struct_item",
              "signature": "pub struct ProtocolRouter {\n\n}",
              "docs": "Routes URLs to the correct [`ProtocolResolver`] based on scheme.",
              "attributes": "",
              "line": 43
            },
            {
              "name": "protocol::ProtocolRouter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new router with no resolvers registered.",
              "attributes": "",
              "line": 49
            },
            {
              "name": "protocol::ProtocolRouter::register",
              "kind": "function_item",
              "signature": "pub fn register(&mut self, resolver: Box<dyn ProtocolResolver>);",
              "docs": "Register a resolver for a URL scheme.",
              "attributes": "",
              "line": 56
            },
            {
              "name": "protocol::ProtocolRouter::extract_scheme",
              "kind": "function_item",
              "signature": "pub fn extract_scheme(url: &str) -> String;",
              "docs": "Extract the scheme from a URL string, defaulting to `\"https\"`.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "protocol::ProtocolRouter::resolve",
              "kind": "function_item",
              "signature": "pub async fn resolve(&self, url: &str) -> BrowserResult<Vec<u8>>;",
              "docs": "Resolve a URL by dispatching to the appropriate resolver.\n\nReturns `BrowserError::Protocol` if no resolver matches the scheme.",
              "attributes": "",
              "line": 70
            },
            {
              "name": "protocol::WeaveUrl",
              "kind": "enum_item",
              "signature": "pub enum WeaveUrl {\n    /// Local Locus drive access: drive name + path within the drive.\n    Local { drive: String, path: String },\n    /// Remote peer access with a complete authenticated resource descriptor.\n    Remote {\n        addr: SocketAddr,\n        peer_did: String,\n        peer_auth_public_key: [u8; 32],\n        strand_public_key: [u8; 32],\n        live: bool,\n    },\n}",
              "docs": "Parsed form of a `weave://` URL.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 95
            },
            {
              "name": "protocol::parse_weave_url",
              "kind": "function_item",
              "signature": "pub fn parse_weave_url(url: &str) -> BrowserResult<WeaveUrl>;",
              "docs": "Parse a `weave://...` URL into either a local or remote form.",
              "attributes": "",
              "line": 131
            },
            {
              "name": "protocol::WeaveResolver",
              "kind": "struct_item",
              "signature": "pub struct WeaveResolver {\n\n}",
              "docs": "Resolves `weave://` URLs via Locus drives and remote strand replication.\n\nFor local drives, first tries the filesystem at `~/.dbrowser/sites/{drive}/{path}`.\nIf the file does not exist on disk, falls back to the Locus in-memory store.\nFor remote peers, replicates a single-block strand and returns block 0.",
              "attributes": "",
              "line": 280
            },
            {
              "name": "protocol::WeaveResolver::new",
              "kind": "function_item",
              "signature": "pub fn new(node: Arc<WeaveNode>) -> Self;",
              "docs": "Create a new resolver backed by a `WeaveNode`.",
              "attributes": "",
              "line": 286
            },
            {
              "name": "protocol::HnsResolver",
              "kind": "struct_item",
              "signature": "pub struct HnsResolver;",
              "docs": "Resolves `hns://` URLs via Handshake decentralized DNS.\n\nCurrently returns [`BrowserError::HnsPending`] \u2014 full resolution will\nbe implemented when Handshake DNS integration lands.",
              "attributes": "",
              "line": 409
            },
            {
              "name": "protocol::HttpsResolver",
              "kind": "struct_item",
              "signature": "pub struct HttpsResolver;",
              "docs": "Resolves standard `https://` URLs via HTTP.",
              "attributes": "",
              "line": 432
            },
            {
              "name": "protocol::HttpResolver",
              "kind": "struct_item",
              "signature": "pub struct HttpResolver;",
              "docs": "Resolves standard `http://` URLs.",
              "attributes": "",
              "line": 461
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "research",
          "source": "sigil/weave/libs/weave-browser-engine/src/research.rs",
          "sha256": "df6f3d112c217aa1f72f2fae152b3e56333ec1eae83b1d3d186ab6459b2190a9",
          "attributes": "",
          "items": [
            {
              "name": "research::ResearchConfig",
              "kind": "struct_item",
              "signature": "pub struct ResearchConfig {\n/// The topic or question to research.\n\npub topic: String,\n/// How many iterations of search-fetch-extract to perform (1..=5).\n\npub depth: u8,\n/// Maximum number of sources to consult per iteration.\n\npub max_sources: usize,\n/// Whether to cross-verify claims across sources.\n\npub verify: bool,\n/// Search engine name (passed to [`search::search`]).\n\npub engine: String\n}",
              "docs": "Configuration for a research session.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 24
            },
            {
              "name": "research::ResearchConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(topic: impl Into<String>) -> Self;",
              "docs": "Create a new research configuration.",
              "attributes": "",
              "line": 39
            },
            {
              "name": "research::ResearchConfig::depth",
              "kind": "function_item",
              "signature": "pub fn depth(mut self, depth: u8) -> Self;",
              "docs": "Set the research depth (clamped to 1..=5).",
              "attributes": "",
              "line": 50
            },
            {
              "name": "research::ResearchConfig::max_sources",
              "kind": "function_item",
              "signature": "pub fn max_sources(mut self, max: usize) -> Self;",
              "docs": "Set the maximum sources per iteration.",
              "attributes": "",
              "line": 56
            },
            {
              "name": "research::ResearchConfig::verify",
              "kind": "function_item",
              "signature": "pub fn verify(mut self, verify: bool) -> Self;",
              "docs": "Enable or disable cross-verification.",
              "attributes": "",
              "line": 62
            },
            {
              "name": "research::ResearchConfig::engine",
              "kind": "function_item",
              "signature": "pub fn engine(mut self, engine: impl Into<String>) -> Self;",
              "docs": "Set the search engine name.",
              "attributes": "",
              "line": 68
            },
            {
              "name": "research::research",
              "kind": "function_item",
              "signature": "pub async fn research(config: &ResearchConfig) -> BrowserResult<Value>;",
              "docs": "Run the deep research loop and return structured results.\n\nThis is the main entry point for the research engine. Uses the\ndefault DuckDuckGo search backend.",
              "attributes": "",
              "line": 91
            },
            {
              "name": "research::research_with_engine",
              "kind": "function_item",
              "signature": "pub async fn research_with_engine(\n    config: &ResearchConfig,\n    _custom_engine: Option<&dyn SearchEngine>,\n) -> BrowserResult<Value>;",
              "docs": "Run the deep research loop with a custom search engine.",
              "attributes": "",
              "line": 96
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "search",
          "source": "sigil/weave/libs/weave-browser-engine/src/search.rs",
          "sha256": "74139c4e4bbf40353655b55881b671c6c965c41c4a2d741074a34ed5b55eda6e",
          "attributes": "",
          "items": [
            {
              "name": "search::SearchEngine",
              "kind": "trait_item",
              "signature": "pub trait SearchEngine: Send + Sync {\n    /// The identifier for this engine (e.g. `\"duckduckgo\"`, `\"brave\"`).\n    fn name(&self) -> &str;\n\n    /// Run a search query and return up to `top` results.\n    async fn search(&self, query: &str, top: usize) -> BrowserResult<Value>;\n}",
              "docs": "A pluggable search engine backend.\n\nImplement this trait to add support for new search providers\n(Google, Bing, Brave, SearXNG, etc.).",
              "attributes": "#[async_trait]",
              "line": 19
            },
            {
              "name": "search::DuckDuckGoEngine",
              "kind": "struct_item",
              "signature": "pub struct DuckDuckGoEngine;",
              "docs": "DuckDuckGo HTML search \u2014 no API key required.\n\nScrapes the HTML-only endpoint at `html.duckduckgo.com/html/`.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "search::search",
              "kind": "function_item",
              "signature": "pub async fn search(query: &str, top: usize, engine: &str) -> BrowserResult<Value>;",
              "docs": "Search using the named engine (or default to DuckDuckGo).\n\nThis is the top-level convenience function used by dcli and the\nHTTP API server. For full control, use a [`SearchEngine`] impl\ndirectly.",
              "attributes": "",
              "line": 109
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        },
        {
          "module": "serve",
          "source": "sigil/weave/libs/weave-browser-engine/src/serve.rs",
          "sha256": "63265b8913ab2bacb4ca2b8d3951d3aaabe25faa525d840343dc965f441edf0f",
          "attributes": "",
          "items": [
            {
              "name": "serve::FetchRequest",
              "kind": "struct_item",
              "signature": "pub struct FetchRequest {\n/// The URL to fetch.\n\npub url: String,\n/// Include raw HTML in the response.\n\n#[serde(default)]\npub raw: bool,\n/// Extract all links from the page.\n\n#[serde(default)]\npub links: bool,\n/// Extract all images from the page.\n\n#[serde(default)]\npub images: bool,\n/// A CSS selector to extract specific elements.\n\npub selector: Option<String>\n}",
              "docs": "Request body for `POST /fetch`.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 73
            },
            {
              "name": "serve::ObserveRequest",
              "kind": "struct_item",
              "signature": "pub struct ObserveRequest {\n/// The page URL that produced the HTML.\n\npub url: String,\n/// Raw HTML to observe.\n\npub html: String,\n/// Active browser profile.\n\npub profile_id: Option<String>,\n/// Browser tab being observed.\n\npub tab_id: Option<String>,\n/// Frame identifier within the tab.\n\npub frame_id: Option<String>,\n/// Navigation identifier for this document.\n\npub navigation_id: Option<String>,\n/// Monotonic frame generation.\n\npub generation: Option<u64>,\n/// Observation timestamp in Unix milliseconds.\n\npub timestamp_ms: Option<u64>\n}",
              "docs": "Request body for `POST /observe`.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 91
            },
            {
              "name": "serve::SearchRequest",
              "kind": "struct_item",
              "signature": "pub struct SearchRequest {\n/// The search query.\n\npub query: String,\n/// Maximum number of results (defaults to 10, capped at 100).\n\npub top: Option<usize>,\n/// Search engine name (defaults to `\"duckduckgo\"`).\n\npub engine: Option<String>\n}",
              "docs": "Request body for `POST /search`.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 112
            },
            {
              "name": "serve::PerceiveRequest",
              "kind": "struct_item",
              "signature": "pub struct PerceiveRequest {\n/// The local file path to analyze.\n\npub path: String\n}",
              "docs": "Request body for `POST /perceive`.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 123
            },
            {
              "name": "serve::ResearchRequest",
              "kind": "struct_item",
              "signature": "pub struct ResearchRequest {\n/// The topic or question to research.\n\npub topic: String,\n/// Research depth (1..=5, defaults to 2).\n\npub depth: Option<u8>,\n/// Maximum sources per iteration (defaults to 10, capped at 50).\n\npub sources: Option<usize>,\n/// Whether to cross-verify claims (defaults to false).\n\n#[serde(default)]\npub verify: bool\n}",
              "docs": "Request body for `POST /research`.",
              "attributes": "#[derive(Debug, Deserialize)]",
              "line": 130
            },
            {
              "name": "serve::router",
              "kind": "function_item",
              "signature": "pub fn router() -> Router;",
              "docs": "Create the axum [`Router`] with all browser engine endpoints.\n\nIncludes security middleware:\n- API key authentication (if `WEAVE_API_KEY` env var is set)\n- Request body size limit (1 MiB)\n- Request timeout (120s)",
              "attributes": "",
              "line": 430
            },
            {
              "name": "serve::serve",
              "kind": "function_item",
              "signature": "pub async fn serve(addr: &str) -> Result<(), BrowserError>;",
              "docs": "Start the browser engine HTTP API server on the given address.\n\nWhen `WEAVE_API_KEY` is not set, logs a security warning and only\nbinds to localhost addresses. Set the env var for production use.",
              "attributes": "",
              "line": 452
            }
          ],
          "parseErrors": false,
          "reviewNote": "The serve path warns but still binds when WEAVE_API_KEY is absent; the authentication check then allows requests. Configure and verify authorization before exposing a server. See /libraries/weave-browser-engine/research-server."
        }
      ]
    },
    {
      "name": "weave-compliance",
      "version": "0.1.1",
      "source": "sigil/weave/libs/weave-compliance",
      "manifestSha256": "caeb84ae11b5f224a72fef5b0a381a38befe897bd6a8417cab3a0ff3b68d8721",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-compliance",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/weave-compliance/src/lib.rs",
          "sha256": "098f77da38a5cb309693820deef6d280a637211fb5d5386e3992b8a01aaaf118",
          "attributes": "",
          "items": [
            {
              "name": "prelude",
              "kind": "module",
              "signature": "pub mod prelude;",
              "docs": "Prelude exports for convenient imports in downstream crates.",
              "attributes": "",
              "line": 18
            },
            {
              "name": "pub use crate::audit::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::audit::*;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "pub use crate::compliance::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::compliance::*;",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "pub use crate::docs::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::docs::*;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "pub use crate::ethics::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::ethics::*;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "pub use crate::governance::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::governance::*;",
              "docs": "",
              "attributes": "",
              "line": 23
            },
            {
              "name": "pub use crate::regulatory::*;",
              "kind": "use_declaration",
              "signature": "pub use crate::regulatory::*;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "audit",
              "kind": "module",
              "signature": "pub mod audit;",
              "docs": "Audit trail manager with integrity verification and retention policies",
              "attributes": "",
              "line": 28
            },
            {
              "name": "compliance",
              "kind": "module",
              "signature": "pub mod compliance;",
              "docs": "Compliance framework (GDPR, SOX, AI governance)",
              "attributes": "",
              "line": 30
            },
            {
              "name": "docs",
              "kind": "module",
              "signature": "pub mod docs;",
              "docs": "Documentation generation system (API, schema, compliance, operational)",
              "attributes": "",
              "line": 32
            },
            {
              "name": "ethics",
              "kind": "module",
              "signature": "pub mod ethics;",
              "docs": "Ethical AI policies, bias detection and human-in-the-loop",
              "attributes": "",
              "line": 34
            },
            {
              "name": "governance",
              "kind": "module",
              "signature": "pub mod governance;",
              "docs": "Data governance (classification, access, lineage, privacy)",
              "attributes": "",
              "line": 36
            },
            {
              "name": "regulatory",
              "kind": "module",
              "signature": "pub mod regulatory;",
              "docs": "Regulatory reporter and submission manager",
              "attributes": "",
              "line": 38
            },
            {
              "name": "::EvidenceId",
              "kind": "struct_item",
              "signature": "pub struct EvidenceId(pub String);",
              "docs": "Common ID types",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "::ComplianceError",
              "kind": "enum_item",
              "signature": "pub enum ComplianceError {\n    /// Validation failed due to non-compliant input or state.\n    #[error(\"validation failed: {0}\")]\n    Validation(String),\n    /// Requested entity or record was not found.\n    #[error(\"not found: {0}\")]\n    NotFound(String),\n    /// Integrity constraint or tamper-evidence verification failed.\n    #[error(\"integrity violation: {0}\")]\n    Integrity(String),\n    /// IO-level failure encountered while performing an operation.\n    #[error(\"io: {0}\")]\n    Io(String),\n    /// Unclassified internal error.\n    #[error(\"internal: {0}\")]\n    Internal(String),\n}",
              "docs": "Top-level error for this crate",
              "attributes": "#[derive(Debug, Error)]",
              "line": 46
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, ComplianceError>;",
              "docs": "Unified result type",
              "attributes": "",
              "line": 65
            },
            {
              "name": "::DataOperation",
              "kind": "struct_item",
              "signature": "pub struct DataOperation {\n/// Unique operation id\n\npub id: String,\n/// operation type e.g. \"data_processing\", \"deletion_request\"\n\npub operation_type: String,\n/// data subject id (if applicable)\n\npub data_subject_id: String,\n/// purpose string e.g. \"service_delivery\"\n\npub purpose: String,\n/// legal basis e.g. \"consent\"\n\npub legal_basis: String,\n/// timestamp when consent was obtained\n\npub consent_timestamp: Option<DateTime<Utc>>\n}",
              "docs": "Minimal data operation descriptor used across modules",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 69
            },
            {
              "name": "::DataOperation::is_deletion_request",
              "kind": "function_item",
              "signature": "pub fn is_deletion_request(&self) -> bool;",
              "docs": "True when this operation represents a deletion request",
              "attributes": "",
              "line": 86
            },
            {
              "name": "::default_framework",
              "kind": "function_item",
              "signature": "pub fn default_framework() -> Arc<dyn compliance::ComplianceFramework>;",
              "docs": "Construct a default production framework stack",
              "attributes": "",
              "line": 99
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "audit",
          "source": "sigil/weave/libs/weave-compliance/src/audit.rs",
          "sha256": "6b98bd3e2fcad8562d6e785f02593ec5f75d97c6248db2e65b86e8817b7708eb",
          "attributes": "",
          "items": [
            {
              "name": "audit::AuditEventId",
              "kind": "struct_item",
              "signature": "pub struct AuditEventId(pub String);",
              "docs": "Unique audit event id",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "audit::AuditEvent",
              "kind": "struct_item",
              "signature": "pub struct AuditEvent {\n/// event type e.g. \"financial_transaction\", \"data_subject_forgotten\"\n\npub event_type: String,\n/// actor string (DID or system)\n\npub actor: String,\n/// target entity\n\npub target: String,\n/// details payload\n\npub details: serde_json::Value,\n/// timestamp\n\npub timestamp: chrono::DateTime<Utc>,\n/// optional compliance context, e.g. \"SOX_Section_404\"\n\npub compliance_context: Option<String>\n}",
              "docs": "Audit event model",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "audit::AuditReportCriteria",
              "kind": "struct_item",
              "signature": "pub struct AuditReportCriteria {\n/// requester identity\n\npub requester: String\n}",
              "docs": "Criteria for audit report generation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 30
            },
            {
              "name": "audit::AuditReport",
              "kind": "struct_item",
              "signature": "pub struct AuditReport {\n/// report id\n\npub id: String,\n/// criteria used\n\npub criteria: AuditReportCriteria,\n/// number of events analyzed\n\npub events_analyzed: usize,\n/// integrity verified\n\npub integrity_verified: bool,\n/// generated at time\n\npub generated_at: chrono::DateTime<Utc>,\n/// generated by\n\npub generated_by: String,\n/// digital signature placeholder\n\npub digital_signature: String\n}",
              "docs": "Generated audit report",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 37
            },
            {
              "name": "audit::ForgottenResult",
              "kind": "struct_item",
              "signature": "pub struct ForgottenResult {\n/// data subject id processed\n\npub data_subject_id: String,\n/// counts\n\npub anonymized_events: usize,\n/// counts\n\npub deleted_events: usize,\n/// completion timestamp\n\npub completion_time: chrono::DateTime<Utc>\n}",
              "docs": "Result of GDPR forgetting flow",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 56
            },
            {
              "name": "audit::AuditTrailManager",
              "kind": "trait_item",
              "signature": "pub trait AuditTrailManager: Send + Sync {\n    /// Record a generic event and return its id\n    async fn record_audit_event(&self, event: AuditEvent) -> Result<AuditEventId>;\n    /// Generate a report over the audit trail\n    async fn generate_audit_report(&self, criteria: AuditReportCriteria) -> Result<AuditReport>;\n    /// Implement the right to be forgotten\n    async fn implement_right_to_be_forgotten(\n        &self,\n        data_subject_id: &str,\n    ) -> Result<ForgottenResult>;\n    /// Record specific checks and return an evidence id\n    async fn record_gdpr_compliance_check(&self, _op: &crate::DataOperation) -> Result<EvidenceId>;\n    /// Record specific checks and return an evidence id\n    async fn record_sox_compliance_check(\n        &self,\n        _fin: &crate::compliance::FinancialOperation,\n    ) -> Result<EvidenceId>;\n    /// Record specific checks and return an evidence id\n    async fn record_ai_governance_check(\n        &self,\n        _ai: &crate::compliance::AIOperation,\n    ) -> Result<EvidenceId>;\n}",
              "docs": "Audit trail behavior",
              "attributes": "#[async_trait::async_trait]",
              "line": 69
            },
            {
              "name": "audit::ProductionAuditTrailManager",
              "kind": "struct_item",
              "signature": "pub struct ProductionAuditTrailManager {\n\n}",
              "docs": "In-memory production-like audit manager (backends can be swapped later)",
              "attributes": "",
              "line": 94
            },
            {
              "name": "audit::ProductionAuditTrailManager::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new instance",
              "attributes": "",
              "line": 100
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "compliance",
          "source": "sigil/weave/libs/weave-compliance/src/compliance.rs",
          "sha256": "37bb577effc6fdc3c15a98ea3b33f6658b04051ffaac6f956dbddb97d49f9859",
          "attributes": "",
          "items": [
            {
              "name": "compliance::AIOperation",
              "kind": "struct_item",
              "signature": "pub struct AIOperation {\n/// Unique decision/operation id\n\npub id: String,\n/// Human-readable summary\n\npub summary: String\n}",
              "docs": "A generic AI operation descriptor (minimal initial surface)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "compliance::FinancialOperation",
              "kind": "struct_item",
              "signature": "pub struct FinancialOperation {\n/// Unique operation id\n\npub id: String,\n/// Type e.g. \"journal_entry\", \"payment\"\n\npub operation_type: String\n}",
              "docs": "A financial operation descriptor for SOX controls",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "compliance::ComplianceResult",
              "kind": "enum_item",
              "signature": "pub enum ComplianceResult {\n    /// Indicates successful validation\n    Compliant {\n        /// regulation label (e.g., \"GDPR\")\n        regulation: String,\n        /// validation timestamp\n        validation_timestamp: chrono::DateTime<Utc>,\n        /// evidence id recorded in audit trail\n        evidence_id: EvidenceId,\n    },\n}",
              "docs": "Compliance result for a regulation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 32
            },
            {
              "name": "compliance::FrameworkError",
              "kind": "enum_item",
              "signature": "pub enum FrameworkError {\n    /// GDPR-specific violation message\n    #[error(\"gdpr violation: {0}\")]\n    GdprViolation(String),\n    /// SOX-specific violation message\n    #[error(\"sox violation: {0}\")]\n    SoxViolation(String),\n    /// AI governance violation message\n    #[error(\"ai governance violation: {0}\")]\n    AIGovernanceViolation(String),\n    /// Internal error\n    #[error(\"internal: {0}\")]\n    Internal(String),\n}",
              "docs": "Errors for compliance subsystem",
              "attributes": "#[derive(Debug, Error)]",
              "line": 46
            },
            {
              "name": "compliance::ComplianceFramework",
              "kind": "trait_item",
              "signature": "pub trait ComplianceFramework: Send + Sync {\n    /// Ensure GDPR compliance for a data operation\n    async fn ensure_gdpr_compliance(\n        &self,\n        data_operation: &DataOperation,\n    ) -> Result<ComplianceResult>;\n\n    /// Ensure SOX compliance for a financial operation\n    async fn ensure_sox_compliance(\n        &self,\n        financial_operation: &FinancialOperation,\n    ) -> Result<ComplianceResult>;\n\n    /// Ensure AI governance compliance for an AI operation\n    async fn ensure_ai_governance_compliance(\n        &self,\n        ai_operation: &AIOperation,\n    ) -> Result<ComplianceResult>;\n}",
              "docs": "Trait describing the compliance framework capabilities",
              "attributes": "#[async_trait::async_trait]",
              "line": 63
            },
            {
              "name": "compliance::ProductionComplianceFramework",
              "kind": "struct_item",
              "signature": "pub struct ProductionComplianceFramework {\n\n}",
              "docs": "Production implementation of the compliance framework",
              "attributes": "#[allow(dead_code)]",
              "line": 85
            },
            {
              "name": "compliance::ProductionComplianceFramework::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        regulatory_engine: Arc<dyn ComplianceReporter>,\n        audit_trail_manager: Arc<dyn AuditTrailManager>,\n        documentation: Arc<dyn ComplianceDocumentationGenerator>,\n        data_governance: Arc<dyn DataGovernanceManager>,\n    ) -> Self;",
              "docs": "Construct a new framework instance",
              "attributes": "",
              "line": 94
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "docs",
          "source": "sigil/weave/libs/weave-compliance/src/docs.rs",
          "sha256": "2285a57bb021ec94630bfc38661018cee5d33f959bff4276d99f4e3f781f6dcd",
          "attributes": "",
          "items": [
            {
              "name": "docs::ApiDocumentation",
              "kind": "struct_item",
              "signature": "pub struct ApiDocumentation {\n/// Endpoint list\n\npub endpoints: Vec<String>,\n/// SDK language where applicable\n\npub sdk: Option<String>\n}",
              "docs": "API documentation bundle (simplified)\nAPI documentation summary",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "docs::ProtocolDocumentation",
              "kind": "struct_item",
              "signature": "pub struct ProtocolDocumentation {\n/// protocol name\n\npub protocol_name: String,\n/// overview\n\npub overview: String,\n/// examples\n\npub examples: Vec<String>,\n/// generated time\n\npub generated_at: chrono::DateTime<Utc>\n}",
              "docs": "Protocol documentation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "docs::DocumentationSuite",
              "kind": "struct_item",
              "signature": "pub struct DocumentationSuite {\n/// api docs\n\npub api_documentation: ApiDocumentation,\n/// compliance docs summary\n\npub compliance_documentation: String,\n/// operational docs summary\n\npub operational_documentation: String,\n/// generated at time\n\npub generated_at: chrono::DateTime<Utc>,\n/// version string\n\npub version: String\n}",
              "docs": "Documentation suite",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 30
            },
            {
              "name": "docs::DocumentationGenerator",
              "kind": "trait_item",
              "signature": "pub trait DocumentationGenerator: Send + Sync {\n    /// Generate protocol docs\n    async fn generate_protocol_documentation(\n        &self,\n        protocol_name: &str,\n    ) -> Result<ProtocolDocumentation>;\n}",
              "docs": "Generator for protocol docs",
              "attributes": "#[async_trait::async_trait]",
              "line": 45
            },
            {
              "name": "docs::ComplianceDocumentationGenerator",
              "kind": "trait_item",
              "signature": "pub trait ComplianceDocumentationGenerator: Send + Sync {\n    /// Create summary or full docs\n    async fn generate_compliance_documentation(&self) -> Result<String>;\n}",
              "docs": "Generate compliance docs",
              "attributes": "#[async_trait::async_trait]",
              "line": 55
            },
            {
              "name": "docs::DocumentationVersionManager",
              "kind": "trait_item",
              "signature": "pub trait DocumentationVersionManager: Send + Sync {\n    /// Current version string\n    async fn get_current_version(&self) -> Result<String>;\n}",
              "docs": "Version manager",
              "attributes": "#[async_trait::async_trait]",
              "line": 62
            },
            {
              "name": "docs::ProductionDocumentationSystem",
              "kind": "struct_item",
              "signature": "pub struct ProductionDocumentationSystem<V: DocumentationVersionManager> {\n\n}",
              "docs": "Production documentation system facade",
              "attributes": "",
              "line": 68
            },
            {
              "name": "docs::ProductionDocumentationSystem<V>::new",
              "kind": "function_item",
              "signature": "pub fn new(version: V) -> Self;",
              "docs": "Create new instance",
              "attributes": "",
              "line": 74
            },
            {
              "name": "docs::ProductionDocumentationSystem<V>::generate_comprehensive_documentation",
              "kind": "function_item",
              "signature": "pub async fn generate_comprehensive_documentation(&self) -> Result<DocumentationSuite>;",
              "docs": "Generate a full suite",
              "attributes": "",
              "line": 79
            },
            {
              "name": "docs::ProductionComplianceDocs",
              "kind": "struct_item",
              "signature": "pub struct ProductionComplianceDocs;",
              "docs": "Production compliance docs generator (placeholder)",
              "attributes": "",
              "line": 95
            },
            {
              "name": "docs::StaticVersionManager",
              "kind": "struct_item",
              "signature": "pub struct StaticVersionManager(pub String);",
              "docs": "Simple version manager reading from environment or static",
              "attributes": "",
              "line": 105
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "ethics",
          "source": "sigil/weave/libs/weave-compliance/src/ethics.rs",
          "sha256": "533a90fb2419ce9390c743aec234c843bb9e4695d0719f48ba2727f4c3bdf68f",
          "attributes": "",
          "items": [
            {
              "name": "ethics::AIDecision",
              "kind": "struct_item",
              "signature": "pub struct AIDecision {\n/// decision id\n\npub id: String,\n/// short summary\n\npub summary: String\n}",
              "docs": "A decision envelope for ethical evaluation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "ethics::HumanReviewRequest",
              "kind": "struct_item",
              "signature": "pub struct HumanReviewRequest {\n/// decision id\n\npub decision_id: String,\n/// summary\n\npub decision_summary: String,\n/// concerns vector\n\npub ethical_concerns: Vec<String>,\n/// urgency metric\n\npub urgency_level: u8,\n/// required expertise labels\n\npub required_expertise: Vec<String>,\n/// deadline timestamp\n\npub deadline: chrono::DateTime<Utc>\n}",
              "docs": "Human review request",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "ethics::HITLResult",
              "kind": "enum_item",
              "signature": "pub enum HITLResult {\n    /// Human review is required; a review id is provided\n    ReviewRequired {\n        /// Identifier of the created review request\n        review_id: String,\n    },\n    /// No human review required\n    NoReviewRequired,\n}",
              "docs": "HITL result\nHuman-in-the-loop outcome",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "ethics::EthicalComplianceResult",
              "kind": "struct_item",
              "signature": "pub struct EthicalComplianceResult {\n/// decision id\n\npub decision_id: String,\n/// flags\n\npub principles_compliant: bool,\n/// bias-free score\n\npub bias_free: bool,\n/// fairness\n\npub fairness_validated: bool,\n/// transparency\n\npub transparency_adequate: bool,\n/// oversight\n\npub human_oversight_satisfied: bool,\n/// 0..1 overall score\n\npub compliance_score: f64,\n/// recommendations\n\npub recommendations: Vec<String>\n}",
              "docs": "Ethical compliance outcome",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "ethics::EthicsEngine",
              "kind": "trait_item",
              "signature": "pub trait EthicsEngine: Send + Sync {\n    /// Validate a decision against the system's ethical principles\n    async fn validate_against_principles(\n        &self,\n        _decision: &AIDecision,\n    ) -> Result<PrinciplesValidation>;\n}",
              "docs": "Engine interfaces",
              "attributes": "#[async_trait::async_trait]",
              "line": 67
            },
            {
              "name": "ethics::BiasDetector",
              "kind": "trait_item",
              "signature": "pub trait BiasDetector: Send + Sync {\n    /// Detect bias in a decision envelope and return analysis\n    async fn detect_bias(&self, _decision: &AIDecision) -> Result<BiasAnalysis>;\n}",
              "docs": "Bias detection",
              "attributes": "#[async_trait::async_trait]",
              "line": 77
            },
            {
              "name": "ethics::FairnessValidator",
              "kind": "trait_item",
              "signature": "pub trait FairnessValidator: Send + Sync {\n    /// Assess fairness properties of a decision\n    async fn assess_fairness(&self, _decision: &AIDecision) -> Result<FairnessAssessment>;\n}",
              "docs": "Fairness validation",
              "attributes": "#[async_trait::async_trait]",
              "line": 84
            },
            {
              "name": "ethics::TransparencyManager",
              "kind": "trait_item",
              "signature": "pub trait TransparencyManager: Send + Sync {\n    /// Validate transparency requirements for a decision\n    async fn validate_transparency(&self, _decision: &AIDecision) -> Result<TransparencyCheck>;\n}",
              "docs": "Transparency validation",
              "attributes": "#[async_trait::async_trait]",
              "line": 91
            },
            {
              "name": "ethics::HumanOversightManager",
              "kind": "trait_item",
              "signature": "pub trait HumanOversightManager: Send + Sync {\n    /// Validate that oversight requirements are satisfied\n    async fn validate_oversight_requirements(\n        &self,\n        _decision: &AIDecision,\n    ) -> Result<OversightValidation>;\n    /// Submit a review request to human reviewers\n    async fn submit_for_review(&self, _request: HumanReviewRequest) -> Result<HumanReviewResult>;\n}",
              "docs": "Human oversight",
              "attributes": "#[async_trait::async_trait]",
              "line": 98
            },
            {
              "name": "ethics::PrinciplesValidation",
              "kind": "struct_item",
              "signature": "pub struct PrinciplesValidation {\n/// Whether compliant with ethics principles\n\npub compliant: bool,\n/// Score in 0..1 range\n\npub score: f64\n}",
              "docs": "Simple structs for engine outputs\nResult of principles validation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 111
            },
            {
              "name": "ethics::BiasAnalysis",
              "kind": "struct_item",
              "signature": "pub struct BiasAnalysis {\n/// Bias score (0..1)\n\npub bias_score: f64\n}",
              "docs": "Bias analysis output",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 119
            },
            {
              "name": "ethics::FairnessAssessment",
              "kind": "struct_item",
              "signature": "pub struct FairnessAssessment {\n/// Fair flag\n\npub fair: bool,\n/// Score in 0..1\n\npub score: f64\n}",
              "docs": "Fairness assessment output",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 125
            },
            {
              "name": "ethics::TransparencyCheck",
              "kind": "struct_item",
              "signature": "pub struct TransparencyCheck {\n/// Adequacy flag\n\npub adequate: bool,\n/// Score in 0..1\n\npub score: f64\n}",
              "docs": "Transparency validation output",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 133
            },
            {
              "name": "ethics::OversightValidation",
              "kind": "struct_item",
              "signature": "pub struct OversightValidation {\n/// Oversight satisfied\n\npub satisfied: bool,\n/// Score in 0..1\n\npub score: f64\n}",
              "docs": "Oversight validation output",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 141
            },
            {
              "name": "ethics::HumanReviewResult",
              "kind": "struct_item",
              "signature": "pub struct HumanReviewResult {\n/// Review id returned by the oversight system\n\npub review_id: String\n}",
              "docs": "Human review submission result",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 149
            },
            {
              "name": "ethics::EthicalAIFramework",
              "kind": "trait_item",
              "signature": "pub trait EthicalAIFramework: Send + Sync {\n    /// Validate decision ethics\n    async fn validate_ethical_compliance(\n        &self,\n        decision: &AIDecision,\n    ) -> Result<EthicalComplianceResult>;\n    /// Implement human-in-the-loop logic\n    async fn implement_human_in_the_loop(&self, decision: &AIDecision) -> Result<HITLResult>;\n}",
              "docs": "Ethical AI Framework API",
              "attributes": "#[async_trait::async_trait]",
              "line": 156
            },
            {
              "name": "ethics::ProductionEthicalAIFramework",
              "kind": "struct_item",
              "signature": "pub struct ProductionEthicalAIFramework<\n    E: EthicsEngine,\n    B: BiasDetector,\n    F: FairnessValidator,\n    T: TransparencyManager,\n    H: HumanOversightManager,\n> {\n\n}",
              "docs": "Production implementation (composed of engines; default no-op placeholders)",
              "attributes": "",
              "line": 167
            },
            {
              "name": "ethics::ProductionEthicalAIFramework<E, B, F, T, H>::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        ethics_engine: E,\n        bias_detector: B,\n        fairness_validator: F,\n        transparency_manager: T,\n        human_oversight: H,\n    ) -> Self;",
              "docs": "Create a new instance",
              "attributes": "",
              "line": 190
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "governance",
          "source": "sigil/weave/libs/weave-compliance/src/governance.rs",
          "sha256": "de6cfd98e4de987034bd13de713513d8626060a4faf28ab2925063516c842504",
          "attributes": "",
          "items": [
            {
              "name": "governance::DataAsset",
              "kind": "struct_item",
              "signature": "pub struct DataAsset {\n/// id of the data asset\n\npub id: String,\n/// classification label (computed or provided)\n\npub classification: Option<String>\n}",
              "docs": "Data asset descriptor",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "governance::DataGovernanceResult",
              "kind": "struct_item",
              "signature": "pub struct DataGovernanceResult {\n/// data id\n\npub data_id: String,\n/// classification label\n\npub classification: String,\n/// applied privacy controls label\n\npub privacy_controls: String\n}",
              "docs": "Governance result",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "governance::DataOperationRecord",
              "kind": "struct_item",
              "signature": "pub struct DataOperationRecord {\n/// op id\n\npub operation_id: String,\n/// source\n\npub source_data: String,\n/// target\n\npub target_data: String,\n/// type\n\npub transformation_type: String,\n/// actor\n\npub actor: String,\n/// timestamp\n\npub timestamp: chrono::DateTime<Utc>\n}",
              "docs": "Data operation used for lineage",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 27
            },
            {
              "name": "governance::DataGovernanceManager",
              "kind": "trait_item",
              "signature": "pub trait DataGovernanceManager: Send + Sync {\n    /// Classify and protect a data asset\n    async fn classify_and_protect_data(&self, data: &DataAsset) -> Result<DataGovernanceResult>;\n    /// Track lineage of a data operation\n    async fn track_data_lineage(&self, record: &DataOperationRecord)\n        -> Result<DataOperationRecord>;\n}",
              "docs": "Data governance manager",
              "attributes": "#[async_trait::async_trait]",
              "line": 44
            },
            {
              "name": "governance::ProductionDataGovernanceManager",
              "kind": "struct_item",
              "signature": "pub struct ProductionDataGovernanceManager;",
              "docs": "Production implementation (in-memory policies)",
              "attributes": "",
              "line": 53
            },
            {
              "name": "governance::ProductionDataGovernanceManager::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new instance",
              "attributes": "",
              "line": 57
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        },
        {
          "module": "regulatory",
          "source": "sigil/weave/libs/weave-compliance/src/regulatory.rs",
          "sha256": "0550fe1c2e618c1b157624bf5b5501d56e5cf02eab0b89404a512241b6ffd8a8",
          "attributes": "",
          "items": [
            {
              "name": "regulatory::ReportingPeriod",
              "kind": "enum_item",
              "signature": "pub enum ReportingPeriod {\n    /// Monthly reporting period\n    Monthly,\n    /// Quarterly reporting period\n    Quarterly,\n    /// Yearly reporting period\n    Yearly,\n}",
              "docs": "A period enum for regulatory reports (simplified)\nReport period granularity",
              "attributes": "#[derive(Debug, Clone, Copy, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "regulatory::RegulatoryData",
              "kind": "struct_item",
              "signature": "pub struct RegulatoryData {\n/// placeholder sections keyed by regulation-specific names\n\npub sections: HashMap<String, serde_json::Value>\n}",
              "docs": "Aggregated data used to build regulatory reports",
              "attributes": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]",
              "line": 22
            },
            {
              "name": "regulatory::RegulatoryData::extract_gdpr_data",
              "kind": "function_item",
              "signature": "pub fn extract_gdpr_data(&self) -> Result<serde_json::Value>;",
              "docs": "Extract data for GDPR",
              "attributes": "",
              "line": 29
            },
            {
              "name": "regulatory::RegulatoryReport",
              "kind": "struct_item",
              "signature": "pub struct RegulatoryReport {\n/// regulation label\n\npub regulation: String,\n/// period covered\n\npub period: ReportingPeriod,\n/// generated timestamp\n\npub generated_at: chrono::DateTime<Utc>,\n/// overall compliance status (placeholder)\n\npub compliance_status: String\n}",
              "docs": "Regulatory report",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 36
            },
            {
              "name": "regulatory::SubmissionResult",
              "kind": "struct_item",
              "signature": "pub struct SubmissionResult {\n/// submission id\n\npub submission_id: String,\n/// status e.g. \"accepted\", \"queued\"\n\npub status: String\n}",
              "docs": "Result of submission to a regulator",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 49
            },
            {
              "name": "regulatory::RegulatoryReportGenerator",
              "kind": "trait_item",
              "signature": "pub trait RegulatoryReportGenerator: Send + Sync {\n    /// Generate a report from aggregated data\n    async fn generate_report(\n        &self,\n        data: RegulatoryData,\n        period: ReportingPeriod,\n    ) -> Result<RegulatoryReport>;\n}",
              "docs": "Reporting interface for specific regulations",
              "attributes": "#[async_trait::async_trait]",
              "line": 58
            },
            {
              "name": "regulatory::RegulatoryReporter",
              "kind": "trait_item",
              "signature": "pub trait RegulatoryReporter: Send + Sync {\n    /// Generate a regulatory report for a regulation and period\n    async fn generate_regulatory_report(\n        &self,\n        regulation: &str,\n        period: ReportingPeriod,\n    ) -> Result<RegulatoryReport>;\n    /// Submit a completed regulatory report\n    async fn submit_regulatory_report(&self, report: RegulatoryReport) -> Result<SubmissionResult>;\n}",
              "docs": "Reporter for orchestrating regulatory reporting flows",
              "attributes": "#[async_trait::async_trait]",
              "line": 69
            },
            {
              "name": "regulatory::ComplianceReporter",
              "kind": "trait_item",
              "signature": "pub trait ComplianceReporter: Send + Sync {\n    /// Validate a report or operation and record evidence\n    async fn validate_and_record(&self, _reg: &str) -> Result<EvidenceId>;\n}",
              "docs": "Compliance reporting interface (used by `ProductionComplianceFramework`)",
              "attributes": "#[async_trait::async_trait]",
              "line": 82
            },
            {
              "name": "regulatory::ProductionRegulatoryReporter",
              "kind": "struct_item",
              "signature": "pub struct ProductionRegulatoryReporter {\n\n}",
              "docs": "Production regulatory reporter",
              "attributes": "",
              "line": 88
            },
            {
              "name": "regulatory::ProductionRegulatoryReporter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new registry",
              "attributes": "",
              "line": 94
            },
            {
              "name": "regulatory::ProductionRegulatoryReporter::register",
              "kind": "function_item",
              "signature": "pub async fn register(&self, name: &str, gen: Arc<dyn RegulatoryReportGenerator>);",
              "docs": "Register a generator by regulation name",
              "attributes": "",
              "line": 100
            },
            {
              "name": "regulatory::GdprComplianceEngine",
              "kind": "struct_item",
              "signature": "pub struct GdprComplianceEngine;",
              "docs": "GDPR generator (example)",
              "attributes": "",
              "line": 147
            }
          ],
          "parseErrors": false,
          "reviewNote": "The compliance module contains prototype/placeholder behavior. Production in a type name does not establish implemented audit integrity, verified signatures, governance encryption, regulatory submission, or a compliance certification. Read /libraries/weave-compliance/overview and the corresponding task guide for current boundaries."
        }
      ]
    },
    {
      "name": "l1fe-weave-core",
      "version": "0.1.0",
      "source": "sigil/weave/libs/weave-core",
      "manifestSha256": "ccac06c8672b5b5bbac5c5d0f4a59013bd8adf819fb3bba2cff07ae3f7575d03",
      "features": {
        "default": [
          "std"
        ],
        "std": [],
        "test-utils": [],
        "p2p": [
          "libp2p",
          "quinn",
          "hyper",
          "tower"
        ],
        "fs": [
          "fuser"
        ]
      },
      "publish": true,
      "url": "/reference/rust/l1fe-weave-core",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/weave-core/src/lib.rs",
          "sha256": "7267b43b984056ceb46f2e0f824162ba2c691dfab3c0126b11d86dbd82ae32b3",
          "attributes": "",
          "items": [
            {
              "name": "pub use crate::error::{Result, WeaveError};",
              "kind": "use_declaration",
              "signature": "pub use crate::error::{Result, WeaveError};",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "pub use crate::filesystem::AgentFs;",
              "kind": "use_declaration",
              "signature": "pub use crate::filesystem::AgentFs;",
              "docs": "",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 33
            },
            {
              "name": "pub use crate::filesystem::Mirror;",
              "kind": "use_declaration",
              "signature": "pub use crate::filesystem::Mirror;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "pub use crate::identity::Did;",
              "kind": "use_declaration",
              "signature": "pub use crate::identity::Did;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "pub use crate::network::{Dht, Swarm};",
              "kind": "use_declaration",
              "signature": "pub use crate::network::{Dht, Swarm};",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 37
            },
            {
              "name": "pub use crate::storage::{Lens, Locus, Nexus};",
              "kind": "use_declaration",
              "signature": "pub use crate::storage::{Lens, Locus, Nexus};",
              "docs": "",
              "attributes": "",
              "line": 38
            },
            {
              "name": "pub use basis::Basis;",
              "kind": "use_declaration",
              "signature": "pub use basis::Basis;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "pub use forum::Forum;",
              "kind": "use_declaration",
              "signature": "pub use forum::Forum;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "pub use gnosis::Gnosis;",
              "kind": "use_declaration",
              "signature": "pub use gnosis::Gnosis;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use weave_identity;",
              "kind": "use_declaration",
              "signature": "pub use weave_identity;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "Identity management (wraps weave-identity)",
              "attributes": "",
              "line": 50
            },
            {
              "name": "storage",
              "kind": "module",
              "signature": "pub mod storage;",
              "docs": "Storage abstractions (Strand, Locus, Lens, Nexus)",
              "attributes": "",
              "line": 53
            },
            {
              "name": "network",
              "kind": "module",
              "signature": "pub mod network;",
              "docs": "P2P networking components",
              "attributes": "",
              "line": 56
            },
            {
              "name": "filesystem",
              "kind": "module",
              "signature": "pub mod filesystem;",
              "docs": "Agent filesystem abstractions",
              "attributes": "",
              "line": 59
            },
            {
              "name": "crypto",
              "kind": "module",
              "signature": "pub mod crypto;",
              "docs": "Security utilities (no key operations)",
              "attributes": "",
              "line": 62
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "Error types for the Weave",
              "attributes": "",
              "line": 65
            },
            {
              "name": "utils",
              "kind": "module",
              "signature": "pub mod utils;",
              "docs": "Utilities and helpers",
              "attributes": "",
              "line": 68
            },
            {
              "name": "prelude",
              "kind": "module",
              "signature": "pub mod prelude;",
              "docs": "Re-exports of core types",
              "attributes": "",
              "line": 71
            },
            {
              "name": "pub use crate::crypto::{generate_nonce, hash};",
              "kind": "use_declaration",
              "signature": "pub use crate::crypto::{generate_nonce, hash};",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "pub use crate::error::{Result, WeaveError};",
              "kind": "use_declaration",
              "signature": "pub use crate::error::{Result, WeaveError};",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "pub use crate::filesystem::AgentFs;",
              "kind": "use_declaration",
              "signature": "pub use crate::filesystem::AgentFs;",
              "docs": "",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 75
            },
            {
              "name": "pub use crate::filesystem::Mirror;",
              "kind": "use_declaration",
              "signature": "pub use crate::filesystem::Mirror;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "pub use crate::identity::Did;",
              "kind": "use_declaration",
              "signature": "pub use crate::identity::Did;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "pub use crate::network::{Dht, Swarm};",
              "kind": "use_declaration",
              "signature": "pub use crate::network::{Dht, Swarm};",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 79
            },
            {
              "name": "pub use crate::storage::strand::Strand as WeaveStrand;",
              "kind": "use_declaration",
              "signature": "pub use crate::storage::strand::Strand as WeaveStrand;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "pub use crate::storage::{Lens, Locus, Nexus};",
              "kind": "use_declaration",
              "signature": "pub use crate::storage::{Lens, Locus, Nexus};",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "pub use crate::Weave;",
              "kind": "use_declaration",
              "signature": "pub use crate::Weave;",
              "docs": "",
              "attributes": "",
              "line": 82
            },
            {
              "name": "pub use basis::Basis;",
              "kind": "use_declaration",
              "signature": "pub use basis::Basis;",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "pub use forum::Forum;",
              "kind": "use_declaration",
              "signature": "pub use forum::Forum;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "pub use gnosis::Gnosis;",
              "kind": "use_declaration",
              "signature": "pub use gnosis::Gnosis;",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "pub use weave_identity::{Identity as WeaveIdentity, WeaveIdentityAdapter};",
              "kind": "use_declaration",
              "signature": "pub use weave_identity::{Identity as WeaveIdentity, WeaveIdentityAdapter};",
              "docs": "",
              "attributes": "",
              "line": 88
            },
            {
              "name": "::Weave",
              "kind": "struct_item",
              "signature": "pub struct Weave {\n/// The root strand for this Weave instance.\n\npub root_strand: Arc<RwLock<Strand>>,\n/// The Forum tuple space.\n\npub forum: Forum,\n/// The Gnosis knowledge graph.\n\npub gnosis: Gnosis,\n/// The Basis vector store.\n\npub basis: Basis,\n/// The identity adapter instance\n\npub identity_adapter: Arc<dyn weave_identity::WeaveIdentityAdapter>\n}",
              "docs": "The main entry point for The Weave.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "::Weave::new",
              "kind": "function_item",
              "signature": "pub async fn new(\n        root_strand: Arc<RwLock<Strand>>,\n        forum_strand: Arc<RwLock<Strand>>,\n        gnosis_strand: Arc<RwLock<Strand>>,\n        basis_vector_strand: Arc<RwLock<Strand>>,\n        basis_index_strand: Arc<RwLock<Strand>>,\n        identity_adapter: Arc<dyn weave_identity::WeaveIdentityAdapter>,\n    ) -> Result<Self>;",
              "docs": "Creates a new Weave instance from a root strand.\n\nThe root strand is used to derive the strands for the sub-components.\nFor now, we are taking separate strands for each component.",
              "attributes": "",
              "line": 110
            },
            {
              "name": "::Weave::identity",
              "kind": "function_item",
              "signature": "pub fn identity(&self) -> &Arc<dyn weave_identity::WeaveIdentityAdapter>;",
              "docs": "Get the identity adapter instance",
              "attributes": "",
              "line": 132
            },
            {
              "name": "::init",
              "kind": "function_item",
              "signature": "pub async fn init() -> Result<()>;",
              "docs": "Initialize the Weave subsystem",
              "attributes": "",
              "line": 138
            },
            {
              "name": "migration",
              "kind": "module",
              "signature": "pub mod migration;",
              "docs": "Migration helper for legacy code",
              "attributes": "",
              "line": 157
            },
            {
              "name": "migration::MigrationGuide",
              "kind": "struct_item",
              "signature": "pub struct MigrationGuide;",
              "docs": "Convert legacy KeyPair operations to SDK operations\n\n# Example\n```ignore\n// Old code:\nlet keypair = KeyPair::generate();\nlet signature = keypair.sign(message);\n\n// New code:\nlet sdk = WeaveIdentity::new();\nlet (keypair, identity) = sdk.create_identity(IdentityType::Human, None).await?;\nlet signature = sdk.sign(&keypair, message).await?;\n```",
              "attributes": "",
              "line": 174
            },
            {
              "name": "migration::MigrationGuide::example_key_generation",
              "kind": "function_item",
              "signature": "pub async fn example_key_generation() -> Result<()>;",
              "docs": "Example of migrating key generation",
              "attributes": "",
              "line": 178
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "identity",
          "source": "sigil/weave/libs/weave-core/src/identity/mod.rs",
          "sha256": "f0c5ec33f9befbf38943c92966727a359547e3a4f734558950fe1765e311ce62",
          "attributes": "",
          "items": [
            {
              "name": "identity::Did",
              "kind": "struct_item",
              "signature": "pub struct Did(pub WeaveIdentity);",
              "docs": "DID wrapper that delegates to weave-identity",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 16
            },
            {
              "name": "identity::Did::new",
              "kind": "function_item",
              "signature": "pub fn new(identity: WeaveIdentity) -> Self;",
              "docs": "Create a new DID from the weave identity",
              "attributes": "",
              "line": 20
            },
            {
              "name": "identity::Did::inner",
              "kind": "function_item",
              "signature": "pub fn inner(&self) -> &WeaveIdentity;",
              "docs": "Get the inner identity",
              "attributes": "",
              "line": 25
            },
            {
              "name": "identity::Did::is_agent",
              "kind": "function_item",
              "signature": "pub fn is_agent(&self) -> bool;",
              "docs": "Check if this is an agent DID",
              "attributes": "",
              "line": 30
            },
            {
              "name": "identity::Did::is_human",
              "kind": "function_item",
              "signature": "pub fn is_human(&self) -> bool;",
              "docs": "Check if this is a human DID",
              "attributes": "",
              "line": 35
            },
            {
              "name": "identity::Did::is_organization",
              "kind": "function_item",
              "signature": "pub fn is_organization(&self) -> bool;",
              "docs": "Check if this is an organization DID",
              "attributes": "",
              "line": 40
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "storage",
          "source": "sigil/weave/libs/weave-core/src/storage/mod.rs",
          "sha256": "0c5be8baa8920af2a6cc10eb24a04f7abdcdd4d57f1ba164ab5c88125100e49e",
          "attributes": "",
          "items": [
            {
              "name": "storage::strand",
              "kind": "module",
              "signature": "pub mod strand;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "pub use lens::{Lens, LensDb, LensEntry, LensMetadata as LensDbMetadata, LensQuery};",
              "kind": "use_declaration",
              "signature": "pub use lens::{Lens, LensDb, LensEntry, LensMetadata as LensDbMetadata, LensQuery};",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use locus::{Locus, LocusDirectory, LocusFile, LocusMetadata};",
              "kind": "use_declaration",
              "signature": "pub use locus::{Locus, LocusDirectory, LocusFile, LocusMetadata};",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "pub use nexus::{Nexus, NexusEntry, NexusMetadata, NexusQuery, NexusView, OrderingStrategy};",
              "kind": "use_declaration",
              "signature": "pub use nexus::{Nexus, NexusEntry, NexusMetadata, NexusQuery, NexusView, OrderingStrategy};",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "pub use strand::{Strand, StrandEntry, StrandMetadata};",
              "kind": "use_declaration",
              "signature": "pub use strand::{Strand, StrandEntry, StrandMetadata};",
              "docs": "",
              "attributes": "",
              "line": 20
            },
            {
              "name": "storage::init",
              "kind": "function_item",
              "signature": "pub async fn init() -> Result<()>;",
              "docs": "Initialize the storage subsystem",
              "attributes": "",
              "line": 25
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "storage::lens",
          "source": "sigil/weave/libs/weave-core/src/storage/lens.rs",
          "sha256": "39be115fc4fa00b066e2a30807c6c4a52dda1e86c69eaa3479259d1c60ecc843",
          "attributes": "",
          "items": [
            {
              "name": "storage::lens::LensMetadata",
              "kind": "struct_item",
              "signature": "pub struct LensMetadata {\n/// Database DID\n\npub did: String,\n/// Owner DID\n\npub owner: Did,\n/// Parent database DID (if sub-database)\n\npub parent: Option<String>,\n/// Creation time\n\npub created_at: DateTime<Utc>,\n/// Number of keys\n\npub key_count: u64\n}",
              "docs": "Database metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "storage::lens::LensEntry",
              "kind": "struct_item",
              "signature": "pub struct LensEntry {\n/// Key\n\npub key: String,\n/// Value (serialized)\n\npub value: Vec<u8>,\n/// Timestamp\n\npub timestamp: DateTime<Utc>,\n/// Version\n\npub version: u64\n}",
              "docs": "Database entry",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "storage::lens::LensQuery",
              "kind": "struct_item",
              "signature": "pub struct LensQuery {\n/// Start key (inclusive)\n\npub start: Option<String>,\n/// End key (exclusive)\n\npub end: Option<String>,\n/// Maximum number of results\n\npub limit: Option<usize>,\n/// Reverse order\n\npub reverse: bool\n}",
              "docs": "Query parameters for range queries",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 42
            },
            {
              "name": "storage::lens::LensDb",
              "kind": "struct_item",
              "signature": "pub struct LensDb {\n\n}",
              "docs": "Lens database",
              "attributes": "",
              "line": 54
            },
            {
              "name": "storage::lens::Lens",
              "kind": "struct_item",
              "signature": "pub struct Lens {\n\n}",
              "docs": "Main Lens interface",
              "attributes": "",
              "line": 66
            },
            {
              "name": "storage::lens::Lens::create",
              "kind": "function_item",
              "signature": "pub fn create(owner: Did, _adapter: Arc<dyn weave_identity::WeaveIdentityAdapter>) -> Self;",
              "docs": "Create a new Lens instance",
              "attributes": "",
              "line": 73
            },
            {
              "name": "storage::lens::Lens::open",
              "kind": "function_item",
              "signature": "pub fn open(metadata: LensMetadata) -> Self;",
              "docs": "Open an existing Lens instance (read-only by default)",
              "attributes": "",
              "line": 98
            },
            {
              "name": "storage::lens::Lens::enable_write_access",
              "kind": "function_item",
              "signature": "pub fn enable_write_access(&mut self);",
              "docs": "Enable write access",
              "attributes": "",
              "line": 110
            },
            {
              "name": "storage::lens::Lens::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, key: &str, value: Vec<u8>) -> Result<()>;",
              "docs": "Put a key-value pair",
              "attributes": "",
              "line": 117
            },
            {
              "name": "storage::lens::Lens::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, key: &str) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a value by key",
              "attributes": "",
              "line": 122
            },
            {
              "name": "storage::lens::Lens::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, key: &str) -> Result<bool>;",
              "docs": "Delete a key",
              "attributes": "",
              "line": 127
            },
            {
              "name": "storage::lens::Lens::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, query: LensQuery) -> Result<Vec<(String, Vec<u8>)>>;",
              "docs": "Query keys by range",
              "attributes": "",
              "line": 132
            },
            {
              "name": "storage::lens::Lens::sub_db",
              "kind": "function_item",
              "signature": "pub async fn sub_db(&self, name: &str) -> Result<Arc<LensDb>>;",
              "docs": "Get or create a sub-database",
              "attributes": "",
              "line": 137
            },
            {
              "name": "storage::lens::Lens::metadata",
              "kind": "function_item",
              "signature": "pub fn metadata(&self) -> LensMetadata;",
              "docs": "Get metadata",
              "attributes": "",
              "line": 142
            },
            {
              "name": "storage::lens::LensDb::put_raw",
              "kind": "function_item",
              "signature": "pub async fn put_raw(&self, key: &str, value: Vec<u8>) -> Result<()>;",
              "docs": "Put a raw key-value pair",
              "attributes": "",
              "line": 149
            },
            {
              "name": "storage::lens::LensDb::get_raw",
              "kind": "function_item",
              "signature": "pub async fn get_raw(&self, key: &str) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a raw value by key",
              "attributes": "",
              "line": 180
            },
            {
              "name": "storage::lens::LensDb::delete",
              "kind": "function_item",
              "signature": "pub async fn delete(&self, key: &str) -> Result<bool>;",
              "docs": "Delete a key",
              "attributes": "",
              "line": 185
            },
            {
              "name": "storage::lens::LensDb::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, query: LensQuery) -> Result<Vec<(String, Vec<u8>)>>;",
              "docs": "Query keys by range",
              "attributes": "",
              "line": 201
            },
            {
              "name": "storage::lens::LensDb::sub_db",
              "kind": "function_item",
              "signature": "pub async fn sub_db(&self, name: &str) -> Result<Arc<LensDb>>;",
              "docs": "Get or create a sub-database",
              "attributes": "",
              "line": 236
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "storage::locus",
          "source": "sigil/weave/libs/weave-core/src/storage/locus.rs",
          "sha256": "3792b5c2f99d84176aa10b54827ede4bca20d4d1157a4a3964444e8e9bddc196",
          "attributes": "",
          "items": [
            {
              "name": "storage::locus::LocusMetadata",
              "kind": "struct_item",
              "signature": "pub struct LocusMetadata {\n/// File/directory name\n\npub name: String,\n/// Size in bytes\n\npub size: u64,\n/// MIME type\n\npub mime_type: String,\n/// Creation time\n\npub created_at: DateTime<Utc>,\n/// Modification time\n\npub modified_at: DateTime<Utc>,\n/// Owner DID\n\npub owner: Did,\n/// Permissions\n\npub permissions: u32,\n/// Whether this is a directory\n\npub is_directory: bool\n}",
              "docs": "File metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 18
            },
            {
              "name": "storage::locus::LocusFile",
              "kind": "struct_item",
              "signature": "pub struct LocusFile {\n/// Metadata\n\npub metadata: LocusMetadata,\n/// Content strand DID\n\npub content_strand: String\n}",
              "docs": "File in Locus",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 39
            },
            {
              "name": "storage::locus::LocusDirectory",
              "kind": "struct_item",
              "signature": "pub struct LocusDirectory {\n/// Metadata\n\npub metadata: LocusMetadata,\n/// Child entries (name -> DID)\n\npub children: DashMap<String, String>\n}",
              "docs": "Directory in Locus",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 48
            },
            {
              "name": "storage::locus::Locus",
              "kind": "struct_item",
              "signature": "pub struct Locus {\n\n}",
              "docs": "Locus file system",
              "attributes": "",
              "line": 56
            },
            {
              "name": "storage::locus::Locus::create",
              "kind": "function_item",
              "signature": "pub fn create(owner: Did, _adapter: Arc<dyn weave_identity::WeaveIdentityAdapter>) -> Self;",
              "docs": "Create a new Locus drive",
              "attributes": "",
              "line": 73
            },
            {
              "name": "storage::locus::Locus::open",
              "kind": "function_item",
              "signature": "pub fn open(did: String, owner: Did, root: LocusDirectory, lens: Arc<Lens>) -> Self;",
              "docs": "Open an existing Locus drive (read-only by default)",
              "attributes": "",
              "line": 109
            },
            {
              "name": "storage::locus::Locus::enable_write_access",
              "kind": "function_item",
              "signature": "pub fn enable_write_access(&mut self);",
              "docs": "Enable write access (must have appropriate credentials in SDK)",
              "attributes": "",
              "line": 124
            },
            {
              "name": "storage::locus::Locus::did",
              "kind": "function_item",
              "signature": "pub fn did(&self) -> &str;",
              "docs": "Get the Locus DID",
              "attributes": "",
              "line": 129
            },
            {
              "name": "storage::locus::Locus::owner",
              "kind": "function_item",
              "signature": "pub fn owner(&self) -> &Did;",
              "docs": "Get the owner DID",
              "attributes": "",
              "line": 134
            },
            {
              "name": "storage::locus::Locus::mkdir",
              "kind": "function_item",
              "signature": "pub async fn mkdir(&self, path: &Path) -> Result<()>;",
              "docs": "Create a directory",
              "attributes": "",
              "line": 139
            },
            {
              "name": "storage::locus::Locus::write_file",
              "kind": "function_item",
              "signature": "pub async fn write_file(&self, path: &Path, content: Vec<u8>, mime_type: &str) -> Result<()>;",
              "docs": "Write a file",
              "attributes": "",
              "line": 187
            },
            {
              "name": "storage::locus::Locus::read_file",
              "kind": "function_item",
              "signature": "pub async fn read_file(&self, path: &Path) -> Result<Vec<u8>>;",
              "docs": "Read a file",
              "attributes": "",
              "line": 259
            },
            {
              "name": "storage::locus::Locus::list_dir",
              "kind": "function_item",
              "signature": "pub async fn list_dir(&self, path: &Path) -> Result<Vec<LocusMetadata>>;",
              "docs": "List directory contents",
              "attributes": "",
              "line": 287
            },
            {
              "name": "storage::locus::Locus::stat",
              "kind": "function_item",
              "signature": "pub fn stat(&self, path: &Path) -> Result<LocusMetadata>;",
              "docs": "Get file/directory metadata",
              "attributes": "",
              "line": 336
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "storage::nexus",
          "source": "sigil/weave/libs/weave-core/src/storage/nexus.rs",
          "sha256": "2c96de4816749dd9d98503586c573fce7c8be7858619658d6166efdf1b1f766c",
          "attributes": "",
          "items": [
            {
              "name": "storage::nexus::NexusMetadata",
              "kind": "struct_item",
              "signature": "pub struct NexusMetadata {\n/// Nexus DID\n\npub did: String,\n/// Name\n\npub name: String,\n/// Owner DID\n\npub owner: Did,\n/// Creation time\n\npub created_at: DateTime<Utc>,\n/// Input strand DIDs\n\npub inputs: Vec<String>,\n/// Ordering strategy\n\npub ordering: OrderingStrategy\n}",
              "docs": "Nexus metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "storage::nexus::OrderingStrategy",
              "kind": "enum_item",
              "signature": "pub enum OrderingStrategy {\n    /// Order by timestamp\n    Timestamp,\n    /// Order by strand then index\n    StrandIndex,\n    /// Custom ordering function\n    Custom(String),\n}",
              "docs": "Ordering strategy for entries",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 34
            },
            {
              "name": "storage::nexus::NexusEntry",
              "kind": "struct_item",
              "signature": "pub struct NexusEntry {\n/// Source strand DID\n\npub strand_did: String,\n/// Original strand entry\n\npub entry: StrandEntry,\n/// Nexus index\n\npub nexus_index: u64\n}",
              "docs": "Nexus entry combining strand entry with source info",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 45
            },
            {
              "name": "storage::nexus::NexusQuery",
              "kind": "struct_item",
              "signature": "pub struct NexusQuery {\n/// Start index\n\npub start: Option<u64>,\n/// Maximum number of entries\n\npub limit: Option<usize>,\n/// Filter by strand DID\n\npub strand_filter: Option<String>,\n/// Time range filter\n\npub time_range: Option<(DateTime<Utc>, DateTime<Utc>)>\n}",
              "docs": "Query parameters for nexus views",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 56
            },
            {
              "name": "storage::nexus::NexusView",
              "kind": "struct_item",
              "signature": "pub struct NexusView {\n\n}",
              "docs": "Nexus view",
              "attributes": "",
              "line": 68
            },
            {
              "name": "storage::nexus::Nexus",
              "kind": "struct_item",
              "signature": "pub struct Nexus {\n\n}",
              "docs": "Main Nexus interface",
              "attributes": "",
              "line": 78
            },
            {
              "name": "storage::nexus::Nexus::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        owner_did: Option<Did>,\n        _adapter: Arc<dyn weave_identity::WeaveIdentityAdapter>,\n    ) -> Self;",
              "docs": "Create a new Nexus instance",
              "attributes": "",
              "line": 87
            },
            {
              "name": "storage::nexus::Nexus::create_view",
              "kind": "function_item",
              "signature": "pub async fn create_view(\n        &self,\n        name: String,\n        owner: Did,\n        inputs: Vec<String>,\n        ordering: OrderingStrategy,\n    ) -> Result<String>;",
              "docs": "Create a new nexus view",
              "attributes": "",
              "line": 98
            },
            {
              "name": "storage::nexus::Nexus::add_strand",
              "kind": "function_item",
              "signature": "pub async fn add_strand(&self, nexus_did: &str, strand: Arc<Strand>) -> Result<()>;",
              "docs": "Add a strand to a nexus view",
              "attributes": "",
              "line": 132
            },
            {
              "name": "storage::nexus::Nexus::remove_strand",
              "kind": "function_item",
              "signature": "pub async fn remove_strand(&self, nexus_did: &str, strand_did: &str) -> Result<()>;",
              "docs": "Remove a strand from a nexus view",
              "attributes": "",
              "line": 156
            },
            {
              "name": "storage::nexus::Nexus::query",
              "kind": "function_item",
              "signature": "pub async fn query(&self, nexus_did: &str, query: NexusQuery) -> Result<Vec<NexusEntry>>;",
              "docs": "Query entries from a nexus view",
              "attributes": "",
              "line": 177
            },
            {
              "name": "storage::nexus::Nexus::get_metadata",
              "kind": "function_item",
              "signature": "pub fn get_metadata(&self, nexus_did: &str) -> Result<NexusMetadata>;",
              "docs": "Get nexus view metadata",
              "attributes": "",
              "line": 289
            },
            {
              "name": "storage::nexus::Nexus::list_views",
              "kind": "function_item",
              "signature": "pub fn list_views(&self) -> Vec<NexusMetadata>;",
              "docs": "List all nexus views",
              "attributes": "",
              "line": 300
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "storage::strand",
          "source": "sigil/weave/libs/weave-core/src/storage/strand.rs",
          "sha256": "24f006a85d0a3afb883a3f8b2a369f8030f5e0077ef2fb8478382adff4eb7a23",
          "attributes": "",
          "items": [
            {
              "name": "storage::strand::StrandEntry",
              "kind": "struct_item",
              "signature": "pub struct StrandEntry {\n/// Entry index\n\npub index: u64,\n/// Entry data\n\npub data: Vec<u8>,\n/// Timestamp\n\npub timestamp: DateTime<Utc>,\n/// Hash of this entry\n\npub hash: [u8; 32],\n/// Hash of previous entry\n\npub prev_hash: [u8; 32],\n/// Signature by the strand owner\n\npub signature: Vec<u8>\n}",
              "docs": "Entry in a strand log",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 14
            },
            {
              "name": "storage::strand::StrandMetadata",
              "kind": "struct_item",
              "signature": "pub struct StrandMetadata {\n/// Strand DID\n\npub did: String,\n/// Owner DID\n\npub owner: Did,\n/// Creation timestamp\n\npub created_at: DateTime<Utc>,\n/// Last update timestamp\n\npub updated_at: DateTime<Utc>,\n/// Number of entries\n\npub length: u64,\n/// Root hash\n\npub root_hash: [u8; 32]\n}",
              "docs": "Strand metadata",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 31
            },
            {
              "name": "storage::strand::Strand",
              "kind": "struct_item",
              "signature": "pub struct Strand {\n\n}",
              "docs": "Strand - An immutable append-only log",
              "attributes": "",
              "line": 47
            },
            {
              "name": "storage::strand::Strand::create",
              "kind": "function_item",
              "signature": "pub fn create(owner: Did, adapter: Arc<dyn WeaveIdentityAdapter>) -> Self;",
              "docs": "Create a new strand",
              "attributes": "",
              "line": 60
            },
            {
              "name": "storage::strand::Strand::open",
              "kind": "function_item",
              "signature": "pub fn open(\n        metadata: StrandMetadata,\n        entries: Vec<StrandEntry>,\n        adapter: Arc<dyn WeaveIdentityAdapter>,\n    ) -> Self;",
              "docs": "Open an existing strand (read-only)",
              "attributes": "",
              "line": 85
            },
            {
              "name": "storage::strand::Strand::metadata",
              "kind": "function_item",
              "signature": "pub fn metadata(&self) -> StrandMetadata;",
              "docs": "Get strand metadata",
              "attributes": "",
              "line": 99
            },
            {
              "name": "storage::strand::Strand::did",
              "kind": "function_item",
              "signature": "pub fn did(&self) -> String;",
              "docs": "Get the strand DID",
              "attributes": "",
              "line": 104
            },
            {
              "name": "storage::strand::Strand::append",
              "kind": "function_item",
              "signature": "pub async fn append(&mut self, data: Vec<u8>) -> Result<StrandEntry>;",
              "docs": "Append a new entry to the strand",
              "attributes": "",
              "line": 109
            },
            {
              "name": "storage::strand::Strand::verify",
              "kind": "function_item",
              "signature": "pub async fn verify(&self) -> Result<bool>;",
              "docs": "Verify all entries in the strand",
              "attributes": "",
              "line": 156
            },
            {
              "name": "storage::strand::Strand::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, index: u64) -> Option<StrandEntry>;",
              "docs": "Get entry by index",
              "attributes": "",
              "line": 212
            },
            {
              "name": "storage::strand::Strand::entries",
              "kind": "function_item",
              "signature": "pub fn entries(&self) -> Vec<StrandEntry>;",
              "docs": "Get all entries",
              "attributes": "",
              "line": 218
            },
            {
              "name": "storage::strand::Strand::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> u64;",
              "docs": "Get the length of the strand",
              "attributes": "",
              "line": 223
            },
            {
              "name": "storage::strand::Strand::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if the strand is empty",
              "attributes": "",
              "line": 228
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "network",
          "source": "sigil/weave/libs/weave-core/src/network/mod.rs",
          "sha256": "71ff1b9b5189471116b8c9a37c1ed2697520b25a02a8cab7522be5f292db2fa6",
          "attributes": "",
          "items": [
            {
              "name": "pub use dht::{Dht, DhtConfig, DhtStats};",
              "kind": "use_declaration",
              "signature": "pub use dht::{Dht, DhtConfig, DhtStats};",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 19
            },
            {
              "name": "pub use protocol::{ProtocolMessage, WeaveProtocol};",
              "kind": "use_declaration",
              "signature": "pub use protocol::{ProtocolMessage, WeaveProtocol};",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 21
            },
            {
              "name": "pub use swarm::{Peer, Swarm, SwarmConfig};",
              "kind": "use_declaration",
              "signature": "pub use swarm::{Peer, Swarm, SwarmConfig};",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 23
            },
            {
              "name": "network::init",
              "kind": "function_item",
              "signature": "pub async fn init() -> Result<()>;",
              "docs": "Initialize the network subsystem",
              "attributes": "",
              "line": 28
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "network::dht",
          "source": "sigil/weave/libs/weave-core/src/network/dht.rs",
          "sha256": "d6704e766008326844fbaba6b4595307aee32cd4ed3d8435e2029da7fae09532",
          "attributes": "#[cfg(feature = \"p2p\")]",
          "items": [
            {
              "name": "network::dht::DhtConfig",
              "kind": "struct_item",
              "signature": "pub struct DhtConfig {\n/// Bootstrap nodes\n\npub bootstrap_nodes: Vec<Multiaddr>,\n/// Local port\n\npub port: u16,\n/// Replication factor\n\npub replication_factor: usize,\n/// Record TTL\n\npub record_ttl: Duration\n}",
              "docs": "DHT configuration",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone)]",
              "line": 22
            },
            {
              "name": "network::dht::DhtStats",
              "kind": "struct_item",
              "signature": "pub struct DhtStats {\n/// Number of connected peers\n\npub peer_count: usize,\n/// Number of stored records\n\npub record_count: usize,\n/// Bootstrap status\n\npub bootstrapped: bool,\n/// Local peer ID\n\npub local_peer_id: String\n}",
              "docs": "DHT statistics",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "network::dht::ContentAnnouncement",
              "kind": "struct_item",
              "signature": "pub struct ContentAnnouncement {\n/// Content DID\n\npub did: String,\n/// Provider peer ID\n\npub provider: String,\n/// Metadata\n\npub metadata: Vec<u8>\n}",
              "docs": "Content announcement",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 59
            },
            {
              "name": "network::dht::Dht",
              "kind": "struct_item",
              "signature": "pub struct Dht {\n\n}",
              "docs": "DHT instance",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 69
            },
            {
              "name": "network::dht::Dht::new",
              "kind": "function_item",
              "signature": "pub fn new(config: DhtConfig, owner_did: Did) -> Result<Self>;",
              "docs": "Create a new DHT instance for a given DID\n\nNetwork keys are derived deterministically from the DID",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 95
            },
            {
              "name": "network::dht::Dht::bootstrap",
              "kind": "function_item",
              "signature": "pub async fn bootstrap(&self) -> Result<()>;",
              "docs": "Bootstrap the DHT",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 140
            },
            {
              "name": "network::dht::Dht::put",
              "kind": "function_item",
              "signature": "pub async fn put(&self, key: &str, value: Vec<u8>) -> Result<()>;",
              "docs": "Store a record in the DHT",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 166
            },
            {
              "name": "network::dht::Dht::get",
              "kind": "function_item",
              "signature": "pub async fn get(&self, key: &str) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a record from the DHT",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 187
            },
            {
              "name": "network::dht::Dht::announce_content",
              "kind": "function_item",
              "signature": "pub async fn announce_content(&self, content_did: &str, metadata: Vec<u8>) -> Result<()>;",
              "docs": "Announce content availability",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 222
            },
            {
              "name": "network::dht::Dht::find_content",
              "kind": "function_item",
              "signature": "pub async fn find_content(&self, content_did: &str) -> Result<Vec<ContentAnnouncement>>;",
              "docs": "Find content providers",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 236
            },
            {
              "name": "network::dht::Dht::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> DhtStats;",
              "docs": "Get DHT statistics",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 248
            },
            {
              "name": "network::dht::Dht::peers",
              "kind": "function_item",
              "signature": "pub fn peers(&self) -> Vec<(PeerId, Multiaddr)>;",
              "docs": "Get connected peers",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 253
            },
            {
              "name": "network::dht::Dht::local_peer_id",
              "kind": "function_item",
              "signature": "pub fn local_peer_id(&self) -> &PeerId;",
              "docs": "Get local peer ID",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 261
            },
            {
              "name": "network::dht::Dht::owner_did",
              "kind": "function_item",
              "signature": "pub fn owner_did(&self) -> &Did;",
              "docs": "Get owner DID",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 266
            },
            {
              "name": "network::dht::DhtBehaviour",
              "kind": "struct_item",
              "signature": "pub struct DhtBehaviour {\n\n}",
              "docs": "DHT network behaviour for libp2p integration",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 272
            },
            {
              "name": "network::dht::DhtBehaviour::new",
              "kind": "function_item",
              "signature": "pub fn new(dht: &Dht) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 277
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "network::protocol",
          "source": "sigil/weave/libs/weave-core/src/network/protocol.rs",
          "sha256": "24373f5bf31aba4fefd06532f0dae5782ae4f7ea7fcfbbac483937d1705acabe",
          "attributes": "#[cfg(feature = \"p2p\")]",
          "items": [
            {
              "name": "network::protocol::WEAVE_PROTOCOL",
              "kind": "const_item",
              "signature": "pub const WEAVE_PROTOCOL: &str;",
              "docs": "The Weave protocol constant",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 15
            },
            {
              "name": "network::protocol::WeaveProtocol",
              "kind": "struct_item",
              "signature": "pub struct WeaveProtocol;",
              "docs": "The Weave protocol name",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone)]",
              "line": 19
            },
            {
              "name": "network::protocol::ProtocolMessage",
              "kind": "enum_item",
              "signature": "pub enum ProtocolMessage {\n    /// Request strand data\n    StrandRequest {\n        /// Strand DID\n        strand_did: String,\n        /// Start index\n        start: u64,\n        /// Length\n        length: Option<u64>,\n    },\n    /// Strand data response\n    StrandResponse {\n        /// Strand entries\n        entries: Vec<crate::storage::StrandEntry>,\n    },\n    /// Request file from Locus\n    LocusRequest {\n        /// Locus DID\n        locus_did: String,\n        /// File path\n        path: String,\n    },\n    /// Locus file response\n    LocusResponse {\n        /// File data\n        data: Vec<u8>,\n        /// Metadata\n        metadata: crate::storage::LocusMetadata,\n    },\n    /// Announce content\n    ContentAnnounce {\n        /// Content DID\n        did: String,\n        /// Content type\n        content_type: String,\n    },\n    /// Sync request\n    SyncRequest {\n        /// Source DID\n        source: String,\n        /// Target DID\n        target: String,\n        /// Sync metadata\n        metadata: Vec<u8>,\n    },\n}",
              "docs": "Protocol message types",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 29
            },
            {
              "name": "network::protocol::WeaveCodec",
              "kind": "struct_item",
              "signature": "pub struct WeaveCodec;",
              "docs": "Codec for the Weave protocol",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Clone, Default)]",
              "line": 78
            },
            {
              "name": "network::protocol::ProtocolHandler",
              "kind": "struct_item",
              "signature": "pub struct ProtocolHandler {\n\n}",
              "docs": "Protocol handler",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 148
            },
            {
              "name": "network::protocol::ProtocolHandler::new",
              "kind": "function_item",
              "signature": "pub fn new(peer_id: PeerId) -> Self;",
              "docs": "Create a new protocol handler",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 155
            },
            {
              "name": "network::protocol::ProtocolHandler::handle_request",
              "kind": "function_item",
              "signature": "pub async fn handle_request(&self, request: ProtocolMessage) -> Result<ProtocolMessage>;",
              "docs": "Handle incoming request",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 160
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "network::swarm",
          "source": "sigil/weave/libs/weave-core/src/network/swarm.rs",
          "sha256": "6103680ef46d105393a8a5511cee4ec7698f872efec14608a279e645d2e3afce",
          "attributes": "#[cfg(feature = \"p2p\")]",
          "items": [
            {
              "name": "network::swarm::SwarmConfig",
              "kind": "struct_item",
              "signature": "pub struct SwarmConfig {\n/// Listen addresses\n\npub listen_addrs: Vec<Multiaddr>,\n/// Maximum connections\n\npub max_connections: usize,\n/// Connection timeout in seconds\n\npub connection_timeout: u64\n}",
              "docs": "Swarm configuration",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone)]",
              "line": 20
            },
            {
              "name": "network::swarm::Peer",
              "kind": "struct_item",
              "signature": "pub struct Peer {\n/// Peer ID\n\npub id: PeerId,\n/// Addresses\n\npub addresses: Vec<Multiaddr>,\n/// Agent DID (if known)\n\npub agent_did: Option<String>,\n/// Connection state\n\npub connected: bool,\n/// Last seen\n\npub last_seen: chrono::DateTime<chrono::Utc>\n}",
              "docs": "Peer information",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "network::swarm::WeaveSwarmBehaviour",
              "kind": "struct_item",
              "signature": "pub struct WeaveSwarmBehaviour {\n/// Kademlia DHT\n\npub kademlia: Kademlia<libp2p::kad::store::MemoryStore>,\n/// mDNS for local discovery\n\npub mdns: libp2p::mdns::Behaviour<libp2p::mdns::Config>,\n/// Identify protocol\n\npub identify: libp2p::identify::Behaviour,\n/// Request-response for custom protocols\n\npub request_response:\n        libp2p::request_response::Behaviour<crate::network::protocol::WeaveProtocol>\n}",
              "docs": "Swarm behavior combining multiple protocols",
              "attributes": "#[cfg(feature = \"p2p\")]\n#[derive(NetworkBehaviour)]",
              "line": 56
            },
            {
              "name": "network::swarm::Swarm",
              "kind": "struct_item",
              "signature": "pub struct Swarm {\n\n}",
              "docs": "P2P swarm manager",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 69
            },
            {
              "name": "network::swarm::Swarm::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: SwarmConfig, owner_did: Did) -> Result<Self>;",
              "docs": "Create a new swarm for a given DID\n\nNote: Network keys are separate from identity keys.\nWe derive a deterministic network keypair from the DID\nto ensure consistent peer IDs across restarts.",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 88
            },
            {
              "name": "network::swarm::Swarm::start",
              "kind": "function_item",
              "signature": "pub async fn start(&self) -> Result<()>;",
              "docs": "Start the swarm event loop",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 172
            },
            {
              "name": "network::swarm::Swarm::connect",
              "kind": "function_item",
              "signature": "pub async fn connect(&self, address: Multiaddr) -> Result<()>;",
              "docs": "Connect to a peer",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 218
            },
            {
              "name": "network::swarm::Swarm::local_peer_id",
              "kind": "function_item",
              "signature": "pub fn local_peer_id(&self) -> &PeerId;",
              "docs": "Get local peer ID",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 228
            },
            {
              "name": "network::swarm::Swarm::owner_did",
              "kind": "function_item",
              "signature": "pub fn owner_did(&self) -> &Did;",
              "docs": "Get owner DID",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 233
            },
            {
              "name": "network::swarm::Swarm::peers",
              "kind": "function_item",
              "signature": "pub fn peers(&self) -> Vec<Peer>;",
              "docs": "Get connected peers",
              "attributes": "#[cfg(feature = \"p2p\")]",
              "line": 238
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "filesystem",
          "source": "sigil/weave/libs/weave-core/src/filesystem/mod.rs",
          "sha256": "f3e86b34a50842d173fd62695e8e257e4e1dd9bf0821e592aeb1fb12f2a0fabd",
          "attributes": "",
          "items": [
            {
              "name": "pub use agentfs::{AgentFs, AgentFsConfig, AgentFsEntry};",
              "kind": "use_declaration",
              "signature": "pub use agentfs::{AgentFs, AgentFsConfig, AgentFsEntry};",
              "docs": "",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 16
            },
            {
              "name": "pub use diff::{Diff, DiffEntry, DiffKind};",
              "kind": "use_declaration",
              "signature": "pub use diff::{Diff, DiffEntry, DiffKind};",
              "docs": "",
              "attributes": "",
              "line": 17
            },
            {
              "name": "pub use mirror::{Mirror, MirrorConfig, SyncDirection};",
              "kind": "use_declaration",
              "signature": "pub use mirror::{Mirror, MirrorConfig, SyncDirection};",
              "docs": "",
              "attributes": "",
              "line": 18
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "filesystem::agentfs",
          "source": "sigil/weave/libs/weave-core/src/filesystem/agentfs.rs",
          "sha256": "d6c627b337ddcf5028cc3ba340131f3a74e04d818f2271cddbf70b5eef42f754",
          "attributes": "#[cfg(feature = \"fs\")]",
          "items": [
            {
              "name": "filesystem::agentfs::AgentFsConfig",
              "kind": "struct_item",
              "signature": "pub struct AgentFsConfig {\n/// Root directory for local storage\n\npub root: PathBuf,\n/// Cache size in bytes\n\npub cache_size: usize\n}",
              "docs": "AgentFS configuration",
              "attributes": "#[cfg(feature = \"fs\")]\n#[derive(Debug, Clone)]",
              "line": 154
            },
            {
              "name": "filesystem::agentfs::AgentFsEntry",
              "kind": "struct_item",
              "signature": "pub struct AgentFsEntry {\n/// Local path\n\npub local_path: PathBuf,\n/// Remote Locus path\n\npub remote_path: PathBuf,\n/// Last sync time\n\npub last_sync: chrono::DateTime<chrono::Utc>,\n/// Entry checksum\n\npub checksum: [u8; 32]\n}",
              "docs": "Entry in AgentFS",
              "attributes": "#[cfg(feature = \"fs\")]\n#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 172
            },
            {
              "name": "filesystem::agentfs::AgentFs",
              "kind": "struct_item",
              "signature": "pub struct AgentFs {\n\n}",
              "docs": "AgentFS instance",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 184
            },
            {
              "name": "filesystem::agentfs::AgentFs::new",
              "kind": "function_item",
              "signature": "pub fn new(config: AgentFsConfig, agent_did: Did, locus: Arc<Locus>) -> Result<Self>;",
              "docs": "Create a new AgentFS instance",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 199
            },
            {
              "name": "filesystem::agentfs::AgentFs::mount",
              "kind": "function_item",
              "signature": "pub async fn mount(self: &Arc<Self>) -> Result<()>;",
              "docs": "Mount AgentFS",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 213
            },
            {
              "name": "filesystem::agentfs::AgentFs::sync",
              "kind": "function_item",
              "signature": "pub async fn sync(\n        &self,\n        local_path: &Path,\n        remote_path: &Path,\n        direction: SyncDirection,\n    ) -> Result<()>;",
              "docs": "Sync with remote Locus",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 229
            },
            {
              "name": "filesystem::agentfs::AgentFs::push",
              "kind": "function_item",
              "signature": "pub async fn push(&self, local_path: &Path, remote_path: &Path) -> Result<()>;",
              "docs": "Push local file to remote",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 246
            },
            {
              "name": "filesystem::agentfs::AgentFs::agent_did",
              "kind": "function_item",
              "signature": "pub fn agent_did(&self) -> &Did;",
              "docs": "Get agent DID",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 312
            },
            {
              "name": "filesystem::agentfs::AgentFs::list_entries",
              "kind": "function_item",
              "signature": "pub fn list_entries(&self) -> Vec<AgentFsEntry>;",
              "docs": "List all entries",
              "attributes": "#[cfg(feature = \"fs\")]",
              "line": 317
            },
            {
              "name": "filesystem::agentfs::SyncDirection",
              "kind": "enum_item",
              "signature": "pub enum SyncDirection {\n    /// Push local to remote\n    Push,\n    /// Pull remote to local\n    Pull,\n    /// Sync both directions\n    Bidirectional,\n}",
              "docs": "Sync direction",
              "attributes": "#[cfg(feature = \"fs\")]\n#[derive(Debug, Clone, Copy)]",
              "line": 327
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "filesystem::diff",
          "source": "sigil/weave/libs/weave-core/src/filesystem/diff.rs",
          "sha256": "20fa88453daf94c40a2d5863ccbc6cd7081b676327dacc1516b954fa9eb5d281",
          "attributes": "",
          "items": [
            {
              "name": "filesystem::diff::DiffKind",
              "kind": "enum_item",
              "signature": "pub enum DiffKind {\n    /// File was added\n    Added,\n    /// File was modified\n    Modified,\n    /// File was deleted\n    Deleted,\n    /// File was renamed\n    /// Original path for a rename operation\n    #[allow(missing_docs)]\n    Renamed { from: PathBuf },\n}",
              "docs": "Kind of diff entry",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 10
            },
            {
              "name": "filesystem::diff::DiffEntry",
              "kind": "struct_item",
              "signature": "pub struct DiffEntry {\n/// Path\n\npub path: PathBuf,\n/// Kind of change\n\npub kind: DiffKind,\n/// Old checksum (for modified/deleted)\n\npub old_checksum: Option<[u8; 32]>,\n/// New checksum (for added/modified)\n\npub new_checksum: Option<[u8; 32]>,\n/// Size difference\n\npub size_diff: i64\n}",
              "docs": "Diff entry",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 25
            },
            {
              "name": "filesystem::diff::Diff",
              "kind": "struct_item",
              "signature": "pub struct Diff {\n/// Diff ID\n\npub id: String,\n/// Source state\n\npub source: String,\n/// Target state\n\npub target: String,\n/// Timestamp\n\npub timestamp: chrono::DateTime<chrono::Utc>,\n/// Entries\n\npub entries: Vec<DiffEntry>\n}",
              "docs": "Diff between two states",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 40
            },
            {
              "name": "filesystem::diff::Diff::new",
              "kind": "function_item",
              "signature": "pub fn new(source: String, target: String) -> Self;",
              "docs": "Create a new diff",
              "attributes": "",
              "line": 55
            },
            {
              "name": "filesystem::diff::Diff::compute",
              "kind": "function_item",
              "signature": "pub fn compute(\n        source_files: HashMap<PathBuf, FileInfo>,\n        target_files: HashMap<PathBuf, FileInfo>,\n    ) -> Result<Self>;",
              "docs": "Compute diff between two file lists",
              "attributes": "",
              "line": 66
            },
            {
              "name": "filesystem::diff::Diff::apply",
              "kind": "function_item",
              "signature": "pub async fn apply<F, G, H>(\n        &self,\n        mut read_fn: F,\n        mut write_fn: G,\n        mut delete_fn: H,\n    ) -> Result<()>\n    where\n        F: FnMut(&Path) -> Result<Vec<u8>>,\n        G: FnMut(&Path, Vec<u8>) -> Result<()>,\n        H: FnMut(&Path) -> Result<()>,;",
              "docs": "Apply diff to transform source to target",
              "attributes": "",
              "line": 117
            },
            {
              "name": "filesystem::diff::Diff::size_change",
              "kind": "function_item",
              "signature": "pub fn size_change(&self) -> i64;",
              "docs": "Get total size change",
              "attributes": "",
              "line": 151
            },
            {
              "name": "filesystem::diff::Diff::summary",
              "kind": "function_item",
              "signature": "pub fn summary(&self) -> DiffSummary;",
              "docs": "Get change summary",
              "attributes": "",
              "line": 156
            },
            {
              "name": "filesystem::diff::FileInfo",
              "kind": "struct_item",
              "signature": "pub struct FileInfo {\n/// File size\n\npub size: u64,\n/// File checksum\n\npub checksum: [u8; 32],\n/// Modification time\n\npub modified: chrono::DateTime<chrono::Utc>\n}",
              "docs": "File info for diff computation",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 183
            },
            {
              "name": "filesystem::diff::DiffSummary",
              "kind": "struct_item",
              "signature": "pub struct DiffSummary {\n/// Files added\n\npub added: usize,\n/// Files modified\n\npub modified: usize,\n/// Files deleted\n\npub deleted: usize,\n/// Files renamed\n\npub renamed: usize,\n/// Total changes\n\npub total: usize\n}",
              "docs": "Diff summary",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 194
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "filesystem::mirror",
          "source": "sigil/weave/libs/weave-core/src/filesystem/mirror.rs",
          "sha256": "3a2161e3a0b7dc19e008d4e994b6b2c1152e45fb4b42510896eeae6245aa56bf",
          "attributes": "",
          "items": [
            {
              "name": "filesystem::mirror::SyncDirection",
              "kind": "enum_item",
              "signature": "pub enum SyncDirection {\n    /// Sync from source to destination\n    SourceToDestination,\n    /// Sync from destination to source\n    DestinationToSource,\n    /// Bidirectional sync\n    Bidirectional,\n}",
              "docs": "Synchronization direction",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 16
            },
            {
              "name": "filesystem::mirror::MirrorConfig",
              "kind": "struct_item",
              "signature": "pub struct MirrorConfig {\n/// Watch for changes\n\npub watch: bool,\n/// Sparse replication\n\npub sparse: bool,\n/// Sync interval in seconds\n\npub interval: u64\n}",
              "docs": "Mirror configuration",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 27
            },
            {
              "name": "filesystem::mirror::MirrorStatus",
              "kind": "struct_item",
              "signature": "pub struct MirrorStatus {\n/// Mirror ID\n\npub id: String,\n/// Source path\n\npub source: String,\n/// Target path\n\npub target: String,\n/// Active status\n\npub active: bool,\n/// Last sync time\n\npub last_sync: Option<chrono::DateTime<chrono::Utc>>,\n/// Files synced\n\npub files_synced: usize,\n/// Bytes transferred\n\npub bytes_transferred: u64\n}",
              "docs": "Mirror status",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 48
            },
            {
              "name": "filesystem::mirror::Mirror",
              "kind": "struct_item",
              "signature": "pub struct Mirror {\n\n}",
              "docs": "Mirror instance",
              "attributes": "",
              "line": 66
            },
            {
              "name": "filesystem::mirror::Mirror::new",
              "kind": "function_item",
              "signature": "pub fn new(source: String, target: String, config: MirrorConfig) -> Self;",
              "docs": "Create a new mirror",
              "attributes": "",
              "line": 78
            },
            {
              "name": "filesystem::mirror::Mirror::start",
              "kind": "function_item",
              "signature": "pub async fn start(&self, source_locus: Arc<Locus>, target_locus: Arc<Locus>) -> Result<()>;",
              "docs": "Start mirroring",
              "attributes": "",
              "line": 100
            },
            {
              "name": "filesystem::mirror::Mirror::stop",
              "kind": "function_item",
              "signature": "pub async fn stop(&self) -> Result<()>;",
              "docs": "Stop mirroring",
              "attributes": "",
              "line": 183
            },
            {
              "name": "filesystem::mirror::Mirror::status",
              "kind": "function_item",
              "signature": "pub fn status(&self) -> MirrorStatus;",
              "docs": "Get status",
              "attributes": "",
              "line": 192
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "crypto",
          "source": "sigil/weave/libs/weave-core/src/crypto/mod.rs",
          "sha256": "29ab5634414d32389b0247f8f9b10b8fa7a640f649c65fb05b5bb95331dd4b31",
          "attributes": "",
          "items": [
            {
              "name": "crypto::secret_stream",
              "kind": "module",
              "signature": "pub mod secret_stream;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "crypto::init",
              "kind": "function_item",
              "signature": "pub fn init() -> Result<()>;",
              "docs": "Initialize the crypto subsystem",
              "attributes": "",
              "line": 17
            },
            {
              "name": "crypto::generate_random_bytes",
              "kind": "function_item",
              "signature": "pub fn generate_random_bytes() -> [u8; 32];",
              "docs": "Generate a random 32-byte value (not for keys)",
              "attributes": "",
              "line": 26
            },
            {
              "name": "crypto::hash",
              "kind": "function_item",
              "signature": "pub fn hash(data: &[u8]) -> [u8; 32];",
              "docs": "Hash data using BLAKE3",
              "attributes": "",
              "line": 34
            },
            {
              "name": "crypto::derive_value",
              "kind": "function_item",
              "signature": "pub fn derive_value(password: &[u8], salt: &[u8]) -> Result<[u8; 32]>;",
              "docs": "Derive a value from password using Argon2 (not for keys)",
              "attributes": "",
              "line": 39
            },
            {
              "name": "crypto::generate_nonce",
              "kind": "function_item",
              "signature": "pub fn generate_nonce() -> [u8; 24];",
              "docs": "Generate a random nonce",
              "attributes": "",
              "line": 62
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "crypto::secret_stream",
          "source": "sigil/weave/libs/weave-core/src/crypto/secret_stream.rs",
          "sha256": "199864974241e7046c3d8cb804ec30af710fd24114f27d2cbab0ad5bd715a222",
          "attributes": "",
          "items": [
            {
              "name": "crypto::secret_stream::SecretStreamConfig",
              "kind": "struct_item",
              "signature": "pub struct SecretStreamConfig {\n/// Buffer size for streaming\n\npub buffer_size: usize,\n/// Whether to use ephemeral keys\n\npub ephemeral: bool\n}",
              "docs": "Configuration for secret streams",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 14
            },
            {
              "name": "crypto::secret_stream::SecretStream",
              "kind": "struct_item",
              "signature": "pub struct SecretStream {\n\n}",
              "docs": "Secret stream for encrypted communication",
              "attributes": "",
              "line": 31
            },
            {
              "name": "crypto::secret_stream::SecretStream::new",
              "kind": "function_item",
              "signature": "pub fn new(_our_secret: &[u8; 32], their_public: &[u8; 32]) -> Result<Self>;",
              "docs": "Create a new secret stream between two parties\n\nNote: This uses ephemeral X25519 keys for key exchange,\nwhich are separate from identity keys managed by weave-identity",
              "attributes": "",
              "line": 45
            },
            {
              "name": "crypto::secret_stream::SecretStream::generate_ephemeral_keypair",
              "kind": "function_item",
              "signature": "pub fn generate_ephemeral_keypair() -> ([u8; 32], [u8; 32]);",
              "docs": "Generate an ephemeral key pair for secret stream\nReturns (secret_key, public_key)",
              "attributes": "",
              "line": 76
            },
            {
              "name": "crypto::secret_stream::SecretStream::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(&mut self, plaintext: &[u8]) -> Result<Vec<u8>>;",
              "docs": "Encrypt a message",
              "attributes": "",
              "line": 84
            },
            {
              "name": "crypto::secret_stream::SecretStream::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(&mut self, ciphertext: &[u8]) -> Result<Vec<u8>>;",
              "docs": "Decrypt a message",
              "attributes": "",
              "line": 91
            },
            {
              "name": "crypto::secret_stream::SecretStream::encrypt_last",
              "kind": "function_item",
              "signature": "pub fn encrypt_last(&mut self, plaintext: &[u8]) -> Result<Vec<u8>>;",
              "docs": "Encrypt the last message in the stream",
              "attributes": "",
              "line": 98
            },
            {
              "name": "crypto::secret_stream::SecretStream::decrypt_last",
              "kind": "function_item",
              "signature": "pub fn decrypt_last(&mut self, ciphertext: &[u8]) -> Result<Vec<u8>>;",
              "docs": "Decrypt the last message in the stream",
              "attributes": "",
              "line": 104
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "error",
          "source": "sigil/weave/libs/weave-core/src/error.rs",
          "sha256": "69e60276f74dfb9c1f659ffc39b926af2eaec24955d7d240fee23f762e94e411",
          "attributes": "",
          "items": [
            {
              "name": "error::WeaveError",
              "kind": "enum_item",
              "signature": "pub enum WeaveError {\n    /// Identity-related errors\n    #[error(\"Identity error: {0}\")]\n    Identity(String),\n\n    /// Storage-related errors\n    #[error(\"Storage error: {0}\")]\n    Storage(String),\n\n    /// Network-related errors\n    #[error(\"Network error: {0}\")]\n    Network(String),\n\n    /// Filesystem-related errors\n    #[error(\"Filesystem error: {0}\")]\n    FileSystem(String),\n\n    /// Cryptographic errors\n    #[error(\"Crypto error: {0}\")]\n    Crypto(String),\n\n    /// Serialization errors\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    /// IO errors\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Database errors\n    #[error(\"Database error: {0}\")]\n    Database(String),\n\n    /// Invalid DID format\n    #[error(\"Invalid DID: {0}\")]\n    InvalidDid(String),\n\n    /// Permission denied\n    #[error(\"Permission denied: {0}\")]\n    PermissionDenied(String),\n\n    /// Resource not found\n    #[error(\"Not found: {0}\")]\n    NotFound(String),\n\n    /// Operation timeout\n    #[error(\"Operation timed out\")]\n    Timeout,\n\n    /// Invalid configuration\n    #[error(\"Invalid configuration: {0}\")]\n    InvalidConfig(String),\n\n    /// Protocol error\n    #[error(\"Protocol error: {0}\")]\n    Protocol(String),\n\n    /// SDK errors from weave-identity\n    #[error(\"SDK error: {0}\")]\n    Sdk(String),\n\n    /// Initialization errors\n    #[error(\"Initialization error: {0}\")]\n    Initialization(String),\n\n    /// Resolution errors\n    #[error(\"Resolution error: {0}\")]\n    Resolution(String),\n\n    /// Not implemented\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(String),\n\n    /// Other errors\n    #[error(transparent)]\n    Other(#[from] Box<dyn std::error::Error + Send + Sync>),\n}",
              "docs": "Main error type for the Weave",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, WeaveError>;",
              "docs": "Result type alias for Weave operations",
              "attributes": "",
              "line": 86
            },
            {
              "name": "error::WeaveError::identity",
              "kind": "function_item",
              "signature": "pub fn identity(msg: impl Into<String>) -> Self;",
              "docs": "Create a new identity error",
              "attributes": "",
              "line": 90
            },
            {
              "name": "error::WeaveError::storage",
              "kind": "function_item",
              "signature": "pub fn storage(msg: impl Into<String>) -> Self;",
              "docs": "Create a new storage error",
              "attributes": "",
              "line": 95
            },
            {
              "name": "error::WeaveError::network",
              "kind": "function_item",
              "signature": "pub fn network(msg: impl Into<String>) -> Self;",
              "docs": "Create a new network error",
              "attributes": "",
              "line": 100
            },
            {
              "name": "error::WeaveError::filesystem",
              "kind": "function_item",
              "signature": "pub fn filesystem(msg: impl Into<String>) -> Self;",
              "docs": "Create a new filesystem error",
              "attributes": "",
              "line": 105
            },
            {
              "name": "error::WeaveError::crypto",
              "kind": "function_item",
              "signature": "pub fn crypto(msg: impl Into<String>) -> Self;",
              "docs": "Create a new crypto error",
              "attributes": "",
              "line": 110
            },
            {
              "name": "error::WeaveError::database",
              "kind": "function_item",
              "signature": "pub fn database(msg: impl Into<String>) -> Self;",
              "docs": "Create a new database error",
              "attributes": "",
              "line": 115
            },
            {
              "name": "error::WeaveError::protocol",
              "kind": "function_item",
              "signature": "pub fn protocol(msg: impl Into<String>) -> Self;",
              "docs": "Create a new protocol error",
              "attributes": "",
              "line": 120
            },
            {
              "name": "error::WeaveError::sdk",
              "kind": "function_item",
              "signature": "pub fn sdk(msg: impl Into<String>) -> Self;",
              "docs": "Create a new SDK error",
              "attributes": "",
              "line": 125
            },
            {
              "name": "error::WeaveError::initialization",
              "kind": "function_item",
              "signature": "pub fn initialization(msg: impl Into<String>) -> Self;",
              "docs": "Create a new initialization error",
              "attributes": "",
              "line": 130
            },
            {
              "name": "error::WeaveError::resolution",
              "kind": "function_item",
              "signature": "pub fn resolution(msg: impl Into<String>) -> Self;",
              "docs": "Create a new resolution error",
              "attributes": "",
              "line": 135
            },
            {
              "name": "error::WeaveError::not_implemented",
              "kind": "function_item",
              "signature": "pub fn not_implemented(msg: impl Into<String>) -> Self;",
              "docs": "Create a new not implemented error",
              "attributes": "",
              "line": 140
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        },
        {
          "module": "utils",
          "source": "sigil/weave/libs/weave-core/src/utils/mod.rs",
          "sha256": "40161553bb64d5d86ac40149a98cba86ef3694daef3b4d09462e0cb38963307f",
          "attributes": "",
          "items": [
            {
              "name": "utils::generate_id",
              "kind": "function_item",
              "signature": "pub fn generate_id() -> String;",
              "docs": "Generate a unique ID",
              "attributes": "",
              "line": 6
            },
            {
              "name": "utils::format_did",
              "kind": "function_item",
              "signature": "pub fn format_did(prefix: &str, id: &str) -> String;",
              "docs": "Format a DID",
              "attributes": "",
              "line": 11
            },
            {
              "name": "utils::parse_did",
              "kind": "function_item",
              "signature": "pub fn parse_did(did: &str) -> Result<(&str, &str)>;",
              "docs": "Parse a DID",
              "attributes": "",
              "line": 16
            },
            {
              "name": "utils::now",
              "kind": "function_item",
              "signature": "pub fn now() -> chrono::DateTime<chrono::Utc>;",
              "docs": "Current timestamp",
              "attributes": "",
              "line": 28
            },
            {
              "name": "utils::sleep",
              "kind": "function_item",
              "signature": "pub async fn sleep(millis: u64);",
              "docs": "Sleep for a duration",
              "attributes": "",
              "line": 33
            }
          ],
          "parseErrors": false,
          "reviewNote": "Some core wrappers derive transport keys from DID strings. Do not infer secret key custody or authenticated peers from a supplied DID string; inspect the chosen wrapper and transport configuration. See /libraries/weave-core/overview."
        }
      ]
    },
    {
      "name": "weave-crypto",
      "version": "0.1.1",
      "source": "sigil/weave/libs/weave-crypto",
      "manifestSha256": "37a9f741b6a229f57c8047705a6edfdad925b44d02c36b101f69ab83212c50f3",
      "features": {
        "default": [
          "hkdf",
          "sha2"
        ],
        "fips": []
      },
      "publish": true,
      "url": "/reference/rust/weave-crypto",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/weave-crypto/src/lib.rs",
          "sha256": "bb5ea393327975daab903bdd30ec9f74215dd55b8d6dac889235aa04a3dbf2bb",
          "attributes": "",
          "items": [
            {
              "name": "::CryptoError",
              "kind": "enum_item",
              "signature": "pub enum CryptoError {\n    #[error(\"Invalid key length: expected {expected}, got {actual}\")]\n    InvalidKeyLength { expected: usize, actual: usize },\n\n    #[error(\"Invalid signature\")]\n    InvalidSignature,\n\n    #[error(\"Decryption failed\")]\n    DecryptionFailed,\n\n    #[error(\"Invalid seed length\")]\n    InvalidSeedLength,\n}",
              "docs": "Errors that can occur during cryptographic operations",
              "attributes": "#[derive(Error, Debug)]",
              "line": 45
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, CryptoError>;",
              "docs": "Result type for crypto operations",
              "attributes": "",
              "line": 60
            },
            {
              "name": "::KeyPair",
              "kind": "struct_item",
              "signature": "pub struct KeyPair {\npub public_key: [u8; 32],\npub secret_key: [u8; 64]\n}",
              "docs": "A key pair for signing operations",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 64
            },
            {
              "name": "::EncryptionKeyPair",
              "kind": "struct_item",
              "signature": "pub struct EncryptionKeyPair {\npub public_key: [u8; 32],\npub secret_key: [u8; 32]\n}",
              "docs": "A key pair for encryption operations",
              "attributes": "#[derive(Clone)]",
              "line": 77
            },
            {
              "name": "::Node",
              "kind": "struct_item",
              "signature": "pub struct Node {\npub index: u64,\npub size: u64,\npub hash: [u8; 32]\n}",
              "docs": "Node structure for merkle tree operations",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 90
            },
            {
              "name": "::key_pair",
              "kind": "function_item",
              "signature": "pub fn key_pair(seed: Option<&[u8; 32]>) -> KeyPair;",
              "docs": "Generate a new Ed25519 key pair\n\n# Arguments\n* `seed` - Optional 32-byte seed for deterministic key generation\n\n# Returns\nA new `KeyPair` for signing operations",
              "attributes": "",
              "line": 103
            },
            {
              "name": "::validate_key_pair",
              "kind": "function_item",
              "signature": "pub fn validate_key_pair(key_pair: &KeyPair) -> bool;",
              "docs": "Validate that a key pair's public key matches its secret key\n\n# Arguments\n* `key_pair` - The key pair to validate\n\n# Returns\n`true` if the keys match, `false` otherwise",
              "attributes": "",
              "line": 132
            },
            {
              "name": "::sign",
              "kind": "function_item",
              "signature": "pub fn sign(message: &[u8], secret_key: &[u8; 64]) -> [u8; 64];",
              "docs": "Sign a message with a secret key\n\n# Arguments\n* `message` - The message to sign\n* `secret_key` - The 64-byte secret key (32-byte seed + 32-byte public key)\n\n# Returns\nA 64-byte signature",
              "attributes": "",
              "line": 149
            },
            {
              "name": "::verify",
              "kind": "function_item",
              "signature": "pub fn verify(message: &[u8], signature: &[u8], public_key: &[u8; 32]) -> bool;",
              "docs": "Verify a signature\n\n# Arguments\n* `message` - The original message\n* `signature` - The signature to verify\n* `public_key` - The public key to verify against\n\n# Returns\n`true` if the signature is valid, `false` otherwise",
              "attributes": "",
              "line": 166
            },
            {
              "name": "::encryption_key_pair",
              "kind": "function_item",
              "signature": "pub fn encryption_key_pair(seed: Option<&[u8; 32]>) -> EncryptionKeyPair;",
              "docs": "Generate a key pair for sealed box encryption\n\n# Arguments\n* `seed` - Optional seed for deterministic generation\n\n# Returns\nAn `EncryptionKeyPair` for sealed box operations",
              "attributes": "",
              "line": 193
            },
            {
              "name": "::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(message: &[u8], public_key: &[u8; 32]) -> Vec<u8>;",
              "docs": "Encrypt a message using sealed box encryption\n\n# Arguments\n* `message` - The message to encrypt\n* `public_key` - The recipient's public key\n\n# Returns\nThe encrypted ciphertext",
              "attributes": "",
              "line": 216
            },
            {
              "name": "::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(ciphertext: &[u8], key_pair: &EncryptionKeyPair) -> Option<Vec<u8>>;",
              "docs": "Decrypt a sealed box\n\n# Arguments\n* `ciphertext` - The encrypted message\n* `key_pair` - The recipient's key pair\n\n# Returns\nThe decrypted message, or None if decryption fails",
              "attributes": "",
              "line": 231
            },
            {
              "name": "::data",
              "kind": "function_item",
              "signature": "pub fn data(data: &[u8]) -> [u8; 32];",
              "docs": "Hash data for a leaf node\n\n# Arguments\n* `data` - The data to hash\n\n# Returns\nA 32-byte hash",
              "attributes": "",
              "line": 251
            },
            {
              "name": "::parent",
              "kind": "function_item",
              "signature": "pub fn parent(left: &Node, right: &Node) -> [u8; 32];",
              "docs": "Hash two nodes to create a parent node\n\n# Arguments\n* `left` - The left child node\n* `right` - The right child node\n\n# Returns\nA 32-byte hash for the parent",
              "attributes": "",
              "line": 267
            },
            {
              "name": "::tree",
              "kind": "function_item",
              "signature": "pub fn tree(roots: &[Node]) -> [u8; 32];",
              "docs": "Hash a set of root nodes\n\n# Arguments\n* `roots` - The root nodes to hash\n\n# Returns\nA 32-byte tree hash",
              "attributes": "",
              "line": 290
            },
            {
              "name": "::hash",
              "kind": "function_item",
              "signature": "pub fn hash(data: &[&[u8]]) -> [u8; 32];",
              "docs": "Generic hash function using Blake2b\n\n# Arguments\n* `data` - Slice of byte slices to hash together\n\n# Returns\nA 32-byte hash",
              "attributes": "",
              "line": 310
            },
            {
              "name": "::hash_into",
              "kind": "function_item",
              "signature": "pub fn hash_into(data: &[&[u8]], out: &mut [u8; 32]);",
              "docs": "Generic hash function with output buffer\n\n# Arguments\n* `data` - Slice of byte slices to hash together\n* `out` - Output buffer (must be 32 bytes)",
              "attributes": "",
              "line": 323
            },
            {
              "name": "::hkdf_sha256",
              "kind": "function_item",
              "signature": "pub fn hkdf_sha256(ikm: &[u8], salt: &[u8], info: &[u8], len: usize) -> Vec<u8>;",
              "docs": "Derive key material using HKDF-SHA256 (RFC 5869)\n\n- `ikm`: input keying material\n- `salt`: optional salt (may be empty)\n- `info`: optional context and application specific information\n- `len`: desired length of output keying material\n\nReturns a vector of length `len` with pseudorandom keying material.",
              "attributes": "#[cfg(all(feature = \"hkdf\", feature = \"sha2\"))]",
              "line": 336
            },
            {
              "name": "::derive_nonce",
              "kind": "function_item",
              "signature": "pub fn derive_nonce(label: &str, seed: &[u8; 32]) -> [u8; 24];",
              "docs": "Derive a deterministic nonce using HKDF-SHA256.\n\nUses a domain-separated salt and the provided `label` as HKDF `info`.\nReturns a 24-byte nonce suitable for XChaCha20-Poly1305 or similar.",
              "attributes": "#[cfg(all(feature = \"hkdf\", feature = \"sha2\"))]",
              "line": 348
            },
            {
              "name": "::random_bytes",
              "kind": "function_item",
              "signature": "pub fn random_bytes(n: usize) -> Vec<u8>;",
              "docs": "Generate random bytes\n\n# Arguments\n* `n` - Number of bytes to generate\n\n# Returns\nA vector of random bytes",
              "attributes": "",
              "line": 363
            },
            {
              "name": "::discovery_key",
              "kind": "function_item",
              "signature": "pub fn discovery_key(key: &[u8; 32]) -> [u8; 32];",
              "docs": "Generate a discovery key from a public key\n\n# Arguments\n* `key` - A 32-byte public key\n\n# Returns\nA 32-byte discovery key",
              "attributes": "",
              "line": 377
            },
            {
              "name": "::namespace",
              "kind": "function_item",
              "signature": "pub fn namespace(name: &str, count: impl NamespaceCount) -> Vec<[u8; 32]>;",
              "docs": "Generate namespaced keys\n\n# Arguments\n* `name` - The namespace name\n* `count` - Number of keys to generate (or specific indices)\n\n# Returns\nA vector of 32-byte keys",
              "attributes": "",
              "line": 392
            },
            {
              "name": "::free",
              "kind": "function_item",
              "signature": "pub fn free(_secure_buf: &[u8]);",
              "docs": "Free secure memory (no-op in Rust as memory is automatically freed)",
              "attributes": "",
              "line": 419
            },
            {
              "name": "::NamespaceCount",
              "kind": "trait_item",
              "signature": "pub trait NamespaceCount {\n    fn indices(&self) -> Vec<usize>;\n}",
              "docs": "Trait for namespace count parameter (can be a count or specific indices)",
              "attributes": "",
              "line": 425
            }
          ],
          "parseErrors": false,
          "reviewNote": "The checked hash implementation uses Blake2s256. Historical source comments referring to Blake2b or guides referring to BLAKE3 do not override the function body. Read /libraries/weave-crypto/hashing for the implemented wire/hash conventions."
        }
      ]
    },
    {
      "name": "weave-sdk",
      "version": "1.1.0",
      "source": "sigil/weave/libs/weave-sdk",
      "manifestSha256": "6fb464a69c5204673832b416eff5a733a5ce9f2145bebf8a6d370c6afa278dec",
      "features": {
        "default": [],
        "mailbox": [
          "dep:loom-encrypt"
        ],
        "policy-hooks": [
          "strand/policy-hooks",
          "lens/policy-hooks",
          "locus/policy-hooks",
          "strand-blobs/policy-hooks"
        ]
      },
      "publish": true,
      "url": "/reference/rust/weave-sdk",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/weave-sdk/src/lib.rs",
          "sha256": "b0626a0584eacbd2f38f2314de2bfbfc24c9573e5760c2221f5dcc8fdd1db63e",
          "attributes": "",
          "items": [
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "mailbox",
              "kind": "module",
              "signature": "pub mod mailbox;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 76
            },
            {
              "name": "messaging",
              "kind": "module",
              "signature": "pub mod messaging;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "network_manager",
              "kind": "module",
              "signature": "pub mod network_manager;",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "node",
              "kind": "module",
              "signature": "pub mod node;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "prelude",
              "kind": "module",
              "signature": "pub mod prelude;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "replication",
              "kind": "module",
              "signature": "pub mod replication;",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "models",
              "kind": "module",
              "signature": "pub mod models;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "pub use basis;",
              "kind": "use_declaration",
              "signature": "pub use basis;",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "pub use forum;",
              "kind": "use_declaration",
              "signature": "pub use forum;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "pub use gnosis;",
              "kind": "use_declaration",
              "signature": "pub use gnosis;",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "pub use lens;",
              "kind": "use_declaration",
              "signature": "pub use lens;",
              "docs": "",
              "attributes": "",
              "line": 88
            },
            {
              "name": "pub use locus;",
              "kind": "use_declaration",
              "signature": "pub use locus;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "pub use nexus;",
              "kind": "use_declaration",
              "signature": "pub use nexus;",
              "docs": "",
              "attributes": "",
              "line": 90
            },
            {
              "name": "pub use strand;",
              "kind": "use_declaration",
              "signature": "pub use strand;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "pub use strand_blobs;",
              "kind": "use_declaration",
              "signature": "pub use strand_blobs;",
              "docs": "",
              "attributes": "",
              "line": 92
            },
            {
              "name": "network",
              "kind": "module",
              "signature": "pub mod network;",
              "docs": "",
              "attributes": "",
              "line": 96
            },
            {
              "name": "pub use weave_dht;",
              "kind": "use_declaration",
              "signature": "pub use weave_dht;",
              "docs": "",
              "attributes": "",
              "line": 97
            },
            {
              "name": "crypto",
              "kind": "module",
              "signature": "pub mod crypto;",
              "docs": "",
              "attributes": "",
              "line": 101
            },
            {
              "name": "pub use weave_crypto;",
              "kind": "use_declaration",
              "signature": "pub use weave_crypto;",
              "docs": "",
              "attributes": "",
              "line": 102
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/libs/weave-sdk/src/config.rs",
          "sha256": "55b1dc78dc74c59505ca766898cd9ff431f561fbaf2eaff0eb91c94959b1d1ec",
          "attributes": "",
          "items": [
            {
              "name": "config::WeaveConfig",
              "kind": "struct_item",
              "signature": "pub struct WeaveConfig {\n/// Root storage directory for all Weave data.\n\npub storage_dir: PathBuf,\n/// DHT bootstrap peers (multiaddr format).\n\npub bootstrap_peers: Vec<String>,\n/// Port for the DHT listener.\n\npub dht_port: u16,\n/// Whether to enable mDNS for local peer discovery.\n\npub enable_mdns: bool,\n/// Whether to enable relay protocol for NAT traversal.\n\npub enable_relay: bool,\n/// Maximum number of concurrent peer connections.\n\npub max_peers: usize,\n/// Agent DID (set after identity creation).\n\npub agent_did: Option<String>\n}",
              "docs": "Configuration for a Weave node.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 5
            },
            {
              "name": "config::WeaveConfig::local_dev",
              "kind": "function_item",
              "signature": "pub fn local_dev() -> Self;",
              "docs": "Create config for local development (mDNS only, no bootstrap).",
              "attributes": "",
              "line": 45
            },
            {
              "name": "config::WeaveConfig::with_bootstrap",
              "kind": "function_item",
              "signature": "pub fn with_bootstrap(mut self, peers: Vec<String>) -> Self;",
              "docs": "Create config with specific bootstrap peers.",
              "attributes": "",
              "line": 55
            },
            {
              "name": "config::WeaveConfig::with_storage_dir",
              "kind": "function_item",
              "signature": "pub fn with_storage_dir(mut self, dir: impl Into<PathBuf>) -> Self;",
              "docs": "Set the storage directory.",
              "attributes": "",
              "line": 61
            },
            {
              "name": "config::WeaveConfig::with_port",
              "kind": "function_item",
              "signature": "pub fn with_port(mut self, port: u16) -> Self;",
              "docs": "Set the DHT listen port.",
              "attributes": "",
              "line": 67
            },
            {
              "name": "config::WeaveConfig::strands_dir",
              "kind": "function_item",
              "signature": "pub fn strands_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for strands storage.",
              "attributes": "",
              "line": 73
            },
            {
              "name": "config::WeaveConfig::lens_dir",
              "kind": "function_item",
              "signature": "pub fn lens_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Lens databases.",
              "attributes": "",
              "line": 78
            },
            {
              "name": "config::WeaveConfig::locus_dir",
              "kind": "function_item",
              "signature": "pub fn locus_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Locus filesystems.",
              "attributes": "",
              "line": 83
            },
            {
              "name": "config::WeaveConfig::identity_dir",
              "kind": "function_item",
              "signature": "pub fn identity_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for identity/keys.",
              "attributes": "",
              "line": 88
            },
            {
              "name": "config::WeaveConfig::forum_dir",
              "kind": "function_item",
              "signature": "pub fn forum_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Forum tuple spaces.",
              "attributes": "",
              "line": 93
            },
            {
              "name": "config::WeaveConfig::gnosis_dir",
              "kind": "function_item",
              "signature": "pub fn gnosis_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Gnosis knowledge graphs.",
              "attributes": "",
              "line": 98
            },
            {
              "name": "config::WeaveConfig::basis_dir",
              "kind": "function_item",
              "signature": "pub fn basis_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Basis vector stores.",
              "attributes": "",
              "line": 103
            },
            {
              "name": "config::WeaveConfig::nexus_dir",
              "kind": "function_item",
              "signature": "pub fn nexus_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for Nexus multi-writer views.",
              "attributes": "",
              "line": 108
            },
            {
              "name": "config::WeaveConfig::dht_dir",
              "kind": "function_item",
              "signature": "pub fn dht_dir(&self) -> PathBuf;",
              "docs": "Resolve the path for DHT persistent storage.",
              "attributes": "",
              "line": 113
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/libs/weave-sdk/src/error.rs",
          "sha256": "1d75a5a22db38900c01c85f0657f055ef53e20761f2fa480735ceda477c2625e",
          "attributes": "",
          "items": [
            {
              "name": "error::WeaveError",
              "kind": "enum_item",
              "signature": "pub enum WeaveError {\n    #[error(\"strand error: {0}\")]\n    Strand(#[from] strand_errors::StrandError),\n\n    #[error(\"identity error: {0}\")]\n    Identity(String),\n\n    #[error(\"network error: {0}\")]\n    Network(String),\n\n    #[error(\"storage error: {0}\")]\n    Storage(String),\n\n    #[error(\"replication error: {0}\")]\n    Replication(String),\n\n    #[error(\"config error: {0}\")]\n    Config(String),\n\n    #[error(\"DHT error: {0}\")]\n    Dht(String),\n\n    #[error(\"crypto error: {0}\")]\n    Crypto(String),\n\n    #[error(\"io error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n\n    #[error(\"unauthorized: {0}\")]\n    Unauthorized(String),\n\n    #[error(\"unsupported: {0}\")]\n    Unsupported(String),\n\n    #[error(\"{0}\")]\n    Other(#[from] anyhow::Error),\n}",
              "docs": "Unified SDK error type wrapping errors from all Weave subsystems.",
              "attributes": "#[derive(Debug, Error)]",
              "line": 5
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, WeaveError>;",
              "docs": "",
              "attributes": "",
              "line": 46
            }
          ],
          "parseErrors": false
        },
        {
          "module": "identity",
          "source": "sigil/weave/libs/weave-sdk/src/identity.rs",
          "sha256": "889c8cbec114d9655e97f1b7bd632d3916b68dca7b98f588db65887f561ef53c",
          "attributes": "",
          "items": [
            {
              "name": "identity::WeaveIdentity",
              "kind": "struct_item",
              "signature": "pub struct WeaveIdentity {\n\n}",
              "docs": "Agent identity within the Weave network.\nWraps OAS DID identity with Weave-specific operations.",
              "attributes": "#[derive(Clone)]",
              "line": 11
            },
            {
              "name": "identity::WeaveIdentity::new",
              "kind": "function_item",
              "signature": "pub fn new(did: String, signing_key: SigningKey, document: serde_json::Value) -> Self;",
              "docs": "Create a new identity from components.",
              "attributes": "",
              "line": 32
            },
            {
              "name": "identity::WeaveIdentity::generate",
              "kind": "function_item",
              "signature": "pub fn generate(namespace: &str, identifier: &str) -> Result<Self>;",
              "docs": "Generate a fresh agent identity with Ed25519 keypair.\nCreates a minimal OAS-compatible DID document.",
              "attributes": "",
              "line": 42
            },
            {
              "name": "identity::WeaveIdentity::generate_for_did",
              "kind": "function_item",
              "signature": "pub fn generate_for_did(did: &str) -> Result<Self>;",
              "docs": "Generate fresh device keys for an explicitly assigned DID.\n\nThis supports recipient enrollment and compromised-device replacement\nbefore the new device has repository access. Authorization still\nrequires a signed access-manifest revision from an existing admin.",
              "attributes": "",
              "line": 52
            },
            {
              "name": "identity::WeaveIdentity::did",
              "kind": "function_item",
              "signature": "pub fn did(&self) -> &str;",
              "docs": "The agent's DID string.",
              "attributes": "",
              "line": 96
            },
            {
              "name": "identity::WeaveIdentity::document",
              "kind": "function_item",
              "signature": "pub fn document(&self) -> &serde_json::Value;",
              "docs": "The DID document as JSON.",
              "attributes": "",
              "line": 101
            },
            {
              "name": "identity::WeaveIdentity::public_key_bytes",
              "kind": "function_item",
              "signature": "pub fn public_key_bytes(&self) -> [u8; 32];",
              "docs": "The Ed25519 public key bytes (32 bytes).",
              "attributes": "",
              "line": 106
            },
            {
              "name": "identity::WeaveIdentity::derive_strand_keypair",
              "kind": "function_item",
              "signature": "pub fn derive_strand_keypair(&self, context: &[u8]) -> weave_crypto::KeyPair;",
              "docs": "Derive an unlinkable application-scoped Strand signing key.\n\nThe derivation signs a domain-separated context with this identity,\nthen hashes the deterministic Ed25519 signature into a fresh seed. The\nresulting public key cannot be linked to the identity public key\nwithout possession of the identity secret, and another repository\ncontext produces a different Strand key.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "identity::WeaveIdentity::verifying_key",
              "kind": "function_item",
              "signature": "pub fn verifying_key(&self) -> VerifyingKey;",
              "docs": "The Ed25519 verifying key.",
              "attributes": "",
              "line": 135
            },
            {
              "name": "identity::WeaveIdentity::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, message: &[u8]) -> Vec<u8>;",
              "docs": "Sign a message with the agent's private key.",
              "attributes": "",
              "line": 140
            },
            {
              "name": "identity::WeaveIdentity::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, message: &[u8], signature: &[u8]) -> Result<()>;",
              "docs": "Verify a signature against this identity's public key.",
              "attributes": "",
              "line": 146
            },
            {
              "name": "identity::WeaveIdentity::discovery_key",
              "kind": "function_item",
              "signature": "pub fn discovery_key(&self) -> [u8; 32];",
              "docs": "Discovery key derived from the public key (BLAKE3 hash).\nUsed for DHT lookups without revealing the full public key.",
              "attributes": "",
              "line": 161
            },
            {
              "name": "identity::WeaveIdentity::save",
              "kind": "function_item",
              "signature": "pub fn save(&self, dir: &Path) -> Result<()>;",
              "docs": "Save identity to a directory (creates identity.json).",
              "attributes": "",
              "line": 166
            },
            {
              "name": "identity::WeaveIdentity::load",
              "kind": "function_item",
              "signature": "pub fn load(dir: &Path) -> Result<Self>;",
              "docs": "Load identity from a directory.",
              "attributes": "",
              "line": 183
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mailbox",
          "source": "sigil/weave/libs/weave-sdk/src/mailbox.rs",
          "sha256": "2e2bd2351061ef2c3cfe6f9b47851600fe4f0a8fb3329cc1d7d18fe1941e5b05",
          "attributes": "#[cfg(feature = \"mailbox\")]",
          "items": [
            {
              "name": "mailbox::MAILBOX_ROOTS",
              "kind": "const_item",
              "signature": "pub const MAILBOX_ROOTS: [&str; 8];",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 12
            },
            {
              "name": "mailbox::MailboxError",
              "kind": "enum_item",
              "signature": "pub enum MailboxError {\n    #[error(\"invalid mailbox path: {0}\")]\n    InvalidPath(String),\n    #[error(\"private mailbox paths cannot be publicly pinned: {0}\")]\n    PrivatePath(String),\n    #[error(\"invalid ciphertext field: {0}\")]\n    InvalidCiphertext(String),\n    #[error(\"invalid message object: {0}\")]\n    InvalidMessage(String),\n    #[error(\"mailbox encryption failed: {0}\")]\n    Encryption(String),\n    #[error(\"mailbox decryption failed: {0}\")]\n    Decryption(String),\n    #[error(\"mail content key unwrap failed\")]\n    KeyUnwrap,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, Error, PartialEq, Eq)]",
              "line": 24
            },
            {
              "name": "mailbox::canonical_mailbox_roots",
              "kind": "function_item",
              "signature": "pub fn canonical_mailbox_roots() -> [&'static str; 8];",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 41
            },
            {
              "name": "mailbox::MailboxPath",
              "kind": "struct_item",
              "signature": "pub struct MailboxPath(String);",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 46
            },
            {
              "name": "mailbox::MailboxPath::new",
              "kind": "function_item",
              "signature": "pub fn new(path: impl Into<String>) -> Result<Self, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 49
            },
            {
              "name": "mailbox::MailboxPath::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 62
            },
            {
              "name": "mailbox::is_private_mailbox_path",
              "kind": "function_item",
              "signature": "pub fn is_private_mailbox_path(path: &str) -> bool;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 67
            },
            {
              "name": "mailbox::pin_public_mail_file",
              "kind": "function_item",
              "signature": "pub fn pin_public_mail_file(path: &str) -> Result<(), MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 73
            },
            {
              "name": "mailbox::unpin_public_mail_file",
              "kind": "function_item",
              "signature": "pub fn unpin_public_mail_file(path: &str) -> Result<(), MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 85
            },
            {
              "name": "mailbox::MailFolder",
              "kind": "enum_item",
              "signature": "pub enum MailFolder {\n    Inbox,\n    Sent,\n    Drafts,\n    Archive,\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"kebab-case\")]",
              "line": 91
            },
            {
              "name": "mailbox::MailFolder::root",
              "kind": "function_item",
              "signature": "pub fn root(self) -> &'static str;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 99
            },
            {
              "name": "mailbox::CiphertextBlob",
              "kind": "struct_item",
              "signature": "pub struct CiphertextBlob {\npub algorithm: String,\npub blob_hash: String,\npub nonce_b64: String,\npub ciphertext_b64: String,\npub tag_b64: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 110
            },
            {
              "name": "mailbox::CiphertextBlob::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, label: &str) -> Result<(), MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 119
            },
            {
              "name": "mailbox::KeyWrap",
              "kind": "struct_item",
              "signature": "pub struct KeyWrap {\npub key_id: String,\npub key_version: u64,\npub algorithm: String,\npub wrapped_dek_b64: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 152
            },
            {
              "name": "mailbox::MailboxContentKey",
              "kind": "struct_item",
              "signature": "pub struct MailboxContentKey(MasterKey);",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Clone)]",
              "line": 160
            },
            {
              "name": "mailbox::MailboxContentKey::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: [u8; MEK_LEN]) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 163
            },
            {
              "name": "mailbox::MailboxContentKey::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; MEK_LEN];",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 167
            },
            {
              "name": "mailbox::PlainMailMessageInput",
              "kind": "struct_item",
              "signature": "pub struct PlainMailMessageInput {\npub mailbox_id: String,\npub folder: MailFolder,\npub sender_route_commitment: String,\npub sender_signature_b64: String,\npub recipient_key_id: String,\npub recipient_key_version: u64,\npub subject: Vec<u8>,\npub body: Vec<u8>,\npub recipient_metadata: Vec<u8>,\npub attachment_refs: Vec<AttachmentRef>,\npub sigil_delivery_commitment_id: Option<String>,\npub created_at_ms: u64,\npub updated_at_ms: u64,\npub client_nonce: String\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 179
            },
            {
              "name": "mailbox::decrypt_mailbox_field",
              "kind": "function_item",
              "signature": "pub fn decrypt_mailbox_field(\n    key: &MailboxContentKey,\n    blob: &CiphertextBlob,\n) -> Result<Vec<u8>, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 232
            },
            {
              "name": "mailbox::wrap_mail_content_key",
              "kind": "function_item",
              "signature": "pub fn wrap_mail_content_key(\n    key_id: &str,\n    key_version: u64,\n    content_key: &MailboxContentKey,\n    recipient_public_key: &[u8; 32],\n) -> Result<KeyWrap, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 254
            },
            {
              "name": "mailbox::unwrap_mail_content_key",
              "kind": "function_item",
              "signature": "pub fn unwrap_mail_content_key(\n    wrap: &KeyWrap,\n    recipient_key_pair: &weave_crypto::EncryptionKeyPair,\n) -> Result<MailboxContentKey, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 275
            },
            {
              "name": "mailbox::AttachmentRef",
              "kind": "struct_item",
              "signature": "pub struct AttachmentRef {\npub attachment_id: String,\npub attachment_manifest_ref: String,\npub ciphertext_content_hash: String,\npub key_version: u64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 291
            },
            {
              "name": "mailbox::EncryptedMailMessageV1",
              "kind": "struct_item",
              "signature": "pub struct EncryptedMailMessageV1 {\npub message_id: String,\npub mailbox_id: String,\npub folder: MailFolder,\npub sender_route_commitment: String,\npub sender_signature_b64: String,\npub recipient_key_id: String,\npub recipient_key_version: u64,\npub key_wraps: Vec<KeyWrap>,\npub encrypted_subject: CiphertextBlob,\npub encrypted_body: CiphertextBlob,\npub encrypted_recipient_metadata: CiphertextBlob,\npub attachment_refs: Vec<AttachmentRef>,\npub ciphertext_content_hash: String,\npub sigil_delivery_commitment_id: Option<String>,\npub created_at_ms: u64,\npub updated_at_ms: u64\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 299
            },
            {
              "name": "mailbox::EncryptedMailMessageV1::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 319
            },
            {
              "name": "mailbox::AttachmentManifestV1",
              "kind": "struct_item",
              "signature": "pub struct AttachmentManifestV1 {\npub attachment_id: String,\npub encrypted_metadata: CiphertextBlob,\npub ciphertext_hash: String,\npub weft_manifest_ref: String,\npub key_wraps: Vec<KeyWrap>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]\n#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 350
            },
            {
              "name": "mailbox::AttachmentManifestV1::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<(), MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 359
            },
            {
              "name": "mailbox::message_id",
              "kind": "function_item",
              "signature": "pub fn message_id(\n    mailbox_id: &str,\n    sender_route_commitment: &str,\n    ciphertext_content_hash: &str,\n    client_nonce: &str,\n) -> Result<String, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 376
            },
            {
              "name": "mailbox::encrypt_message_v1",
              "kind": "function_item",
              "signature": "pub fn encrypt_message_v1(\n    input: PlainMailMessageInput,\n    content_key: &MailboxContentKey,\n) -> Result<EncryptedMailMessageV1, MailboxError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"mailbox\")]",
              "line": 403
            }
          ],
          "parseErrors": false
        },
        {
          "module": "messaging",
          "source": "sigil/weave/libs/weave-sdk/src/messaging.rs",
          "sha256": "d3605a8f988369d7d86c9575a5399304618bb5092630e7461199c0e0f92d4718",
          "attributes": "",
          "items": [
            {
              "name": "messaging::AgentMessage",
              "kind": "struct_item",
              "signature": "pub struct AgentMessage {\n/// Sender's DID.\n\npub from: String,\n/// Message topic/channel.\n\npub topic: String,\n/// Message payload (application-defined).\n\npub payload: Vec<u8>,\n/// Timestamp (milliseconds since epoch).\n\npub timestamp: u64,\n/// Ed25519 signature over (topic + payload + timestamp).\n\npub signature: Vec<u8>\n}",
              "docs": "A message exchanged between agents.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 33
            },
            {
              "name": "messaging::AgentMessage::new",
              "kind": "function_item",
              "signature": "pub fn new(identity: &WeaveIdentity, topic: &str, payload: Vec<u8>) -> Self;",
              "docs": "Create a new signed message.",
              "attributes": "",
              "line": 48
            },
            {
              "name": "messaging::AgentMessage::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, sender_public_key: &[u8; 32]) -> Result<()>;",
              "docs": "Verify the message signature using the sender's public key.",
              "attributes": "",
              "line": 71
            },
            {
              "name": "messaging::MessagingManager",
              "kind": "struct_item",
              "signature": "pub struct MessagingManager {\n\n}",
              "docs": "Manages agent-to-agent messaging channels.",
              "attributes": "",
              "line": 92
            },
            {
              "name": "messaging::MessagingManager::new",
              "kind": "function_item",
              "signature": "pub fn new(identity: WeaveIdentity, inbox_tx: mpsc::Sender<AgentMessage>) -> Self;",
              "docs": "Create a new messaging manager.",
              "attributes": "",
              "line": 111
            },
            {
              "name": "messaging::MessagingManager::listen",
              "kind": "function_item",
              "signature": "pub async fn listen(&self, bind_addr: SocketAddr) -> Result<SocketAddr>;",
              "docs": "Start listening for incoming message connections.",
              "attributes": "",
              "line": 121
            },
            {
              "name": "messaging::MessagingManager::connect",
              "kind": "function_item",
              "signature": "pub async fn connect(&self, peer_did: &str, addr: SocketAddr) -> Result<()>;",
              "docs": "Connect to a peer and establish a messaging channel.",
              "attributes": "",
              "line": 154
            },
            {
              "name": "messaging::MessagingManager::send",
              "kind": "function_item",
              "signature": "pub async fn send(&self, peer_did: &str, topic: &str, payload: Vec<u8>) -> Result<()>;",
              "docs": "Send a message to a connected peer.",
              "attributes": "",
              "line": 216
            },
            {
              "name": "messaging::MessagingManager::peer_count",
              "kind": "function_item",
              "signature": "pub async fn peer_count(&self) -> usize;",
              "docs": "Get the number of connected peers.",
              "attributes": "",
              "line": 229
            }
          ],
          "parseErrors": false,
          "reviewNote": "The current MessagingManager bypasses SecretStream, sends plain TCP, and forwards received messages without calling AgentMessage::verify. Historical comments describing encrypted Noise XX channels do not describe this implementation. Callers must provide secure transport, verify signatures against a trusted sender-key binding, and enforce authorization and replay controls. See /libraries/weave-sdk/identity-messaging."
        },
        {
          "module": "network_manager",
          "source": "sigil/weave/libs/weave-sdk/src/network_manager.rs",
          "sha256": "a7ad71ea6fb46df87b8754e1c3b60d69a3e4afeac35b5c1ebe4657895b643f45",
          "attributes": "",
          "items": [
            {
              "name": "network_manager::NetworkConfig",
              "kind": "struct_item",
              "signature": "pub struct NetworkConfig {\n/// Port for the DHT node.\n\npub dht_port: u16,\n/// Port for the replication TCP listener (0 = random).\n\npub replication_port: u16,\n/// DHT bootstrap peers (multiaddr format).\n\npub bootstrap_peers: Vec<String>,\n/// Enable mDNS for local peer discovery.\n\npub enable_mdns: bool,\n/// Interval between DHT lookup sweeps (seconds).\n\npub discovery_interval_secs: u64,\n/// Maximum concurrent replication sessions.\n\npub max_replication_sessions: usize\n}",
              "docs": "Configuration for the network layer.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 342
            },
            {
              "name": "network_manager::ConnectedPeer",
              "kind": "struct_item",
              "signature": "pub struct ConnectedPeer {\n/// Peer DID or identifier.\n\npub peer_id: String,\n/// Socket address we are connected to.\n\npub address: SocketAddr,\n/// Discovery keys being replicated with this peer.\n\npub discovery_keys: Vec<[u8; 32]>\n}",
              "docs": "Information about a connected peer.",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 411
            },
            {
              "name": "network_manager::NetworkManager",
              "kind": "struct_item",
              "signature": "pub struct NetworkManager {\n\n}",
              "docs": "Manages DHT-based peer discovery and automatic replication.\n\nThe manager maintains:\n- A DHT node for announce/lookup\n- A TCP listener for incoming replication connections\n- A set of tracked discovery keys (strands we want to replicate)\n- Background tasks for periodic discovery sweeps",
              "attributes": "",
              "line": 527
            },
            {
              "name": "network_manager::NetworkManager::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        identity: WeaveIdentity,\n        replication: Arc<ReplicationManager>,\n        config: NetworkConfig,\n    ) -> Self;",
              "docs": "Create a new network manager.",
              "attributes": "",
              "line": 570
            },
            {
              "name": "network_manager::NetworkManager::start",
              "kind": "function_item",
              "signature": "pub async fn start(&mut self) -> Result<()>;",
              "docs": "Start the network layer: DHT node, replication listener, discovery loop.\n\nAfter this returns, the node is:\n1. Listening for incoming replication on a TCP port\n2. Running a DHT node for discovery\n3. Running a periodic discovery sweep",
              "attributes": "",
              "line": 598
            },
            {
              "name": "network_manager::NetworkManager::announce_strand",
              "kind": "function_item",
              "signature": "pub async fn announce_strand(\n        &self,\n        name: &str,\n        strand: Arc<tokio::sync::RwLock<Strand>>,\n    ) -> Result<()>;",
              "docs": "Announce a strand on the DHT so other peers can discover it.\n\nThis registers the strand's discovery key with the DHT and begins\ntracking it for automatic replication with discovered peers.",
              "attributes": "",
              "line": 670
            },
            {
              "name": "network_manager::NetworkManager::lookup_strand",
              "kind": "function_item",
              "signature": "pub async fn lookup_strand(&self, discovery_key: &[u8; 32]) -> Result<Vec<PeerInfo>>;",
              "docs": "Look up peers who have a specific discovery key.",
              "attributes": "",
              "line": 763
            },
            {
              "name": "network_manager::NetworkManager::unannounce_strand",
              "kind": "function_item",
              "signature": "pub async fn unannounce_strand(&self, discovery_key: &[u8; 32]) -> Result<()>;",
              "docs": "Stop announcing a strand and remove it from tracking.",
              "attributes": "",
              "line": 799
            },
            {
              "name": "network_manager::NetworkManager::peer_count",
              "kind": "function_item",
              "signature": "pub async fn peer_count(&self) -> usize;",
              "docs": "Get the number of connected peers.",
              "attributes": "",
              "line": 809
            },
            {
              "name": "network_manager::NetworkManager::connected_peers",
              "kind": "function_item",
              "signature": "pub async fn connected_peers(&self) -> Vec<ConnectedPeer>;",
              "docs": "List all connected peers.",
              "attributes": "",
              "line": 814
            },
            {
              "name": "network_manager::NetworkManager::tracked_key_count",
              "kind": "function_item",
              "signature": "pub async fn tracked_key_count(&self) -> usize;",
              "docs": "Get the number of tracked discovery keys.",
              "attributes": "",
              "line": 824
            },
            {
              "name": "network_manager::NetworkManager::replication_addr",
              "kind": "function_item",
              "signature": "pub fn replication_addr(&self) -> Option<SocketAddr>;",
              "docs": "Get the replication listener address (if started).",
              "attributes": "",
              "line": 829
            },
            {
              "name": "network_manager::NetworkManager::dht_handle",
              "kind": "function_item",
              "signature": "pub fn dht_handle(&self) -> Option<&DhtHandle>;",
              "docs": "Get the DHT handle (if started).",
              "attributes": "",
              "line": 834
            },
            {
              "name": "network_manager::NetworkManager::weft_store",
              "kind": "function_item",
              "signature": "pub fn weft_store(&self) -> Option<WeftDhtStore<DhtHandle>>;",
              "docs": "Production Weft store over the **same** live DHT handle (Ash data-path lock).\n\nCall after [`Self::start`]. Uses `/weft/v1/{manifest,chunk,availability}/\u2026`\nkeys only \u2014 never Strand discovery_key provider records. Do not start a\nsecond Weft-only bootstrap when this is available.",
              "attributes": "",
              "line": 843
            },
            {
              "name": "network_manager::NetworkManager::dht_bootstrap_addr",
              "kind": "function_item",
              "signature": "pub fn dht_bootstrap_addr(&self) -> Option<String>;",
              "docs": "Multiaddr other local/LAN peers can use in `LOOM_BOOTSTRAP`.",
              "attributes": "",
              "line": 848
            },
            {
              "name": "network_manager::NetworkManager::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&mut self) -> Result<()>;",
              "docs": "Shut down the network layer.",
              "attributes": "",
              "line": 856
            },
            {
              "name": "network_manager::NetworkManager::discover_now",
              "kind": "function_item",
              "signature": "pub async fn discover_now(&self) -> Result<usize>;",
              "docs": "Manually trigger a discovery sweep for all tracked keys.\n\nThis is useful for tests or when you want to force immediate\npeer discovery rather than waiting for the periodic interval.",
              "attributes": "",
              "line": 878
            }
          ],
          "parseErrors": false
        },
        {
          "module": "node",
          "source": "sigil/weave/libs/weave-sdk/src/node.rs",
          "sha256": "d652dc23c98005b9112d183f2d4bbcd7de5d510fafcc9d0898cef257a6aa19ea",
          "attributes": "",
          "items": [
            {
              "name": "node::WeaveNode",
              "kind": "struct_item",
              "signature": "pub struct WeaveNode {\n\n}",
              "docs": "A Weave node \u2014 the unified entry point for all Weave operations.\n\nAgents, CLIs, and applications interact with the Weave network through\nthis single type. It manages identity, storage, networking, and replication.\n\n# Example\n\n```rust,no_run\nuse weave_sdk::prelude::*;\n\n#[tokio::main]\nasync fn main() -> weave_sdk::error::Result<()> {\n    let node = WeaveNode::builder()\n        .namespace(\"l1fe\")\n        .identifier(\"my-agent\")\n        .storage_dir(\"/tmp/weave-test\")\n        .build()\n        .await?;\n\n    println!(\"Agent DID: {}\", node.identity().did());\n    Ok(())\n}\n```",
              "attributes": "",
              "line": 38
            },
            {
              "name": "node::StrandPayloadCodec",
              "kind": "struct_item",
              "signature": "pub struct StrandPayloadCodec {\n\n}",
              "docs": "Application-provided transform for one Strand's stored payloads.\n\nReplication operates on the underlying Strand and therefore always moves\nthe encoded bytes. Applications such as Loom can use this hook to encrypt\nprivate records before they reach disk or the network, while callers of\n[`WeaveNode::append`] and [`WeaveNode::read_block`] continue to work with\nplaintext. A codec is scoped to an exact Strand name and is never inferred\nor silently inherited by another Strand.",
              "attributes": "#[derive(Clone)]",
              "line": 62
            },
            {
              "name": "node::StrandPayloadCodec::new",
              "kind": "function_item",
              "signature": "pub fn new<E, D>(encode: E, decode: D) -> Self\n    where\n        E: Fn(&[u8]) -> Result<Vec<u8>> + Send + Sync + 'static,\n        D: Fn(&[u8]) -> Result<Vec<u8>> + Send + Sync + 'static,;",
              "docs": "Construct an exact encode/decode pair.",
              "attributes": "",
              "line": 69
            },
            {
              "name": "node::StrandStore",
              "kind": "struct_item",
              "signature": "pub struct StrandStore {\n\n}",
              "docs": "Storage for append-only strands.",
              "attributes": "",
              "line": 169
            },
            {
              "name": "node::LensStore",
              "kind": "struct_item",
              "signature": "pub struct LensStore {\n\n}",
              "docs": "Storage for Lens B-tree databases.",
              "attributes": "",
              "line": 175
            },
            {
              "name": "node::LocusStore",
              "kind": "struct_item",
              "signature": "pub struct LocusStore {\n\n}",
              "docs": "Storage for Locus distributed filesystems.",
              "attributes": "",
              "line": 181
            },
            {
              "name": "node::ForumStore",
              "kind": "struct_item",
              "signature": "pub struct ForumStore {\n\n}",
              "docs": "Storage for Forum tuple spaces.",
              "attributes": "",
              "line": 187
            },
            {
              "name": "node::GnosisStore",
              "kind": "struct_item",
              "signature": "pub struct GnosisStore {\n\n}",
              "docs": "Storage for Gnosis knowledge graphs.",
              "attributes": "",
              "line": 193
            },
            {
              "name": "node::BasisStore",
              "kind": "struct_item",
              "signature": "pub struct BasisStore {\n\n}",
              "docs": "Storage for Basis vector stores.",
              "attributes": "",
              "line": 199
            },
            {
              "name": "node::NexusStore",
              "kind": "struct_item",
              "signature": "pub struct NexusStore {\n\n}",
              "docs": "Storage for Nexus multi-writer views.",
              "attributes": "",
              "line": 205
            },
            {
              "name": "node::StrandStore::create",
              "kind": "function_item",
              "signature": "pub async fn create(\n        &mut self,\n        name: &str,\n        key_pair: weave_crypto::KeyPair,\n    ) -> Result<&strand::Strand>;",
              "docs": "Create a new strand.",
              "attributes": "",
              "line": 347
            },
            {
              "name": "node::StrandStore::create_remote",
              "kind": "function_item",
              "signature": "pub async fn create_remote(\n        &mut self,\n        name: &str,\n        source_pubkey: [u8; 32],\n    ) -> Result<&strand::Strand>;",
              "docs": "Create a read-only strand handle keyed on a remote writer's public\nkey. The strand has no local data yet; replication fills in blocks\nover time. Used by `WeaveNode::open_remote_strand` to bootstrap a\nfresh receiver against an existing remote strand whose writer\nkeypair the receiver does not (and should not) have.",
              "attributes": "",
              "line": 379
            },
            {
              "name": "node::StrandStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Result<Option<&strand::Strand>>;",
              "docs": "Get a strand by name.",
              "attributes": "",
              "line": 409
            },
            {
              "name": "node::StrandStore::get_mut",
              "kind": "function_item",
              "signature": "pub fn get_mut(&mut self, name: &str) -> Result<Option<&mut strand::Strand>>;",
              "docs": "Get a mutable reference to a strand.",
              "attributes": "",
              "line": 420
            },
            {
              "name": "node::StrandStore::open_for_replication",
              "kind": "function_item",
              "signature": "pub async fn open_for_replication(\n        &self,\n        name: &str,\n    ) -> Result<Arc<tokio::sync::RwLock<strand::Strand>>>;",
              "docs": "Open a fresh Strand instance backed by the same on-disk data as the\nnamed strand. The returned `Arc<RwLock<Strand>>` can be safely shared\nwith the replication layer which needs both read and write access.",
              "attributes": "",
              "line": 487
            },
            {
              "name": "node::StrandStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all strand names.",
              "attributes": "",
              "line": 495
            },
            {
              "name": "node::LensStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(&mut self, name: &str) -> Result<&lens::Lens>;",
              "docs": "Open or create a Lens database.",
              "attributes": "",
              "line": 581
            },
            {
              "name": "node::LensStore::open_remote",
              "kind": "function_item",
              "signature": "pub async fn open_remote(\n        &mut self,\n        name: &str,\n        source_pubkey: [u8; 32],\n    ) -> Result<&lens::Lens>;",
              "docs": "Create a read-only Lens database keyed on a remote source's\npubkey. The underlying Strand is opened with [`strand::StrandConfig::with_public_key`]\nso signature verification on incoming blocks accepts only the\nsource's writes; replication populates the lens over time.\nErrors if a database with this name already exists locally.",
              "attributes": "",
              "line": 606
            },
            {
              "name": "node::LensStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<&lens::Lens>;",
              "docs": "Get a Lens database by name.",
              "attributes": "",
              "line": 642
            },
            {
              "name": "node::LensStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all database names.",
              "attributes": "",
              "line": 647
            },
            {
              "name": "node::LocusStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(&mut self, name: &str) -> Result<&locus::Locus>;",
              "docs": "Open or create a Locus drive.",
              "attributes": "",
              "line": 692
            },
            {
              "name": "node::LocusStore::get_mut",
              "kind": "function_item",
              "signature": "pub async fn get_mut(&mut self, name: &str) -> Option<&mut locus::Locus>;",
              "docs": "Get a mutable Locus drive.",
              "attributes": "",
              "line": 766
            },
            {
              "name": "node::LocusStore::drives_get",
              "kind": "function_item",
              "signature": "pub fn drives_get(&self, name: &str) -> Option<&locus::Locus>;",
              "docs": "Get an immutable Locus drive by name. Mirrors the `get` accessor on\nother stores; useful for callers that need to read the drive's\npubkeys without mutating it (e.g. `loom identity share`).",
              "attributes": "",
              "line": 773
            },
            {
              "name": "node::LocusStore::open_remote",
              "kind": "function_item",
              "signature": "pub async fn open_remote(\n        &mut self,\n        name: &str,\n        meta_pk: [u8; 32],\n        blob_meta_pk: [u8; 32],\n        blob_data_pk: [u8; 32],\n    ) -> Result<&locus::Locus>;",
              "docs": "Create a read-only Locus drive keyed on a remote source's three\nstrand pubkeys: `(meta_pk, blob_meta_pk, blob_data_pk)`. Each\nunderlying strand is opened with [`strand::StrandConfig::with_public_key`]\nso signature verification accepts only the source's writes.\nReplication populates the drive over time.",
              "attributes": "",
              "line": 782
            },
            {
              "name": "node::LocusStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all drive names.",
              "attributes": "",
              "line": 854
            },
            {
              "name": "node::ForumStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(&mut self, name: &str) -> Result<&forum::Forum>;",
              "docs": "Open or create a Forum tuple space backed by a strand.",
              "attributes": "",
              "line": 870
            },
            {
              "name": "node::ForumStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<&forum::Forum>;",
              "docs": "Get a Forum by name.",
              "attributes": "",
              "line": 885
            },
            {
              "name": "node::ForumStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all forum names.",
              "attributes": "",
              "line": 890
            },
            {
              "name": "node::GnosisStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(&mut self, name: &str) -> Result<&gnosis::Gnosis>;",
              "docs": "Open or create a Gnosis knowledge graph backed by a strand.",
              "attributes": "",
              "line": 904
            },
            {
              "name": "node::GnosisStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<&gnosis::Gnosis>;",
              "docs": "Get a Gnosis graph by name.",
              "attributes": "",
              "line": 919
            },
            {
              "name": "node::GnosisStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all graph names.",
              "attributes": "",
              "line": 924
            },
            {
              "name": "node::BasisStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(&mut self, name: &str) -> Result<&basis::Basis>;",
              "docs": "Open or create a Basis vector store backed by two strands.",
              "attributes": "",
              "line": 938
            },
            {
              "name": "node::BasisStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<&basis::Basis>;",
              "docs": "Get a Basis store by name.",
              "attributes": "",
              "line": 962
            },
            {
              "name": "node::BasisStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all store names.",
              "attributes": "",
              "line": 967
            },
            {
              "name": "node::NexusStore::create",
              "kind": "function_item",
              "signature": "pub async fn create(\n        &mut self,\n        name: &str,\n        ordering: Box<dyn nexus::OrderingStrategy>,\n    ) -> Result<&nexus::Nexus>;",
              "docs": "Create a new Nexus view. Fail-closed if a durable view already exists.",
              "attributes": "",
              "line": 1138
            },
            {
              "name": "node::NexusStore::open",
              "kind": "function_item",
              "signature": "pub async fn open(\n        &mut self,\n        name: &str,\n        ordering: Box<dyn nexus::OrderingStrategy>,\n    ) -> Result<&nexus::Nexus>;",
              "docs": "Open a durable Nexus view into the process map without attaching inputs.",
              "attributes": "",
              "line": 1160
            },
            {
              "name": "node::NexusStore::get",
              "kind": "function_item",
              "signature": "pub fn get(&self, name: &str) -> Option<&nexus::Nexus>;",
              "docs": "Get a Nexus view by name.",
              "attributes": "",
              "line": 1182
            },
            {
              "name": "node::NexusStore::list",
              "kind": "function_item",
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "docs": "List all nexus view names.",
              "attributes": "",
              "line": 1187
            },
            {
              "name": "node::WeaveNode::builder",
              "kind": "function_item",
              "signature": "pub fn builder() -> WeaveNodeBuilder;",
              "docs": "Create a builder for constructing a WeaveNode.",
              "attributes": "",
              "line": 1194
            },
            {
              "name": "node::WeaveNode::identity",
              "kind": "function_item",
              "signature": "pub fn identity(&self) -> &WeaveIdentity;",
              "docs": "The node's identity.",
              "attributes": "",
              "line": 1199
            },
            {
              "name": "node::WeaveNode::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &WeaveConfig;",
              "docs": "The node's configuration.",
              "attributes": "",
              "line": 1204
            },
            {
              "name": "node::WeaveNode::strands",
              "kind": "function_item",
              "signature": "pub fn strands(&self) -> &Arc<RwLock<StrandStore>>;",
              "docs": "Access the strand store (append-only logs).",
              "attributes": "",
              "line": 1209
            },
            {
              "name": "node::WeaveNode::lens",
              "kind": "function_item",
              "signature": "pub fn lens(&self) -> &Arc<RwLock<LensStore>>;",
              "docs": "Access the Lens store (B-tree databases).",
              "attributes": "",
              "line": 1214
            },
            {
              "name": "node::WeaveNode::locus",
              "kind": "function_item",
              "signature": "pub fn locus(&self) -> &Arc<RwLock<LocusStore>>;",
              "docs": "Access the Locus store (distributed filesystems).",
              "attributes": "",
              "line": 1219
            },
            {
              "name": "node::WeaveNode::replication",
              "kind": "function_item",
              "signature": "pub fn replication(&self) -> &Arc<ReplicationManager>;",
              "docs": "Access the replication manager.",
              "attributes": "",
              "line": 1224
            },
            {
              "name": "node::WeaveNode::set_private_replication_controls",
              "kind": "function_item",
              "signature": "pub async fn set_private_replication_controls(\n        &self,\n        proof: Option<ReplicationAccessProof>,\n        policy: Option<ReplicationAdmissionPolicy>,\n    ) -> Result<()>;",
              "docs": "Atomically set or clear the private replication preflight and exact\npost-identity admission policy. Incomplete private controls are\nrejected so transport cannot fall back to a weaker partial profile.",
              "attributes": "",
              "line": 1231
            },
            {
              "name": "node::WeaveNode::network",
              "kind": "function_item",
              "signature": "pub fn network(&self) -> &Arc<RwLock<NetworkManager>>;",
              "docs": "Access the network manager.",
              "attributes": "",
              "line": 1240
            },
            {
              "name": "node::WeaveNode::start_network",
              "kind": "function_item",
              "signature": "pub async fn start_network(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 1263
            },
            {
              "name": "node::WeaveNode::stop_network",
              "kind": "function_item",
              "signature": "pub async fn stop_network(&self) -> Result<()>;",
              "docs": "Stop the network layer.",
              "attributes": "",
              "line": 1273
            },
            {
              "name": "node::WeaveNode::start_auto_replication",
              "kind": "function_item",
              "signature": "pub async fn start_auto_replication(&self) -> Result<()>;",
              "docs": "Start auto-replication: announce all data stores and discover peers.\n\nThis announces every strand, lens, and locus this node owns on the\nDHT, then begins a continuous discovery-and-replicate loop.",
              "attributes": "",
              "line": 1284
            },
            {
              "name": "node::WeaveNode::announce_strand",
              "kind": "function_item",
              "signature": "pub async fn announce_strand(&self, name: &str) -> Result<()>;",
              "docs": "Announce a single strand on the DHT for peer discovery.\n\nOpens a separate Strand instance backed by the same on-disk data.\nLocally owned Strands retain their writer signer so a public provider\nlease can carry the mandatory writer delegation. Remote replicas remain\nread-only and cannot advertise themselves as public writers.",
              "attributes": "",
              "line": 1315
            },
            {
              "name": "node::WeaveNode::replicate_locus",
              "kind": "function_item",
              "signature": "pub async fn replicate_locus(&self, name: &str) -> Result<()>;",
              "docs": "Replicate a locus drive with discovered peers.\n\nLocus drives are backed by multiple strands (metadata + blob data).\nThis announces all underlying strands on the DHT.",
              "attributes": "",
              "line": 1327
            },
            {
              "name": "node::WeaveNode::replicate_lens",
              "kind": "function_item",
              "signature": "pub async fn replicate_lens(&self, name: &str) -> Result<()>;",
              "docs": "Replicate a lens database with discovered peers.\n\nLens databases are backed by a single strand.\nThis announces the underlying strand on the DHT.",
              "attributes": "",
              "line": 1372
            },
            {
              "name": "node::WeaveNode::replication_addr",
              "kind": "function_item",
              "signature": "pub async fn replication_addr(&self) -> Option<std::net::SocketAddr>;",
              "docs": "Get the address the replication listener is bound to.",
              "attributes": "",
              "line": 1396
            },
            {
              "name": "node::WeaveNode::dht_bootstrap_addr",
              "kind": "function_item",
              "signature": "pub async fn dht_bootstrap_addr(&self) -> Option<String>;",
              "docs": "Get the DHT bootstrap multiaddr peers can pass to `LOOM_BOOTSTRAP`.",
              "attributes": "",
              "line": 1402
            },
            {
              "name": "node::WeaveNode::peer_count",
              "kind": "function_item",
              "signature": "pub async fn peer_count(&self) -> usize;",
              "docs": "Get the number of connected peers.",
              "attributes": "",
              "line": 1408
            },
            {
              "name": "node::WeaveNode::discover_peers",
              "kind": "function_item",
              "signature": "pub async fn discover_peers(&self) -> Result<usize>;",
              "docs": "Trigger an immediate discovery sweep.",
              "attributes": "",
              "line": 1414
            },
            {
              "name": "node::WeaveNode::create_strand",
              "kind": "function_item",
              "signature": "pub async fn create_strand(&self, name: &str) -> Result<()>;",
              "docs": "Create a new strand and return its name.",
              "attributes": "",
              "line": 1420
            },
            {
              "name": "node::WeaveNode::create_strand_with_keypair",
              "kind": "function_item",
              "signature": "pub async fn create_strand_with_keypair(\n        &self,\n        name: &str,\n        key_pair: weave_crypto::KeyPair,\n    ) -> Result<()>;",
              "docs": "Create a Strand with an application-scoped signing key.\n\nThis is intended for unlinkable, per-resource writer identities. The\nkey is still held only by the local writer; readers open the resource\nwith [`Self::open_remote_strand`] and its public key.",
              "attributes": "",
              "line": 1430
            },
            {
              "name": "node::WeaveNode::set_strand_payload_codec",
              "kind": "function_item",
              "signature": "pub async fn set_strand_payload_codec(&self, name: &str, codec: StrandPayloadCodec);",
              "docs": "Install or replace the payload codec for one exact Strand name.",
              "attributes": "",
              "line": 1442
            },
            {
              "name": "node::WeaveNode::clear_strand_payload_codec",
              "kind": "function_item",
              "signature": "pub async fn clear_strand_payload_codec(&self, name: &str);",
              "docs": "Remove the payload codec for one exact Strand name.",
              "attributes": "",
              "line": 1450
            },
            {
              "name": "node::WeaveNode::set_strand_history_ceiling",
              "kind": "function_item",
              "signature": "pub async fn set_strand_history_ceiling(&self, name: &str, ceiling: Option<u64>) -> Result<()>;",
              "docs": "Apply or clear a signed higher-layer history ceiling for one exact\nStrand. A ceiling of `N` permits only sequence numbers below `N` across\nlocal reads, appends, and replication.",
              "attributes": "",
              "line": 1457
            },
            {
              "name": "node::WeaveNode::set_strand_history_checkpoint",
              "kind": "function_item",
              "signature": "pub async fn set_strand_history_checkpoint(\n        &self,\n        name: &str,\n        terminal_length: u64,\n        terminal_hash: Option<[u8; 32]>,\n    ) -> Result<()>;",
              "docs": "Apply a complete signed terminal checkpoint to one exact Strand.",
              "attributes": "",
              "line": 1467
            },
            {
              "name": "node::WeaveNode::strand_terminal_checkpoint",
              "kind": "function_item",
              "signature": "pub async fn strand_terminal_checkpoint(&self, name: &str) -> Result<(u64, Option<[u8; 32]>)>;",
              "docs": "Verify a complete local Strand and return the terminal block count and\nterminal block-link hash used by signed retirement checkpoints.",
              "attributes": "",
              "line": 1484
            },
            {
              "name": "node::WeaveNode::open_remote_strand",
              "kind": "function_item",
              "signature": "pub async fn open_remote_strand(&self, name: &str, source_pubkey: [u8; 32]) -> Result<()>;",
              "docs": "Open a read-only strand handle keyed on a remote writer's public\nkey. Use this on a fresh receiver to bootstrap against an existing\nremote strand whose writer keypair you do not (and should not) have.\nReplication fills in blocks over time once the swarm is up.\n\nDistinct from [`Self::create_strand`] in three ways:\n1. No keypair is bound \u2014 the strand is read-only.\n2. The strand's writer pubkey is the remote source's, so signature\n   verification on incoming blocks accepts only the source's writes.\n3. The discovery key derives from the source's pubkey, so DHT\n   lookups land on the source's announcements.",
              "attributes": "",
              "line": 1505
            },
            {
              "name": "node::WeaveNode::append",
              "kind": "function_item",
              "signature": "pub async fn append(&self, strand_name: &str, data: &[u8]) -> Result<u64>;",
              "docs": "Append data to a named strand.",
              "attributes": "",
              "line": 1612
            },
            {
              "name": "node::WeaveNode::read_block",
              "kind": "function_item",
              "signature": "pub async fn read_block(&self, strand_name: &str, seq: u64) -> Result<Option<Vec<u8>>>;",
              "docs": "Read a block from a named strand.",
              "attributes": "",
              "line": 1636
            },
            {
              "name": "node::WeaveNode::read_block_raw",
              "kind": "function_item",
              "signature": "pub async fn read_block_raw(&self, strand_name: &str, seq: u64) -> Result<Option<Vec<u8>>>;",
              "docs": "Read the exact stored/replicated bytes without applying a payload\ncodec. This is intentionally explicit and is primarily useful for\ncustody verification and adversarial tests.",
              "attributes": "",
              "line": 1664
            },
            {
              "name": "node::WeaveNode::strand_len",
              "kind": "function_item",
              "signature": "pub async fn strand_len(&self, strand_name: &str) -> Result<u64>;",
              "docs": "Return the number of blocks currently available in a named strand.",
              "attributes": "",
              "line": 1677
            },
            {
              "name": "node::WeaveNode::open_lens",
              "kind": "function_item",
              "signature": "pub async fn open_lens(&self, name: &str) -> Result<()>;",
              "docs": "Open a Lens database.",
              "attributes": "",
              "line": 1686
            },
            {
              "name": "node::WeaveNode::open_remote_lens",
              "kind": "function_item",
              "signature": "pub async fn open_remote_lens(&self, name: &str, source_pubkey: [u8; 32]) -> Result<()>;",
              "docs": "Open a read-only Lens keyed on a remote source's pubkey. Used on a\nfresh receiver that wants to replicate an existing remote lens\n(e.g. for `loom clone`, where the receiver pulls the source's\n`loom.refs` and `loom.index` lenses without having the writer\nkeypair). Replication fills the lens over time.",
              "attributes": "",
              "line": 1698
            },
            {
              "name": "node::WeaveNode::lens_put",
              "kind": "function_item",
              "signature": "pub async fn lens_put(&self, db: &str, key: &[u8], value: &[u8]) -> Result<()>;",
              "docs": "Put a key-value pair into a Lens database.",
              "attributes": "",
              "line": 1710
            },
            {
              "name": "node::WeaveNode::lens_get",
              "kind": "function_item",
              "signature": "pub async fn lens_get(&self, db: &str, key: &[u8]) -> Result<Option<Vec<u8>>>;",
              "docs": "Get a value from a Lens database.",
              "attributes": "",
              "line": 1722
            },
            {
              "name": "node::WeaveNode::lens_delete",
              "kind": "function_item",
              "signature": "pub async fn lens_delete(&self, db: &str, key: &[u8]) -> Result<()>;",
              "docs": "Delete a key from a Lens database.",
              "attributes": "",
              "line": 1733
            },
            {
              "name": "node::WeaveNode::open_locus",
              "kind": "function_item",
              "signature": "pub async fn open_locus(&self, name: &str) -> Result<()>;",
              "docs": "Open a Locus drive (distributed filesystem).",
              "attributes": "",
              "line": 1745
            },
            {
              "name": "node::WeaveNode::open_remote_locus",
              "kind": "function_item",
              "signature": "pub async fn open_remote_locus(\n        &self,\n        name: &str,\n        meta_pk: [u8; 32],\n        blob_meta_pk: [u8; 32],\n        blob_data_pk: [u8; 32],\n    ) -> Result<()>;",
              "docs": "Open a read-only Locus drive keyed on a remote source's three\nstrand pubkeys: `(metadata, blob_meta, blob_data)`. Used on a\nfresh receiver to bootstrap against an existing remote drive\n(e.g. for `loom clone`'s `loom.blobs` drive). Replication\npopulates each underlying strand once the swarm is up.",
              "attributes": "",
              "line": 1757
            },
            {
              "name": "node::WeaveNode::locus_write_file",
              "kind": "function_item",
              "signature": "pub async fn locus_write_file(&self, drive: &str, path: &str, data: &[u8]) -> Result<()>;",
              "docs": "Write a file to a Locus drive.",
              "attributes": "",
              "line": 1779
            },
            {
              "name": "node::WeaveNode::locus_read_file",
              "kind": "function_item",
              "signature": "pub async fn locus_read_file(&self, drive: &str, path: &str) -> Result<Vec<u8>>;",
              "docs": "Read a file from a Locus drive.",
              "attributes": "",
              "line": 1793
            },
            {
              "name": "node::WeaveNode::locus_mkdir",
              "kind": "function_item",
              "signature": "pub async fn locus_mkdir(&self, drive: &str, path: &str) -> Result<()>;",
              "docs": "Create a directory in a Locus drive.",
              "attributes": "",
              "line": 1806
            },
            {
              "name": "node::WeaveNode::locus_readdir",
              "kind": "function_item",
              "signature": "pub async fn locus_readdir(&self, drive: &str, path: &str) -> Result<Vec<String>>;",
              "docs": "List directory contents in a Locus drive.",
              "attributes": "",
              "line": 1820
            },
            {
              "name": "node::WeaveNode::locus_remove",
              "kind": "function_item",
              "signature": "pub async fn locus_remove(&self, drive: &str, path: &str) -> Result<()>;",
              "docs": "Remove a file or directory from a Locus drive.",
              "attributes": "",
              "line": 1833
            },
            {
              "name": "node::WeaveNode::forums",
              "kind": "function_item",
              "signature": "pub fn forums(&self) -> &Arc<RwLock<ForumStore>>;",
              "docs": "Access the Forum store (tuple spaces).",
              "attributes": "",
              "line": 1849
            },
            {
              "name": "node::WeaveNode::open_forum",
              "kind": "function_item",
              "signature": "pub async fn open_forum(&self, name: &str) -> Result<()>;",
              "docs": "Open a Forum tuple space.",
              "attributes": "",
              "line": 1854
            },
            {
              "name": "node::WeaveNode::forum_write",
              "kind": "function_item",
              "signature": "pub async fn forum_write(&self, name: &str, tuple: Vec<u8>) -> Result<u64>;",
              "docs": "Write a tuple to a Forum.",
              "attributes": "",
              "line": 1862
            },
            {
              "name": "node::WeaveNode::forum_read",
              "kind": "function_item",
              "signature": "pub async fn forum_read(&self, name: &str, pattern: &[u8]) -> Result<Option<Vec<u8>>>;",
              "docs": "Read a tuple from a Forum by pattern.",
              "attributes": "",
              "line": 1873
            },
            {
              "name": "node::WeaveNode::forum_take",
              "kind": "function_item",
              "signature": "pub async fn forum_take(&self, name: &str, pattern: &[u8]) -> Result<Option<Vec<u8>>>;",
              "docs": "Take a tuple from a Forum by pattern.",
              "attributes": "",
              "line": 1884
            },
            {
              "name": "node::WeaveNode::gnosis",
              "kind": "function_item",
              "signature": "pub fn gnosis(&self) -> &Arc<RwLock<GnosisStore>>;",
              "docs": "Access the Gnosis store (knowledge graphs).",
              "attributes": "",
              "line": 1897
            },
            {
              "name": "node::WeaveNode::open_gnosis",
              "kind": "function_item",
              "signature": "pub async fn open_gnosis(&self, name: &str) -> Result<()>;",
              "docs": "Open a Gnosis knowledge graph.",
              "attributes": "",
              "line": 1902
            },
            {
              "name": "node::WeaveNode::gnosis_add",
              "kind": "function_item",
              "signature": "pub async fn gnosis_add(\n        &self,\n        name: &str,\n        subject: &str,\n        predicate: &str,\n        object: &str,\n    ) -> Result<()>;",
              "docs": "Add a triple to a Gnosis graph.",
              "attributes": "",
              "line": 1910
            },
            {
              "name": "node::WeaveNode::gnosis_query",
              "kind": "function_item",
              "signature": "pub async fn gnosis_query(\n        &self,\n        name: &str,\n        subject: Option<String>,\n        predicate: Option<String>,\n        object: Option<String>,\n    ) -> Result<Vec<gnosis::Triple>>;",
              "docs": "Query a Gnosis graph.",
              "attributes": "",
              "line": 1927
            },
            {
              "name": "node::WeaveNode::gnosis_neighbors",
              "kind": "function_item",
              "signature": "pub async fn gnosis_neighbors(\n        &self,\n        name: &str,\n        node_id: &str,\n    ) -> Result<Vec<(String, String)>>;",
              "docs": "Get neighbors of a node in a Gnosis graph.",
              "attributes": "",
              "line": 1949
            },
            {
              "name": "node::WeaveNode::basis",
              "kind": "function_item",
              "signature": "pub fn basis(&self) -> &Arc<RwLock<BasisStore>>;",
              "docs": "Access the Basis store (vector databases).",
              "attributes": "",
              "line": 1966
            },
            {
              "name": "node::WeaveNode::open_basis",
              "kind": "function_item",
              "signature": "pub async fn open_basis(&self, name: &str) -> Result<()>;",
              "docs": "Open a Basis vector store.",
              "attributes": "",
              "line": 1971
            },
            {
              "name": "node::WeaveNode::basis_add",
              "kind": "function_item",
              "signature": "pub async fn basis_add(&self, name: &str, id: Uuid, vector: &[f32]) -> Result<()>;",
              "docs": "Add a vector to a Basis store.",
              "attributes": "",
              "line": 1979
            },
            {
              "name": "node::WeaveNode::basis_search",
              "kind": "function_item",
              "signature": "pub async fn basis_search(\n        &self,\n        name: &str,\n        query: &[f32],\n        k: usize,\n    ) -> Result<Vec<(Uuid, f32)>>;",
              "docs": "Search for nearest neighbors in a Basis store.",
              "attributes": "",
              "line": 1990
            },
            {
              "name": "node::WeaveNode::basis_remove",
              "kind": "function_item",
              "signature": "pub async fn basis_remove(&self, name: &str, id: Uuid) -> Result<()>;",
              "docs": "Remove a vector from a Basis store.",
              "attributes": "",
              "line": 2006
            },
            {
              "name": "node::WeaveNode::nexus",
              "kind": "function_item",
              "signature": "pub fn nexus(&self) -> &Arc<RwLock<NexusStore>>;",
              "docs": "Access the Nexus store (multi-writer views).",
              "attributes": "",
              "line": 2019
            },
            {
              "name": "node::WeaveNode::create_nexus",
              "kind": "function_item",
              "signature": "pub async fn create_nexus(&self, name: &str) -> Result<()>;",
              "docs": "Create a Nexus view.",
              "attributes": "",
              "line": 2024
            },
            {
              "name": "node::WeaveNode::nexus_add_input",
              "kind": "function_item",
              "signature": "pub async fn nexus_add_input(&self, nexus_name: &str, strand_name: &str) -> Result<()>;",
              "docs": "Add an input strand to a Nexus view by loading it from disk.",
              "attributes": "",
              "line": 2097
            },
            {
              "name": "node::WeaveNode::nexus_view",
              "kind": "function_item",
              "signature": "pub async fn nexus_view(\n        &self,\n        nexus_name: &str,\n        start: Option<usize>,\n        limit: Option<usize>,\n    ) -> Result<Vec<nexus::ViewEntry>>;",
              "docs": "Generate and return the current Nexus view.",
              "attributes": "",
              "line": 2103
            },
            {
              "name": "node::WeaveNodeBuilder",
              "kind": "struct_item",
              "signature": "pub struct WeaveNodeBuilder {\n\n}",
              "docs": "Builder for constructing a WeaveNode.",
              "attributes": "#[derive(Default)]",
              "line": 2123
            },
            {
              "name": "node::WeaveNodeBuilder::namespace",
              "kind": "function_item",
              "signature": "pub fn namespace(mut self, ns: impl Into<String>) -> Self;",
              "docs": "Set the OAS namespace (e.g., \"l1fe\").",
              "attributes": "",
              "line": 2133
            },
            {
              "name": "node::WeaveNodeBuilder::identifier",
              "kind": "function_item",
              "signature": "pub fn identifier(mut self, id: impl Into<String>) -> Self;",
              "docs": "Set the agent identifier (e.g., \"data-analyzer\").",
              "attributes": "",
              "line": 2139
            },
            {
              "name": "node::WeaveNodeBuilder::storage_dir",
              "kind": "function_item",
              "signature": "pub fn storage_dir(mut self, dir: impl Into<PathBuf>) -> Self;",
              "docs": "Set the storage directory.",
              "attributes": "",
              "line": 2145
            },
            {
              "name": "node::WeaveNodeBuilder::bootstrap",
              "kind": "function_item",
              "signature": "pub fn bootstrap(mut self, peers: &[&str]) -> Self;",
              "docs": "Set DHT bootstrap peers.",
              "attributes": "",
              "line": 2151
            },
            {
              "name": "node::WeaveNodeBuilder::port",
              "kind": "function_item",
              "signature": "pub fn port(mut self, port: u16) -> Self;",
              "docs": "Set the DHT listen port.",
              "attributes": "",
              "line": 2157
            },
            {
              "name": "node::WeaveNodeBuilder::with_identity",
              "kind": "function_item",
              "signature": "pub fn with_identity(mut self, identity: WeaveIdentity) -> Self;",
              "docs": "Provide a pre-existing identity instead of generating one.",
              "attributes": "",
              "line": 2163
            },
            {
              "name": "node::WeaveNodeBuilder::mdns",
              "kind": "function_item",
              "signature": "pub fn mdns(mut self, enabled: bool) -> Self;",
              "docs": "Enable/disable mDNS discovery.",
              "attributes": "",
              "line": 2169
            },
            {
              "name": "node::WeaveNodeBuilder::with_network",
              "kind": "function_item",
              "signature": "pub fn with_network(mut self, config: NetworkConfig) -> Self;",
              "docs": "Configure the network layer (DHT port, replication port, etc.).",
              "attributes": "",
              "line": 2175
            },
            {
              "name": "node::WeaveNodeBuilder::replication_port",
              "kind": "function_item",
              "signature": "pub fn replication_port(mut self, port: u16) -> Self;",
              "docs": "Set the replication listener port.",
              "attributes": "",
              "line": 2181
            },
            {
              "name": "node::WeaveNodeBuilder::build",
              "kind": "function_item",
              "signature": "pub async fn build(self) -> Result<WeaveNode>;",
              "docs": "Build the WeaveNode. Generates or loads identity, initializes storage.",
              "attributes": "",
              "line": 2190
            }
          ],
          "parseErrors": false
        },
        {
          "module": "prelude",
          "source": "sigil/weave/libs/weave-sdk/src/prelude.rs",
          "sha256": "ad8acc27211fd34fcd41ed3df94f973817f626ec087134967f04cc74450d3d38",
          "attributes": "",
          "items": [
            {
              "name": "pub use crate::config::WeaveConfig;",
              "kind": "use_declaration",
              "signature": "pub use crate::config::WeaveConfig;",
              "docs": "Prelude \u2014 import this for the most common Weave SDK types.\n\n```rust\nuse weave_sdk::prelude::*;\n```",
              "attributes": "",
              "line": 7
            },
            {
              "name": "pub use crate::error::{Result as WeaveResult, WeaveError};",
              "kind": "use_declaration",
              "signature": "pub use crate::error::{Result as WeaveResult, WeaveError};",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "pub use crate::identity::WeaveIdentity;",
              "kind": "use_declaration",
              "signature": "pub use crate::identity::WeaveIdentity;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "pub use crate::network_manager::{ConnectedPeer, NetworkConfig, NetworkManager};",
              "kind": "use_declaration",
              "signature": "pub use crate::network_manager::{ConnectedPeer, NetworkConfig, NetworkManager};",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "pub use crate::node::{WeaveNode, WeaveNodeBuilder};",
              "kind": "use_declaration",
              "signature": "pub use crate::node::{WeaveNode, WeaveNodeBuilder};",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "pub use crate::replication::{\n    dogfood_allow_authenticated_peers, ReplicationAccessProof, ReplicationManager,\n    ReplicationStats, SessionState,\n};",
              "kind": "use_declaration",
              "signature": "pub use crate::replication::{\n    dogfood_allow_authenticated_peers, ReplicationAccessProof, ReplicationManager,\n    ReplicationStats, SessionState,\n};",
              "docs": "",
              "attributes": "",
              "line": 12
            }
          ],
          "parseErrors": false
        },
        {
          "module": "replication",
          "source": "sigil/weave/libs/weave-sdk/src/replication.rs",
          "sha256": "29b2a49d34c219793056def49ac590d299e88d51d3477898d706a581a4316e4c",
          "attributes": "",
          "items": [
            {
              "name": "replication::ReplicationMessage",
              "kind": "enum_item",
              "signature": "pub enum ReplicationMessage {\n    /// Anonymous resource preflight. Private repositories attach a one-time\n    /// proof derived from the current repository epoch and Noise channel.\n    /// No DID or authentication public key is disclosed at this stage.\n    #[serde(rename = \"hello\")]\n    Hello {\n        version: u8,\n        discovery_key: Vec<u8>,\n        live: bool,\n        #[serde(default)]\n        access_proof: Vec<u8>,\n    },\n\n    /// Initial handshake: exchange public keys and discovery key.\n    #[serde(rename = \"handshake\")]\n    Handshake {\n        version: u8,\n        public_key: Vec<u8>,\n        discovery_key: Vec<u8>,\n        live: bool,\n        #[serde(default)]\n        peer_did: Option<String>,\n        #[serde(default)]\n        auth_public_key: Option<Vec<u8>>,\n        #[serde(default)]\n        auth_signature: Option<Vec<u8>>,\n    },\n\n    /// Announce available block range.\n    #[serde(rename = \"have\")]\n    Have { start: u64, length: u64 },\n\n    /// Request the remote to announce its availability from `start`.\n    #[serde(rename = \"want\")]\n    Want { start: u64 },\n\n    /// Request a range of blocks.\n    #[serde(rename = \"request\")]\n    Request { start: u64, end: u64 },\n\n    /// Deliver a block.\n    #[serde(rename = \"data\")]\n    Data {\n        seq: u64,\n        #[serde(with = \"base64_bytes\")]\n        data: Vec<u8>,\n        header: WireHeader,\n    },\n\n    /// Cancel a previous request.\n    #[serde(rename = \"cancel\")]\n    Cancel { start: u64, end: u64 },\n\n    /// Indicate we do not have a block.\n    #[serde(rename = \"unhave\")]\n    Unhave { seq: u64 },\n\n    /// Synchronization complete (non-live sessions).\n    #[serde(rename = \"sync\")]\n    Sync,\n}",
              "docs": "Message types exchanged during strand replication.\n\nEach message is length-prefixed and JSON-serialized on the wire.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\")]",
              "line": 115
            },
            {
              "name": "replication::WireHeader",
              "kind": "struct_item",
              "signature": "pub struct WireHeader {\npub version: u8,\npub seq: u64,\npub length: u64,\npub byte_offset: u64,\n#[serde(default, with = \"base64_bytes\")]\npub prev_hash: Vec<u8>,\npub writer_public_key: Vec<u8>,\npub timestamp: u64,\n#[serde(with = \"base64_bytes\")]\npub signature: Vec<u8>\n}",
              "docs": "Minimal header representation for wire transfer.",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 179
            },
            {
              "name": "replication::base64_bytes::serialize",
              "kind": "function_item",
              "signature": "pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> std::result::Result<S::Ok, S::Error>\n    where\n        S: Serializer,;",
              "docs": "",
              "attributes": "",
              "line": 241
            },
            {
              "name": "replication::base64_bytes::deserialize",
              "kind": "function_item",
              "signature": "pub fn deserialize<'de, D>(deserializer: D) -> std::result::Result<Vec<u8>, D::Error>\n    where\n        D: Deserializer<'de>,;",
              "docs": "",
              "attributes": "",
              "line": 250
            },
            {
              "name": "replication::SessionState",
              "kind": "enum_item",
              "signature": "pub enum SessionState {\n    /// Handshake in progress.\n    Connecting,\n    /// Actively replicating.\n    Active,\n    /// Paused (e.g., waiting for data).\n    Idle,\n    /// Session closed.\n    Closed,\n}",
              "docs": "State of a replication session.",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 334
            },
            {
              "name": "replication::ReplicationStats",
              "kind": "struct_item",
              "signature": "pub struct ReplicationStats {\npub blocks_uploaded: u64,\npub blocks_downloaded: u64,\npub bytes_uploaded: u64,\npub bytes_downloaded: u64\n}",
              "docs": "Statistics for a replication session.",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 347
            },
            {
              "name": "replication::AuthenticatedPeer",
              "kind": "struct_item",
              "signature": "pub struct AuthenticatedPeer {\n/// Claimed and verified DID.\n\npub did: String,\n/// Ed25519 authentication public key used to verify the handshake.\n\npub auth_public_key: [u8; 32]\n}",
              "docs": "A remote peer whose handshake signature verified.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 356
            },
            {
              "name": "replication::ReplicationAdmissionPolicy",
              "kind": "type_item",
              "signature": "pub type ReplicationAdmissionPolicy =\n    Arc<dyn Fn(&AuthenticatedPeer, &[u8; 32]) -> bool + Send + Sync>;",
              "docs": "Admission callback for authenticated replication peers.",
              "attributes": "",
              "line": 364
            },
            {
              "name": "replication::ReplicationAccessProof",
              "kind": "struct_item",
              "signature": "pub struct ReplicationAccessProof {\n\n}",
              "docs": "Channel-bound anonymous preflight for private replication.\n\nThe generator is used by an outbound peer before it discloses its DID.\nThe verifier is used by the responder before it sends its own signed\nhandshake. Public repositories leave this control unset.",
              "attributes": "#[derive(Clone)]",
              "line": 373
            },
            {
              "name": "replication::ReplicationAccessProof::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        generator: impl Fn(&[u8; 32], &[u8; 32], bool) -> Result<[u8; 32]> + Send + Sync + 'static,\n        verifier: impl Fn(&[u8; 32], &[u8; 32], bool, &[u8; 32]) -> bool + Send + Sync + 'static,\n    ) -> Self;",
              "docs": "Construct a private replication preflight.",
              "attributes": "",
              "line": 380
            },
            {
              "name": "replication::ReplicationAccessProof::dogfood_shared_secret",
              "kind": "function_item",
              "signature": "pub fn dogfood_shared_secret(secret: &[u8]) -> Self;",
              "docs": "**Dogfood / same-host LAN only** \u2014 shared-secret AccessProof for\n`WEAVE_PRIVATE_REPLICATION` secondary prove.\n\nThis is **not** a public DHT PASS path. Both peers must use the same\nsecret. Prefer a strong random secret; do not use in production.",
              "attributes": "",
              "line": 395
            },
            {
              "name": "replication::dogfood_allow_authenticated_peers",
              "kind": "function_item",
              "signature": "pub fn dogfood_allow_authenticated_peers() -> ReplicationAdmissionPolicy;",
              "docs": "**Dogfood / same-host LAN only** \u2014 admission policy that accepts any\npost-handshake authenticated peer. Pair with\n[`ReplicationAccessProof::dogfood_shared_secret`]. Not a public DHT PASS.",
              "attributes": "",
              "line": 426
            },
            {
              "name": "replication::IncomingStrandResolver",
              "kind": "type_item",
              "signature": "pub type IncomingStrandResolver =\n    Arc<dyn Fn([u8; 32]) -> Option<(String, Arc<tokio::sync::RwLock<Strand>>)> + Send + Sync>;",
              "docs": "Resolver used by inbound multi-resource replication. The responder reads\nthe peer's requested discovery key from the handshake, then asks this\nresolver for the matching local strand.",
              "attributes": "",
              "line": 433
            },
            {
              "name": "replication::LocusReplicationTargets",
              "kind": "struct_item",
              "signature": "pub struct LocusReplicationTargets {\n/// Metadata B-tree strand.\n\npub meta_strand: Arc<RwLock<Strand>>,\n/// Blob metadata strand.\n\npub blob_meta_strand: Arc<RwLock<Strand>>,\n/// Blob payload strand.\n\npub blob_data_strand: Arc<RwLock<Strand>>,\n/// Keep the sessions open for live updates.\n\npub live: bool\n}",
              "docs": "Strand handles required to replicate a complete Locus drive.",
              "attributes": "#[derive(Clone)]",
              "line": 438
            },
            {
              "name": "replication::LocusReplicationTargets::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        meta_strand: Arc<RwLock<Strand>>,\n        blob_meta_strand: Arc<RwLock<Strand>>,\n        blob_data_strand: Arc<RwLock<Strand>>,\n        live: bool,\n    ) -> Self;",
              "docs": "Create replication targets for the three strands backing a Locus drive.",
              "attributes": "",
              "line": 451
            },
            {
              "name": "replication::ReplicationSession",
              "kind": "struct_item",
              "signature": "pub struct ReplicationSession {\n/// The remote peer's DID.\n\npub peer_did: String,\n/// Remote peer's public key.\n\npub peer_public_key: [u8; 32],\n/// Names of strands being replicated.\n\npub strands: Vec<String>,\n/// Session state.\n\npub state: SessionState,\n/// Accumulated stats.\n\npub stats: ReplicationStats\n}",
              "docs": "A single replication session with a remote peer.",
              "attributes": "#[derive(Debug)]",
              "line": 468
            },
            {
              "name": "replication::ReplicationManager",
              "kind": "struct_item",
              "signature": "pub struct ReplicationManager {\n\n}",
              "docs": "Manages peer-to-peer replication of strands between nodes.\n\nThis integrates three layers:\n1. **Secret Stream** (zer0-secret-stream) -- Noise-encrypted transport\n2. **Proto-Mux** (zer0-proto-mp) -- Channel multiplexing with flow control\n3. **Strand replication messages** -- Block exchange protocol",
              "attributes": "",
              "line": 498
            },
            {
              "name": "replication::ReplicationManager::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new replication manager.",
              "attributes": "",
              "line": 508
            },
            {
              "name": "replication::ReplicationManager::with_identity",
              "kind": "function_item",
              "signature": "pub fn with_identity(identity: WeaveIdentity) -> Self;",
              "docs": "Create a replication manager that authenticates handshakes with `identity`.",
              "attributes": "",
              "line": 518
            },
            {
              "name": "replication::ReplicationManager::set_private_controls",
              "kind": "function_item",
              "signature": "pub async fn set_private_controls(\n        &self,\n        proof: Option<ReplicationAccessProof>,\n        policy: Option<ReplicationAdmissionPolicy>,\n    ) -> Result<()>;",
              "docs": "Atomically configure or clear the two controls required for a private\nreplication endpoint.\n\nA private endpoint must never expose only the epoch proof or only the\npost-identity policy: the former admits any current-key holder, while\nthe latter discloses responder identity before authorization. This API\ntherefore rejects incomplete configurations.",
              "attributes": "",
              "line": 534
            },
            {
              "name": "replication::ReplicationManager::private_controls_enabled",
              "kind": "function_item",
              "signature": "pub async fn private_controls_enabled(&self) -> Result<bool>;",
              "docs": "Whether this manager is operating a complete private endpoint.",
              "attributes": "",
              "line": 569
            },
            {
              "name": "replication::ReplicationManager::private_discovery_authenticator",
              "kind": "function_item",
              "signature": "pub async fn private_discovery_authenticator(\n        &self,\n        discovery_key: &[u8; 32],\n        payload_digest: &[u8; 32],\n    ) -> Result<Option<[u8; 32]>>;",
              "docs": "Produce an anonymous, current-epoch authenticator for one leased\ndiscovery provider record. The payload digest is domain-separated\nbefore being supplied as the proof channel binding, so private DHT\nrecords disclose no member DID or authentication key.",
              "attributes": "",
              "line": 578
            },
            {
              "name": "replication::ReplicationManager::verify_private_discovery_authenticator",
              "kind": "function_item",
              "signature": "pub async fn verify_private_discovery_authenticator(\n        &self,\n        discovery_key: &[u8; 32],\n        payload_digest: &[u8; 32],\n        authenticator: &[u8; 32],\n    ) -> Result<bool>;",
              "docs": "Verify the anonymous authenticator on a leased private discovery\nrecord using the current repository epoch.",
              "attributes": "",
              "line": 593
            },
            {
              "name": "replication::ReplicationManager::connect_and_replicate",
              "kind": "function_item",
              "signature": "pub async fn connect_and_replicate(\n        &self,\n        _peer_did: &str,\n        _addr: SocketAddr,\n        _strand_name: &str,\n        _strand: Arc<tokio::sync::RwLock<Strand>>,\n        _live: bool,\n    ) -> Result<()>;",
              "docs": "Connect to a remote peer and begin replicating a strand.\n\nThis performs the full connection lifecycle:\n1. TCP connect to `addr`\n2. Noise XX handshake via SecretStream\n3. Open a channel keyed by the strand's discovery key\n4. Run the Weave block exchange protocol\n\nThe replication loop runs in a background `tokio::spawn` task.\nUse [`Self::stop_replication`] to tear it down.",
              "attributes": "",
              "line": 622
            },
            {
              "name": "replication::ReplicationManager::connect_and_replicate_pinned",
              "kind": "function_item",
              "signature": "pub async fn connect_and_replicate_pinned(\n        &self,\n        peer_did: &str,\n        expected_peer_auth_key: [u8; 32],\n        addr: SocketAddr,\n        strand_name: &str,\n        strand: Arc<tokio::sync::RwLock<Strand>>,\n        live: bool,\n    ) -> Result<()>;",
              "docs": "Connect only when both the remote DID and its Ed25519 authentication\nkey match a separately authenticated descriptor.",
              "attributes": "",
              "line": 638
            },
            {
              "name": "replication::ReplicationManager::handle_incoming_replication",
              "kind": "function_item",
              "signature": "pub async fn handle_incoming_replication(\n        &self,\n        peer_did: &str,\n        stream: TcpStream,\n        strand_name: &str,\n        strand: Arc<tokio::sync::RwLock<Strand>>,\n        live: bool,\n    ) -> Result<()>;",
              "docs": "Accept an incoming TCP connection and run replication for `strand`.\n\nThis is the responder-side counterpart of\n[`Self::connect_and_replicate`].\nTypically called from a listener loop.",
              "attributes": "",
              "line": 813
            },
            {
              "name": "replication::ReplicationManager::handle_incoming_replication_dynamic",
              "kind": "function_item",
              "signature": "pub async fn handle_incoming_replication_dynamic(\n        &self,\n        peer_did: &str,\n        stream: TcpStream,\n        live: bool,\n        resolver: IncomingStrandResolver,\n    ) -> Result<()>;",
              "docs": "Accept an incoming TCP connection and select the replicated strand from\nthe discovery key in the peer's handshake.",
              "attributes": "",
              "line": 931
            },
            {
              "name": "replication::ReplicationManager::listen_for_replication",
              "kind": "function_item",
              "signature": "pub async fn listen_for_replication(\n        &self,\n        bind_addr: SocketAddr,\n        strand: Arc<tokio::sync::RwLock<Strand>>,\n        live: bool,\n    ) -> Result<(SocketAddr, JoinHandle<()>)>;",
              "docs": "Start a TCP listener that accepts replication connections for the given\nstrand. Each accepted connection spawns a responder session.\n\nReturns the local address the listener is bound to and a handle to the\nlistener task.",
              "attributes": "",
              "line": 1037
            },
            {
              "name": "replication::ReplicationManager::stop_replication",
              "kind": "function_item",
              "signature": "pub async fn stop_replication(&self, peer_did: &str) -> Result<()>;",
              "docs": "Stop replicating with a peer. Signals the background task to shut down.",
              "attributes": "",
              "line": 1103
            },
            {
              "name": "replication::ReplicationManager::sessions",
              "kind": "function_item",
              "signature": "pub async fn sessions(&self) -> Vec<(String, SessionState)>;",
              "docs": "List all active replication sessions.",
              "attributes": "",
              "line": 1121
            },
            {
              "name": "replication::ReplicationManager::is_session_live",
              "kind": "function_item",
              "signature": "pub async fn is_session_live(&self, peer_did: &str) -> bool;",
              "docs": "Return whether `peer_did` currently has a connecting or authenticated\nreplication task. Discovery uses this to forget closed sessions and\npermit a clean retry.",
              "attributes": "",
              "line": 1132
            },
            {
              "name": "replication::ReplicationManager::stats",
              "kind": "function_item",
              "signature": "pub async fn stats(&self, peer_did: &str) -> ReplicationStats;",
              "docs": "Get stats for a peer.",
              "attributes": "",
              "line": 1147
            },
            {
              "name": "replication::ReplicationManager::replicate_lens",
              "kind": "function_item",
              "signature": "pub async fn replicate_lens(\n        &self,\n        peer_did: &str,\n        peer_auth_public_key: [u8; 32],\n        addr: SocketAddr,\n        lens_name: &str,\n        lens_strand: Arc<tokio::sync::RwLock<Strand>>,\n        live: bool,\n    ) -> Result<()>;",
              "docs": "Replicate a Lens database to a peer.\n\nA Lens is backed by a single strand, so this discovers the underlying\nstrand and replicates it.",
              "attributes": "",
              "line": 1163
            },
            {
              "name": "replication::ReplicationManager::replicate_locus",
              "kind": "function_item",
              "signature": "pub async fn replicate_locus(\n        &self,\n        peer_did: &str,\n        peer_auth_public_key: [u8; 32],\n        addr: SocketAddr,\n        locus_name: &str,\n        targets: LocusReplicationTargets,\n    ) -> Result<u32>;",
              "docs": "Replicate a Locus drive to a peer.\n\nA Locus drive is backed by 3 strands: meta-strand, blob-meta, and\nblob-data. All three must be replicated for a complete Locus copy.\n\nReturns the number of strands successfully started.",
              "attributes": "",
              "line": 1195
            },
            {
              "name": "replication::ReplicationManager::replicate_nexus",
              "kind": "function_item",
              "signature": "pub async fn replicate_nexus(\n        &self,\n        peer_did: &str,\n        peer_auth_public_key: [u8; 32],\n        addr: SocketAddr,\n        nexus_name: &str,\n        input_strands: Vec<(String, Arc<tokio::sync::RwLock<Strand>>)>,\n        live: bool,\n    ) -> Result<u32>;",
              "docs": "Replicate a Nexus multi-writer view to a peer.\n\nA Nexus aggregates multiple input strands. This method replicates\neach of the provided input strands to the peer.\n\nReturns the number of strands successfully started.",
              "attributes": "",
              "line": 1311
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "zer0-proto-mp",
      "version": "0.1.1",
      "source": "sigil/weave/libs/zer0-proto-mp",
      "manifestSha256": "7688281329d6a6b5e9dee31bf8fef9f06b19215b27dedeca5b2f80a88f5912fd",
      "features": {
        "default": [],
        "protobuf": []
      },
      "publish": true,
      "url": "/reference/rust/zer0-proto-mp",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/libs/zer0-proto-mp/src/lib.rs",
          "sha256": "940f2f4cce9d389a1cbe12dddf1c859fa8869d338a99522a7f12816f1f09353c",
          "attributes": "",
          "items": [
            {
              "name": "pub use channel::{Channel, ChannelHandle, ChannelStats};",
              "kind": "use_declaration",
              "signature": "pub use channel::{Channel, ChannelHandle, ChannelStats};",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "pub use config::MuxConfig;",
              "kind": "use_declaration",
              "signature": "pub use config::MuxConfig;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "pub use error::{Result, WeaveMuxError};",
              "kind": "use_declaration",
              "signature": "pub use error::{Result, WeaveMuxError};",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "pub use frame::{ChannelId, Frame, MessageType};",
              "kind": "use_declaration",
              "signature": "pub use frame::{ChannelId, Frame, MessageType};",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "pub use metrics::MuxMetrics;",
              "kind": "use_declaration",
              "signature": "pub use metrics::MuxMetrics;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "pub use mux::WeaveMux;",
              "kind": "use_declaration",
              "signature": "pub use mux::WeaveMux;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "pub use protocol::{\n    Encoding, HandshakeConfig, MessageHandler, MessageId, MessageSchema, Protocol, ProtocolBuilder,\n    Version,\n};",
              "kind": "use_declaration",
              "signature": "pub use protocol::{\n    Encoding, HandshakeConfig, MessageHandler, MessageId, MessageSchema, Protocol, ProtocolBuilder,\n    Version,\n};",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "pub use wire::{decode_varint, encode_varint};",
              "kind": "use_declaration",
              "signature": "pub use wire::{decode_varint, encode_varint};",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "pub use bytes::Bytes;",
              "kind": "use_declaration",
              "signature": "pub use bytes::Bytes;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use futures::future::BoxFuture;",
              "kind": "use_declaration",
              "signature": "pub use futures::future::BoxFuture;",
              "docs": "",
              "attributes": "",
              "line": 55
            }
          ],
          "parseErrors": false
        },
        {
          "module": "channel",
          "source": "sigil/weave/libs/zer0-proto-mp/src/channel.rs",
          "sha256": "d98c92088d42c2d23bbf096e350721bd16010c602f202ba32fc6b4362f1e9a2a",
          "attributes": "",
          "items": [
            {
              "name": "channel::ChannelStats",
              "kind": "struct_item",
              "signature": "pub struct ChannelStats {\npub messages_sent: AtomicU64,\npub messages_received: AtomicU64,\npub bytes_sent: AtomicU64,\npub bytes_received: AtomicU64\n}",
              "docs": "Channel statistics",
              "attributes": "#[derive(Debug, Default)]",
              "line": 15
            },
            {
              "name": "channel::ChannelMessage",
              "kind": "enum_item",
              "signature": "pub enum ChannelMessage {\n    Data {\n        message_id: MessageId,\n        data: Bytes,\n    },\n    Close,\n    /// Half-close this direction (no more sends)\n    HalfClose,\n    /// Abort the channel with an error string\n    Abort(String),\n    /// Grant receive credits to the remote side (bytes)\n    Credits(usize),\n}",
              "docs": "Channel message types",
              "attributes": "#[derive(Debug)]",
              "line": 24
            },
            {
              "name": "channel::Channel",
              "kind": "struct_item",
              "signature": "pub struct Channel {\n\n}",
              "docs": "A multiplexed channel",
              "attributes": "#[derive(Clone)]",
              "line": 70
            },
            {
              "name": "channel::Channel::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> ChannelId;",
              "docs": "Get channel ID",
              "attributes": "",
              "line": 102
            },
            {
              "name": "channel::Channel::protocol",
              "kind": "function_item",
              "signature": "pub fn protocol(&self) -> &Protocol;",
              "docs": "Get protocol reference",
              "attributes": "",
              "line": 107
            },
            {
              "name": "channel::Channel::is_ready",
              "kind": "function_item",
              "signature": "pub async fn is_ready(&self) -> Result<bool>;",
              "docs": "Check if channel is ready for communication",
              "attributes": "",
              "line": 112
            },
            {
              "name": "channel::Channel::send",
              "kind": "function_item",
              "signature": "pub async fn send(&self, message_id: MessageId, data: Bytes) -> Result<()>;",
              "docs": "Send a message on this channel",
              "attributes": "",
              "line": 121
            },
            {
              "name": "channel::Channel::on_bytes_consumed",
              "kind": "function_item",
              "signature": "pub fn on_bytes_consumed(&self, bytes: usize, cfg: &MuxConfig) -> Option<usize>;",
              "docs": "Replenish receive credits and surface a Credits frame through scheduler by emitting a ChannelMessage::Data with type Credits elsewhere (handled in mux)",
              "attributes": "",
              "line": 152
            },
            {
              "name": "channel::Channel::try_consume_send_credit",
              "kind": "function_item",
              "signature": "pub fn try_consume_send_credit(&self, bytes: usize, cfg: &MuxConfig) -> bool;",
              "docs": "Try to consume send credits; returns false if insufficient",
              "attributes": "",
              "line": 167
            },
            {
              "name": "channel::Channel::half_close",
              "kind": "function_item",
              "signature": "pub async fn half_close(&self) -> Result<()>;",
              "docs": "Half-close this channel (constructs the variant for scheduler handling)",
              "attributes": "",
              "line": 180
            },
            {
              "name": "channel::Channel::abort",
              "kind": "function_item",
              "signature": "pub async fn abort(&self, reason: impl Into<String>) -> Result<()>;",
              "docs": "Abort this channel with a reason (constructs the variant for scheduler handling)",
              "attributes": "",
              "line": 192
            },
            {
              "name": "channel::Channel::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&self) -> Result<(MessageId, Bytes)>;",
              "docs": "Receive is not wired in the minimal production pass; use ChannelHandle rx in mux for now",
              "attributes": "",
              "line": 206
            },
            {
              "name": "channel::Channel::close",
              "kind": "function_item",
              "signature": "pub async fn close(&self) -> Result<()>;",
              "docs": "Close the channel",
              "attributes": "",
              "line": 211
            },
            {
              "name": "channel::Channel::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> &ChannelStats;",
              "docs": "Get channel statistics",
              "attributes": "",
              "line": 228
            },
            {
              "name": "channel::ChannelHandle",
              "kind": "struct_item",
              "signature": "pub struct ChannelHandle {\n\n}",
              "docs": "Handle to a channel for external use",
              "attributes": "#[derive(Clone)]",
              "line": 247
            },
            {
              "name": "channel::ChannelHandle::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> ChannelId;",
              "docs": "Get channel ID",
              "attributes": "",
              "line": 258
            },
            {
              "name": "channel::ChannelHandle::send",
              "kind": "function_item",
              "signature": "pub async fn send(&self, message_id: MessageId, data: impl Into<Bytes>) -> Result<()>;",
              "docs": "Send a message",
              "attributes": "",
              "line": 263
            },
            {
              "name": "channel::ChannelHandle::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&self) -> Result<(MessageId, Bytes)>;",
              "docs": "Receive a message",
              "attributes": "",
              "line": 268
            },
            {
              "name": "channel::ChannelHandle::close",
              "kind": "function_item",
              "signature": "pub async fn close(&self) -> Result<()>;",
              "docs": "Close the channel",
              "attributes": "",
              "line": 273
            },
            {
              "name": "channel::ChannelHandle::is_ready",
              "kind": "function_item",
              "signature": "pub async fn is_ready(&self) -> Result<bool>;",
              "docs": "Check if channel is ready",
              "attributes": "",
              "line": 278
            },
            {
              "name": "channel::ChannelHandle::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> &ChannelStats;",
              "docs": "Get channel statistics",
              "attributes": "",
              "line": 283
            },
            {
              "name": "channel::ChannelHandle::protocol",
              "kind": "function_item",
              "signature": "pub fn protocol(&self) -> &Protocol;",
              "docs": "Get protocol reference",
              "attributes": "",
              "line": 288
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/libs/zer0-proto-mp/src/config.rs",
          "sha256": "d454f231e6a75521aee5b88dfbacf5c9ea1a8a66b554295c6dc3f16592bb696b",
          "attributes": "",
          "items": [
            {
              "name": "config::MuxConfig",
              "kind": "struct_item",
              "signature": "pub struct MuxConfig {\n/// Maximum number of channels\n\npub max_channels: usize,\n/// Maximum pending messages per channel\n\npub channel_buffer_size: usize,\n/// Maximum frame size\n\npub max_frame_size: usize,\n/// Send buffer size\n\npub send_buffer_size: usize,\n/// Receive buffer size  \n\npub recv_buffer_size: usize,\n/// Handshake timeout\n\npub handshake_timeout: Duration,\n/// Keep-alive interval (None to disable)\n\npub keep_alive: Option<Duration>,\n/// Enable message compression\n\npub compression: bool,\n/// Default channel weight for WFQ (1 = baseline)\n\npub default_channel_weight: u32,\n/// Base quantum in bytes used by WFQ (per weight unit)\n\npub wfq_base_quantum: usize,\n/// Per-channel credit window in bytes (initial and grant amount)\n\npub credits_window_bytes: usize,\n/// Threshold to trigger sending new credits (bytes remaining <= threshold)\n\npub credits_grant_threshold_bytes: usize\n}",
              "docs": "Multiplexer configuration",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 7
            },
            {
              "name": "config::MuxConfig::low_latency",
              "kind": "function_item",
              "signature": "pub fn low_latency() -> Self;",
              "docs": "Create a configuration for low-latency applications",
              "attributes": "",
              "line": 66
            },
            {
              "name": "config::MuxConfig::high_throughput",
              "kind": "function_item",
              "signature": "pub fn high_throughput() -> Self;",
              "docs": "Create a configuration for high-throughput applications",
              "attributes": "",
              "line": 77
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/libs/zer0-proto-mp/src/error.rs",
          "sha256": "4ed6be17c0ba1de6cbb89c6571b12161327909cd625152e07cbcc3890c1b5e31",
          "attributes": "",
          "items": [
            {
              "name": "error::WeaveMuxError",
              "kind": "enum_item",
              "signature": "pub enum WeaveMuxError {\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Channel {0} not found\")]\n    ChannelNotFound(u32),\n\n    #[error(\"Channel not ready for communication\")]\n    ChannelNotReady,\n\n    #[error(\"Channel closed\")]\n    ChannelClosed,\n\n    #[error(\"Maximum channels exceeded: {0}\")]\n    MaxChannelsExceeded(usize),\n\n    #[error(\"Frame too large: {size} bytes (max: {max})\")]\n    FrameTooLarge { size: usize, max: usize },\n\n    #[error(\"Invalid message type: {0}\")]\n    InvalidMessageType(u8),\n\n    #[error(\"Protocol mismatch: expected {expected}, got {actual}\")]\n    ProtocolMismatch { expected: String, actual: String },\n\n    #[error(\"Handshake failed: {0}\")]\n    HandshakeFailed(String),\n\n    #[error(\"Invalid frame format\")]\n    InvalidFrame,\n\n    #[error(\"Buffer overflow\")]\n    BufferOverflow,\n\n    #[error(\"Timeout\")]\n    Timeout,\n\n    #[error(\"Shutdown\")]\n    Shutdown,\n\n    #[error(\"Invalid message ID: {0}\")]\n    InvalidMessageId(u32),\n\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    #[error(\"Not implemented: {0}\")]\n    NotImplemented(&'static str),\n}",
              "docs": "Protocol multiplexing errors",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, WeaveMuxError>;",
              "docs": "Result type for multiplexer operations",
              "attributes": "",
              "line": 58
            }
          ],
          "parseErrors": false
        },
        {
          "module": "frame",
          "source": "sigil/weave/libs/zer0-proto-mp/src/frame.rs",
          "sha256": "bb6751071c6adc791ddb94d66cf5c667254bf242d220da69aa164811274ff495",
          "attributes": "",
          "items": [
            {
              "name": "frame::ChannelId",
              "kind": "struct_item",
              "signature": "pub struct ChannelId(pub u32);",
              "docs": "Channel ID type",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]",
              "line": 9
            },
            {
              "name": "frame::ChannelId::CONTROL",
              "kind": "const_item",
              "signature": "pub const CONTROL: Self;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "frame::MessageType",
              "kind": "enum_item",
              "signature": "pub enum MessageType {\n    Open = 0,\n    Close = 1,\n    Data = 2,\n    Handshake = 3,\n    Capabilities = 4,\n    KeepAlive = 5,\n    Credits = 6,\n    Abort = 7,\n    HalfClose = 8,\n}",
              "docs": "Message types in the protocol",
              "attributes": "#[repr(u8)]\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 18
            },
            {
              "name": "frame::Frame",
              "kind": "struct_item",
              "signature": "pub struct Frame {\npub channel: ChannelId,\npub message_type: MessageType,\npub payload: Bytes\n}",
              "docs": "Wire protocol frame",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 51
            },
            {
              "name": "frame::Frame::new",
              "kind": "function_item",
              "signature": "pub fn new(channel: ChannelId, message_type: MessageType, payload: Bytes) -> Self;",
              "docs": "Create a new frame",
              "attributes": "",
              "line": 59
            },
            {
              "name": "frame::Frame::data",
              "kind": "function_item",
              "signature": "pub fn data(channel: ChannelId, payload: Bytes) -> Self;",
              "docs": "Create a data frame",
              "attributes": "",
              "line": 68
            },
            {
              "name": "frame::Frame::close",
              "kind": "function_item",
              "signature": "pub fn close(channel: ChannelId) -> Self;",
              "docs": "Create a close frame",
              "attributes": "",
              "line": 73
            },
            {
              "name": "frame::Frame::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Bytes;",
              "docs": "Encode frame to bytes",
              "attributes": "",
              "line": 78
            },
            {
              "name": "frame::Frame::decode",
              "kind": "function_item",
              "signature": "pub fn decode(buf: &mut BytesMut) -> Result<Option<Self>>;",
              "docs": "Decode frame from bytes\nReturns None if more data is needed",
              "attributes": "",
              "line": 101
            },
            {
              "name": "frame::Frame::encoded_size",
              "kind": "function_item",
              "signature": "pub fn encoded_size(&self) -> usize;",
              "docs": "Get the encoded size of this frame",
              "attributes": "",
              "line": 141
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/weave/libs/zer0-proto-mp/src/metrics.rs",
          "sha256": "ea24e33624e64bca296f35fd4b15fde54f57c6d931ce428b993de7b90d43abcf",
          "attributes": "",
          "items": [
            {
              "name": "metrics::MuxMetrics",
              "kind": "struct_item",
              "signature": "pub struct MuxMetrics {\npub frames_in_total: AtomicU64,\npub frames_out_total: AtomicU64,\npub bytes_in_total: AtomicU64,\npub bytes_out_total: AtomicU64,\npub channels_opened_total: AtomicU64,\npub channels_closed_total: AtomicU64,\npub half_closes_total: AtomicU64,\npub aborts_total: AtomicU64,\npub credits_granted_total: AtomicU64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default)]",
              "line": 6
            },
            {
              "name": "metrics::MuxMetrics::export_prometheus_text",
              "kind": "function_item",
              "signature": "pub fn export_prometheus_text(&self, namespace: &str) -> String;",
              "docs": "",
              "attributes": "",
              "line": 19
            }
          ],
          "parseErrors": false
        },
        {
          "module": "mux",
          "source": "sigil/weave/libs/zer0-proto-mp/src/mux.rs",
          "sha256": "a938d09bf767b9620ff14b586f88af68d97ddf2bc47107544a905e41355227f2",
          "attributes": "",
          "items": [
            {
              "name": "mux::WeaveMux",
              "kind": "struct_item",
              "signature": "pub struct WeaveMux<S> {\n\n}",
              "docs": "Protocol multiplexer",
              "attributes": "",
              "line": 21
            },
            {
              "name": "mux::WeaveMux<S>::export_metrics_text",
              "kind": "function_item",
              "signature": "pub fn export_metrics_text(&self, namespace: &str) -> String;",
              "docs": "Export Prometheus-style metrics",
              "attributes": "",
              "line": 65
            },
            {
              "name": "mux::WeaveMux<S>::new",
              "kind": "function_item",
              "signature": "pub fn new(stream: S, config: MuxConfig) -> Self;",
              "docs": "Create a new protocol multiplexer",
              "attributes": "",
              "line": 69
            },
            {
              "name": "mux::WeaveMux<S>::open_channel",
              "kind": "function_item",
              "signature": "pub async fn open_channel(&self, protocol: Protocol) -> Result<ChannelHandle>;",
              "docs": "Open a new channel for a protocol",
              "attributes": "",
              "line": 114
            },
            {
              "name": "mux::WeaveMux<S>::accept_channel",
              "kind": "function_item",
              "signature": "pub async fn accept_channel(&self) -> Result<ChannelHandle>;",
              "docs": "Accept an incoming channel",
              "attributes": "",
              "line": 150
            },
            {
              "name": "mux::WeaveMux<S>::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&self) -> Result<()>;",
              "docs": "Shutdown the multiplexer",
              "attributes": "",
              "line": 156
            }
          ],
          "parseErrors": false
        },
        {
          "module": "protocol",
          "source": "sigil/weave/libs/zer0-proto-mp/src/protocol.rs",
          "sha256": "e18dbb11dccaf443e5a2d2fc6c777f9d6fad2a4f8d49234a73fd535e6f2e2c5e",
          "attributes": "",
          "items": [
            {
              "name": "protocol::Version",
              "kind": "struct_item",
              "signature": "pub struct Version {\npub major: u16,\npub minor: u16,\npub patch: u16\n}",
              "docs": "Protocol version",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 17
            },
            {
              "name": "protocol::Version::new",
              "kind": "function_item",
              "signature": "pub fn new(major: u16, minor: u16, patch: u16) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 24
            },
            {
              "name": "protocol::MessageId",
              "kind": "struct_item",
              "signature": "pub struct MessageId(pub u32);",
              "docs": "Message ID",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 41
            },
            {
              "name": "protocol::Encoding",
              "kind": "enum_item",
              "signature": "pub enum Encoding {\n    /// Raw binary data\n    Binary,\n    /// JSON encoding\n    Json,\n    /// Protocol Buffers\n    #[cfg(feature = \"protobuf\")]\n    Protobuf(String), // Type URL\n    /// Custom encoding\n    Custom(String),\n}",
              "docs": "Message encoding type",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 45
            },
            {
              "name": "protocol::MessageHandler",
              "kind": "type_item",
              "signature": "pub type MessageHandler = Arc<\n    dyn Fn(MessageId, Bytes) -> Pin<Box<dyn Future<Output = crate::Result<Option<Bytes>>> + Send>>\n        + Send\n        + Sync,\n>;",
              "docs": "Message handler function type",
              "attributes": "",
              "line": 58
            },
            {
              "name": "protocol::MessageSchema",
              "kind": "struct_item",
              "signature": "pub struct MessageSchema {\npub id: MessageId,\npub encoding: Encoding,\npub handler: Option<MessageHandler>\n}",
              "docs": "Message schema definition",
              "attributes": "#[derive(Clone)]",
              "line": 66
            },
            {
              "name": "protocol::HandshakeConfig",
              "kind": "struct_item",
              "signature": "pub struct HandshakeConfig {\npub timeout: std::time::Duration,\npub data: Box<HandshakeDataFn>,\npub verify: Box<HandshakeVerifyFn>\n}",
              "docs": "Handshake configuration",
              "attributes": "",
              "line": 83
            },
            {
              "name": "protocol::Protocol",
              "kind": "struct_item",
              "signature": "pub struct Protocol {\n/// Protocol name (e.g., \"zer0.echo.1\")\n\npub name: String,\n/// Protocol version\n\npub version: Version,\n/// Message definitions\n\npub messages: Vec<MessageSchema>,\npub handshake: Option<Arc<HandshakeConfig>>,\n/// Optional scheduling weight for WFQ (>=1)\n\npub weight: u32\n}",
              "docs": "Protocol definition",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 99
            },
            {
              "name": "protocol::Protocol::builder",
              "kind": "function_item",
              "signature": "pub fn builder() -> ProtocolBuilder;",
              "docs": "Create a new protocol builder",
              "attributes": "",
              "line": 113
            },
            {
              "name": "protocol::Protocol::find_message",
              "kind": "function_item",
              "signature": "pub fn find_message(&self, id: MessageId) -> Option<&MessageSchema>;",
              "docs": "Find a message schema by ID",
              "attributes": "",
              "line": 118
            },
            {
              "name": "protocol::ProtocolBuilder",
              "kind": "struct_item",
              "signature": "pub struct ProtocolBuilder {\n\n}",
              "docs": "Protocol builder for ergonomic protocol creation",
              "attributes": "",
              "line": 124
            },
            {
              "name": "protocol::ProtocolBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "protocol::ProtocolBuilder::name",
              "kind": "function_item",
              "signature": "pub fn name(mut self, name: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 143
            },
            {
              "name": "protocol::ProtocolBuilder::version",
              "kind": "function_item",
              "signature": "pub fn version(mut self, major: u16, minor: u16, patch: u16) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 148
            },
            {
              "name": "protocol::ProtocolBuilder::message",
              "kind": "function_item",
              "signature": "pub fn message(mut self, id: u32, encoding: Encoding) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 153
            },
            {
              "name": "protocol::ProtocolBuilder::message_with_handler",
              "kind": "function_item",
              "signature": "pub fn message_with_handler<F, Fut>(mut self, id: u32, encoding: Encoding, handler: F) -> Self\n    where\n        F: Fn(MessageId, Bytes) -> Fut + Send + Sync + 'static,\n        Fut: Future<Output = crate::Result<Option<Bytes>>> + Send + 'static,;",
              "docs": "",
              "attributes": "",
              "line": 162
            },
            {
              "name": "protocol::ProtocolBuilder::handshake",
              "kind": "function_item",
              "signature": "pub fn handshake(mut self, config: HandshakeConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 175
            },
            {
              "name": "protocol::ProtocolBuilder::weight",
              "kind": "function_item",
              "signature": "pub fn weight(mut self, weight: u32) -> Self;",
              "docs": "Set a scheduling weight for this protocol (>=1). Higher means more share.",
              "attributes": "",
              "line": 181
            },
            {
              "name": "protocol::ProtocolBuilder::build",
              "kind": "function_item",
              "signature": "pub fn build(self) -> Protocol;",
              "docs": "",
              "attributes": "",
              "line": 186
            }
          ],
          "parseErrors": false
        },
        {
          "module": "wire",
          "source": "sigil/weave/libs/zer0-proto-mp/src/wire.rs",
          "sha256": "cdb5e2152979bdb6196972ba13e39608de6ea8e9fcfee0ea36523fcc3aad70a3",
          "attributes": "",
          "items": [
            {
              "name": "wire::encode_varint",
              "kind": "function_item",
              "signature": "pub fn encode_varint(buf: &mut BytesMut, mut value: u64);",
              "docs": "Encode a variable-length integer",
              "attributes": "",
              "line": 7
            },
            {
              "name": "wire::decode_varint",
              "kind": "function_item",
              "signature": "pub fn decode_varint(buf: &BytesMut) -> Result<Option<(u64, usize)>>;",
              "docs": "Decode a variable-length integer\nReturns the value and number of bytes consumed, or None if more data needed",
              "attributes": "",
              "line": 17
            },
            {
              "name": "wire::varint_size",
              "kind": "function_item",
              "signature": "pub fn varint_size(mut value: u64) -> usize;",
              "docs": "Calculate varint encoded size",
              "attributes": "",
              "line": 43
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "l1fe-crypto",
      "version": "0.1.1",
      "source": "sigil/weave/l1feid/l1fe-crypto",
      "manifestSha256": "46ee9196a9bda6b7dcd6bd2b580dc02db04b748dbf8344e4ab1599d1a5453b45",
      "features": {},
      "publish": true,
      "url": "/reference/rust/l1fe-crypto",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/l1feid/l1fe-crypto/src/lib.rs",
          "sha256": "d9f03551590ff1b9e25923df0ea5e4690408845d0e0409891dcfb623c488dcf6",
          "attributes": "",
          "items": [
            {
              "name": "::CryptoError",
              "kind": "enum_item",
              "signature": "pub enum CryptoError {\n    #[error(\"Invalid key length: expected {expected}, got {actual}\")]\n    InvalidKeyLength { expected: usize, actual: usize },\n\n    #[error(\"Invalid signature\")]\n    InvalidSignature,\n\n    #[error(\"Decryption failed\")]\n    DecryptionFailed,\n\n    #[error(\"Invalid seed length: expected 32 bytes, got {actual}\")]\n    InvalidSeedLength { actual: usize },\n\n    #[error(\"Initialization failed\")]\n    InitializationFailed,\n\n    #[error(\"Invalid input data\")]\n    InvalidInput,\n\n    #[error(\"Hash operation failed\")]\n    HashFailed,\n}",
              "docs": "Errors that can occur during cryptographic operations",
              "attributes": "#[derive(Error, Debug)]",
              "line": 42
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, CryptoError>;",
              "docs": "Result type for crypto operations",
              "attributes": "",
              "line": 66
            },
            {
              "name": "::KeyPair",
              "kind": "struct_item",
              "signature": "pub struct KeyPair {\npub public_key: [u8; 32],\npub secret_key: [u8; 64]\n}",
              "docs": "A key pair for signing operations",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 70
            },
            {
              "name": "::EncryptionKeyPair",
              "kind": "struct_item",
              "signature": "pub struct EncryptionKeyPair {\npub public_key: [u8; 32],\npub secret_key: [u8; 32]\n}",
              "docs": "A key pair for encryption operations",
              "attributes": "#[derive(Clone)]",
              "line": 83
            },
            {
              "name": "::Node",
              "kind": "struct_item",
              "signature": "pub struct Node {\npub index: u64,\npub size: u64,\npub hash: [u8; 32]\n}",
              "docs": "Node structure for merkle tree operations",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 96
            },
            {
              "name": "::key_pair",
              "kind": "function_item",
              "signature": "pub fn key_pair(seed: Option<&[u8; 32]>) -> Result<KeyPair>;",
              "docs": "Generate a new Ed25519 key pair\n\n# Arguments\n* `seed` - Optional 32-byte seed for deterministic key generation\n\n# Returns\nA new `KeyPair` for signing operations\n\n# Errors\nReturns `CryptoError::InitializationFailed` if cryptographic initialization fails",
              "attributes": "",
              "line": 112
            },
            {
              "name": "::validate_key_pair",
              "kind": "function_item",
              "signature": "pub fn validate_key_pair(key_pair: &KeyPair) -> bool;",
              "docs": "Validate that a key pair's public key matches its secret key\n\n# Arguments\n* `key_pair` - The key pair to validate\n\n# Returns\n`true` if the keys match, `false` otherwise",
              "attributes": "",
              "line": 141
            },
            {
              "name": "::sign",
              "kind": "function_item",
              "signature": "pub fn sign(message: &[u8], secret_key: &[u8; 64]) -> [u8; 64];",
              "docs": "Sign a message with a secret key\n\n# Arguments\n* `message` - The message to sign\n* `secret_key` - The 64-byte secret key (32-byte seed + 32-byte public key)\n\n# Returns\nA 64-byte signature",
              "attributes": "",
              "line": 158
            },
            {
              "name": "::verify",
              "kind": "function_item",
              "signature": "pub fn verify(message: &[u8], signature: &[u8], public_key: &[u8; 32]) -> bool;",
              "docs": "Verify a signature\n\n# Arguments\n* `message` - The original message\n* `signature` - The signature to verify\n* `public_key` - The public key to verify against\n\n# Returns\n`true` if the signature is valid, `false` otherwise",
              "attributes": "",
              "line": 175
            },
            {
              "name": "::encryption_key_pair",
              "kind": "function_item",
              "signature": "pub fn encryption_key_pair(seed: Option<&[u8; 32]>) -> Result<EncryptionKeyPair>;",
              "docs": "Generate a key pair for sealed box encryption\n\n# Arguments\n* `seed` - Optional seed for deterministic generation\n\n# Returns\nAn `EncryptionKeyPair` for sealed box operations\n\n# Errors\nReturns `CryptoError::InitializationFailed` if cryptographic initialization fails",
              "attributes": "",
              "line": 205
            },
            {
              "name": "::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(message: &[u8], public_key: &[u8; 32]) -> Result<Vec<u8>>;",
              "docs": "Encrypt a message using sealed box encryption\n\n# Arguments\n* `message` - The message to encrypt\n* `public_key` - The recipient's public key\n\n# Returns\nThe encrypted ciphertext\n\n# Errors\nReturns `CryptoError::InitializationFailed` if cryptographic initialization fails",
              "attributes": "",
              "line": 231
            },
            {
              "name": "::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(ciphertext: &[u8], key_pair: &EncryptionKeyPair) -> Result<Vec<u8>>;",
              "docs": "Decrypt a sealed box\n\n# Arguments\n* `ciphertext` - The encrypted message\n* `key_pair` - The recipient's key pair\n\n# Returns\nThe decrypted message\n\n# Errors\nReturns `CryptoError::DecryptionFailed` if decryption fails\nReturns `CryptoError::InitializationFailed` if cryptographic initialization fails",
              "attributes": "",
              "line": 250
            },
            {
              "name": "::data",
              "kind": "function_item",
              "signature": "pub fn data(data: &[u8]) -> [u8; 32];",
              "docs": "Hash data for a leaf node\n\n# Arguments\n* `data` - The data to hash\n\n# Returns\nA 32-byte hash",
              "attributes": "",
              "line": 270
            },
            {
              "name": "::parent",
              "kind": "function_item",
              "signature": "pub fn parent(left: &Node, right: &Node) -> [u8; 32];",
              "docs": "Hash two nodes to create a parent node\n\n# Arguments\n* `left` - The left child node\n* `right` - The right child node\n\n# Returns\nA 32-byte hash for the parent",
              "attributes": "",
              "line": 289
            },
            {
              "name": "::tree",
              "kind": "function_item",
              "signature": "pub fn tree(roots: &[Node]) -> [u8; 32];",
              "docs": "Hash a set of root nodes\n\n# Arguments\n* `roots` - The root nodes to hash\n\n# Returns\nA 32-byte tree hash",
              "attributes": "",
              "line": 315
            },
            {
              "name": "::hash",
              "kind": "function_item",
              "signature": "pub fn hash(data: &[&[u8]]) -> [u8; 32];",
              "docs": "Generic hash function using Blake2b\n\n# Arguments\n* `data` - Slice of byte slices to hash together\n\n# Returns\nA 32-byte hash",
              "attributes": "",
              "line": 338
            },
            {
              "name": "::hash_into",
              "kind": "function_item",
              "signature": "pub fn hash_into(data: &[&[u8]], out: &mut [u8; 32]);",
              "docs": "Generic hash function with output buffer\n\n# Arguments\n* `data` - Slice of byte slices to hash together\n* `out` - Output buffer (must be 32 bytes)",
              "attributes": "",
              "line": 354
            },
            {
              "name": "::random_bytes",
              "kind": "function_item",
              "signature": "pub fn random_bytes(n: usize) -> Result<Vec<u8>>;",
              "docs": "Generate random bytes\n\n# Arguments\n* `n` - Number of bytes to generate\n\n# Returns\nA vector of random bytes\n\n# Errors\nReturns `CryptoError::InitializationFailed` if cryptographic initialization fails",
              "attributes": "",
              "line": 368
            },
            {
              "name": "::discovery_key",
              "kind": "function_item",
              "signature": "pub fn discovery_key(key: &[u8; 32]) -> [u8; 32];",
              "docs": "Generate a discovery key from a public key\n\n# Arguments\n* `key` - A 32-byte public key\n\n# Returns\nA 32-byte discovery key",
              "attributes": "",
              "line": 382
            },
            {
              "name": "::namespace",
              "kind": "function_item",
              "signature": "pub fn namespace(name: &str, count: impl NamespaceCount) -> Vec<[u8; 32]>;",
              "docs": "Generate namespaced keys\n\n# Arguments\n* `name` - The namespace name\n* `count` - Number of keys to generate (or specific indices)\n\n# Returns\nA vector of 32-byte keys",
              "attributes": "",
              "line": 400
            },
            {
              "name": "::free",
              "kind": "function_item",
              "signature": "pub fn free(_secure_buf: &[u8]);",
              "docs": "Free secure memory (no-op in Rust as memory is automatically freed)",
              "attributes": "",
              "line": 429
            },
            {
              "name": "::NamespaceCount",
              "kind": "trait_item",
              "signature": "pub trait NamespaceCount {\n    fn indices(&self) -> Vec<usize>;\n}",
              "docs": "Trait for namespace count parameter (can be a count or specific indices)",
              "attributes": "",
              "line": 435
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "l1fe-did",
      "version": "0.1.1",
      "source": "sigil/weave/l1feid/l1fe-did",
      "manifestSha256": "dcf3d30bd9b6b9d93ecfba73849c292630b57f47ff938b19df190aa3bce80cdf",
      "features": {
        "default": [],
        "hierarchical": [
          "ed25519-dalek",
          "hkdf",
          "blake2",
          "base64",
          "bs58"
        ]
      },
      "publish": true,
      "url": "/reference/rust/l1fe-did",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/l1feid/l1fe-did/src/lib.rs",
          "sha256": "08f4c7616e0db26f683ca5de58786c867fa32530f485722dc134bede65cacd76",
          "attributes": "",
          "items": [
            {
              "name": "::DidKind",
              "kind": "enum_item",
              "signature": "pub enum DidKind {\n    Zer0Plugin,\n    Zer0Service,\n    Aut0Tool,\n    Aut0Workflow,\n    AgentManifest,\n    AgentInstance,\n    HumanRoot,\n    MultiHumanRoot,\n    AutonomousOrganization,\n    Agent,\n    Tool,\n    Workflow,\n}",
              "docs": "All asset kinds recognised by L1fe.",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 59
            },
            {
              "name": "::Did",
              "kind": "struct_item",
              "signature": "pub struct Did {\npub kind: DidKind,\n/// Asset name or slug (always lower-kebab-case). Empty for AgentInstance.\n\npub name: Option<String>,\n/// Semantic version when the DID is versioned (plugins, services, tools, workflows, manifests)\n\npub version: Option<Version>,\n/// UUID portion for instance DIDs\n\npub uuid: Option<Uuid>,\n/// Method-specific ID for L1feOS DIDs\n\npub method_specific_id: String\n}",
              "docs": "Parsed DID representation",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 76
            },
            {
              "name": "::DidError",
              "kind": "enum_item",
              "signature": "pub enum DidError {\n    #[error(\"DID must start with 'did:' prefix\")]\n    MissingPrefix,\n    #[error(\"Unsupported DID namespace\")]\n    UnsupportedNamespace,\n    #[error(\"Malformed DID format\")]\n    Malformed,\n    #[error(\"Invalid semantic version: {0}\")]\n    InvalidSemver(String),\n    #[error(\"Invalid UUID: {0}\")]\n    InvalidUuid(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Error, PartialEq, Eq)]",
              "line": 89
            },
            {
              "name": "::Did::new_agent_instance",
              "kind": "function_item",
              "signature": "pub fn new_agent_instance() -> Self;",
              "docs": "Convenience helper to create a brand-new Agent Instance DID with a random UUID v4.",
              "attributes": "",
              "line": 175
            },
            {
              "name": "::Did::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> Result<[u8; 32], DidError>;",
              "docs": "",
              "attributes": "",
              "line": 186
            },
            {
              "name": "::Did::parse",
              "kind": "function_item",
              "signature": "pub fn parse(did_str: &str) -> Result<Self, DidError>;",
              "docs": "Parse a DID string",
              "attributes": "",
              "line": 197
            },
            {
              "name": "::Did::method_specific_id",
              "kind": "function_item",
              "signature": "pub fn method_specific_id(&self) -> &str;",
              "docs": "Get the method-specific identifier",
              "attributes": "",
              "line": 202
            },
            {
              "name": "::Did::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "Get the DID as a string",
              "attributes": "",
              "line": 207
            },
            {
              "name": "::DidDocument",
              "kind": "struct_item",
              "signature": "pub struct DidDocument {\n/// The DID this document describes\n\npub id: Did,\n/// Verification methods for the DID\n\npub verification_method: Vec<VerificationMethod>,\n/// Authentication methods\n\npub authentication: Vec<String>,\n/// Assertion methods\n\npub assertion_method: Option<Vec<String>>,\n/// Key agreement methods\n\npub key_agreement: Option<Vec<String>>,\n/// Capability invocation methods\n\npub capability_invocation: Option<Vec<String>>,\n/// Capability delegation methods\n\npub capability_delegation: Option<Vec<String>>,\n/// Controller of this DID\n\npub controller: Option<String>,\n/// Services associated with this DID\n\npub service: Option<Vec<Service>>,\n/// Alternative names for this DID\n\npub also_known_as: Option<Vec<String>>,\n/// Creation timestamp\n\npub created: Option<DateTime<Utc>>,\n/// Last update timestamp\n\npub updated: Option<DateTime<Utc>>\n}",
              "docs": "DID Document representation",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 214
            },
            {
              "name": "::DidDocument::controller",
              "kind": "function_item",
              "signature": "pub fn controller(&self) -> Option<&String>;",
              "docs": "Get the controller of this DID document",
              "attributes": "",
              "line": 268
            },
            {
              "name": "::VerificationMethod",
              "kind": "struct_item",
              "signature": "pub struct VerificationMethod {\n/// ID of the verification method\n\npub id: String,\n/// Controller of this verification method\n\npub controller: String,\n/// Type of the verification method\n\n#[serde(rename = \"type\")]\npub key_type: String,\n/// Public key in multibase format\n\npub public_key_multibase: Option<String>,\n/// Public key in JWK format\n\npub public_key_jwk: Option<serde_json::Value>,\n/// Derivation proof (L1FE-HDDID v1) - only present if this key was derived from a parent\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub proof: Option<DerivationProof2025>\n}",
              "docs": "Verification method for a DID",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 275
            },
            {
              "name": "::VerificationMethod::public_key_multibase",
              "kind": "function_item",
              "signature": "pub fn public_key_multibase(&self) -> Option<&String>;",
              "docs": "Get the public key multibase",
              "attributes": "",
              "line": 294
            },
            {
              "name": "::VerificationMethod::derivation_proof",
              "kind": "function_item",
              "signature": "pub fn derivation_proof(&self) -> Option<&DerivationProof2025>;",
              "docs": "Get the derivation proof if present",
              "attributes": "",
              "line": 299
            },
            {
              "name": "::Service",
              "kind": "struct_item",
              "signature": "pub struct Service {\n/// ID of the service\n\npub id: String,\n/// Type of the service\n\n#[serde(rename = \"type\")]\npub service_type: String,\n/// Service endpoint URL\n\npub service_endpoint: String\n}",
              "docs": "Service endpoint for a DID",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]",
              "line": 306
            },
            {
              "name": "::DerivationProof2025",
              "kind": "struct_item",
              "signature": "pub struct DerivationProof2025 {\n#[serde(rename = \"type\")]\npub proof_type: String,\npub parent_did: String,\npub child_did: String,\npub derivation_path: String,\npub algorithm: String,\npub public_key_multibase: String,\npub signature: String\n}",
              "docs": "DerivationProof2025 - Cryptographic proof that a child DID was derived from a parent DID\nImplements L1FE-HDDID v1 specification for verifiable hierarchical DID derivation\nSee docs/L1FE-HDDID-v1.md for full specification",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]",
              "line": 320
            },
            {
              "name": "::DerivationProof2025::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        parent_did: String,\n        child_did: String,\n        derivation_path: String,\n        public_key_multibase: String,\n        signature: String,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 332
            },
            {
              "name": "::DidDocument::add_derivation_proof",
              "kind": "function_item",
              "signature": "pub fn add_derivation_proof(\n        &mut self,\n        verification_method_id: &str,\n        proof: DerivationProof2025,\n    ) -> Result<(), DidError>;",
              "docs": "Add derivation proof to a verification method\nUpdates the verification method with the derivation proof per L1FE-HDDID v1 spec",
              "attributes": "",
              "line": 354
            },
            {
              "name": "::DidDocument::derivation_path",
              "kind": "function_item",
              "signature": "pub fn derivation_path(&self) -> Option<&str>;",
              "docs": "Get derivation path if this DID was derived from a parent\nReturns the derivation path from the first verification method with a proof",
              "attributes": "",
              "line": 370
            },
            {
              "name": "::DidDocument::parent_did",
              "kind": "function_item",
              "signature": "pub fn parent_did(&self) -> Option<&str>;",
              "docs": "Get the parent DID if this DID was derived from a parent",
              "attributes": "",
              "line": 377
            },
            {
              "name": "::DidDocument::derivation_proofs",
              "kind": "function_item",
              "signature": "pub fn derivation_proofs(&self) -> Vec<&DerivationProof2025>;",
              "docs": "Get all derivation proofs in this document",
              "attributes": "",
              "line": 384
            },
            {
              "name": "::DidDocument::is_derived",
              "kind": "function_item",
              "signature": "pub fn is_derived(&self) -> bool;",
              "docs": "Check if this DID was derived from a parent (has derivation proof)",
              "attributes": "",
              "line": 392
            },
            {
              "name": "hierarchical::derive_child_key",
              "kind": "function_item",
              "signature": "pub fn derive_child_key(\n        parent_key: &SigningKey,\n        derivation_path: &str,\n    ) -> Result<(SigningKey, String), DidError>;",
              "docs": "Derive a child key from a parent key using L1FE-HDDID v1 specification\nImplements Ed25519-HKDF-SHA256 with Blake2b salt as per L1FE-HDDID v1 spec\n\n# Algorithm (per L1FE-HDDID v1 \u00a74.1)\n```text\nIKM  = parent_private_key (32 bytes)\nsalt = blake2b(parent_public_key)\ninfo = UTF8Bytes(derivation_path)\nokm  = HKDF(SHA256, IKM, salt, info, L=32)\nchild_private_key = okm\nchild_public_key  = Ed25519(child_private_key)\n```\n\n# Arguments\n* `parent_key` - The parent signing key (e.g., HMR key for org, org key for agent)\n* `derivation_path` - Derivation path (must start with `/` and contain only `[a-z0-9\\-]`)\n\n# Returns\nA new child signing key and its corresponding `did:key` DID",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 593
            },
            {
              "name": "hierarchical::derive_did_from_public_key",
              "kind": "function_item",
              "signature": "pub fn derive_did_from_public_key(vk: &VerifyingKey) -> Result<String, DidError>;",
              "docs": "Derive a did:key from an Ed25519 public key (can be called client-side)",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 634
            },
            {
              "name": "hierarchical::create_derivation_proof",
              "kind": "function_item",
              "signature": "pub fn create_derivation_proof(\n        parent_key: &SigningKey,\n        parent_did: &str,\n        child_key: &SigningKey,\n        child_did: &str,\n        derivation_path: &str,\n    ) -> Result<DerivationProof2025, DidError>;",
              "docs": "Create a DerivationProof2025 for a child key (L1FE-HDDID v1 \u00a76)",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 646
            },
            {
              "name": "hierarchical::verify_derivation_proof",
              "kind": "function_item",
              "signature": "pub fn verify_derivation_proof(\n        parent_public_key: &VerifyingKey,\n        child_public_key: &VerifyingKey,\n        proof: &DerivationProof2025,\n    ) -> Result<bool, DidError>;",
              "docs": "Verify a DerivationProof2025 (L1FE-HDDID v1 \u00a76.3 - Reverse Derivation)\nThis allows verification of derivation relationships using only public keys and the proof.\n\n# Verification Steps (per spec \u00a76.3)\n1. Verify Ed25519 signature using parent public key\n2. Verify child public key matches the proof's declared public key\n3. (Optional) Re-derive child key from parent to verify derivation (requires parent private key)\n\n# Returns\n`Ok(true)` if signature and public key match are valid, `Ok(false)` otherwise",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 693
            },
            {
              "name": "hierarchical::verify_derivation_with_parent_key",
              "kind": "function_item",
              "signature": "pub fn verify_derivation_with_parent_key(\n        parent_key: &SigningKey,\n        child_public_key: &VerifyingKey,\n        derivation_path: &str,\n    ) -> Result<bool, DidError>;",
              "docs": "Verify derivation using parent private key (full cryptographic verification)\nThis confirms both the signature AND that the child key was actually derived from the parent\n\n# Returns\n`Ok(true)` if child key was derived from parent using the given path",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 751
            },
            {
              "name": "hierarchical::verify_derivation_chain_documents",
              "kind": "function_item",
              "signature": "pub fn verify_derivation_chain_documents(documents: &[DidDocument]) -> Result<bool, DidError>;",
              "docs": "Verify a complete derivation chain (HMR \u2192 AO \u2192 Agent)\nThis recursively verifies all proofs in a hierarchy\n\n# Arguments\n* `documents` - Vector of DID Documents in derivation order (root first)\n\n# Returns\n`Ok(true)` if all proofs are valid, `Ok(false)` if any proof is invalid\n\n# Example\n```ignore\n# #[cfg(feature = \"hierarchical\")]\n# {\nuse l1fe_did::{DidDocument, Did, DidKind};\nuse ed25519_dalek::SigningKey;\n\n// Build a derivation chain\nlet root_key = SigningKey::from_bytes(&[0u8; 32]);\nlet root_did = Did::from_str(\"did:l1fe:hmr:user-123\")?;\nlet derivations = vec![\n    (\"/org-acme\".to_string(), DidKind::AutonomousOrganization),\n];\nlet chain = DidDocument::build_derivation_chain(root_did, &root_key, derivations)?;\n\n// Extract documents\nlet documents: Vec<DidDocument> = chain.into_iter().map(|(_, doc)| doc).collect();\n\n// Verify the chain\nassert!(hierarchical::verify_derivation_chain_documents(&documents)?);\n# }\n```\n\n# Note\nThis is a simplified version that assumes all documents are provided.\nIn production, you'd fetch parent documents from a resolver.",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 799
            },
            {
              "name": "pub use hierarchical::*;",
              "kind": "use_declaration",
              "signature": "pub use hierarchical::*;",
              "docs": "",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 866
            },
            {
              "name": "::DidDocument::create_derived_document",
              "kind": "function_item",
              "signature": "pub fn create_derived_document(\n        child_did: Did,\n        child_public_key: VerifyingKey,\n        parent_did: &str,\n        _derivation_path: &str,\n        proof: DerivationProof2025,\n    ) -> Result<Self, DidError>;",
              "docs": "Create a DID Document for a derived child DID (L1FE-HDDID v1 \u00a77)\nThis creates a complete DID Document with derivation proof embedded in the verification method\n\n# Arguments\n* `child_did` - The child DID (e.g., `did:l1fe:ao:org-456def`)\n* `child_public_key` - The child's public key\n* `parent_did` - The parent DID (e.g., `did:l1fe:hmr:user-abc123`)\n* `derivation_path` - The derivation path used (e.g., `/org-456def`)\n* `proof` - The DerivationProof2025 proving the derivation\n\n# Returns\nA complete DID Document ready for publication to DHT\n\n# Example\n```ignore\nuse l1fe_did::{DidDocument, DerivationProof2025};\nuse ed25519_dalek::VerifyingKey;\n\nlet child_did = Did::from_str(\"did:l1fe:ao:org-456def\")?;\nlet parent_did = \"did:l1fe:hmr:user-abc123\";\nlet proof = create_derivation_proof(...)?;\n\nlet doc = DidDocument::create_derived_document(\n    child_did,\n    child_vk,\n    parent_did,\n    \"/org-456def\",\n    proof\n)?;\n```",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 904
            },
            {
              "name": "::DidDocument::create_root_document",
              "kind": "function_item",
              "signature": "pub fn create_root_document(did: Did, public_key: VerifyingKey) -> Result<Self, DidError>;",
              "docs": "Create a root DID Document (for HMR/MHR - no parent)\nThis creates a DID Document for a root key that is not derived from any parent\n\n# Arguments\n* `did` - The root DID\n* `public_key` - The root public key\n\n# Returns\nA complete DID Document for the root DID",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 954
            },
            {
              "name": "::DidDocument::verify_derivation_chain",
              "kind": "function_item",
              "signature": "pub fn verify_derivation_chain(&self) -> Result<bool, DidError>;",
              "docs": "Verify the derivation chain for this DID Document\nRecursively verifies all derivation proofs up to the root\n\n# Returns\n`Ok(true)` if all proofs in the chain are valid, `Ok(false)` if any proof is invalid\n\n# Note\nThis requires access to parent DID Documents. In a full implementation,\nthis would fetch parent documents from a resolver.",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 999
            },
            {
              "name": "::DidDocument::verify_derivation_chain_documents",
              "kind": "function_item",
              "signature": "pub fn verify_derivation_chain_documents(documents: &[DidDocument]) -> Result<bool, DidError>;",
              "docs": "Verify a complete derivation chain (HMR \u2192 AO \u2192 Agent)\nThis recursively verifies all proofs in a hierarchy\n\n# Arguments\n* `documents` - Vector of DID Documents in derivation order (root first)\n\n# Returns\n`Ok(true)` if all proofs are valid, `Ok(false)` if any proof is invalid\n\n# Example\n```ignore\n# #[cfg(feature = \"hierarchical\")]\n# {\nuse l1fe_did::{DidDocument, Did, DidKind};\nuse ed25519_dalek::SigningKey;\n\n// Build a derivation chain\nlet root_key = SigningKey::from_bytes(&[0u8; 32]);\nlet root_did = Did::from_str(\"did:l1fe:hmr:user-123\")?;\nlet derivations = vec![\n    (\"/org-acme\".to_string(), DidKind::AutonomousOrganization),\n];\nlet chain = DidDocument::build_derivation_chain(root_did, &root_key, derivations)?;\n\n// Extract documents\nlet documents: Vec<DidDocument> = chain.into_iter().map(|(_, doc)| doc).collect();\n\n// Verify the chain\nassert!(DidDocument::verify_derivation_chain_documents(&documents)?);\n# }\n```\n\n# Note\nThis is a simplified version that assumes all documents are provided.\nIn production, you'd fetch parent documents from a resolver.",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 1056
            },
            {
              "name": "::DidDocument::build_derivation_chain",
              "kind": "function_item",
              "signature": "pub fn build_derivation_chain(\n        root_did: Did,\n        root_key: &SigningKey,\n        derivations: Vec<(String, DidKind)>,\n    ) -> Result<Vec<(Did, DidDocument)>, DidError>;",
              "docs": "Build a complete derivation chain from a root DID\nThis is a helper for creating the full hierarchy: HMR \u2192 AO \u2192 Agent\n\n# Arguments\n* `root_did` - The root DID (HMR)\n* `root_key` - The root signing key\n* `derivations` - Vector of (path, child_did_type) tuples\n\n# Returns\nVector of (DID, DidDocument) pairs for each level in the hierarchy\n\n# Example\n```ignore\nlet derivations = vec![\n    (\"/org-acme\".to_string(), DidKind::AutonomousOrganization),\n    (\"/agent-analyst\".to_string(), DidKind::Agent),\n];\nlet chain = DidDocument::build_derivation_chain(root_did, root_key, derivations)?;\n```",
              "attributes": "#[cfg(feature = \"hierarchical\")]",
              "line": 1126
            }
          ],
          "parseErrors": false,
          "reviewNote": "Derivation proofs sign the child public key and derivation path; parent and child DID strings remain separate metadata outside that signed payload. Callers supply verifying keys and trust-root policy. See /libraries/l1fe-did/internals."
        }
      ]
    },
    {
      "name": "weave-identity-ed25519",
      "version": "0.1.0",
      "source": "sigil/weave/adapters/ed25519",
      "manifestSha256": "aa6cb109fa918a1483b557d2d0b30c02e70382ef63cfc875603da086387a4389",
      "features": {},
      "publish": true,
      "url": "/reference/rust/weave-identity-ed25519",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/adapters/ed25519/src/lib.rs",
          "sha256": "22d9bc8b0008d09600ec19bfbea990843d1acd7dddaabe5f24bb447f2de31c7c",
          "attributes": "",
          "items": [
            {
              "name": "::DidParser",
              "kind": "type_item",
              "signature": "pub type DidParser = Box<dyn Fn(&str) -> std::result::Result<String, String> + Send + Sync>;",
              "docs": "Function type for parsing DIDs from strings",
              "attributes": "",
              "line": 23
            },
            {
              "name": "::DidFormatter",
              "kind": "type_item",
              "signature": "pub type DidFormatter = Box<dyn Fn(&str) -> String + Send + Sync>;",
              "docs": "Function type for converting DIDs to strings",
              "attributes": "",
              "line": 26
            },
            {
              "name": "::PermissionChecker",
              "kind": "type_item",
              "signature": "pub type PermissionChecker = Box<dyn Fn(&str, &str, &str) -> bool + Send + Sync>;",
              "docs": "Function type for permission checking",
              "attributes": "",
              "line": 29
            },
            {
              "name": "::Ed25519IdentityMetadata",
              "kind": "struct_item",
              "signature": "pub struct Ed25519IdentityMetadata {\n/// The DID or identifier string\n\npub did: String,\n/// Ed25519 public key bytes\n\npub public_key: Vec<u8>,\n/// Optional parent/controller DID\n\npub controller: Option<String>,\n/// Additional metadata\n\npub metadata: serde_json::Value\n}",
              "docs": "Metadata for an Ed25519 identity",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 35
            },
            {
              "name": "::Ed25519AdapterConfig",
              "kind": "struct_item",
              "signature": "pub struct Ed25519AdapterConfig {\n/// Optional DID parser function\n\npub did_parser: Option<DidParser>,\n/// Optional DID formatter function\n\npub did_formatter: Option<DidFormatter>\n}",
              "docs": "Configuration for the Ed25519 adapter",
              "attributes": "#[derive(Default)]",
              "line": 48
            },
            {
              "name": "::Ed25519Adapter",
              "kind": "struct_item",
              "signature": "pub struct Ed25519Adapter {\n\n}",
              "docs": "Generic Ed25519-based identity adapter",
              "attributes": "",
              "line": 56
            },
            {
              "name": "::Ed25519Adapter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new Ed25519 adapter with default configuration",
              "attributes": "",
              "line": 69
            },
            {
              "name": "::Ed25519Adapter::with_config",
              "kind": "function_item",
              "signature": "pub fn with_config(config: Ed25519AdapterConfig) -> Self;",
              "docs": "Create a new Ed25519 adapter with custom configuration",
              "attributes": "",
              "line": 74
            },
            {
              "name": "::Ed25519Adapter::store_identity",
              "kind": "function_item",
              "signature": "pub async fn store_identity(\n        &self,\n        did: String,\n        public_key: Vec<u8>,\n        controller: Option<String>,\n        metadata: serde_json::Value,\n    ) -> Result<Identity>;",
              "docs": "Store an identity with its Ed25519 public key",
              "attributes": "",
              "line": 100
            },
            {
              "name": "::Ed25519Adapter::store_keypair",
              "kind": "function_item",
              "signature": "pub async fn store_keypair(\n        &self,\n        signing_key: SigningKey,\n        identity_id: String,\n    ) -> Result<KeyPair>;",
              "docs": "Store a keypair with its associated identity",
              "attributes": "",
              "line": 134
            },
            {
              "name": "::Ed25519AdapterBuilder",
              "kind": "struct_item",
              "signature": "pub struct Ed25519AdapterBuilder {\n\n}",
              "docs": "Builder for creating Ed25519 adapters with custom configurations",
              "attributes": "",
              "line": 372
            },
            {
              "name": "::Ed25519AdapterBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new builder",
              "attributes": "",
              "line": 378
            },
            {
              "name": "::Ed25519AdapterBuilder::with_did_parser",
              "kind": "function_item",
              "signature": "pub fn with_did_parser<F>(mut self, parser: F) -> Self\n    where\n        F: Fn(&str) -> std::result::Result<String, String> + Send + Sync + 'static,;",
              "docs": "Set a custom DID parser",
              "attributes": "",
              "line": 385
            },
            {
              "name": "::Ed25519AdapterBuilder::with_did_formatter",
              "kind": "function_item",
              "signature": "pub fn with_did_formatter<F>(mut self, formatter: F) -> Self\n    where\n        F: Fn(&str) -> String + Send + Sync + 'static,;",
              "docs": "Set a custom DID formatter",
              "attributes": "",
              "line": 394
            },
            {
              "name": "::Ed25519AdapterBuilder::build",
              "kind": "function_item",
              "signature": "pub fn build(self) -> Ed25519Adapter;",
              "docs": "Build the adapter",
              "attributes": "",
              "line": 403
            }
          ],
          "parseErrors": false
        }
      ]
    },
    {
      "name": "weave-identity",
      "version": "0.1.0",
      "source": "sigil/weave/adapters/weave-identity",
      "manifestSha256": "d9a9b0256a337fd4e29165216cb1a09db0ff7c5bf2368bc102398c52b336db41",
      "features": {
        "default": [
          "serde"
        ],
        "serde": []
      },
      "publish": true,
      "url": "/reference/rust/weave-identity",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/adapters/weave-identity/src/lib.rs",
          "sha256": "d2a94a912a947ebe7ffa44d3764bdde26267da1f33f6efc8ec7249a3270d9899",
          "attributes": "",
          "items": [
            {
              "name": "pub use adapter::WeaveIdentityAdapter;",
              "kind": "use_declaration",
              "signature": "pub use adapter::WeaveIdentityAdapter;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "pub use error::{IdentityError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{IdentityError, Result};",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "pub use identity::{Identity, IdentityType};",
              "kind": "use_declaration",
              "signature": "pub use identity::{Identity, IdentityType};",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "pub use keypair::{KeyPair, PublicKey};",
              "kind": "use_declaration",
              "signature": "pub use keypair::{KeyPair, PublicKey};",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "pub use resolver::{IdentityDocument, IdentityResolver, VerificationMethod};",
              "kind": "use_declaration",
              "signature": "pub use resolver::{IdentityDocument, IdentityResolver, VerificationMethod};",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "pub use signature::Signature;",
              "kind": "use_declaration",
              "signature": "pub use signature::Signature;",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "pub use ed25519_adapter::{DelegationCertificate, Ed25519Adapter};",
              "kind": "use_declaration",
              "signature": "pub use ed25519_adapter::{DelegationCertificate, Ed25519Adapter};",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "::IdentityResult",
              "kind": "type_item",
              "signature": "pub type IdentityResult<T> = std::result::Result<T, IdentityError>;",
              "docs": "Standard result type for identity operations",
              "attributes": "",
              "line": 75
            }
          ],
          "parseErrors": false
        },
        {
          "module": "adapter",
          "source": "sigil/weave/adapters/weave-identity/src/adapter.rs",
          "sha256": "c51b951df4b2c4cda6c48021f7b2e445c1be465df8ffa333971f4096eb8188ae",
          "attributes": "",
          "items": [
            {
              "name": "adapter::WeaveIdentityAdapter",
              "kind": "trait_item",
              "signature": "pub trait WeaveIdentityAdapter: Send + Sync {\n    /// Generate a new keypair for the specified identity type\n    async fn generate_keypair(&self, identity_type: IdentityType) -> Result<KeyPair>;\n\n    /// Derive an identity from a keypair, with optional contextual name\n    async fn derive_identity(\n        &self,\n        keypair: &KeyPair,\n        identity_type: IdentityType,\n        name: Option<&str>,\n    ) -> Result<Identity>;\n\n    /// Sign data with a keypair\n    async fn sign(&self, keypair: &KeyPair, data: &[u8]) -> Result<Signature>;\n\n    /// Verify a signature against an identity\n    async fn verify(&self, identity: &Identity, data: &[u8], signature: &Signature)\n        -> Result<bool>;\n\n    /// Create a new identity with keypair (convenience method)\n    async fn create_identity(\n        &self,\n        identity_type: IdentityType,\n        name: Option<&str>,\n    ) -> Result<(KeyPair, Identity)> ;\n\n    /// Parse an identity from string representation\n    async fn parse_identity(&self, identity_str: &str) -> Result<Identity>;\n\n    /// Get the public key from an identity\n    async fn get_public_key(&self, identity: &Identity) -> Result<Vec<u8>>;\n\n    /// Create an agent identity\n    async fn create_agent_identity(\n        &self,\n        instance_id: Option<&str>,\n    ) -> Result<(KeyPair, Identity)> ;\n\n    /// Create an autonomous organization identity\n    async fn create_ao_identity(&self, org_name: &str) -> Result<(KeyPair, Identity)> ;\n\n    /// Create a human identity\n    async fn create_human_identity(&self) -> Result<(KeyPair, Identity)> ;\n\n    /// Validate identity format and cryptographic integrity\n    async fn validate_identity(&self, identity: &Identity) -> Result<bool>;\n\n    /// Get identity type from a DID string\n    fn get_identity_type(&self, did: &str) -> Result<IdentityType>;\n\n    /// Verify that one identity is controlled by another (e.g., agent by org)\n    async fn verify_control(&self, controlled: &Identity, controller: &Identity) -> Result<bool>;\n}",
              "docs": "Core trait for pluggable identity operations\n\nThis trait abstracts all identity operations to support multiple\nidentity systems (DID, PKI, custom) without coupling libraries\nto specific implementations.",
              "attributes": "#[async_trait]",
              "line": 12
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/adapters/weave-identity/src/error.rs",
          "sha256": "6de6d453bfe7885cfc7ba3df4f2c4d735f5a94e8814cf8368356e4143058509f",
          "attributes": "",
          "items": [
            {
              "name": "error::IdentityError",
              "kind": "enum_item",
              "signature": "pub enum IdentityError {\n    /// Invalid DID format\n    #[error(\"Invalid DID format: {0}\")]\n    InvalidDid(String),\n\n    /// Invalid key format or data\n    #[error(\"Invalid key: {0}\")]\n    InvalidKey(String),\n\n    /// Invalid signature format or data\n    #[error(\"Invalid signature: {0}\")]\n    InvalidSignature(String),\n\n    /// Cryptographic operation failed\n    #[error(\"Cryptographic operation failed: {0}\")]\n    CryptographicError(String),\n\n    /// Identity type mismatch\n    #[error(\"Identity type mismatch: expected {expected}, got {actual}\")]\n    TypeMismatch { expected: String, actual: String },\n\n    /// Missing required field\n    #[error(\"Missing required field: {0}\")]\n    MissingField(String),\n\n    /// Serialization/deserialization error\n    #[error(\"Serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    /// I/O error\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// System error\n    #[error(\"System error: {0}\")]\n    SystemError(String),\n\n    /// Key generation failed\n    #[error(\"Key generation failed: {0}\")]\n    KeyGeneration(String),\n\n    /// Verification failed\n    #[error(\"Verification failed: {0}\")]\n    VerificationFailed(String),\n\n    /// Unsupported operation\n    #[error(\"Unsupported operation: {0}\")]\n    UnsupportedOperation(String),\n\n    #[error(\"Invalid identity type: {0}\")]\n    InvalidIdentityType(String),\n\n    /// Key not found\n    #[error(\"Key not found: {0}\")]\n    KeyNotFound(String),\n\n    /// Identity not found\n    #[error(\"Identity not found: {0}\")]\n    NotFound(String),\n\n    /// Parse error\n    #[error(\"Parse error: {0}\")]\n    ParseError(String),\n}",
              "docs": "Errors that can occur during identity operations",
              "attributes": "#[derive(Debug, Error)]",
              "line": 7
            },
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, IdentityError>;",
              "docs": "Standard result type for identity operations",
              "attributes": "",
              "line": 73
            }
          ],
          "parseErrors": false
        },
        {
          "module": "identity",
          "source": "sigil/weave/adapters/weave-identity/src/identity.rs",
          "sha256": "c973a80e336db83a0d2f60cd148483b923b5e08350880f38f990737234416e8a",
          "attributes": "",
          "items": [
            {
              "name": "identity::IdentityType",
              "kind": "enum_item",
              "signature": "pub enum IdentityType {\n    /// Human-controlled identity\n    Human,\n    /// Agent-controlled identity (e.g. bot, service)\n    Agent,\n    /// Autonomous Organization identity\n    AutonomousOrganization,\n}",
              "docs": "The type of a Weave identity",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 9
            },
            {
              "name": "identity::IdentityType::from_str_name",
              "kind": "function_item",
              "signature": "pub fn from_str_name(s: &str) -> Result<Self>;",
              "docs": "Create from a string name",
              "attributes": "",
              "line": 20
            },
            {
              "name": "identity::IdentityType::to_string",
              "kind": "function_item",
              "signature": "pub fn to_string(&self) -> &'static str;",
              "docs": "Convert to string",
              "attributes": "",
              "line": 30
            },
            {
              "name": "identity::IdentityType::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &'static str;",
              "docs": "Convert to string (alias for compatibility)",
              "attributes": "",
              "line": 39
            },
            {
              "name": "identity::Identity",
              "kind": "struct_item",
              "signature": "pub struct Identity {\n\n}",
              "docs": "Represents a Weave identity",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 54
            },
            {
              "name": "identity::Identity::new",
              "kind": "function_item",
              "signature": "pub fn new(id: String, identity_type: IdentityType, public_key: Vec<u8>) -> Self;",
              "docs": "Create a new identity",
              "attributes": "",
              "line": 65
            },
            {
              "name": "identity::Identity::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> &str;",
              "docs": "Get the identity string",
              "attributes": "",
              "line": 74
            },
            {
              "name": "identity::Identity::identity_type",
              "kind": "function_item",
              "signature": "pub fn identity_type(&self) -> IdentityType;",
              "docs": "Get the identity type",
              "attributes": "",
              "line": 79
            },
            {
              "name": "identity::Identity::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> &[u8];",
              "docs": "Get the public key bytes",
              "attributes": "",
              "line": 84
            },
            {
              "name": "identity::Identity::agent_from_public_key",
              "kind": "function_item",
              "signature": "pub fn agent_from_public_key(public_key: Vec<u8>, instance_id: Option<&str>) -> Result<Self>;",
              "docs": "Create an agent identity from public key",
              "attributes": "",
              "line": 89
            },
            {
              "name": "identity::Identity::ao_from_public_key",
              "kind": "function_item",
              "signature": "pub fn ao_from_public_key(public_key: Vec<u8>, org_name: &str) -> Result<Self>;",
              "docs": "Create an AO identity from public key",
              "attributes": "",
              "line": 95
            },
            {
              "name": "identity::Identity::human_from_public_key",
              "kind": "function_item",
              "signature": "pub fn human_from_public_key(public_key: Vec<u8>) -> Result<Self>;",
              "docs": "Create a human identity from public key",
              "attributes": "",
              "line": 105
            },
            {
              "name": "identity::Identity::from_did",
              "kind": "function_item",
              "signature": "pub fn from_did(did: &str) -> Result<Self>;",
              "docs": "Parse a DID string into an identity.\nAccepts both `did:oas:l1fe:<kind>:<id>` and `did:l1fe:<kind>:<id>` formats.",
              "attributes": "",
              "line": 112
            },
            {
              "name": "identity::Identity::validate_did",
              "kind": "function_item",
              "signature": "pub fn validate_did(did: &str) -> Result<bool>;",
              "docs": "Validate DID format \u2014 accepts both `did:oas:l1fe:*` and `did:l1fe:*` formats.",
              "attributes": "",
              "line": 138
            },
            {
              "name": "identity::Identity::is_agent",
              "kind": "function_item",
              "signature": "pub fn is_agent(&self) -> bool;",
              "docs": "Check if this identity is an agent",
              "attributes": "",
              "line": 184
            },
            {
              "name": "identity::Identity::is_ao",
              "kind": "function_item",
              "signature": "pub fn is_ao(&self) -> bool;",
              "docs": "Check if this identity is an AO",
              "attributes": "",
              "line": 189
            },
            {
              "name": "identity::Identity::is_human",
              "kind": "function_item",
              "signature": "pub fn is_human(&self) -> bool;",
              "docs": "Check if this identity is a human",
              "attributes": "",
              "line": 194
            }
          ],
          "parseErrors": false
        },
        {
          "module": "keypair",
          "source": "sigil/weave/adapters/weave-identity/src/keypair.rs",
          "sha256": "6009c92e6044ef862d8bbef8da31628426b1406fdc171365d8882368e32104c0",
          "attributes": "",
          "items": [
            {
              "name": "keypair::PublicKey",
              "kind": "struct_item",
              "signature": "pub struct PublicKey {\n\n}",
              "docs": "Ed25519 public key",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 8
            },
            {
              "name": "keypair::PublicKey::new",
              "kind": "function_item",
              "signature": "pub fn new(bytes: Vec<u8>) -> Self;",
              "docs": "Create a new public key from bytes",
              "attributes": "",
              "line": 21
            },
            {
              "name": "keypair::PublicKey::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "Get the raw bytes",
              "attributes": "",
              "line": 26
            },
            {
              "name": "keypair::PublicKey::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> Vec<u8>;",
              "docs": "Get the raw bytes as a vector",
              "attributes": "",
              "line": 31
            },
            {
              "name": "keypair::PublicKey::from_verifying_key",
              "kind": "function_item",
              "signature": "pub fn from_verifying_key(key: &VerifyingKey) -> Self;",
              "docs": "Create from Ed25519 verifying key",
              "attributes": "",
              "line": 36
            },
            {
              "name": "keypair::PublicKey::to_verifying_key",
              "kind": "function_item",
              "signature": "pub fn to_verifying_key(&self) -> Result<VerifyingKey>;",
              "docs": "Convert to Ed25519 verifying key",
              "attributes": "",
              "line": 41
            },
            {
              "name": "keypair::KeyPair",
              "kind": "struct_item",
              "signature": "pub struct KeyPair {\n\n}",
              "docs": "Cryptographic keypair for identity operations",
              "attributes": "#[derive(Serialize, Deserialize, Zeroize, ZeroizeOnDrop)]",
              "line": 58
            },
            {
              "name": "keypair::KeyPair::new",
              "kind": "function_item",
              "signature": "pub fn new(id: String, public_key: PublicKey, private_key: Vec<u8>) -> Self;",
              "docs": "Create a new keypair",
              "attributes": "",
              "line": 69
            },
            {
              "name": "keypair::KeyPair::generate",
              "kind": "function_item",
              "signature": "pub fn generate() -> Result<Self>;",
              "docs": "Generate a new Ed25519 keypair",
              "attributes": "",
              "line": 78
            },
            {
              "name": "keypair::KeyPair::from_signing_key",
              "kind": "function_item",
              "signature": "pub fn from_signing_key(signing_key: &SigningKey) -> Self;",
              "docs": "Create from Ed25519 signing key",
              "attributes": "",
              "line": 92
            },
            {
              "name": "keypair::KeyPair::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(private_key_bytes: &[u8]) -> Result<Self>;",
              "docs": "Create from raw key bytes",
              "attributes": "",
              "line": 102
            },
            {
              "name": "keypair::KeyPair::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> &str;",
              "docs": "Get the keypair ID",
              "attributes": "",
              "line": 117
            },
            {
              "name": "keypair::KeyPair::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> &PublicKey;",
              "docs": "Get the public key",
              "attributes": "",
              "line": 122
            },
            {
              "name": "keypair::KeyPair::private_key_bytes",
              "kind": "function_item",
              "signature": "pub fn private_key_bytes(&self) -> &[u8];",
              "docs": "Get private key bytes (use with caution)",
              "attributes": "",
              "line": 127
            },
            {
              "name": "keypair::KeyPair::to_signing_key",
              "kind": "function_item",
              "signature": "pub fn to_signing_key(&self) -> Result<SigningKey>;",
              "docs": "Convert to Ed25519 signing key",
              "attributes": "",
              "line": 132
            },
            {
              "name": "keypair::KeyPair::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, data: &[u8]) -> Result<ed25519_dalek::Signature>;",
              "docs": "Sign data with this keypair",
              "attributes": "",
              "line": 146
            },
            {
              "name": "keypair::KeyPair::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, data: &[u8], signature: &ed25519_dalek::Signature) -> Result<bool>;",
              "docs": "Verify signature with this keypair's public key",
              "attributes": "",
              "line": 152
            }
          ],
          "parseErrors": false
        },
        {
          "module": "resolver",
          "source": "sigil/weave/adapters/weave-identity/src/resolver.rs",
          "sha256": "89935bf2a2a36a23063884013d25aaf2014f0347c0375f1f4df0eb9a2d4a4c3e",
          "attributes": "",
          "items": [
            {
              "name": "resolver::IdentityDocument",
              "kind": "struct_item",
              "signature": "pub struct IdentityDocument {\n/// The identity this document describes\n\npub identity: Identity,\n/// Verification methods available for this identity\n\npub verification_methods: Vec<VerificationMethod>,\n/// Creation timestamp\n\npub created: Option<DateTime<Utc>>,\n/// Last update timestamp\n\npub updated: Option<DateTime<Utc>>,\n/// Optional controller identity\n\npub controller: Option<Identity>,\n/// Additional metadata\n\npub metadata: Option<serde_json::Value>\n}",
              "docs": "An identity document containing verification information\n\nThis provides verification information for an identity without exposing\nthe underlying document format (DID Document, X.509, etc.)",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 13
            },
            {
              "name": "resolver::IdentityDocument::new",
              "kind": "function_item",
              "signature": "pub fn new(identity: Identity) -> Self;",
              "docs": "Create a new identity document",
              "attributes": "",
              "line": 30
            },
            {
              "name": "resolver::IdentityDocument::add_verification_method",
              "kind": "function_item",
              "signature": "pub fn add_verification_method(&mut self, method: VerificationMethod);",
              "docs": "Add a verification method",
              "attributes": "",
              "line": 42
            },
            {
              "name": "resolver::IdentityDocument::verification_methods_for_purpose",
              "kind": "function_item",
              "signature": "pub fn verification_methods_for_purpose(&self, purpose: &str) -> Vec<&VerificationMethod>;",
              "docs": "Get verification methods for a specific purpose",
              "attributes": "",
              "line": 47
            },
            {
              "name": "resolver::IdentityDocument::verification_method_by_id",
              "kind": "function_item",
              "signature": "pub fn verification_method_by_id(&self, id: &str) -> Option<&VerificationMethod>;",
              "docs": "Find a verification method by ID",
              "attributes": "",
              "line": 55
            },
            {
              "name": "resolver::VerificationMethod",
              "kind": "struct_item",
              "signature": "pub struct VerificationMethod {\n/// Unique identifier for this verification method\n\npub id: String,\n/// The public key for verification\n\npub public_key: PublicKey,\n/// Purpose of this verification method (e.g., \"authentication\", \"assertion\")\n\npub purpose: Option<String>,\n/// Controller of this verification method\n\npub controller: Option<Identity>,\n/// Additional metadata\n\npub metadata: Option<serde_json::Value>\n}",
              "docs": "A verification method for an identity",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 64
            },
            {
              "name": "resolver::VerificationMethod::new",
              "kind": "function_item",
              "signature": "pub fn new(id: impl Into<String>, public_key: PublicKey) -> Self;",
              "docs": "Create a new verification method",
              "attributes": "",
              "line": 79
            },
            {
              "name": "resolver::VerificationMethod::with_purpose",
              "kind": "function_item",
              "signature": "pub fn with_purpose(mut self, purpose: impl Into<String>) -> Self;",
              "docs": "Set the purpose of this verification method",
              "attributes": "",
              "line": 90
            },
            {
              "name": "resolver::VerificationMethod::with_controller",
              "kind": "function_item",
              "signature": "pub fn with_controller(mut self, controller: Identity) -> Self;",
              "docs": "Set the controller of this verification method",
              "attributes": "",
              "line": 96
            },
            {
              "name": "resolver::IdentityResolver",
              "kind": "trait_item",
              "signature": "pub trait IdentityResolver: Send + Sync {\n    /// Resolve an identity to its document\n    async fn resolve(&self, identity: &Identity) -> Result<IdentityDocument>;\n\n    /// Check if an identity exists and is valid\n    async fn exists(&self, identity: &Identity) -> Result<bool>;\n\n    /// Get verification methods for an identity\n    async fn verification_methods(&self, identity: &Identity) -> Result<Vec<VerificationMethod>> ;\n\n    /// Get a specific verification method by ID\n    async fn verification_method(\n        &self,\n        identity: &Identity,\n        method_id: &str,\n    ) -> Result<Option<VerificationMethod>> ;\n}",
              "docs": "Trait for resolving identities to their documents",
              "attributes": "#[async_trait]",
              "line": 104
            }
          ],
          "parseErrors": false
        },
        {
          "module": "signature",
          "source": "sigil/weave/adapters/weave-identity/src/signature.rs",
          "sha256": "b94094f4ea5eb7759425fed9b8b8bc534c9864174c96db0f7338bdee0b5dfea7",
          "attributes": "",
          "items": [
            {
              "name": "signature::Signature",
              "kind": "struct_item",
              "signature": "pub struct Signature {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]",
              "line": 7
            },
            {
              "name": "signature::Signature::new",
              "kind": "function_item",
              "signature": "pub fn new(bytes: Vec<u8>) -> Self;",
              "docs": "Create a new signature from bytes",
              "attributes": "",
              "line": 13
            },
            {
              "name": "signature::Signature::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "Get the raw signature bytes",
              "attributes": "",
              "line": 18
            },
            {
              "name": "signature::Signature::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> Vec<u8>;",
              "docs": "Get the raw bytes as a vector",
              "attributes": "",
              "line": 23
            },
            {
              "name": "signature::Signature::from_ed25519",
              "kind": "function_item",
              "signature": "pub fn from_ed25519(signature: &ed25519_dalek::Signature) -> Self;",
              "docs": "Create from Ed25519 signature",
              "attributes": "",
              "line": 28
            },
            {
              "name": "signature::Signature::to_ed25519",
              "kind": "function_item",
              "signature": "pub fn to_ed25519(&self) -> Result<ed25519_dalek::Signature>;",
              "docs": "Convert to Ed25519 signature",
              "attributes": "",
              "line": 33
            },
            {
              "name": "signature::Signature::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "Get the length of the signature",
              "attributes": "",
              "line": 49
            },
            {
              "name": "signature::Signature::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "Check if the signature is empty",
              "attributes": "",
              "line": 54
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ed25519_adapter",
          "source": "sigil/weave/adapters/weave-identity/src/ed25519_adapter.rs",
          "sha256": "bb87bace824c8ec09d4dcfb5bc02e04c6980cd2cf9c7df69e29b8c0a616f951d",
          "attributes": "",
          "items": [
            {
              "name": "ed25519_adapter::Ed25519Adapter",
              "kind": "struct_item",
              "signature": "pub struct Ed25519Adapter {\n\n}",
              "docs": "Production-ready Ed25519 identity adapter\n\nThis adapter provides complete identity operations for agents, autonomous\norganizations, and humans using Ed25519 cryptography.",
              "attributes": "",
              "line": 20
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "Create a new Ed25519 adapter",
              "attributes": "",
              "line": 33
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::with_resolver",
              "kind": "function_item",
              "signature": "pub fn with_resolver(resolver: Arc<dyn IdentityResolver>) -> Self;",
              "docs": "Create a new adapter with a provided resolver",
              "attributes": "",
              "line": 43
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::set_resolver",
              "kind": "function_item",
              "signature": "pub fn set_resolver(&mut self, resolver: Arc<dyn IdentityResolver>);",
              "docs": "Set or replace the resolver",
              "attributes": "",
              "line": 53
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::clear_cache",
              "kind": "function_item",
              "signature": "pub async fn clear_cache(&self);",
              "docs": "Clear the identity cache",
              "attributes": "",
              "line": 58
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::cache_stats",
              "kind": "function_item",
              "signature": "pub async fn cache_stats(&self) -> (usize, usize);",
              "docs": "Get cache statistics",
              "attributes": "",
              "line": 63
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::register_ao_controls_agent",
              "kind": "function_item",
              "signature": "pub async fn register_ao_controls_agent(&self, agent: &Identity, ao: &Identity) -> Result<()>;",
              "docs": "Register explicit control of an `agent` by an `ao`",
              "attributes": "",
              "line": 69
            },
            {
              "name": "ed25519_adapter::Ed25519Adapter::add_delegation_certificate",
              "kind": "function_item",
              "signature": "pub async fn add_delegation_certificate(&self, cert: DelegationCertificate) -> Result<()>;",
              "docs": "Add a delegation certificate permitting `issuer` to control `subject`",
              "attributes": "",
              "line": 82
            },
            {
              "name": "ed25519_adapter::DelegationCertificate",
              "kind": "struct_item",
              "signature": "pub struct DelegationCertificate {\npub subject_did: String,\npub issuer_did: String,\npub issued_at: DateTime<Utc>,\npub expires_at: Option<DateTime<Utc>>,\npub purpose: Option<String>,\npub metadata: Option<serde_json::Value>,\npub signature: Signature\n}",
              "docs": "A verifiable delegation certificate allowing an issuer to control a subject",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 200
            },
            {
              "name": "ed25519_adapter::DelegationCertificate::new_signed",
              "kind": "function_item",
              "signature": "pub fn new_signed(\n        subject: &Identity,\n        issuer: &Identity,\n        issuer_keypair: &KeyPair,\n        ttl_seconds: Option<i64>,\n        purpose: Option<String>,\n        metadata: Option<serde_json::Value>,\n    ) -> Result<Self>;",
              "docs": "Create and sign a certificate with the issuer's keypair",
              "attributes": "",
              "line": 212
            },
            {
              "name": "ed25519_adapter::DelegationCertificate::is_time_valid",
              "kind": "function_item",
              "signature": "pub fn is_time_valid(&self, at: DateTime<Utc>) -> bool;",
              "docs": "Check time validity at a given instant",
              "attributes": "",
              "line": 240
            },
            {
              "name": "ed25519_adapter::DelegationCertificate::canonical_bytes",
              "kind": "function_item",
              "signature": "pub fn canonical_bytes(&self) -> Result<Vec<u8>>;",
              "docs": "Canonical serialized bytes excluding the signature field",
              "attributes": "",
              "line": 253
            }
          ],
          "parseErrors": false
        }
      ]
    }
  ]
}
