6f2cf443c4
MILESTONE VERDICT: GREEN — the whole span (0106-0109) holds end to
end as one continuous consumer scenario: authored from a bare {} via
introspection alone, every ref resolved from the public surface, three
validation tiers, run by content id over two real instruments through
the full v2 pipeline, realization recorded (selection/survivors/
bootstrap/generalizations/trace_name), traces on disk and charted,
read back via campaign runs, byte-identical re-runs (C1), refusals
precise. 0 bugs, 0 frictions, 0 spec gaps; 2 doc-gaps.
F7 fixed in this commit (the docs claimed an archive-root path without
naming the key; a guessed [paths] archive silently no-ops): project-
layout and the glossary Aura.toml entry now name [paths] data, and the
aura new template advertises the commented-out key. F8 (op-script
grammar not CLI-discoverable) filed as #208, sibling of the #197 docs
half — one docwriter pass once desired.
The milestone-close gate evidence is this corpus; the formal milestone
close and the push remain user-reserved.
refs #189
77 lines
1.9 KiB
Rust
77 lines
1.9 KiB
Rust
//! mrp_lab — an aura research project: node logic + the exported vocabulary.
|
|
//!
|
|
//! Every node type this crate provides is registered in `vocabulary()` /
|
|
//! `type_ids()` under the `mrp_lab::` namespace prefix; the `aura` host loads
|
|
//! this cdylib per invocation and merges it with the std vocabulary.
|
|
|
|
use aura_core::{
|
|
Cell, Ctx, FieldSpec, Firing, Node, NodeSchema, PortSpec, PrimitiveBuilder,
|
|
ScalarKind,
|
|
};
|
|
|
|
/// One-input f64 pass-through. Emits `None` until its input has a value.
|
|
pub struct Identity {
|
|
out: [Cell; 1],
|
|
}
|
|
|
|
impl Identity {
|
|
pub fn new() -> Self {
|
|
Self { out: [Cell::from_f64(0.0)] }
|
|
}
|
|
pub fn builder() -> PrimitiveBuilder {
|
|
PrimitiveBuilder::new(
|
|
"mrp_lab::Identity",
|
|
NodeSchema {
|
|
inputs: vec![PortSpec {
|
|
kind: ScalarKind::F64,
|
|
firing: Firing::Any,
|
|
name: "value".into(),
|
|
}],
|
|
output: vec![FieldSpec { name: "value".into(), kind: ScalarKind::F64 }],
|
|
params: vec![],
|
|
},
|
|
|_| Box::new(Identity::new()),
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Default for Identity {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
impl Node for Identity {
|
|
fn lookbacks(&self) -> Vec<usize> {
|
|
vec![1]
|
|
}
|
|
fn eval(&mut self, ctx: Ctx<'_>) -> Option<&[Cell]> {
|
|
let w = ctx.f64_in(0);
|
|
if w.is_empty() {
|
|
return None;
|
|
}
|
|
self.out[0] = Cell::from_f64(w[0]);
|
|
Some(&self.out)
|
|
}
|
|
fn label(&self) -> String {
|
|
"mrp_lab::Identity".to_string()
|
|
}
|
|
}
|
|
|
|
fn vocabulary(type_id: &str) -> Option<PrimitiveBuilder> {
|
|
match type_id {
|
|
"mrp_lab::Identity" => Some(Identity::builder()),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
fn type_ids() -> &'static [&'static str] {
|
|
&["mrp_lab::Identity"]
|
|
}
|
|
|
|
aura_core::aura_project! {
|
|
namespace: "mrp_lab",
|
|
vocabulary: vocabulary,
|
|
type_ids: type_ids,
|
|
}
|