From ad0c8b316cef746d389ee4945fa001d3a311651b Mon Sep 17 00:00:00 2001 From: tmk241 Date: Tue, 1 Sep 2026 01:04:27 +0200 Subject: [PATCH] Version closed effect ABI as 0.4 --- Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- PLAN.md | 16 +++++----------- hemx-axum/Cargo.toml | 4 ++-- hemx-build/Cargo.toml | 2 +- hemx-test/Cargo.toml | 6 +++--- hemx/Cargo.toml | 4 ++-- 7 files changed, 20 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2bd129a..dbaa726 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -349,7 +349,7 @@ dependencies = [ [[package]] name = "hemx" -version = "0.3.0" +version = "0.4.0" dependencies = [ "hemplate", "hemx-core", @@ -358,7 +358,7 @@ dependencies = [ [[package]] name = "hemx-axum" -version = "0.3.0" +version = "0.4.0" dependencies = [ "axum", "futures-util", @@ -371,7 +371,7 @@ dependencies = [ [[package]] name = "hemx-build" -version = "0.3.0" +version = "0.4.0" dependencies = [ "hemplate-core", "hemx-core", @@ -381,7 +381,7 @@ dependencies = [ [[package]] name = "hemx-core" -version = "0.3.0" +version = "0.4.0" dependencies = [ "postcard", "serde", @@ -389,7 +389,7 @@ dependencies = [ [[package]] name = "hemx-derive" -version = "0.3.0" +version = "0.4.0" dependencies = [ "proc-macro2", "quote", @@ -398,7 +398,7 @@ dependencies = [ [[package]] name = "hemx-js" -version = "0.3.0" +version = "0.4.0" dependencies = [ "sha2", ] diff --git a/Cargo.toml b/Cargo.toml index 64f545f..e8c6170 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["hemx", "hemx-core", "hemx-derive", "hemx-js", "hemx-axum", "hemx-build", "hemx-test", "tests/server-wasm"] [workspace.package] -version = "0.3.0" +version = "0.4.0" edition = "2021" rust-version = "1.88" license = "MIT" diff --git a/PLAN.md b/PLAN.md index c591d02..074125e 100644 --- a/PLAN.md +++ b/PLAN.md @@ -1,17 +1,11 @@ # Current plan -## Slice HMX-001 — Closed typed effect path +## Closed receipt — HMX-001 + +Result: Commit `31a0f02` delivers the generated-resource -> canonical batch -> Axum -> owned browser-root path for all eight effects. +Proof: Focused Redgate script, workspace format/clippy/tests/deny, Wasm boundary, archive lists, and fresh-context review passed; HMX-001 IDs have no Redgate findings. +Release note: The breaking API is versioned 0.4.0; dependent archives require publishing 0.4.0 crates in dependency order and are outside this non-release slice. -Outcome: A handler can build the complete closed effect algebra with generated resource types, encode it canonically, and have one owned browser root apply it in order with defined failure behavior. -Delta: kernel/001–016, resource/001–004, resource/006, runtime/001, runtime/005, axum/001, axum/005. -Path: generated resource API -> typed effect batch -> canonical Axum response -> root-scoped browser decoder and executor -> DOM, focus, scroll, history, or dispatch result. -Build: Reconcile `hemx-core` effect/resource types and wire format, `hemx-build`/`hemx-derive` generated capabilities, `hemx-axum` response boundary, and `hemx-js` execution semantics as one compatibility break. -Risk: Partial migration can make server and browser disagree about opcodes, targets, ordering, or failure, causing wrong-root mutation or partial application. -Checks: Focused core round-trip/rejection tests; generated capability compile-pass/fail tests; Axum byte/status tests; browser scenarios for all eight effects, ordering, created-resource reuse, move identity, and stop-on-failure; `tests/redgate_test.sh`; `redgate check` for the slice IDs. -Non-goals: Request-policy attributes, optional transport adapters, islands, or public release publication. -Residual risk: Native interaction policy and adapter lifecycle remain in later slices. -State: Done -Blocked by: none ## Slice HMX-002 — Native interaction and recovery diff --git a/hemx-axum/Cargo.toml b/hemx-axum/Cargo.toml index e427831..36ce4e4 100644 --- a/hemx-axum/Cargo.toml +++ b/hemx-axum/Cargo.toml @@ -16,8 +16,8 @@ path = "src/lib.rs" [dependencies] axum = { version = "0.8", default-features = false, features = ["multipart", "tokio"] } futures-util = { version = "0.3", default-features = false } -hemx-core = { version = "0.3.0", path = "../hemx-core" } -hemx-js = { version = "0.3.0", path = "../hemx-js" } +hemx-core = { version = "0.4.0", path = "../hemx-core" } +hemx-js = { version = "0.4.0", path = "../hemx-js" } [dev-dependencies] scraper = "0.25" diff --git a/hemx-build/Cargo.toml b/hemx-build/Cargo.toml index 3206633..cd010e5 100644 --- a/hemx-build/Cargo.toml +++ b/hemx-build/Cargo.toml @@ -15,6 +15,6 @@ path = "src/lib.rs" [dependencies] hemplate-core = { version = "0.2.0", features = ["surface"] } -hemx-core = { version = "0.3.0", path = "../hemx-core" } +hemx-core = { version = "0.4.0", path = "../hemx-core" } quote = "1" syn = { version = "2", features = ["full"] } diff --git a/hemx-test/Cargo.toml b/hemx-test/Cargo.toml index 8351034..7373f82 100644 --- a/hemx-test/Cargo.toml +++ b/hemx-test/Cargo.toml @@ -16,11 +16,11 @@ axum = ["dep:axum", "dep:tower"] [dependencies] axum = { version = "0.8.8", optional = true, default-features = false } -hemx-core = { version = "0.3.0", path = "../hemx-core" } +hemx-core = { version = "0.4.0", path = "../hemx-core" } scraper = "0.25.0" tower = { version = "0.5.2", optional = true, features = ["util"] } [dev-dependencies] -hemx-axum = { version = "0.3.0", path = "../hemx-axum" } -hemx-build = { version = "0.3.0", path = "../hemx-build" } +hemx-axum = { version = "0.4.0", path = "../hemx-axum" } +hemx-build = { version = "0.4.0", path = "../hemx-build" } tokio = { version = "1.48.0", features = ["macros", "rt"] } diff --git a/hemx/Cargo.toml b/hemx/Cargo.toml index b41e107..aac355d 100644 --- a/hemx/Cargo.toml +++ b/hemx/Cargo.toml @@ -21,7 +21,7 @@ harness = false default = [] [dependencies] -hemx-core = { version = "0.3.0", path = "../hemx-core" } -hemx-derive = { version = "0.3.0", path = "../hemx-derive" } +hemx-core = { version = "0.4.0", path = "../hemx-core" } +hemx-derive = { version = "0.4.0", path = "../hemx-derive" } hemplate = { version = "0.2.0", default-features = false }