From b13619fa274dfa2cd54c099f3040e433c072dde2 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 12 Oct 2026 07:17:32 +0200 Subject: [PATCH] thing2 map: body facts P17-P19, key and integer rows, contract-rs r2 status and the stack-fix wait Co-Authored-By: Claude Opus 5.5 --- docs/thing2-map.md | 91 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 83 insertions(+), 8 deletions(-) diff --git a/docs/thing2-map.md b/docs/thing2-map.md index a239abb..a4996a4 100644 --- a/docs/thing2-map.md +++ b/docs/thing2-map.md @@ -22,7 +22,7 @@ restate their options. Research for the forks: ## Body facts -Probes run 2026-10-10 against `origin/` after `git fetch` unless a +Probes P1-P16 ran 2026-10-10, P17-P19 2026-10-12, against `origin/` after `git fetch` unless a local path is named. Scripts are in the session scratchpad `imagination-thing2-contract/`. @@ -167,6 +167,45 @@ with `LocalPath = "$projectsRoot\Eve"`. (`gamecult.eve.*` ids), referenced by `GameCult/Pitch.md:15` (`data-eve-gui=`). The census (C) does not list the site as a consumer. +**P17. The contract's integer leaves are signed because TS and Python have no +unsigned leaf; the C# reference has one.** CultLib `b3bd8dd5`: +`src/GameCult.Caching/CultSchemaTypeNames.cs` names any CLR type (so `UInt32`, +`UInt64` and `Byte` slots exist in the reference); `cultcache-ts` +`src/codec.ts` exports only `int32` and `int64` integer codecs and +`cultcache-py` `leaves.py:147-148` only `int32` and `int64`. A `u64` above +2^63 has no TS or Python reading, so versions stay `Int64` and counts `Int32`, +and the non-negative rule is the contract's, not the leaf's. `Rgba` keeps `u8` +(the reference's `Byte`); the TS and Python packages mirror its 0-255 range +from a refusal golden until CultLib gives them a byte leaf. + +**P18. A domain newtype's own `Deserialize` holds its rule at every decode +door, and leaves the bytes unchanged.** Probe `imagination-contract-rs-r2/` +(throwaway commit `fbbdaf79` on `649844aa`, Yggdrasil, 2026-10-12): `Seq(i32)` +refusing below 1 and `Version(i64)` refusing below 0, each `Serialize` the inner +integer and `Deserialize` through `new`. A result payload with seq 0 or -7 is +refused by `rmp_serde::from_slice` ("Seq: at least 1") and by +`cultcache_rs::decode_payload` (opaque: "a value does not fit the store +format"); seq 0 through serde's in-memory `IntoDeserializer` is refused the same +way, so the rule holds for any serde format. With `CommandResult.seq: Seq` and +both composition versions `Version` (an `Int32` slot widened to `Int64`), +`goldens_match` still compares byte-identical, `surface.cc` included. The +derive reads each slot with `seq.next_element::()` +(`cultcache-rs-derive/src/lib.rs`, `slot_codec`, at `b3bd8dd5`), so a field's +type is the one owner of its domain on both paths. `DatabaseEntry` requires +`DeserializeOwned` (`cultcache-rs/src/lib.rs:162`), so the public +`Deserialize` of every kind cannot be removed: it is the decode door. + +**P19. Dotted provider ids are the Verse's norm; dotted local names are not +needed.** `git grep` over Ghostlight, VoidBot, Odin, Heimdall, Muninn, Stonks +and Eve (operator checkouts, 2026-10-12): provider ids `voidbot.swarm`, +`odin.allseer`, `stonks.market`, `sleipnir.input-mirror.raven`, `heimdall`; +Thing 1 surface ids repeat the provider as a prefix (`voidbot.swarm.surface`, +`ghostlight.play` in `crates/ghostlight-dungeon/src/mesh.rs:37`). No +`gamecult.thing.*` record exists outside the contract's tests, and Thing 1 +records are rebuilt, not read (`thing:ruling:operator-compat-rebuild`), so the +Thing 2.0 key grammar strands nothing. Probe evidence of the collision itself: +Soul's `soul-thing2-contract-rs/rust1.log` KEY lines. + ## The model page Every persistent kind Thing 2.0 has. Ids follow rename table T: schema @@ -175,15 +214,15 @@ compatible eve id (`operator-compat-rebuild`). | Kind | What names it | What happens to it over time | Who decides (one writer) | | --- | --- | --- | --- | -| Thing Script document (a published surface) | schema `gamecult.thing.surface.v1`; key `thing:surface:.