//! Genesis pipeline of the phase-1 root chain: burial snapshot โ†’ genesis file
//! (one tade stream, `specs/chain.md` ยง4) โ†’ block-0 state root.
//!
//! Contract: `specs/chain.md` ยง4 (file, derivation, block 0) with the
//! decisions and the debug export in `specs/genesis.md`. Inputs are the
//! burial snapshots pinned by CID + sha256 in `space-pussy/snapshot/` and
//! `bostrom/snapshot/`. The genesis file's hemera particle is the chain id;
//! [`state::load`] applies the file to a fresh `bbg::BbgState` and one
//! `root()` is `state_root` of block 0.
//!
//! Integers only: micro-unit amounts are `u128` in derivation and must fit
//! `u64` in the file. No float touches a balance anywhere in this module.

pub mod derive;
pub mod fetch;
pub mod file;
pub mod source;
pub mod state;
pub mod time;

#[cfg(test)]
mod tests;

use std::collections::BTreeMap;
use std::io::{self, Write};
use std::path::{Path, PathBuf};

use sha2::{Digest, Sha256};

pub use file::{GenesisFile, Params};
pub use crate::chain::pool::{self, Pool};

pub type Id = [u8; 32];

/// A bootloader chain whose burial snapshot seeds a phase-1 root chain.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Chain {
    /// Genesis chain name (`pussy` | `bostrom`), the `p` frame's `name`.
    pub name: &'static str,
    /// bech32 prefix of the legacy accounts.
    pub hrp: &'static str,
    /// Native denom; `token(native)` is the chain's native coin.
    pub native: &'static str,
    /// The cosmos chain-id of the buried bootloader.
    pub bootloader: &'static str,
    /// Genesis time of chain.md ยง4.3.
    pub genesis_time: u64,
}

pub const PUSSY: Chain = Chain {
    name: "pussy",
    hrp: "pussy",
    native: "pussy",
    bootloader: "space-pussy",
    genesis_time: 1_793_885_820, // 2026-11-05T13:37:00Z
};

pub const BOSTROM: Chain = Chain {
    name: "bostrom",
    hrp: "bostrom",
    native: "boot",
    bootloader: "bostrom",
    genesis_time: 1_793_884_962, // 2026-11-05T13:22:42Z
};

impl Chain {
    pub fn parse(name: &str) -> Option<Chain> {
        match name {
            "pussy" | "space-pussy" => Some(PUSSY),
            "bostrom" => Some(BOSTROM),
            _ => None,
        }
    }
}

pub fn hash32(bytes: &[u8]) -> Id {
    *hemera::hash(bytes).as_bytes()
}

/// `token(denom) = hemera(denom_bytes)` (chain.md ยง3.1).
pub fn token_of(denom: &str) -> Id {
    hash32(denom.as_bytes())
}

pub fn sha256_hex(bytes: &[u8]) -> String {
    hex(&Sha256::digest(bytes))
}

pub fn hex(bytes: &[u8]) -> String {
    let mut s = String::with_capacity(bytes.len() * 2);
    for b in bytes {
        s.push_str(&format!("{b:02x}"));
    }
    s
}

pub fn unhex(s: &str) -> Option<Vec<u8>> {
    if s.len() % 2 != 0 {
        return None;
    }
    (0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).ok()).collect()
}

/// Options for one build.
#[derive(Debug, Clone)]
pub struct Options {
    /// Where the fetched snapshot files live (verified by sha256 on every run).
    pub cache: PathBuf,
    /// Apply the file to bbg and compute the block-0 root.
    pub root: bool,
    /// Also write the debug export (TSV side tables) into this directory.
    pub export: Option<PathBuf>,
    /// Override the genesis time (rehearsal nets only).
    pub time: Option<u64>,
}

impl Options {
    pub fn default_cache(chain: &Chain) -> PathBuf {
        let home = std::env::var("HOME").unwrap_or_else(|_| ".".into());
        Path::new(&home).join(".cache").join("cyber").join("snapshots").join(chain.name)
    }
}

/// What a build produced; also written beside the file as `<out>.json`.
#[derive(Debug, Clone, serde::Serialize)]
pub struct Report {
    pub format: &'static str,
    pub chain: String,
    pub bootloader: String,
    /// `hemera(file bytes)`: the chain id.
    pub particle: String,
    pub file_bytes: u64,
    pub file_sha256: String,
    pub time: u64,
    pub s0: String,
    pub subsidy: u64,
    /// The frozen pool formats the chain id commits to (chain.md ยง11.10).
    pub pool: PoolReport,
    pub state_root: Option<String>,
    pub block0_id: Option<String>,
    pub root_seconds: Option<u64>,
    pub root_blocked: Option<BTreeMap<String, String>>,
    pub state_counts: Option<BTreeMap<String, u64>>,
    pub state_fields: Option<BTreeMap<String, u64>>,
    pub counts: BTreeMap<String, u64>,
    /// denom โ†’ (token id hex, ฮฃ amount) over the `b` frames.
    pub tokens: BTreeMap<String, (String, String)>,
    pub gaps: BTreeMap<String, String>,
    pub source: BTreeMap<String, BTreeMap<String, String>>,
    pub bbg: &'static str,
}

/// The pool record of a genesis file, with the empty-tree anchor it implies.
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize)]
pub struct PoolReport {
    pub format: u32,
    pub depth: u8,
    pub anchor_window: u32,
    /// bytes of a wide digest
    pub digest: u8,
    pub tags: String,
    /// `E_depth`: the anchor of block 0 (no commitments yet).
    pub empty_root: String,
}

impl PoolReport {
    pub fn of(p: &Pool) -> Self {
        Self {
            format: p.format,
            depth: p.depth,
            anchor_window: p.anchor_window,
            digest: p.digest,
            tags: hex(&p.tags),
            empty_root: hex(&pool::empty_root()),
        }
    }
}

/// Build the genesis file for `chain` from the snapshot directory holding
/// `manifest.json`; write it to `out` and the report to `<out>.json`.
pub fn build(chain: Chain, snapshot: &Path, out: &Path, options: &Options) -> io::Result<Report> {
    let manifest_path = snapshot.join("manifest.json");
    let sources = fetch::materialize(&chain, &manifest_path, &options.cache)?;
    let snap = source::Snapshot::read(&chain, &manifest_path, &sources)?;
    let time = options.time.unwrap_or(chain.genesis_time);
    let derived = derive::derive(&chain, &snap, time)?;
    let bytes = derived.file.encode()?;
    let particle = hash32(&bytes);
    if let Some(parent) = out.parent() {
        if !parent.as_os_str().is_empty() {
            std::fs::create_dir_all(parent)?;
        }
    }
    write_atomic(out, &bytes)?;

    let mut report = Report {
        format: file::DIALECT,
        chain: chain.name.into(),
        bootloader: chain.bootloader.into(),
        particle: hex(&particle),
        file_bytes: bytes.len() as u64,
        file_sha256: sha256_hex(&bytes),
        time,
        s0: derived.file.native_supply().to_string(),
        subsidy: derived.file.params.subsidy,
        pool: PoolReport::of(&derived.file.params.pool),
        state_root: None,
        block0_id: None,
        root_seconds: None,
        root_blocked: None,
        state_counts: None,
        state_fields: None,
        counts: derived.counts.clone(),
        tokens: derived
            .token_sums
            .iter()
            .map(|(t, d, s)| (d.clone(), (hex(t), s.to_string())))
            .collect(),
        gaps: derived.gaps.clone(),
        source: source_pins(&snap),
        bbg: "bbg dimension version 4 (keyed-trie root, NeuronRecord.nonce, CardRecord positions)",
    };
    if options.root {
        let started = std::time::Instant::now();
        let bbg = state::load(&derived.file);
        report.state_counts = Some(state::counts(&bbg));
        report.state_fields = Some(state::fields_per_dimension(&bbg));
        let blocked = state::over_limit(&bbg);
        if blocked.is_empty() {
            let root = bbg.root();
            report.root_seconds = Some(started.elapsed().as_secs());
            let header = file::block0_header(time, &root, &particle);
            report.state_root = Some(hex(&root));
            report.block0_id = Some(hex(&file::block_id(&header)));
        } else {
            report.root_blocked = Some(blocked);
        }
    }
    if let Some(dir) = &options.export {
        export(&derived, dir)?;
    }
    let mut json = serde_json::to_vec_pretty(&report)?;
    json.push(b'\n');
    write_atomic(&report_path(out), &json)?;
    Ok(report)
}

fn report_path(out: &Path) -> PathBuf {
    let mut p = out.as_os_str().to_owned();
    p.push(".json");
    PathBuf::from(p)
}

fn write_atomic(path: &Path, bytes: &[u8]) -> io::Result<()> {
    let mut tmp = path.as_os_str().to_owned();
    tmp.push(".part");
    let tmp = PathBuf::from(tmp);
    {
        let mut f = std::fs::File::create(&tmp)?;
        f.write_all(bytes)?;
        f.sync_all()?;
    }
    std::fs::rename(&tmp, path)
}

fn source_pins(snap: &source::Snapshot) -> BTreeMap<String, BTreeMap<String, String>> {
    let mut out = BTreeMap::new();
    let mut m = BTreeMap::new();
    m.insert("sha256".into(), snap.manifest.sha256.clone());
    m.insert("halt_height".into(), snap.manifest.halt_height.to_string());
    m.insert("halt_time".into(), snap.manifest.halt_time.clone());
    out.insert("manifest.json".into(), m);
    for f in &snap.files {
        let mut m = BTreeMap::new();
        m.insert("cid".into(), f.cid.clone());
        m.insert("sha256".into(), f.sha256.clone());
        m.insert("bytes".into(), f.bytes.to_string());
        out.insert(f.name.clone(), m);
    }
    out
}

/// Read a genesis file, recompute its particle and (optionally) the block-0
/// root and id.
pub fn verify(path: &Path, root: bool) -> io::Result<Verified> {
    let bytes = std::fs::read(path)?;
    let file = GenesisFile::decode(&bytes)?;
    let particle = hash32(&bytes);
    let mut v = Verified {
        particle: hex(&particle),
        s0: file.native_supply().to_string(),
        subsidy: file.params.subsidy,
        b_frames: file.balances.len() as u64,
        l_frames: file.links.len() as u64,
        pool: PoolReport::of(&file.params.pool),
        state_root: None,
        block0_id: None,
        root_blocked: None,
    };
    if file::subsidy_of(file.native_supply())? != file.params.subsidy {
        return Err(io::Error::new(io::ErrorKind::InvalidData, "subsidy does not match S0"));
    }
    if root {
        let bbg = state::load(&file);
        let blocked = state::over_limit(&bbg);
        if blocked.is_empty() {
            let r = bbg.root();
            let header = file::block0_header(file.params.time, &r, &particle);
            v.state_root = Some(hex(&r));
            v.block0_id = Some(hex(&file::block_id(&header)));
        } else {
            v.root_blocked = Some(blocked);
        }
    }
    Ok(v)
}

#[derive(Debug, Clone)]
pub struct Verified {
    pub particle: String,
    pub s0: String,
    pub subsidy: u64,
    pub b_frames: u64,
    pub l_frames: u64,
    pub pool: PoolReport,
    pub state_root: Option<String>,
    pub block0_id: Option<String>,
    pub root_blocked: Option<BTreeMap<String, String>>,
}

/// The debug export: TSV side tables that explain the file (addresses,
/// denoms, CIDs, old heights and times). Not consensus; never hashed.
fn export(d: &derive::Derived, dir: &Path) -> io::Result<()> {
    std::fs::create_dir_all(dir)?;
    let w = |name: &str, header: &str, rows: &mut dyn Iterator<Item = String>| -> io::Result<()> {
        let mut out = io::BufWriter::with_capacity(1 << 20, std::fs::File::create(dir.join(name))?);
        writeln!(out, "{header}")?;
        for r in rows {
            writeln!(out, "{r}")?;
        }
        out.flush()
    };
    w(
        "accounts.tsv",
        "address\towner\tkind\tpubkey_type\tpubkey",
        &mut d.accounts.iter().map(|a| {
            format!(
                "{}\t{}\t{}\t{}\t{}",
                a.address,
                hex(&a.owner),
                match a.kind {
                    derive::OwnerKind::Neuron => "neuron",
                    derive::OwnerKind::Legacy => "legacy",
                },
                a.pubkey_type,
                a.pubkey.as_ref().map_or("-".to_string(), |k| hex(k))
            )
        }),
    )?;
    w(
        "balances.tsv",
        "owner\ttoken\tamount\taddress\tdenom",
        &mut d.file.balances.iter().zip(&d.balance_rows).map(|(b, (address, denom, _))| {
            format!("{}\t{}\t{}\t{}\t{}", hex(&b.owner), hex(&b.token), b.amount, address, denom)
        }),
    )?;
    w(
        "particles.tsv",
        "particle\tcid",
        &mut d.particles.iter().map(|(cid, p)| format!("{}\t{cid}", hex(p))),
    )?;
    let passports = d.file.links.len() - d.link_rows.len();
    w(
        "links.tsv",
        "neuron\tp\tq\theight\taddress\tfrom\tto\ttime\ttx",
        &mut d.file.links.iter().enumerate().map(|(i, l)| {
            let tail = if i < passports {
                "-\t-\t-\t-\t-".to_string()
            } else {
                let (address, from, to, _, time, tx) = &d.link_rows[i - passports];
                format!("{address}\t{from}\t{to}\t{time}\t{}", if tx.is_empty() { "-" } else { tx })
            };
            format!("{}\t{}\t{}\t{}\t{tail}", hex(&l.neuron), hex(&l.p), hex(&l.q), l.height)
        }),
    )?;
    w(
        "tokens.tsv",
        "token\tdenom\tsum",
        &mut d.token_sums.iter().map(|(t, denom, s)| format!("{}\t{denom}\t{s}", hex(t))),
    )?;
    Ok(())
}

Homonyms

warriors/trisha/rs/recursive/mod.rs
neural/trident/tests/support/mod.rs
neural/trident/src/ir/mod.rs
neural/trident/src/cost/mod.rs
soft3/mir/src/frame/mod.rs
cyb/optica/src/output/mod.rs
neural/trident/src/syntax/mod.rs
neural/trident/src/package/mod.rs
cyb/shell/src/worlds/mod.rs
soft3/glia/run/backend/mod.rs
soft3/nox/rs/patterns/mod.rs
soft3/nox/rs/jets/mod.rs
cyb/optica/src/graph/mod.rs
warriors/trisha/rs/lower/mod.rs
soft3/crate/src/wallet/mod.rs
neural/trident/src/deploy/mod.rs
neural/trident/src/neural/mod.rs
cyb/optica/src/parser/mod.rs
cyb/prysm/system/rs/mod.rs
soft3/glia/run/tokenizer/mod.rs
cyb/optica/src/render/mod.rs
soft3/tru/rs/pass/mod.rs
cyb/optica/src/query/mod.rs
warriors/trisha/rs/cost/mod.rs
soft3/cybergraph/tests/common/mod.rs
neural/trident/src/config/mod.rs
neural/trident/src/ast/mod.rs
neural/trident/src/field/mod.rs
neural/trident/src/import/mod.rs
soft3/tru/rs/model/mod.rs
soft3/mudra/src/proof/mod.rs
cyb/optica/src/scanner/mod.rs
soft3/tru/rs/graph/mod.rs
soft3/glia/run/bench/mod.rs
cyb/prysm/atoms/rs/mod.rs
neural/trident/src/lsp/mod.rs
neural/trident/src/typecheck/mod.rs
soft3/glia/run/core/mod.rs
neural/trident/src/verify/mod.rs
warriors/trisha/rs/neural/mod.rs
soft3/glia/import/loader/mod.rs
cyb/shell/src/shell/mod.rs
soft3/tru/rs/focusing/mod.rs
neural/trident/src/runtime/mod.rs
neural/trident/src/api/mod.rs
cyb/optica/src/server/mod.rs
soft3/mir/src/graph/mod.rs
neural/trident/src/diagnostic/mod.rs
neural/trident/src/cli/mod.rs
soft3/glia/run/arch/mod.rs
cyb/prysm/molecules/rs/mod.rs
soft3/nox/rs/data/mod.rs
soft3/mir/src/bevy/mod.rs
cyb/shell/src/agent/mod.rs
soft3/mir/src/epoch/mod.rs
soft3/glia/run/ir/mod.rs
soft3/crate/src/chain/mod.rs
neural/rs/macros/src/module/mod.rs
cyb/honeycrisp/unimem/tests/image_support/mod.rs
neural/trident/src/ir/tir/mod.rs
neural/trident/src/verify/report/mod.rs
cyb/honeycrisp/acpu/src/vector/mod.rs
warriors/trisha/rs/neural/data/mod.rs
neural/trident/src/package/registry/mod.rs
soft3/glia/run/backend/wgpu/mod.rs
neural/trident/src/neural/training/mod.rs
soft3/zheng/rs/src/sumcheck/mod.rs
neural/trident/src/verify/synthesize/mod.rs
cyb/shell/src/worlds/vault/mod.rs
neural/rs/macros/src/registers/mod.rs
neural/trident/src/neural/model/mod.rs
neural/trident/src/config/resolve/mod.rs
cyb/honeycrisp/acpu/src/sparse/mod.rs
soft3/bbg/rs/src/transition/mod.rs
soft3/radio/iroh-blobs/examples/common/mod.rs
soft3/crate/src/chain/pool/mod.rs
cyb/wysm/crates/wasi/tests/mod.rs
neural/rs/darwin-sys/src/ffi/mod.rs
cyb/honeycrisp/rane/src/mil/mod.rs
neural/trident/src/verify/smt/mod.rs
soft3/glia/run/backend/honeycrisp/mod.rs
soft3/glia/run/arch/decoder/mod.rs
neural/trident/src/verify/solve/mod.rs
cyb/honeycrisp/acpu/src/pulse/mod.rs
soft3/zheng/rs/src/folding/mod.rs
soft3/glia/run/cli/cmd/mod.rs
neural/trident/src/syntax/format/mod.rs
warriors/trisha/rs/neural/inference/mod.rs
cyb/shell/src/worlds/models/mod.rs
neural/trident/src/package/store/mod.rs
cyb/honeycrisp/acpu/src/sync/mod.rs
neural/trident/src/syntax/parser/mod.rs
neural/rs/core/src/fixed_point/mod.rs
warriors/trisha/rs/neural/training/mod.rs
cyb/honeycrisp/aruminium/src/ffi/mod.rs
cyb/shell/src/worlds/sigma/mod.rs
neural/trident/src/verify/sym/mod.rs
soft3/strata/nebu/rs/extension/mod.rs
neural/rs/macros/src/addressed/mod.rs
neural/trident/src/package/hash/mod.rs
soft3/radio/cyber-bao/src/io/mod.rs
neural/trident/src/neural/data/mod.rs
soft3/glia/run/backend/cpu/mod.rs
soft3/radio/iroh-blobs/src/store/mod.rs
soft3/nox/rs/jets/backends/mod.rs
neural/trident/src/syntax/lexer/mod.rs
neural/rs/core/src/bounded/mod.rs
cyb/honeycrisp/aruminium/src/render/mod.rs
neural/trident/src/lsp/semantic/mod.rs
soft3/conformance/rs/src/surfaces/mod.rs
neural/trident/src/neural/inference/mod.rs
neural/eidos/rs/src/tactic_ext/mod.rs
soft3/crate/src/chain/economy/mod.rs
neural/eidos/rs/src/surface/mod.rs
soft3/zheng/rs/src/ccs/mod.rs
neural/trident/src/lsp/util/mod.rs
cyb/wysm/crates/wast/tests/mod.rs
soft3/zheng/rs/src/phi/mod.rs
warriors/trisha/rs/neural/model/mod.rs
neural/trident/src/config/scaffold/mod.rs
neural/trident/src/typecheck/tests/mod.rs
neural/trident/src/ir/tree/mod.rs
soft3/zheng/rs/src/spartan/mod.rs
neural/eidos/rs/src/stdlib/mod.rs
neural/trident/src/api/tests/mod.rs
warriors/trisha/rs/cost/model/mod.rs
cyb/shell/src/worlds/com/mod.rs
cyb/honeycrisp/acpu/src/gemm/mod.rs
cyb/shell/src/worlds/memory/mod.rs
neural/trident/src/verify/equiv/mod.rs
neural/eidos/rs/src/elab/mod.rs
cyb/honeycrisp/acpu/src/numeric/mod.rs
cyb/honeycrisp/acpu/src/probe/mod.rs
soft3/tru/rs/focusing/epoch/mod.rs
cyb/wysm/crates/wasmi/tests/mod.rs
cyb/shell/src/worlds/oracle/mod.rs
neural/rs/rsc/src/lints/mod.rs
cyb/shell/src/worlds/robot/mod.rs
soft3/crate/src/chain/net/mod.rs
soft3/neuron/node/tests/support/mod.rs
cyb/honeycrisp/acpu/src/matrix/mod.rs
neural/trident/src/syntax/grammar/mod.rs
warriors/trisha/rs/cost/stack_verifier/mod.rs
cyb/honeycrisp/acpu/src/field/mod.rs
soft3/crate/src/chain/mine/mod.rs
cyb/shell/src/worlds/body/mod.rs
neural/trident/src/package/manifest/mod.rs
soft3/bbg/rs/src/storage/mod.rs
cyb/honeycrisp/acpu/src/crypto/mod.rs
soft3/crate/src/chain/tests/mod.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/mod.rs
warriors/trisha/rs/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_anti_alias/src/smaa/mod.rs
cyb/wysm/crates/wasmi/src/memory/mod.rs
soft3/strata/jali/wgsl/src/shaders/mod.rs
cyb/wysm/crates/wasmi/src/table/mod.rs
cyb/evy/forks/bevy_pbr/src/decal/mod.rs
cyb/evy/forks/bevy_pbr/src/ssao/mod.rs
cyb/evy/forks/bevy_ecs/src/system/mod.rs
cyb/evy/forks/bevy_render/src/experimental/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/mod.rs
cyb/evy/forks/bevy_ecs/src/entity/mod.rs
cyb/evy/forks/bevy_pbr/src/light_probe/mod.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/mod.rs
cyb/wysm/crates/wasmi/src/engine/mod.rs
cyb/evy/forks/bevy_ecs/src/bundle/mod.rs
cyb/evy/forks/bevy_post_process/src/bloom/mod.rs
cyb/wysm/crates/wasmi/benches/bench/mod.rs
cyb/evy/forks/bevy_pbr/src/ssr/mod.rs
soft3/radio/quinn/quinn/src/runtime/mod.rs
cyb/evy/forks/bevy_ecs/src/error/mod.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/mod.rs
cyb/evy/forks/bevy_render/src/renderer/mod.rs
cyb/wysm/crates/wasmi/src/module/mod.rs
cyb/evy/forks/bevy_sprite_render/src/render/mod.rs
cyb/evy/forks/bevy_ecs/src/reflect/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mod.rs
soft3/bbg/rs/src/storage/database/mod.rs
soft3/strata/trop/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_render/src/texture/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/fullscreen_vertex_shader/mod.rs
cyb/evy/forks/naga/src/common/mod.rs
cyb/evy/forks/bevy_render/src/batching/mod.rs
cyb/wysm/crates/cli/src/commands/mod.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/mod.rs
cyb/evy/forks/naga/src/compact/mod.rs
warriors/erga/rs/mine-bench/tests/support/mod.rs
soft3/radio/quinn/quinn-udp/src/cmsg/mod.rs
soft3/glia/run/backend/cpu/quant/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/skybox/mod.rs
cyb/evy/forks/bevy_pbr/src/render/mod.rs
cyb/evy/forks/naga/src/proc/mod.rs
cyb/evy/forks/bevy_sprite_render/src/texture_slice/mod.rs
cyb/evy/crates/evy_prysm_core/src/layout/mod.rs
cyb/evy/forks/bevy_pbr/src/prepass/mod.rs
cyb/evy/forks/bevy_pbr/src/meshlet/mod.rs
cyb/evy/forks/naga/src/back/mod.rs
soft3/glia/run/arch/decoder/families/mod.rs
cyb/evy/forks/bevy_render/src/render_resource/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/mod.rs
cyb/evy/forks/bevy_render/src/diagnostic/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_2d/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/mod.rs
soft3/radio/quinn/quinn/examples/common/mod.rs
soft3/strata/kuro/wgsl/src/shaders/mod.rs
soft3/glia/run/backend/honeycrisp/kernels/mod.rs
cyb/evy/forks/bevy_post_process/src/effect_stack/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/mod.rs
cyb/evy/forks/bevy_ecs/src/component/mod.rs
neural/trident/src/ir/tree/lower/mod.rs
cyb/evy/forks/bevy_transform/src/components/mod.rs
cyb/evy/forks/bevy_ecs/src/change_detection/mod.rs
cyb/wysm/crates/wasmi/src/instance/mod.rs
cyb/wysm/crates/wasmi/tests/integration/mod.rs
cyb/wysm/crates/collections/src/arena/mod.rs
cyb/evy/forks/bevy_pbr/src/deferred/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/mod.rs
soft3/radio/quinn/quinn-proto/src/config/mod.rs
cyb/wysm/crates/core/src/memory/mod.rs
cyb/evy/forks/bevy_sprite_render/src/tilemap_chunk/mod.rs
cyb/wysm/crates/wasi/src/sync/mod.rs
soft3/strata/genies/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_ecs/src/query/mod.rs
cyb/evy/forks/naga/src/front/mod.rs
cyb/evy/forks/bevy_ecs/src/world/mod.rs
cyb/wysm/crates/ir/src/decode/mod.rs
cyb/evy/forks/bevy_anti_alias/src/taa/mod.rs
neural/trident/src/ir/tir/builder/mod.rs
cyb/evy/forks/bevy_sprite_render/src/text2d/mod.rs
cyb/wysm/crates/wasmi/src/store/mod.rs
cyb/evy/forks/naga/src/keywords/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/mod.rs
cyb/evy/forks/bevy_tasks/src/iter/mod.rs
soft3/glia/run/backend/wgpu/kernels/mod.rs
cyb/wysm/crates/core/src/table/mod.rs
cyb/evy/forks/bevy_render/src/view/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/mod.rs
cyb/evy/forks/bevy_ecs/src/relationship/mod.rs
soft3/radio/quinn/quinn-proto/src/range_set/mod.rs
cyb/evy/forks/bevy_render/src/render_graph/mod.rs
cyb/evy/forks/bevy_ecs/src/event/mod.rs
cyb/wysm/crates/c_api/src/types/mod.rs
cyb/evy/forks/naga/src/arena/mod.rs
soft3/radio/quinn/quinn-proto/src/tests/mod.rs
cyb/evy/forks/naga/src/valid/mod.rs
cyb/evy/forks/bevy_post_process/src/dof/mod.rs
cyb/wysm/crates/fuzz/src/oracle/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/blit/mod.rs
neural/trident/src/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_sprite_render/src/mesh2d/mod.rs
cyb/wysm/crates/wasmi/src/func/mod.rs
cyb/evy/forks/bevy_pbr/src/volumetric_fog/mod.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_3d/mod.rs
neural/trident/src/ir/tir/optimize/mod.rs
cyb/evy/forks/bevy_ecs/src/message/mod.rs
cyb/evy/forks/bevy_render/src/render_phase/mod.rs
cyb/evy/forks/bevy_ecs/src/observer/mod.rs
cyb/evy/forks/bevy_sprite/src/texture_slice/mod.rs
cyb/evy/forks/bevy_gizmos/src/primitives/mod.rs
cyb/evy/forks/bevy_pbr/src/lightmap/mod.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/mod.rs
cyb/evy/forks/bevy_render/src/mesh/mod.rs
neural/trident/src/ir/tir/stack/mod.rs
neural/trident/src/syntax/parser/tests/mod.rs
cyb/evy/forks/naga/src/back/glsl/mod.rs
cyb/evy/forks/bevy_ecs/src/world/entity_access/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/mod.rs
cyb/evy/forks/naga/src/front/spv/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/graph/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/mod.rs
cyb/evy/forks/naga/src/back/msl/mod.rs
cyb/wysm/crates/wasmi/src/module/instantiate/mod.rs
cyb/evy/forks/bevy_render/src/experimental/occlusion_culling/mod.rs
cyb/evy/forks/bevy_render/src/view/visibility/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/table/mod.rs
cyb/evy/forks/naga/src/front/wgsl/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/streams/mod.rs
cyb/evy/forks/naga/src/back/wgsl/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/mod.rs
cyb/evy/forks/naga/src/front/glsl/mod.rs
soft3/radio/quinn/quinn-proto/src/congestion/bbr/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/executor/mod.rs
cyb/wysm/crates/wasmi/src/engine/limits/mod.rs
cyb/wysm/crates/wasmi/src/module/parser/mod.rs
cyb/evy/forks/naga/src/back/spv/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/dim3/mod.rs
cyb/evy/forks/naga/src/back/dot/mod.rs
cyb/wysm/crates/wasi/src/sync/snapshots/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mip_generation/mod.rs
cyb/evy/forks/naga/src/back/hlsl/mod.rs
struct Baz { m: mat3x2, } struct Baz { float2 m_0; float2 m_1; float2 m_2; }; float3x2 GetMatmOnBaz(Baz obj) { return float3x2(obj.m_0, obj.m_1, obj.m_2); }
cyb/evy/forks/bevy_ecs/src/system/commands/mod.rs
cyb/evy/forks/bevy_render/src/view/window/mod.rs
cyb/evy/forks/naga/src/front/wgsl/lower/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/mod.rs
cyb/evy/forks/naga/src/front/wgsl/parse/mod.rs
cyb/evy/forks/naga/src/back/wgsl/polyfill/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/dispatch/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/stack/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/simd/mod.rs

Graph