Steel est organisé en modules fonctionnels selon le pipeline de configuration :
INPUT (SteelConfig, toolchains, targets)
↓
[PARSER] → tokens/AST
↓
[VALIDATOR] → coherence check
↓
[RESOLVER] → resolved configuration
↓
[GENERATOR] → Steelconfig.mcfg
↓
OUTPUT (consommé par le runner)
parser::*)validator::*)resolver::*)generator::*)model::*)runtime::*)cli::*)utils::*)metadata::*)platform::*)1. LOAD
SteelConfig → (arscan) → tokens
↓
tokens → (read) → AST (Workspace, Packages, Profiles, Targets)
2. VALIDATE
AST → (config) → ✓ global coherence
↓
(dependancies) → ✓ references, graph
↓
(target_file) → ✓ target specs
3. RESOLVE
AST → (default) → with defaults
↓
(variable) → resolved vars
↓
(expand) → interpolated
↓
(implicit) → resolved rules
↓
ConfigResolved
4. GENERATE
ConfigResolved → (output) → Steelconfig.mcfg
+ exports (DOT, JSON, etc.)
Le runner lit Steelconfig.mcfg et :
clap — Argument parsingserde/serde_json/toml — Serializationregex — Pattern matchingwalkdir — Filesystem traversalanyhow/thiserror — Error handlingsnake_case pour les moduleslib.rsanyhow::Result<T> pour résultats publicsthiserror pour la logique internetests/commands.rssrc/bin/steel.rsmodel::Targetimplicit.rsvalidator::*runtime::os.rsplatform::*interface.rs selon contexte