From 5b3f646bf13153aa762febd815cfa350886974be Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 13 Sep 2026 19:25:50 +0200 Subject: [PATCH] Bump CultLib pin to 61549aa: anchor-export permission fix Idunn's cultmesh-rs/cultcache-rs/cultnet-rs pin moves from c13b6ba to CultLib origin/main 61549aa, picking up e9b91c1 ("Preserve public trust-anchor parent permissions"). That fix matters here: Idunn calls export_service_identity_trust_anchor from provisioning.rs:129 and control_plane.rs:6633 to publish a public anchor into a directory another service reads from. Before the fix, export routed through the same prepare_parent helper as private enrollment and chmod'd that directory 0700 on every export, which would lock the legitimate reader out instead of protecting anything. CultLib now splits ensure_parent (export, no narrowing) from prepare_private_parent (enrollment only). Encoding audit (c13b6ba..61549aa in cultcache-rs/cultnet-rs/cultmesh-rs/ contracts, 21 commits): none touch the eight record types Idunn persists or verifies (GameCultServiceTrustAnchorRecord, IdunnDaemonHealthTrust BindingRecord, IdunnDeploymentBrakeRecord, IdunnExpectedIncarnationRecord, IdunnLifecycleBrakeRecord, IdunnProcessWriteLeaseRecord, IdunnRuntime ActivationRecord, OdinRuntimeTopologyCorrelationRecord). - 9e6027e adds only a test (byte_slot_migration.rs); no production flip lands in this range. - 2ba404c/96138ff/a3e6877/etc. touch MediaStreamContracts and media_stream_wire record types (Muninn/Ratatoskr's media path) that Idunn never derives, persists or reads. - c2a9a6e changes cultcache-rs's Windows-only atomic-replace retry (cfg(windows) MoveFileExW), not record encoding, and Idunn targets Linux. - 47b9fc4/d3bc6e6/66f05e1 are cultnet-rs rudp/transport changes with no record-shape effect. No re-encode guard in Idunn (drivers.rs, control_plane.rs, provisioning.rs canonical-bytes checks) is at risk; this is a pin bump, not a store migration. Schema-id audit: fcc49cf ("Consolidate CultNet schema contracts") moves JSON Schema files and changes their $id to https://github.com/GameCult/CultLib/contracts/cultnet/... inside packages/cultnet-ts and the C# reference implementation. Idunn's Rust source and tests contain no reference to cultnet-ts/contracts, schema_catalog, content_hash, CultNetSchemaRegistry or builtin_schema_registry. Not a consumer. Live-branch audit: origin/claude/windows-host-actuator (the branch the live yggdrasil binary was built from, last commit 9dc80f8) is fully contained in origin/main (git merge-base --is-ancestor confirms it) and still carries the old c13b6ba pin. This bump is based on origin/main only; the live branch is not touched here and would need its own follow-up. Cargo.lock: cargo update -p cultmesh-rs -p cultcache-rs -p cultnet-rs moved exactly four git-sourced packages (cultmesh-rs, cultcache-rs, cultcache-rs-derive, cultnet-rs) to the new rev; the lockfile diff is only their `source = git+...?rev=...` lines, no checksums, versions, or unrelated packages changed. No Idunn source changes were needed: CultLib made no API-breaking rename or reshape Idunn depends on. cargo check --locked (Windows, compile gate only) and cargo check --locked --tests both pass clean. Verification ran on yggdrasil (Linux, the deploy target), not the Windows workstation. Built a throwaway unprivileged toolchain (no sudo, no docker) under ~/idunn-pin-61549aa since /srv/build is root:idunn 0755 and gamecultadmin has no docker-group access; rustc/cargo 1.95.0 matches the recipe's rust:1.95-bookworm image exactly. `cargo test --lib`: 117 passed, 9 failed, 2 ignored. All 9 failures require root privilege or ufw (frozen-source root ownership, sealed-release root ownership, runner cache/secret chown, service-credential 0400 root inode, write-lease actuation, host-actuator-hub ufw allow) -- capabilities this unprivileged non-containerized session does not have, not CultLib regressions. Proved by re-running the identical suite at the old c13b6ba pin in the same unprivileged environment: identical 117 passed / 9 failed, same 9 test names, same errors. All 16 provisioning:: tests pass at the new pin, including identity_enrollment_and_export_are_immutable_and_paths_cannot_alias and provider_and_odin_anchor_exports_are_profile_exact_immutable_and_non_aliasing, which cover the trust-anchor export path this bump fixes. `cargo build --release --locked` also succeeds. Both throwaway directories (~/idunn-pin-61549aa, ~/idunn-baseline-c13b6ba) were removed from yggdrasil afterward. Co-Authored-By: Claude Sonnet 5 --- Cargo.lock | 8 ++++---- Cargo.toml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 50a1c34..dfc3087 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -175,7 +175,7 @@ dependencies = [ [[package]] name = "cultcache-rs" version = "0.1.0" -source = "git+https://github.com/GameCult/CultLib.git?rev=c13b6ba07e99f2535b455da74d07d88c308731f5#c13b6ba07e99f2535b455da74d07d88c308731f5" +source = "git+https://github.com/GameCult/CultLib.git?rev=61549aa90bf1937a2bd4fc7d9d190d74d366f69e#61549aa90bf1937a2bd4fc7d9d190d74d366f69e" dependencies = [ "anyhow", "chrono", @@ -193,7 +193,7 @@ dependencies = [ [[package]] name = "cultcache-rs-derive" version = "0.1.0" -source = "git+https://github.com/GameCult/CultLib.git?rev=c13b6ba07e99f2535b455da74d07d88c308731f5#c13b6ba07e99f2535b455da74d07d88c308731f5" +source = "git+https://github.com/GameCult/CultLib.git?rev=61549aa90bf1937a2bd4fc7d9d190d74d366f69e#61549aa90bf1937a2bd4fc7d9d190d74d366f69e" dependencies = [ "proc-macro2", "quote", @@ -203,7 +203,7 @@ dependencies = [ [[package]] name = "cultmesh-rs" version = "0.1.0" -source = "git+https://github.com/GameCult/CultLib.git?rev=c13b6ba07e99f2535b455da74d07d88c308731f5#c13b6ba07e99f2535b455da74d07d88c308731f5" +source = "git+https://github.com/GameCult/CultLib.git?rev=61549aa90bf1937a2bd4fc7d9d190d74d366f69e#61549aa90bf1937a2bd4fc7d9d190d74d366f69e" dependencies = [ "anyhow", "cultcache-rs", @@ -214,7 +214,7 @@ dependencies = [ [[package]] name = "cultnet-rs" version = "0.1.0" -source = "git+https://github.com/GameCult/CultLib.git?rev=c13b6ba07e99f2535b455da74d07d88c308731f5#c13b6ba07e99f2535b455da74d07d88c308731f5" +source = "git+https://github.com/GameCult/CultLib.git?rev=61549aa90bf1937a2bd4fc7d9d190d74d366f69e#61549aa90bf1937a2bd4fc7d9d190d74d366f69e" dependencies = [ "aes-gcm", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 2d2f423..713ad33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,9 +24,9 @@ path = "src/lib.rs" [dependencies] anyhow = "1" -cultmesh-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "c13b6ba07e99f2535b455da74d07d88c308731f5", package = "cultmesh-rs" } -cultcache-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "c13b6ba07e99f2535b455da74d07d88c308731f5", package = "cultcache-rs" } -cultnet-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "c13b6ba07e99f2535b455da74d07d88c308731f5", package = "cultnet-rs" } +cultmesh-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "61549aa90bf1937a2bd4fc7d9d190d74d366f69e", package = "cultmesh-rs" } +cultcache-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "61549aa90bf1937a2bd4fc7d9d190d74d366f69e", package = "cultcache-rs" } +cultnet-rs = { git = "https://github.com/GameCult/CultLib.git", rev = "61549aa90bf1937a2bd4fc7d9d190d74d366f69e", package = "cultnet-rs" } rmp-serde = "1.3" sha2 = "0.10" chrono = "0.4"