# C17 — Authoring surface **Guarantee.** All *logic* — nodes, strategies, **and experiments/harnesses** — is authored in native Rust through **Claude Code + the skills pipeline**: the human describes, Claude writes the Rust, builds it, runs it via the `aura` CLI, and reports metrics. This binds **computation** — a node's math, a meta-program's control flow — to native Rust (the RustAst lesson, sharpened: a small LLM cannot reliably *apply* a computational DSL, and a strong one does not need one). It does **not** bind **topology** — which node feeds which, the structural axes, the param-space — to Rust *source*: topology is a **serializable data value** the World owns (C24), a non-Turing static DAG over the closed, compiled-in node vocabulary (C8/C16) that carries no computation (#109, resolved 2026-06-29). The no-DSL guard therefore forbids a *computational* experiment / strategy language, not a static topology-data format — the experiment-matrix *generator* may stay Rust (C20); its *output* is topology-data. Declarative config (`Aura.toml`) carries only **static project context** (paths only: data archive root, runs dir), never logic. aura ships **no embedded coding-LLM**; IONOS LLMs are used only as a *runtime data source* (news-agent bias, C11), gated by per-session consent, never in the code path. **Forbids.** An in-app LLM chat that generates node code inside aura; using IONOS (weaker models) as the authoring brain; a *computational* experiment / strategy DSL the author must apply (the RustAst trap) — distinct from a static topology-data format, which is permitted. **Why.** LLMs author Rust well in Claude Code — that is the fix to RustAst's failure; making weaker models the coding brain reintroduces the very problem. Keeps aura's scope an engine + playground, not an LLM-IDE. Topology-as-data is *not* the RustAst trap re-opened: that trap is a DSL the author must *apply*; a topology-data blueprint is machine-generated / owned and applied by no one, so the no-DSL guard stands unbroken — a *closed-vocabulary* data artifact is not the forbidden *open, logic-bearing* language (C25). ## Current state The authoring loop is the skills pipeline over native Rust: node / strategy / harness logic compiles into the closed node vocabulary, and the `aura` CLI runs it. Topology-as-data is realized as **blueprints** — a data-only project's `blueprints/*.json` are serialized static DAGs over the std vocabulary (the `aura new` scaffold writes a starter `blueprints/signal.json`; `crates/aura-cli/src/scaffold.rs`); the blueprint data format itself is C24's contract. `Aura.toml` carries paths-only project context (C16). The IONOS runtime-source path (news-agent bias) is the only external-LLM use — C11's record-then-replay edge, consent-gated, never in the sim code path. ## See also - [C8](c08-node-contract.md) — the closed, compiled-in node vocabulary topology draws on - [C11](c11-sources-record-replay.md) — IONOS news bias as a recorded runtime source - [C16](c16-engine-project-split.md) — the engine/project split and `Aura.toml` project context - [C20](c20-strategy-harness.md) — the experiment-matrix generator that stays Rust - [C24](c24-blueprint-data.md) — the topology / blueprint data format the World owns - [C25](c25-role-model.md) — a closed-vocabulary artifact vs the forbidden open DSL