Commit graph

421 commits

Author SHA1 Message Date
Meta Vens
19f8d9aeff GameCult.Thing.Contract: Command.cs names System for ReadOnlyMemory<byte>
The previous two commits do not build: Command.cs lacked the using. This one
restores the build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:19:32 +02:00
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
b8e8abd981 GameCult.Thing.Contract: ParamDecl.Kind keeps its name (a rename sed hit its assignment)
The two previous GameCult.Thing.Contract commits do not build: ParamDecl's constructor assigned
InputKind. This restores Kind = Present(kind, "Kind").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:21:08 +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
85baafcb1d thing-contract: bless goldens/nil-positions.tsv (2,866 rows, Rust decode door)
Blessed with THING_BLESS=1 on Yggdrasil; the sha256 list of every existing golden is identical
before and after (only this file is new), and the compare run passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:18:24 +02:00
Meta Vens
9ed4a72a53 thing-contract: TextInputNode's slot 2 is input_kind in every runtime; the nil vector
Rename kind to input_kind at key 2 (the wire is the slot key; no golden byte moves).
nil_positions.rs walks every array element of every value golden, splices nil over it and
records whether the Rust decode door accepts it, into goldens/nil-positions.tsv. The tsv is
blessed by the next commit; this one builds, and its nil test fails until then.
golden_bytes, blessing and goldens_dir move to tests/common so both test files share one path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:14:35 +02:00
Meta Vens
3e46195b3f GameCult.Thing.Contract: comments no longer spell the words the negative greps hunt
Comment-only; builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:37:26 +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
33eed442c7 GameCult.Thing.Contract: the gamecult.thing.* wire types for .NET, every door through a validating constructor
One C# type per Rust type, keys in the crate's slot order. Unions are abstract classes with an
internal constructor and sealed arms; unit arms are shared instances. ThingDomain owns the four
domains and ThingKeys the key grammar. CommandResult is built by four factories only; its
constructor is private. Builds against CultLib b3bd8dd5 through CultLibRoot. Tests follow in the
next commit; this one builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:37:04 +02:00
Meta Vens
2467e1b025 thing2 map: contract-cs and contract-ts r2 (body facts P20-P22, waiting lines, rationale)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 08:24:39 +02:00
Meta Vens
6ae2da0dad Merge remote-tracking branch 'origin/main' into hands/thing2-contract-rs 2026-10-12 08:05:19 +02:00
Meta Vens
86a0f891f2 thing-contract test: pin Count::get on a nonzero value (cargo-mutants survivor); drop the self-defeating old-prefix assertion
Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 07:35:54 +02:00
Meta Vens
b62eb5d6f4 thing-contract goldens: re-blessed surface-all-arms (TextInput with InputKind::Text) and surface.cc (thing:asset_catalog: key prefix); five domain refusal goldens added
Written by the production encode path (THING_BLESS=1, goldens_match). No other golden changed. Builds.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 07:26:22 +02:00
Meta Vens
f2ab72d84d thing-contract: each field's type owns its domain (Seq, Version, Count, Segment), injective record keys, domain refusal cases, per-field privacy doctests
Seq, Version, Count and Segment check their domain in new, and their Deserialize calls new, so the constructors and every decode door hold one rule. Record keys take Segment so they split at the last dot; the asset key prefix is thing:asset_catalog:. result-missing-slot is dropped (CultLib's rule). Goldens are re-blessed in the next commit; this commit's goldens_match fails until then.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 07:21:52 +02:00
Meta Vens
b13619fa27 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 <noreply@anthropic.com>
2026-10-12 07:17:32 +02:00
Meta Vens
649844aa59 thing-contract goldens: README names each case and its expected decode
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:53:23 +02:00
Meta Vens
1444e0c4f7 thing-contract: blessed goldens (surface with all 13 arms, composition, invocation, one result per outcome and effect arm, asset catalog, surface.cc, refusal and tolerance payloads); the 64-deep chain runs on a 16 MiB thread
Blessed on Yggdrasil (Linux, debug). deep_tree's decode overflows a 2 MiB stack at depth 32.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:52:44 +02:00
Meta Vens
c3991ec1e8 thing-contract: depend on serde_bytes (the CultSlots bytes slot expands to it); goldens are never text-converted
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:12:42 +02:00
Meta Vens
896a6a1c83 thing-contract tests: goldens harness (bless or compare), refusal cases, deep tree, result constructors (goldens not yet blessed; the goldens test fails at this commit)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:03:19 +02:00
Meta Vens
852c34b60a thing-contract: the gamecult.thing.* kinds as CultCache entries and unions (first commit, build not yet verified)
Does not build-verified at this commit; tests follow.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 03:51:58 +02:00
Meta Vens
d8f5e1f2fe README: this repository is Thing
Eve is renamed Thing (thing2:ruling:code-home). The opening states Thing 1
stays running for live consumers, Thing 2.0 is built here, and the Thing 1
renderer repos are archived under their Eve names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:37:49 +02:00
Meta Vens
89e80a3402 Thing 2.0 map: union parity probe, retired-repo facts, rulings applied
P12-P16 from the imagination-thing2-contract-cut pass: Rust and C#
CultCache encode unions differently and cannot read each other; TS has no
typed codec; nothing live builds from the six family repos; Ghostlight's
deploy pins the Eve origin string; the site carries a generated Thing 1
surface. Cut order step 1 and the discovery row follow the 2026-10-10
rulings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:29:31 +02:00
Meta Vens
19f04d230a Delete the stale .voidbot ignore lines and stage exclude
The .voidbot directory no longer exists in Eve. Remove its three .gitignore
entries and the --exclude=.voidbot tar argument in scripts/stage-to-eve.ps1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:08:43 +02:00
Meta Vens
fa7d95191a Thing 2.0 map: model page, consumer contract, cut order; fork prior art
Imagination pass imagination-thing2-contract (session self-2026-10-10c-eureka).
docs/thing2-map.md holds body facts P1-P11, the model page, the consumer
contract (closed node set, compositions, one binding path, one command
envelope), the fate of every Thing 1 kind, the authority map and the cut
order by deliverable. docs/research/thing2-contract-forks-prior-art.md holds
the prior art for the forks code-home, thing-script-form,
advertisement-owner and port-cutover.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:06:28 +02:00
Meta Vens
a758787258 Research: Thing 2.0 consumer census (Eyes, 2026-10-10)
Sizes Thing Script's floor for campaign thing2, target thing2:target:r1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:53:06 +02:00
Meta Vens
b7d154bc2f Thing 2.0 target: rationale, shape and the consumer contract
Campaign thing2. Rulings thing2-one-solver-taffy, thing2-thing-owns-text,
wire-rename-freeze-fold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:39:35 +02:00
Meta Vens
9a2a5d0736 Thing map: Revision 6, hold (what can land before the Thing 2.0 map)
Body facts B25-B28: which repos carry each kernel schema id, CultLib on
the live discovery edge through Heimdall's deploy, the held providers
live in Idunn's inventory, no wire branch landed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:35:16 +02:00
Meta Vens
cbb59574b0 Research: Thing 2.0 text, IME, focus, a11y and GPU glyph prior art (Eyes, 2026-10-10)
Serves question thing❓thing2-text-ownership.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:34:08 +02:00
Meta Vens
dfa81973e6 Merge thing/persona-takedown: Eve Persona live surfaces removed from the kernel repo
Archived byte-identical in gamecult-ops 9aed01f; held by
thing:verdict:cut-persona-takedown.s1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:28:27 +02:00
Meta Vens
3ee4aaac6c Research: Thing 2.0 foundation prior art (Eyes, 2026-10-03)
Served ruling thing:ruling:thing2-one-solver-taffy: Thing 1's per-host
layout, Clay, Taffy, Yoga, AccessKit and DOM-mirror practice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:26:00 +02:00
Meta Vens
1d5e98c86b Remove the Eve Persona live surfaces: .voidbot and docs/eve-persona.md
Archived byte-identical in gamecult-ops 9aed01f (artifacts/persona-eve-retired).
Ruling operator-retire-persona. Drops the README pointer to the persona doc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:25:37 +02:00
Meta Vens
d16e85772b Thing map: compat-ids-reach-wire ruled rebuild; target r3; three code-rename campaigns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:24:49 +02:00
Meta Vens
0172631821 Thing map r5: the code rename (body facts B14-B24, rename table, edge table, cut order)
Imagination pass, session self-thing-2026-10-10. Cut specs are in the
eureka mind under campaign thing; held specs for the Thing* family,
Verse and provider repos await campaigns thing-family, thing-verse and
thing-providers after cut repo-renames lands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:05:22 +02:00
Meta Vens
8e270d6dc0 Thing map: pointer to cut deck-page-edges in the site-wide masthead map
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 16:15:27 +02:00
Meta Vens
5e4c841c07 Thing map: cut deck-page-fixes (hero behind the masthead, gutters, header-leak guard)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 15:17:46 +02:00
Meta Vens
6907b582b0 Thing map r4: the deck is the Thing page under the masthead; cut deck-site-page spec
Ruling operator-deck-is-a-site-page: the deck leaves the iframe in the
article column and becomes a page of the site, filling the screen below
the existing masthead. Body facts B12 (how the site lays a page out) and
B13 (what Quartz does to raw HTML), the shape (one copy scoped by
.thing-deck, styles and script as linked static files, applet URL kept as
a redirect), the authority map delta, question thing-page-url (top-level
recommended), and the cut spec within PipelineCutSpec bounds.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 14:40:10 +02:00
Meta Vens
eebcd39366 Thing map r3: rename-now wire cuts per live edge, Persona retirement, target r2 proposal
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 14:04:36 +02:00
Meta Vens
014d94e596 Thing map r2: cut 1 re-skinned to the brand with the two fact fixes; cut 1 spec
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:55:22 +02:00
Meta Vens
a2e898288c Map the Thing campaign: the rename of Eve, cut 1 puts the deck on the site
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:48:22 +02:00
Meta Vens
167a2d3e13 Stop the huginn-cc fixture from naming Huginn as emitter or split target
The fixture is a retired projection Eve keeps for lowering conformance.
Its purpose and the .eve header still said Huginn owns runtime
stewardship and emits the DSL, and splitTarget still pointed at Huginn.
Say what is true and drop splitTarget: the schema types it as an optional
string, so null is invalid and omission is the sanctioned "none", which
is how the other Eve-owned fixtures already spell it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 15:25:29 +02:00
Meta Vens
e777e4c824 Mark the Huginn .cc fixture as Eve's retired-projection fixture
Huginn is the memory organ and will never own a .cc inspection surface;
generic .cc inspection belongs to CultCache Studio. The fixture stays as
lowering conformance material for Eve's own DSL path, so its ownerRepo is
Eve and its exit criteria no longer wait on a Huginn runtime.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 15:13:30 +02:00
Meta Vens
9d7364714d Remove dead-code survivors from census REC-027/REC-106
REC-027: delete scripts/capture-android-screenshot.ps1. EveFlutter's copy
(F:/Projects/EveFlutter/scripts/capture-android-screenshot.ps1) matches
byte-for-byte (sha256 75abf61227a12f760d277a3995b0170e2aac74d362940ba6cb109053aabe0f24,
3774 bytes) and is the only caller found, invoked by
EveFlutter/scripts/capture-android-flutter-parity.ps1:58. Kill-attempt
searches (rg -F "capture-android-screenshot.ps1", excluding
node_modules/.git/obj/bin) came back empty in Eve, EveConformance, EveTui,
EveElectron, EveUnity, and EvePlugins.

REC-106 (partial): delete web/fixtures/fensalir-client-surface.json, an
unused Fensalir fixture. Kill-attempt searches (rg -F
"fensalir-client-surface.json") came back empty in both Eve (re-verifying
the census) and Fensalir.

Not touched in this pass: the stale GameCult.Eve.Surface.0.3.2.nupkg and the
other reproducible ignored/gitignored outputs (artifacts/, bin~/, obj~/,
test obj/, node_modules/) — untracked and out of git's purview, reported to
the coordinator rather than deleted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-13 14:20:43 +02:00
Meta Vens
ccc3ffe4b7 Add MIT license
The repository was public but carried no license, so default copyright applied
and all rights were reserved. Readers could look at the code and had no right to
run, copy, modify, or self-host it. GitHub's terms grant forking within GitHub
and nothing past that.

This matters now because Erycina is being prepared for founding creators to
self-host, and its intended one-click deployment installs Idunn to bring up
Odin, Heimdall, and Erycina together. Erycina is MIT. A creator accepting that
deploy would otherwise be handed dependencies they have no license to run, which
makes "self-hosted" true only for us.

MIT to match CultLib and VoidBot, and the stated intent for GameCult projects.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 16:55:56 +02:00