From 5fe32eac8de8647cbe25089d4d7f54a933a56b64 Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 26 May 2026 13:16:17 +0200 Subject: [PATCH 1/4] chore: rename repo + dir to fai_module_sdk_rust / module-sdk-rust MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopts the three SDK families convention documented in fai/platform/docs/architecture/sdks.md — `-sdk-` for repo and `fai__sdk_` for working directory. Crate name `fai-module-sdk` stays as is. Signed-off-by: flemming-it --- Cargo.toml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 16d849e..0ff0a0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ version = "0.1.2" edition = "2024" authors = ["Dr. Stefan Flemming "] license = "Apache-2.0" -repository = "https://git.flemming.ws/fai/module-sdk" +repository = "https://git.flemming.ai/fai/module-sdk-rust" homepage = "https://flemming.ai/" rust-version = "1.85" diff --git a/README.md b/README.md index 3272951..0f1d138 100644 --- a/README.md +++ b/README.md @@ -56,4 +56,4 @@ two ever drift, CI fails. Apache-2.0. See `LICENSE`. Author: Dr. Stefan Flemming, Flemming.AI -Repository: https://git.flemming.ws/fai/module-sdk +Repository: https://git.flemming.ai/fai/module-sdk-rust From a5da67d0a378a351faa6752f323409e1cb28f1b2 Mon Sep 17 00:00:00 2001 From: flemming-it Date: Mon, 15 Jun 2026 22:17:28 +0200 Subject: [PATCH 2/4] refactor: rename WIT contract fai:platform->chain:platform Tracks the platform's WIT ABI rename. The module world package is now chain:platform@1.0.0; generated binding paths + accessor names follow. Modules built with this SDK now import chain:platform/host. SDK crate names stay fai-* (vendor namespace) for now. Signed-off-by: flemming-it --- README.md | 4 ++-- crates/fai-module-sdk-macros/src/lib.rs | 4 ++-- crates/fai-module-sdk/src/lib.rs | 2 +- wit/world.wit | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0f1d138..c5e05cc 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ That single function — plus a `Cargo.toml` listing ## Stability The SDK insulates module code from the underlying WIT contract -(`fai:platform`, frozen at v1.0 in the platform repo). The +(`chain:platform`, frozen at v1.0 in the platform repo). The WIT may evolve in additive minor versions or, eventually, a coordinated v2.0; the SDK absorbs that change so existing module code keeps compiling. @@ -47,7 +47,7 @@ two ever drift, CI fails. | Track | Stability | |-------|-----------| -| WIT contract (`fai:platform`) | Frozen at v1.0 in the platform repo | +| WIT contract (`chain:platform`) | Frozen at v1.0 in the platform repo | | `fai-module-sdk` Rust API | Semver; v0.x while ergonomics evolve | | Per-module versions | Each module repo's own concern | diff --git a/crates/fai-module-sdk-macros/src/lib.rs b/crates/fai-module-sdk-macros/src/lib.rs index d842ec4..6e21e8c 100644 --- a/crates/fai-module-sdk-macros/src/lib.rs +++ b/crates/fai-module-sdk-macros/src/lib.rs @@ -57,8 +57,8 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { runtime_path: "::fai_module_sdk::__rt::wit_bindgen::rt", }); - use exports::fai::platform::invoke::Guest; - use fai::platform::types::{ + use exports::chain::platform::invoke::Guest; + use chain::platform::types::{ BytesValue as WitBytes, FileRef as WitFileRef, InvocationContext as WitContext, diff --git a/crates/fai-module-sdk/src/lib.rs b/crates/fai-module-sdk/src/lib.rs index ea7a01a..67862e1 100644 --- a/crates/fai-module-sdk/src/lib.rs +++ b/crates/fai-module-sdk/src/lib.rs @@ -19,7 +19,7 @@ //! # Stability //! //! This crate insulates modules from the underlying WIT contract -//! (`fai:platform`, frozen at v1.0). The WIT may evolve in additive +//! (`chain:platform`, frozen at v1.0). The WIT may evolve in additive //! minor versions or, eventually, a coordinated v2.0; the SDK absorbs //! that change so module code keeps compiling. diff --git a/wit/world.wit b/wit/world.wit index 9a40fbf..58ac024 100644 --- a/wit/world.wit +++ b/wit/world.wit @@ -24,7 +24,7 @@ // stable, ergonomic surface. That is what protects modules // from any future evolution of this contract. -package fai:platform@1.0.0; +package chain:platform@1.0.0; /// Types that flow between the host (hub) and modules. interface types { From cd4457310b4580f6c0941e652b28fd412a3b447f Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 16 Jun 2026 10:14:27 +0200 Subject: [PATCH 3/4] =?UTF-8?q?docs:=20old=20product=20name=20F=E2=88=86I?= =?UTF-8?q?=20Platform=20->=20Ch=E2=88=86In=20+=20contact=20chain@flemming?= =?UTF-8?q?.ai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The old 'F∆I Platform' product name and platform@flemming.ai contact survived in docs/NOTICE/descriptions/help text; the product is Ch∆In and the contact is chain@flemming.ai. Generic 'cross-platform/platform-native' left untouched. Signed-off-by: flemming-it --- Cargo.toml | 2 +- NOTICE | 2 +- README.md | 4 ++-- crates/fai-module-sdk/Cargo.toml | 2 +- crates/fai-module-sdk/src/lib.rs | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0ff0a0d..0d18009 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ [workspace.package] version = "0.1.2" edition = "2024" -authors = ["Dr. Stefan Flemming "] +authors = ["Dr. Stefan Flemming "] license = "Apache-2.0" repository = "https://git.flemming.ai/fai/module-sdk-rust" homepage = "https://flemming.ai/" diff --git a/NOTICE b/NOTICE index 016b4eb..7e8c854 100644 --- a/NOTICE +++ b/NOTICE @@ -4,7 +4,7 @@ Copyright 2026 Flemming.AI This product includes software developed by Dr. Stefan Flemming and contributors (https://flemming.ai/). -This SDK ships a copy of the WIT contract owned by F∆I Platform +This SDK ships a copy of the WIT contract owned by Ch∆In (`fai/platform`, frozen at v1.0). The mirror is verified by a SHA-256 snapshot test and updated only in lockstep with the upstream contract. diff --git a/README.md b/README.md index c5e05cc..06792d3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # fai-module-sdk -Stable, ergonomic Rust surface for writing F∆I Platform modules. +Stable, ergonomic Rust surface for writing Ch∆In modules. A module written against this crate looks like: @@ -55,5 +55,5 @@ two ever drift, CI fails. Apache-2.0. See `LICENSE`. -Author: Dr. Stefan Flemming, Flemming.AI +Author: Dr. Stefan Flemming, Flemming.AI Repository: https://git.flemming.ai/fai/module-sdk-rust diff --git a/crates/fai-module-sdk/Cargo.toml b/crates/fai-module-sdk/Cargo.toml index 571d752..426be17 100644 --- a/crates/fai-module-sdk/Cargo.toml +++ b/crates/fai-module-sdk/Cargo.toml @@ -7,7 +7,7 @@ license.workspace = true repository.workspace = true homepage.workspace = true rust-version.workspace = true -description = "Stable, ergonomic surface for writing F∆I Platform modules in Rust" +description = "Stable, ergonomic surface for writing Ch∆In modules in Rust" [dependencies] fai-module-sdk-macros = { path = "../fai-module-sdk-macros" } diff --git a/crates/fai-module-sdk/src/lib.rs b/crates/fai-module-sdk/src/lib.rs index 67862e1..d2b694d 100644 --- a/crates/fai-module-sdk/src/lib.rs +++ b/crates/fai-module-sdk/src/lib.rs @@ -1,4 +1,4 @@ -//! Ergonomic Rust surface for writing F∆I Platform modules. +//! Ergonomic Rust surface for writing Ch∆In modules. //! //! A module written against this crate looks like: //! From 98e98e9371f7409560a1ef08bc0923d9a2506449 Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 16 Jun 2026 11:26:37 +0200 Subject: [PATCH 4/4] refactor: rename crate fai-module-sdk -> chain-module-sdk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SDK is product-scoped (Ch∆In's module SDK), not a generic vendor crate — a future Brain SDK would collide. Crate + macros renamed to chain-module-sdk[-macros]; repo + dir follow. Signed-off-by: flemming-it --- Cargo.lock | 42 ++++++++-------- Cargo.toml | 4 +- .../Cargo.toml | 4 +- .../src/lib.rs | 50 +++++++++---------- .../Cargo.toml | 4 +- .../src/context.rs | 0 .../src/error.rs | 0 .../src/inputs.rs | 0 .../src/lib.rs | 6 +-- .../src/outputs.rs | 0 .../src/payload.rs | 0 .../tests/wit_freeze.rs | 0 examples/echo/Cargo.toml | 4 +- examples/echo/src/lib.rs | 2 +- 14 files changed, 58 insertions(+), 58 deletions(-) rename crates/{fai-module-sdk-macros => chain-module-sdk-macros}/Cargo.toml (72%) rename crates/{fai-module-sdk-macros => chain-module-sdk-macros}/src/lib.rs (73%) rename crates/{fai-module-sdk => chain-module-sdk}/Cargo.toml (84%) rename crates/{fai-module-sdk => chain-module-sdk}/src/context.rs (100%) rename crates/{fai-module-sdk => chain-module-sdk}/src/error.rs (100%) rename crates/{fai-module-sdk => chain-module-sdk}/src/inputs.rs (100%) rename crates/{fai-module-sdk => chain-module-sdk}/src/lib.rs (90%) rename crates/{fai-module-sdk => chain-module-sdk}/src/outputs.rs (100%) rename crates/{fai-module-sdk => chain-module-sdk}/src/payload.rs (100%) rename crates/{fai-module-sdk => chain-module-sdk}/tests/wit_freeze.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index e139626..dc92a6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,6 +41,27 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chain-module-sdk" +version = "0.1.2" +dependencies = [ + "chain-module-sdk-macros", + "serde", + "serde_json", + "sha2", + "thiserror", + "wit-bindgen", +] + +[[package]] +name = "chain-module-sdk-macros" +version = "0.1.2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -76,27 +97,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "fai-module-sdk" -version = "0.1.2" -dependencies = [ - "fai-module-sdk-macros", - "serde", - "serde_json", - "sha2", - "thiserror", - "wit-bindgen", -] - -[[package]] -name = "fai-module-sdk-macros" -version = "0.1.2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "generic-array" version = "0.14.7" diff --git a/Cargo.toml b/Cargo.toml index 0d18009..855e738 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [workspace] resolver = "2" members = [ - "crates/fai-module-sdk", - "crates/fai-module-sdk-macros", + "crates/chain-module-sdk", + "crates/chain-module-sdk-macros", ] [workspace.package] diff --git a/crates/fai-module-sdk-macros/Cargo.toml b/crates/chain-module-sdk-macros/Cargo.toml similarity index 72% rename from crates/fai-module-sdk-macros/Cargo.toml rename to crates/chain-module-sdk-macros/Cargo.toml index 299a740..57f8d17 100644 --- a/crates/fai-module-sdk-macros/Cargo.toml +++ b/crates/chain-module-sdk-macros/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "fai-module-sdk-macros" +name = "chain-module-sdk-macros" version.workspace = true edition.workspace = true authors.workspace = true @@ -7,7 +7,7 @@ license.workspace = true repository.workspace = true homepage.workspace = true rust-version.workspace = true -description = "Procedural macros for fai-module-sdk. Not used directly — see fai-module-sdk." +description = "Procedural macros for chain-module-sdk. Not used directly — see chain-module-sdk." [lib] proc-macro = true diff --git a/crates/fai-module-sdk-macros/src/lib.rs b/crates/chain-module-sdk-macros/src/lib.rs similarity index 73% rename from crates/fai-module-sdk-macros/src/lib.rs rename to crates/chain-module-sdk-macros/src/lib.rs index 6e21e8c..66ef069 100644 --- a/crates/fai-module-sdk-macros/src/lib.rs +++ b/crates/chain-module-sdk-macros/src/lib.rs @@ -1,7 +1,7 @@ -//! Procedural macros powering `fai-module-sdk`. +//! Procedural macros powering `chain-module-sdk`. //! //! This crate exists only to host the `#[fai_module]` attribute. -//! Module authors should depend on `fai-module-sdk` (which +//! Module authors should depend on `chain-module-sdk` (which //! re-exports the macro), not on this crate directly. use proc_macro::TokenStream; @@ -51,10 +51,10 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { clippy::nursery )] - ::fai_module_sdk::__rt::wit_bindgen::generate!({ + ::chain_module_sdk::__rt::wit_bindgen::generate!({ inline: #wit_literal, world: "module", - runtime_path: "::fai_module_sdk::__rt::wit_bindgen::rt", + runtime_path: "::chain_module_sdk::__rt::wit_bindgen::rt", }); use exports::chain::platform::invoke::Guest; @@ -79,7 +79,7 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { ::std::vec::Vec<(::std::string::String, WitPayload)>, WitError, > { - let sdk_ctx = ::fai_module_sdk::Context { + let sdk_ctx = ::chain_module_sdk::Context { invocation_id: ctx.invocation_id, capability_namespace: ctx.capability_namespace, capability_name: ctx.capability_name, @@ -87,13 +87,13 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { }; let sdk_pairs: ::std::vec::Vec<( ::std::string::String, - ::fai_module_sdk::Payload, + ::chain_module_sdk::Payload, )> = inputs .into_iter() .map(|(k, p)| (k, wit_payload_to_sdk(p))) .collect(); let sdk_inputs = - ::fai_module_sdk::Inputs::__from_pairs(sdk_pairs); + ::chain_module_sdk::Inputs::__from_pairs(sdk_pairs); match super::#user_fn_name(sdk_ctx, sdk_inputs) { Ok(outputs) => { @@ -109,18 +109,18 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { } } - fn wit_payload_to_sdk(p: WitPayload) -> ::fai_module_sdk::Payload { + fn wit_payload_to_sdk(p: WitPayload) -> ::chain_module_sdk::Payload { match p { - WitPayload::Text(s) => ::fai_module_sdk::Payload::Text(s), - WitPayload::Json(s) => ::fai_module_sdk::Payload::Json(s), - WitPayload::Bytes(b) => ::fai_module_sdk::Payload::Bytes( - ::fai_module_sdk::BytesValue { + WitPayload::Text(s) => ::chain_module_sdk::Payload::Text(s), + WitPayload::Json(s) => ::chain_module_sdk::Payload::Json(s), + WitPayload::Bytes(b) => ::chain_module_sdk::Payload::Bytes( + ::chain_module_sdk::BytesValue { mime_type: b.mime_type, data: b.data, }, ), - WitPayload::FileRef(f) => ::fai_module_sdk::Payload::FileRef( - ::fai_module_sdk::FileRef { + WitPayload::FileRef(f) => ::chain_module_sdk::Payload::FileRef( + ::chain_module_sdk::FileRef { uri: f.uri, mime_type: f.mime_type, size_bytes: f.size_bytes, @@ -130,15 +130,15 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { } } - fn sdk_payload_to_wit(p: ::fai_module_sdk::Payload) -> WitPayload { + fn sdk_payload_to_wit(p: ::chain_module_sdk::Payload) -> WitPayload { match p { - ::fai_module_sdk::Payload::Text(s) => WitPayload::Text(s), - ::fai_module_sdk::Payload::Json(s) => WitPayload::Json(s), - ::fai_module_sdk::Payload::Bytes(b) => WitPayload::Bytes(WitBytes { + ::chain_module_sdk::Payload::Text(s) => WitPayload::Text(s), + ::chain_module_sdk::Payload::Json(s) => WitPayload::Json(s), + ::chain_module_sdk::Payload::Bytes(b) => WitPayload::Bytes(WitBytes { mime_type: b.mime_type, data: b.data, }), - ::fai_module_sdk::Payload::FileRef(f) => WitPayload::FileRef(WitFileRef { + ::chain_module_sdk::Payload::FileRef(f) => WitPayload::FileRef(WitFileRef { uri: f.uri, mime_type: f.mime_type, size_bytes: f.size_bytes, @@ -147,21 +147,21 @@ pub fn fai_module(_attrs: TokenStream, input: TokenStream) -> TokenStream { } } - fn sdk_error_to_wit(e: ::fai_module_sdk::ModuleError) -> WitError { + fn sdk_error_to_wit(e: ::chain_module_sdk::ModuleError) -> WitError { match e { - ::fai_module_sdk::ModuleError::InvalidInput(s) => { + ::chain_module_sdk::ModuleError::InvalidInput(s) => { WitError::InvalidInput(s) } - ::fai_module_sdk::ModuleError::PermissionDenied(s) => { + ::chain_module_sdk::ModuleError::PermissionDenied(s) => { WitError::PermissionDenied(s) } - ::fai_module_sdk::ModuleError::ResourceExhausted(s) => { + ::chain_module_sdk::ModuleError::ResourceExhausted(s) => { WitError::ResourceExhausted(s) } - ::fai_module_sdk::ModuleError::DeadlineExceeded => { + ::chain_module_sdk::ModuleError::DeadlineExceeded => { WitError::DeadlineExceeded } - ::fai_module_sdk::ModuleError::Internal(s) => WitError::Internal(s), + ::chain_module_sdk::ModuleError::Internal(s) => WitError::Internal(s), } } diff --git a/crates/fai-module-sdk/Cargo.toml b/crates/chain-module-sdk/Cargo.toml similarity index 84% rename from crates/fai-module-sdk/Cargo.toml rename to crates/chain-module-sdk/Cargo.toml index 426be17..9800a98 100644 --- a/crates/fai-module-sdk/Cargo.toml +++ b/crates/chain-module-sdk/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "fai-module-sdk" +name = "chain-module-sdk" version.workspace = true edition.workspace = true authors.workspace = true @@ -10,7 +10,7 @@ rust-version.workspace = true description = "Stable, ergonomic surface for writing Ch∆In modules in Rust" [dependencies] -fai-module-sdk-macros = { path = "../fai-module-sdk-macros" } +chain-module-sdk-macros = { path = "../chain-module-sdk-macros" } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } diff --git a/crates/fai-module-sdk/src/context.rs b/crates/chain-module-sdk/src/context.rs similarity index 100% rename from crates/fai-module-sdk/src/context.rs rename to crates/chain-module-sdk/src/context.rs diff --git a/crates/fai-module-sdk/src/error.rs b/crates/chain-module-sdk/src/error.rs similarity index 100% rename from crates/fai-module-sdk/src/error.rs rename to crates/chain-module-sdk/src/error.rs diff --git a/crates/fai-module-sdk/src/inputs.rs b/crates/chain-module-sdk/src/inputs.rs similarity index 100% rename from crates/fai-module-sdk/src/inputs.rs rename to crates/chain-module-sdk/src/inputs.rs diff --git a/crates/fai-module-sdk/src/lib.rs b/crates/chain-module-sdk/src/lib.rs similarity index 90% rename from crates/fai-module-sdk/src/lib.rs rename to crates/chain-module-sdk/src/lib.rs index d2b694d..87b03d4 100644 --- a/crates/fai-module-sdk/src/lib.rs +++ b/crates/chain-module-sdk/src/lib.rs @@ -3,7 +3,7 @@ //! A module written against this crate looks like: //! //! ```ignore -//! use fai_module_sdk::prelude::*; +//! use chain_module_sdk::prelude::*; //! //! #[fai_module] //! fn invoke(_ctx: Context, inputs: Inputs) -> Result { @@ -35,9 +35,9 @@ pub use inputs::Inputs; pub use outputs::Outputs; pub use payload::{BytesValue, FileRef, Payload}; -pub use fai_module_sdk_macros::fai_module; +pub use chain_module_sdk_macros::fai_module; -/// Convenience prelude — `use fai_module_sdk::prelude::*;` brings +/// Convenience prelude — `use chain_module_sdk::prelude::*;` brings /// every type a typical module needs into scope. pub mod prelude { pub use super::{ diff --git a/crates/fai-module-sdk/src/outputs.rs b/crates/chain-module-sdk/src/outputs.rs similarity index 100% rename from crates/fai-module-sdk/src/outputs.rs rename to crates/chain-module-sdk/src/outputs.rs diff --git a/crates/fai-module-sdk/src/payload.rs b/crates/chain-module-sdk/src/payload.rs similarity index 100% rename from crates/fai-module-sdk/src/payload.rs rename to crates/chain-module-sdk/src/payload.rs diff --git a/crates/fai-module-sdk/tests/wit_freeze.rs b/crates/chain-module-sdk/tests/wit_freeze.rs similarity index 100% rename from crates/fai-module-sdk/tests/wit_freeze.rs rename to crates/chain-module-sdk/tests/wit_freeze.rs diff --git a/examples/echo/Cargo.toml b/examples/echo/Cargo.toml index 206a1a6..da76171 100644 --- a/examples/echo/Cargo.toml +++ b/examples/echo/Cargo.toml @@ -10,13 +10,13 @@ version = "0.1.0" edition = "2024" license = "Apache-2.0" publish = false -description = "Reference module showing the minimum needed to write an F∆I module with fai-module-sdk." +description = "Reference module showing the minimum needed to write an F∆I module with chain-module-sdk." [lib] crate-type = ["cdylib"] [dependencies] -fai-module-sdk = { path = "../../crates/fai-module-sdk" } +chain-module-sdk = { path = "../../crates/chain-module-sdk" } [profile.release] opt-level = "s" diff --git a/examples/echo/src/lib.rs b/examples/echo/src/lib.rs index 4b15131..b85330e 100644 --- a/examples/echo/src/lib.rs +++ b/examples/echo/src/lib.rs @@ -5,7 +5,7 @@ //! `unsafe_op_in_unsafe_fn` allow, no `export!` call, no manual //! Payload-variant matching. -use fai_module_sdk::prelude::*; +use chain_module_sdk::prelude::*; #[fai_module] fn invoke(_ctx: Context, inputs: Inputs) -> Result {