Commit graph Thing/tests
Author SHA1 Message Date
Meta Vens
a9f8b2c242 GameCult.Thing.Contract.Tests: a store with patched type name, id and hash is refused on reopen
Replaces the false comment that reopening never compares type names with the
end-to-end pin: id, content hash and a member type name moved together are
refused; the same patch without the type name opens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:17:03 +02:00
Meta Vens
4f87e5c5bf GameCult.Thing.Contract: RecordPayload.Bytes is a copied ReadOnlyMemory<byte>; array arguments and decoded lists pinned
Under thing2:ruling:payload-bytes-read-only the payload holds a copy made at
construction (wire bytes unchanged). New tests: a T[] argument (including
through Builders.Boxed) is copied; no list of any decoded golden is writable;
a caller's buffer written after construction does not change the payload. The
byte[] exemption in the mutable-collection scan is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:17:03 +02:00
Meta Vens
9405c7a595 GameCult.Thing.Contract.Tests: the persisted-catalog entries in NameSetTests move the content hash too
An entry equal to the local one in content hash resolves as Exact without comparing names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:55:40 +02:00
Meta Vens
963900cc0d GameCult.Thing.Contract.Tests: NameSetTests exercises CultCache's schema comparison on the persisted catalog
Reopening a single-file store at CultLib b3bd8dd5 does not compare recorded type names (a store
patched in id and Int64 opens and reads), so the test hands ResolvePersistedSchema a persisted
catalog entry with one member type changed (and one with Assets as a List): both are refused,
and the same entry with a moved id and unchanged names resolves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:44:48 +02:00
Meta Vens
1495952e53 GameCult.Thing.Contract.Tests: the reopen test moves the schema id with the type name; goldens README keeps its line endings
A store whose id still matches the local registry is not compared, so the patched store changes
the id and Int64 together, as a real shape change does. Presence threshold set to the measured
174 required slots. goldens/README.md is the base file plus the nil-vector section (the earlier
commit rewrote its line endings).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:37:45 +02:00
Meta Vens
9586392d14 GameCult.Thing.Contract: the name set (tests/thing-contract-parity) and NameSetTests
catalog-members.tsv (27 rows) and type-names.txt (168 types) are generated from the C# types on
Yggdrasil at CultLib b3bd8dd5 and read by NameSetTests; the package owns the names, every other
runtime is held to them. NameSetTests also patches System.Int64 to System.Int32 in a store C#
wrote and requires reopen to refuse. Presence and list tests no longer count ThingDomainException
as a door.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:27:31 +02:00
Meta Vens
fe376ce9bd GameCult.Thing.Contract.Tests: Builders types its two unit-arm arrays (the test project did not compile without it)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:22:03 +02:00
Meta Vens
a6a7a97634 GameCult.Thing.Contract: a unit arm is its arm type; the 58 static instances are gone
Deleted the 38 + 17 + 3 internal static Instance fields and public static unit-arm properties.
Unit arms are built with new ImageFitContain() and told by a type test; the arm constructors are
public. Builders rewritten (65 uses); UnitArmTests replaces the SameAs assertions: every decoded
unit arm is its arm type, no union base exposes a static member of its own kind, and
new ImageFitFill() still writes 92 02 90.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:18:51 +02:00
Meta Vens
ee80246cd0 GameCult.Thing.Contract: nil refused in every required slot, lists read-only, slot 2 is InputKind
ThingDomain.Present and Items; every constructor, factory and key builder passes each non-nullable
reference parameter through Present (refusal names the slot, never a value) and each list through
Items (a private read-only copy, nil items refused). Lists are IReadOnlyList on every type.
TextInputNode's slot 2 property and parameter are InputKind, matching Rust input_kind.
Tests: NilPositionTests reads the Rust vector row by row; PresenceTests and ReadOnlyListTests
walk every door by reflection; InputKindNameTests. NameSetTests and the unit-arm rewrite follow.
Unit-arm statics are still present in this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:18:45 +02:00
Meta Vens
280979c86d GameCult.Thing.Contract.Tests: the package held to the Rust goldens byte for byte, and attacked as an outside consumer
Goldens, refusals, store read, keys, domains at every constructor and every door (CultLib
MessagePack, MessagePack Standard, System.Text.Json), factories-only reflection, deepest chain
the 256 bound admits. Goldens are linked from crates/thing-contract/tests/goldens, read only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:37:04 +02:00
Meta Vens
f7c79ee784 Define explicit Eve presentation finality 2026-08-19 09:35:25 +02:00
Meta Vens
3ede0799ab Carry delegated Eve invocation identity 2026-08-19 04:31:55 +02:00
Meta Vens
0d75021c8b Canonicalize Eve invocation digests 2026-08-19 04:25:25 +02:00
Meta Vens
4167fc32ca Bind Eve receipts to immutable invocations 2026-08-19 04:18:18 +02:00
Meta Vens
351f70245b Bind Eve navigation to an authority runtime 2026-08-19 03:29:46 +02:00
Meta Vens
cbe9d9f25e Make Eve command receipts portable 2026-08-18 06:21:44 +02:00
Meta Vens
322fa40713 Unify Eve surface wire format 2026-08-18 01:29:11 +02:00
Meta Vens
0c486796ab Add provider-owned Eve navigation receipts 2026-08-17 22:41:36 +02:00
Meta Vens
dd196508ac Own the portable Eve surface contract 2026-08-17 21:14:55 +02:00