//! oracle โ€” the block explorer.
//!
//! A standard chain explorer's table: height, time, hashrate, and the pi
//! supply as of that block, newest first. Tap a row to see what actually
//! happened in it โ€” the links and transfers its one signal carried. Talks
//! to the first configured network's own `GET /blocks` / `GET /block/<h>`
//! (soft3/crate/src/node.rs) โ€” local bookkeeping the node keeps for this
//! page alone, never part of consensus.

use std::collections::HashMap;
use std::sync::{Arc, Mutex};

use bevy::prelude::*;
use prysm::theme;

use super::WorldState;
use super::body::BodyLinkHub;
use crate::shell::chrome::{CHROME_BOTTOM_H, CHROME_TOP_H, ContentRoot};

pub struct OracleWorldPlugin;

impl Plugin for OracleWorldPlugin {
    fn build(&self, app: &mut App) {
        app.init_resource::<Oracle>()
            .init_resource::<OracleUi>()
            .add_systems(OnEnter(WorldState::Oracle), enter)
            .add_systems(
                Update,
                (poll_list, repaint, handle_row_press, scroll_page)
                    .run_if(in_state(WorldState::Oracle)),
            );
    }
}

#[derive(Clone, Debug, Default)]
struct BlockRow {
    height: u64,
    time: u64,
    supply: u64,
    weight: u64,
}

/// The expanded row shows only what the table header does not already:
/// who cast the block's signal and its links/transfers.
#[derive(Clone, Debug, Default)]
struct BlockDetail {
    neuron: String,
    /// Already human-readable โ€” one line per link/transfer, straight from
    /// the node's own text.
    lines: Vec<String>,
}

#[derive(Clone, Debug, Default)]
struct OracleState {
    height: u64,
    supply: u64,
    root: String,
    signals: u64,
    rows: Vec<BlockRow>,
    details: HashMap<u64, BlockDetail>,
    error: String,
    busy: bool,
    version: u64,
}

/// Shared with the background fetch threads, same shape as sigma's
/// `ChainMoney` โ€” threads write, the page reads a snapshot.
#[derive(Resource, Clone, Default)]
struct Oracle(Arc<Mutex<OracleState>>);

impl Oracle {
    fn snapshot(&self) -> OracleState {
        self.0.lock().map(|s| s.clone()).unwrap_or_default()
    }

    fn refresh_list(&self, url: String) {
        let slot = self.0.clone();
        if let Ok(mut s) = slot.lock() {
            s.busy = true;
            s.version += 1;
        }
        std::thread::Builder::new()
            .name("oracle-blocks".into())
            .spawn(move || {
                let agent = super::body::networks::agent_raw();
                let status = agent
                    .get(&format!("{url}/status"))
                    .call()
                    .ok()
                    .and_then(|mut r| {
                        r.status()
                            .is_success()
                            .then(|| r.body_mut().read_to_string().ok())
                            .flatten()
                    });
                let blocks = agent
                    .get(&format!("{url}/blocks?limit=50"))
                    .call()
                    .ok()
                    .and_then(|mut r| {
                        r.status()
                            .is_success()
                            .then(|| r.body_mut().read_to_string().ok())
                            .flatten()
                    });
                let mut s = slot.lock().expect("oracle state");
                s.busy = false;
                s.version += 1;
                match status {
                    Some(body) => {
                        let field = |key: &str| -> Option<String> {
                            body.lines()
                                .find(|l| l.trim_start().starts_with(key))
                                .and_then(|l| l.split_once(':'))
                                .map(|(_, v)| v.trim().to_string())
                        };
                        s.height = field("height:").and_then(|h| h.parse().ok()).unwrap_or(0);
                        s.root = field("bbg-root:").unwrap_or_default();
                        s.signals = field("signals:").and_then(|n| n.parse().ok()).unwrap_or(0);
                        s.error.clear();
                    }
                    None => s.error = "chain unreachable".into(),
                }
                if let Some(body) = blocks {
                    s.rows = parse_blocks(&body);
                    if let Some(top) = s.rows.first() {
                        s.supply = top.supply;
                    }
                }
            })
            .expect("spawn oracle-blocks");
    }

    fn open_block(&self, url: String, height: u64) {
        let slot = self.0.clone();
        std::thread::Builder::new()
            .name("oracle-block".into())
            .spawn(move || {
                let agent = super::body::networks::agent();
                let out = agent
                    .get(&format!("{url}/block/{height}"))
                    .call()
                    .ok()
                    .and_then(|mut r| r.body_mut().read_to_string().ok());
                let Some(body) = out else { return };
                if let Some(detail) = parse_block(&body) {
                    let mut s = slot.lock().expect("oracle state");
                    s.details.insert(height, detail);
                    s.version += 1;
                }
            })
            .expect("spawn oracle-block");
    }
}

fn parse_blocks(body: &str) -> Vec<BlockRow> {
    body.lines()
        .filter(|l| !l.starts_with('-') && !l.starts_with("particle:"))
        .filter_map(|l| {
            let mut it = l.split_whitespace();
            Some(BlockRow {
                height: it.next()?.parse().ok()?,
                time: it.next()?.parse().ok()?,
                supply: it.next()?.parse().ok()?,
                weight: it.next()?.parse().ok()?,
            })
        })
        .collect()
}

fn field(body: &str, key: &str) -> Option<String> {
    body.lines()
        .find(|l| l.trim_start().starts_with(key))
        .and_then(|l| l.split_once(':'))
        .map(|(_, v)| v.trim().to_string())
}

fn parse_block(body: &str) -> Option<BlockDetail> {
    let neuron = field(body, "neuron:")?;
    let lines = body
        .lines()
        .filter(|l| l.starts_with("link ") || l.starts_with("pay "))
        .map(|l| l.to_string())
        .collect();
    Some(BlockDetail { neuron, lines })
}

/// Which row (by height) is expanded โ€” purely local UI state, never
/// shared with the fetch threads.
#[derive(Resource, Default)]
struct OracleUi {
    expanded: Option<u64>,
}

#[derive(Component)]
struct OracleRoot;

#[derive(Component)]
struct OracleScroll;

#[derive(Component)]
struct RowButton(u64);

fn network_url(hub: &BodyLinkHub) -> Option<String> {
    crate::worlds::sigma::chain::chain_url(&hub.0)
}

fn enter(
    oracle: Res<Oracle>,
    hub: Option<Res<BodyLinkHub>>,
    commands: Commands,
    mut worlds: Query<(&crate::worlds::WorldUi, &mut Visibility)>,
) {
    if let Some(hub) = &hub {
        if let Some(url) = network_url(hub) {
            oracle.refresh_list(url);
        }
    }
    if crate::worlds::reveal_world(WorldState::Oracle, &mut worlds) {
        return;
    }
    build_page(commands, &oracle.snapshot(), &OracleUi::default());
}

/// A slow background refresh โ€” block history does not change under you
/// the way a live balance does; this just keeps new blocks appearing.
fn poll_list(
    time: Res<Time>,
    mut wait: Local<f32>,
    oracle: Res<Oracle>,
    hub: Option<Res<BodyLinkHub>>,
) {
    *wait += time.delta_secs();
    if *wait < 12.0 {
        return;
    }
    *wait = 0.0;
    if oracle.snapshot().busy {
        return;
    }
    if let Some(hub) = &hub {
        if let Some(url) = network_url(hub) {
            oracle.refresh_list(url);
        }
    }
}

fn repaint(
    mut commands: Commands,
    oracle: Res<Oracle>,
    ui: Res<OracleUi>,
    mut seen: Local<u64>,
    roots: Query<Entity, With<OracleRoot>>,
) {
    let snap = oracle.snapshot();
    if snap.version == *seen && !ui.is_changed() {
        return;
    }
    *seen = snap.version;
    for e in &roots {
        commands.entity(e).despawn();
    }
    build_page(commands, &snap, &ui);
}

fn handle_row_press(
    interactions: Query<(&Interaction, &RowButton), Changed<Interaction>>,
    mut ui: ResMut<OracleUi>,
    oracle: Res<Oracle>,
    hub: Option<Res<BodyLinkHub>>,
) {
    for (interaction, row) in &interactions {
        if *interaction != Interaction::Pressed {
            continue;
        }
        let height = row.0;
        if ui.expanded == Some(height) {
            ui.expanded = None;
        } else {
            ui.expanded = Some(height);
            if !oracle.snapshot().details.contains_key(&height) {
                if let Some(hub) = &hub {
                    if let Some(url) = network_url(hub) {
                        oracle.open_block(url, height);
                    }
                }
            }
        }
    }
}

fn short_hex(hex: &str) -> String {
    if hex.len() <= 12 {
        hex.to_string()
    } else {
        format!("{}..{}", &hex[..8], &hex[hex.len() - 4..])
    }
}

fn hashrate_text(rows: &[BlockRow], i: usize) -> String {
    let row = &rows[i];
    if row.weight == 0 {
        return "-".into();
    }
    // rows are newest-first: the previous block in wall-clock time is the
    // NEXT entry in this slice.
    let Some(prev) = rows.get(i + 1) else {
        return "-".into();
    };
    let dt = row.time.saturating_sub(prev.time).max(1);
    format!("{:.2}/s", row.weight as f64 / dt as f64)
}

fn time_text(secs: u64) -> String {
    if secs == 0 {
        return "-".into();
    }
    chrono::DateTime::from_timestamp(secs as i64, 0)
        .map(|dt| dt.format("%Y-%m-%d %H:%M:%S").to_string())
        .unwrap_or_else(|| "-".into())
}

fn build_page(mut commands: Commands, snap: &OracleState, ui: &OracleUi) {
    let root = commands
        .spawn((
            OracleRoot,
            crate::worlds::WorldUi(WorldState::Oracle),
            ContentRoot,
            Node {
                position_type: PositionType::Absolute,
                top: Val::Px(CHROME_TOP_H),
                bottom: Val::Px(CHROME_BOTTOM_H),
                left: Val::Px(0.0),
                right: Val::Px(0.0),
                flex_direction: FlexDirection::Column,
                align_items: AlignItems::Center,
                overflow: Overflow::clip(),
                ..default()
            },
            BackgroundColor(theme::DARK_BASE),
        ))
        .id();

    let page = commands
        .spawn((
            OracleScroll,
            Node {
                width: Val::Percent(100.0),
                max_width: Val::Px(theme::MEASURE),
                height: Val::Percent(100.0),
                flex_direction: FlexDirection::Column,
                padding: UiRect::all(Val::Px(theme::G * 3.0)),
                row_gap: Val::Px(theme::G),
                overflow: Overflow::scroll_y(),
                ..default()
            },
            ScrollPosition::default(),
            ChildOf(root),
        ))
        .id();

    let text = |commands: &mut Commands, parent: Entity, s: String, size: f32, color: Color| {
        commands.spawn((
            Text::new(s),
            TextFont {
                font_size: size,
                ..default()
            },
            TextColor(color),
            ChildOf(parent),
        ));
    };

    text(
        &mut commands,
        page,
        "oracle".into(),
        theme::H2,
        theme::TEXT_PRIMARY,
    );

    if snap.height > 0 {
        let root = if snap.root.len() > 12 {
            format!("{}..{}", &snap.root[..8], &snap.root[snap.root.len() - 4..])
        } else {
            snap.root.clone()
        };
        text(
            &mut commands,
            page,
            format!(
                "height {}   supply {}   signals {}   root {}",
                snap.height, snap.supply, snap.signals, root
            ),
            theme::BODY,
            theme::ACID_GREEN,
        );
    }

    if !snap.error.is_empty() {
        text(
            &mut commands,
            page,
            format!("! {}", snap.error),
            theme::CAPTION,
            theme::ACID_RED,
        );
    }
    if snap.rows.is_empty() {
        let msg = if snap.busy {
            "asking the chain...".to_string()
        } else {
            "no recorded blocks yet - oracle only sees blocks finalized \
             since this feature shipped, nothing before is invented"
                .to_string()
        };
        text(&mut commands, page, msg, theme::CAPTION, theme::TEXT_DIM);
        return;
    }

    let header = commands
        .spawn((
            Node {
                width: Val::Percent(100.0),
                justify_content: JustifyContent::SpaceBetween,
                padding: UiRect::axes(Val::Px(theme::G * 1.5), Val::Px(theme::G * 0.5)),
                ..default()
            },
            ChildOf(page),
        ))
        .id();
    for h in ["height", "time", "hashrate", "supply"] {
        text(
            &mut commands,
            header,
            h.into(),
            theme::CAPTION,
            theme::TEXT_DIM,
        );
    }

    for (i, row) in snap.rows.iter().enumerate() {
        let r = commands
            .spawn((
                RowButton(row.height),
                Button,
                Node {
                    width: Val::Percent(100.0),
                    flex_direction: FlexDirection::Column,
                    padding: UiRect::axes(Val::Px(theme::G * 1.5), Val::Px(theme::G * 0.6)),
                    border: UiRect::all(Val::Px(1.0)),
                    ..default()
                },
                BackgroundColor(theme::DARK_BASE),
                BorderColor::all(theme::BORDER),
                ChildOf(page),
            ))
            .id();

        let top = commands
            .spawn((
                Node {
                    width: Val::Percent(100.0),
                    justify_content: JustifyContent::SpaceBetween,
                    ..default()
                },
                ChildOf(r),
            ))
            .id();
        text(
            &mut commands,
            top,
            format!("{}", row.height),
            theme::BODY,
            theme::ACID_GREEN,
        );
        text(
            &mut commands,
            top,
            time_text(row.time),
            theme::CAPTION,
            theme::TEXT_DIM,
        );
        text(
            &mut commands,
            top,
            hashrate_text(&snap.rows, i),
            theme::CAPTION,
            theme::TEXT_DIM,
        );
        text(
            &mut commands,
            top,
            format!("{}", row.supply),
            theme::CAPTION,
            theme::TEXT_DIM,
        );

        if ui.expanded == Some(row.height) {
            match snap.details.get(&row.height) {
                Some(d) => {
                    text(
                        &mut commands,
                        r,
                        format!("cast by {}", short_hex(&d.neuron)),
                        theme::CAPTION,
                        theme::TEXT_DIM,
                    );
                    if d.lines.is_empty() {
                        text(
                            &mut commands,
                            r,
                            "no links or transfers in this block".into(),
                            theme::CAPTION,
                            theme::TEXT_DIM,
                        );
                    }
                    for line in &d.lines {
                        text(
                            &mut commands,
                            r,
                            line.clone(),
                            theme::CAPTION,
                            theme::TEXT_PRIMARY,
                        );
                    }
                }
                None => text(
                    &mut commands,
                    r,
                    "loading...".into(),
                    theme::CAPTION,
                    theme::TEXT_DIM,
                ),
            }
        }
    }
}

fn scroll_page(
    mut wheel: MessageReader<bevy::input::mouse::MouseWheel>,
    touches: Res<Touches>,
    mut q: Query<(&mut ScrollPosition, &ComputedNode), With<OracleScroll>>,
) {
    let mut dy: f32 = wheel.read().map(|e| -e.y * 40.0).sum();
    let live: Vec<&bevy::input::touch::Touch> = touches.iter().collect();
    if live.len() == 1 {
        dy -= live[0].delta().y;
    }
    if dy == 0.0 {
        return;
    }
    for (mut pos, computed) in &mut q {
        let content = computed.content_size().y * computed.inverse_scale_factor();
        let view = computed.size().y * computed.inverse_scale_factor();
        let max = (content - view).max(0.0);
        pos.y = (pos.y + dy).clamp(0.0, max);
    }
}

Homonyms

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

Graph