Commit graph CultLib/packages/cultcache-py/README.md
Author SHA1 Message Date
Meta Vens
58ee315d11 cultcache-py: typed leaves own each slot's C# type name, write check and read check; the catalog derives from them
leaves.py (string, boolean, bytes, int32, int64, float32, float64, any, list, array, nullable, lazy) held to the
numeric-leaves vectors. Removed: DatabaseEntryField.many, callable codecs and _resolve, the System.Object literal,
the present-nil default, the union's nil pass-through, interop.py's hand-written catalog. A float32 keeps its width
through _pack_tree. Nil is refused unless wrapped in nullable; a default fills only a slot past the payload's end.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 01:06:24 +02:00
Meta Vens
5967a1f25d Give every cultcache-py document type one home store
Cut 5 (Python). stores_by_type maps each type to one store and generic_stores
becomes a single generic_store. add_backing_store raises on a type already
claimed and add_generic_store on a second generic store; a refused
registration claims nothing.

_stores_for_type and _all_specific_stores are deleted. _store_for_type returns
the home store and raises when stores are attached but none is home to the
type. It returns None only for a cache with no stores, which the contract
keeps as an in-memory cache. put, put_envelope, put_envelopes and delete each
write one store; pull_all_backing_stores pulls each distinct store once.

Tests: test_second_generic_store_rejected, test_type_claimed_twice_rejected,
test_types_route_to_home_store. No bytes change.

Version 0.2.0 -> 0.3.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 00:37:31 +02:00
Meta Vens
95493862bd Split the Python runtime into cultcache-py, cultnet-py, cultmesh-py
One distribution named cultcache-py carried three libraries. Rust and
TypeScript layer them as cultcache < cultnet < cultmesh; Python now does
the same, one package per layer, module names unchanged so every
`from cultmesh_py import ...` keeps working.

Two imports ran against that layering and are resolved by moving code to
where the dependency direction says it lives, not by adding a shim:

- cultnet_py.interop_peer imported the Verse/peer catalog, authority
  lease, stream, and simulation-fact contracts from cultmesh_py. They are
  wire contracts a bare peer has to speak without owning a node, which is
  why cultnet-rs and cultnet-ts keep them in the net layer. They now live
  in cultnet_py.cultmesh_contracts; cultmesh_py re-exports them.
- cultcache_py.benchmark imported cultnet_py. It measures framed CultNet
  parse beside cache paths, so it and compare_csharp move to cultnet_py.
  verify checks all three packages and moves to cultmesh_py.

The single 6,693-line test module is split by what each test touches: a
test using any cultmesh_py name lands in cultmesh-py, else cultnet_py in
cultnet-py, else cultcache-py. Each suite runs with only its layer and the
layers below on the path, so a test that reaches up fails to import
rather than quietly binding the packages back together. 11 / 53 / 78 =
the same 142.

Workflows install all three; the publish job is one matrix over the
three packages keyed by tag prefix. The TS test harnesses put all three
src directories on PYTHONPATH. cultcache-py bumps to 0.2.0 because it no
longer contains cultnet_py or cultmesh_py; the new packages start at
0.1.0. Nothing was ever published, so no PyPI consumer moves.

  cultcache-py  11 tests, path: cultcache-py/src
  cultnet-py    53 tests, path: + cultnet-py/src
  cultmesh-py   78 tests, path: + cultmesh-py/src
  python -m cultmesh_py.verify -> ok, all five checks
  cultnet_py.interop_peer imports with cultmesh_py absent

Not run here: the cultnet-ts interop ring and cultcache-ts store matrix
need dotnet/kotlin peers; their PYTHONPATH change is four lines.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 13:10:47 +02:00
Meta Vens
719ea7950a Add Python typed document subscriptions 2026-06-27 23:23:50 +01:00
Meta Vens
c1ceb860a0 Add typed Python snapshot fanout coverage 2026-06-27 23:09:16 +01:00
Meta Vens
bd98bfe979 Add Python fanout document sync helper 2026-06-27 23:03:30 +01:00
Meta Vens
1885e2244a Expose Python facade document sync 2026-06-27 22:58:50 +01:00
Meta Vens
a2ec06f90e Resolve Python node document aliases transparently 2026-06-27 20:52:26 +01:00
Meta Vens
8da99394cc Add Python CultMesh RUDP server listener 2026-06-17 06:34:30 +01:00
Meta Vens
ce9d709dae Add Python RUDP schema client transport 2026-06-16 23:37:59 +01:00
Meta Vens
b57d3c7441 Align Python cache benchmark with C# shape 2026-06-14 20:08:25 +01:00
Meta Vens
1e37841726 Add Python CultNet security primitives 2026-06-14 17:39:07 +01:00
Meta Vens
8a2719cd27 Verify Python daemon durable restart 2026-06-14 16:06:41 +01:00
Meta Vens
15ce85651b Preserve Python peer health capabilities 2026-06-14 15:58:48 +01:00
Meta Vens
d3a02d5c54 Advertise Python daemon peers 2026-06-14 15:51:29 +01:00
Meta Vens
ed5774d7b4 Seed Python daemon shard logs 2026-06-14 15:44:21 +01:00
Meta Vens
12efb01d1e Serve interop notes from Python daemon 2026-06-14 15:36:12 +01:00
Meta Vens
cf151fa67a Add Python CultMesh daemon entrypoint 2026-06-14 15:28:25 +01:00
Meta Vens
31cf0377bc Partition Python cache hot storage 2026-06-14 15:12:40 +01:00
Meta Vens
ef77a03cdb Verify Python CultMesh authority leases 2026-06-14 12:46:30 +01:00
Meta Vens
626646a95a Add Python mesh snapshot edge limits 2026-06-14 12:32:22 +01:00
Meta Vens
52f9d0de00 Add Python CultMesh discovery fanout 2026-06-14 12:15:39 +01:00
Meta Vens
d4744c88c1 Serve Python simulation observations 2026-06-14 12:06:20 +01:00
Meta Vens
5255a46ddd Add Python durable shard log node option 2026-06-14 11:54:44 +01:00
Meta Vens
9c549c1c69 Add Python shard replication pull loop 2026-06-14 11:41:41 +01:00
Meta Vens
fae72cc951 Persist Python authoritative shard logs 2026-06-14 11:28:30 +01:00
Meta Vens
4d3ae1af87 Persist Python shard replica cursors 2026-06-14 06:33:22 +01:00
Meta Vens
cf0849c73b Add Python shard replication pull helper 2026-06-14 06:27:50 +01:00
Meta Vens
0827713076 Use median samples for Python C# comparison 2026-06-14 05:53:46 +01:00
Meta Vens
ef2501f767 Add typed Python witness artifact bundles 2026-06-14 05:04:06 +01:00
Meta Vens
fd7389b299 Add typed Python simulation consensus API 2026-06-14 04:57:41 +01:00
Meta Vens
8dc0a3ffe1 Add typed Python subscription snapshots 2026-06-14 04:40:30 +01:00
Meta Vens
6b42878931 Add typed Python CultMesh response builders 2026-06-14 04:36:46 +01:00
Meta Vens
27db7894b5 Add Python CultMesh local server 2026-06-14 03:18:38 +01:00
Meta Vens
fca2a624c5 Add Python CultMesh raw snapshot responses 2026-06-14 02:31:41 +01:00
Meta Vens
59ddafe473 Add Python CultMesh name and index watchers 2026-06-14 02:18:20 +01:00
Meta Vens
473bece217 Add Python CultMesh database watchers 2026-06-14 02:03:44 +01:00
Meta Vens
c125b0fb20 Add Python CultMesh database facade 2026-06-14 01:56:35 +01:00
Meta Vens
bd50ecd15b Add Python CultMesh client facade parity 2026-06-14 01:50:15 +01:00
Meta Vens
e41fc8f019 Add Python C# cache benchmark parity receipt 2026-06-14 01:30:50 +01:00
Meta Vens
0c0f71dfb8 Prove Python prediction reconciliation over CultNet 2026-06-14 01:12:03 +01:00
Meta Vens
41c43bb5e2 Add Python runtime parity verifier 2026-06-14 01:03:39 +01:00
Meta Vens
a2779d7493 Prove Python simulation facts over CultNet 2026-06-14 00:56:23 +01:00
Meta Vens
90a669914b Reconcile Python CultMesh predictions 2026-06-14 00:47:41 +01:00
Meta Vens
e863902e76 Add Python CultMesh game session loop 2026-06-14 00:40:31 +01:00
Meta Vens
9440691e70 Commit Python CultMesh simulation facts 2026-06-14 00:33:36 +01:00
Meta Vens
6243011d46 Add Python CultMesh facade 2026-06-14 00:24:54 +01:00
Meta Vens
1d0a700f9e Watch Python CultNet database changes 2026-06-14 00:14:36 +01:00
Meta Vens
6b0caf2b21 Emit Python CultMesh node raw mutations 2026-06-14 00:02:37 +01:00
Meta Vens
17b15c972a Sync Python CultMesh nodes from CultNet 2026-06-13 23:51:00 +01:00