4928e289f7
A research project is now a loadable external cdylib crate. Inside a directory whose ancestry holds an Aura.toml, aura discovers the project root cargo-style, locates the compiled dylib via cargo metadata (debug default, --release opt-in), loads it load-and-hold, and refuses mismatches before trusting anything: the AURA_PROJECT descriptor (aura-core::project, #[repr(C)]) carries a C-ABI stamp prefix (rustc + aura-core version, baked per consuming build by the new aura-core build.rs) validated before any Rust-ABI field is read. The vocabulary charter gates the merged resolution: project type ids are ::-namespaced (std stays bare), duplicates refuse, and the enumerable type-id list must agree with the resolver, so introspection can never silently omit a project type. All blueprint verbs resolve through the merged project + std vocabulary via a per-invocation Env threaded through the dispatch chains; registry, trace-store, and data paths anchor at the project runs root (Aura.toml [paths], paths-only by design — instrument geometry stays the recorded sidecar, C15). RunManifest gains the Tier-1 project provenance field (namespace + dylib sha256 + best-effort commit), stamped beside topology_hash on the blueprint-run paths; pre-0102 registry lines load unchanged. Default node names strip the namespace, so :: never reaches the param-path address space. Proven by the demo-project fixture (built by the e2e via cargo, path-dep on this workspace): run twice bit-identical, provenance recorded, introspection lists demo::* beside std, registry anchors at the discovered root from a subdirectory; the badcharter fixture proves the charter refusal through the real libloading path; a never-built project refuses with a cargo-build hint. Outside a project every path collapses to the previous literals — goldens and manifest pins byte-identical. Verification: cargo build --workspace clean; cargo test --workspace 862 passed / 0 failed (incl. 7 project_load e2e); clippy -D warnings clean (one precedent-matching allow(too_many_arguments) on run_oos_blueprint, whose arity the Env threading raised to 8); doc build unchanged. Docs/ledger aligned: Aura.toml field lists are paths-only in project-layout.md, glossary, C16/C17; new C13 realization note records the per-invocation-reload reading and the load-and-hold one-shot scope boundary. New deps, per-case review (aura-cli leaf binary only, never the frozen artifact): libloading, toml. refs #180
24 lines
827 B
Rust
24 lines
827 B
Rust
//! Fixture project for the vocabulary-charter e2e (cycle 0102): deliberately
|
|
//! lists a type id that is NOT `<namespace>::`-prefixed, to prove the charter
|
|
//! refusal fires through the real `aura-cli::project::load` path (libloading +
|
|
//! descriptor read), not merely through the pure `check_charter` unit function.
|
|
//! The resolver never needs to resolve anything: the prefix check runs before
|
|
//! the list/resolver cross-check, so `vocabulary` can stay a constant `None`.
|
|
|
|
use aura_core::PrimitiveBuilder;
|
|
|
|
fn vocabulary(_type_id: &str) -> Option<PrimitiveBuilder> {
|
|
None
|
|
}
|
|
|
|
/// Missing the required `badns::` prefix — the charter violation under test.
|
|
fn type_ids() -> &'static [&'static str] {
|
|
&["Bad"]
|
|
}
|
|
|
|
aura_core::aura_project! {
|
|
namespace: "badns",
|
|
vocabulary: vocabulary,
|
|
type_ids: type_ids,
|
|
}
|