Odin consumes CultLib

27cc815 lands the repoint. The in-flight CultMesh work came with it because the
old CultMesh calls a CultNet method CultLib does not have, so it could not build
against CultLib at all -- established by reverting and watching it fail, not
assumed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-04 14:56:04 +02:00
commit cbb8a5c95a
3 changed files with 4 additions and 2 deletions

View file

@ -29,4 +29,5 @@
{"note": "Odin is repointed off the vendored core-stack forks onto CultLib, closing the last code reader of GameCult/cultnet-rs. The forks were not pure duplication: a whole-file symbol comparison, not a diff of recent changes, found four capabilities CultLib lacked. cultnet-rs needed reliable send expiry, where a reliable packet past its deadline is dropped rather than retransmitted because live media tolerates loss but not lateness; cultcache-rs needed both compare_exchange_snapshot and a per-entry compare_exchange with CultCacheExpectedEnvelope, which CultLib lacked despite carrying the larger body. All are ported with tests on CultLib branch claude/cultnet-reliable-expiry at cbde940. The expiry design moved during the port: CultLib now lets the advertised transport profile own each channel's expiry rather than a runtime field that can disagree with the profile a peer was shown, which is where Odin's fork already had it. That field is wire-visible and Rust peers now advertise it on the media channel; TypeScript, C# and Kotlin accept it unchanged across five passing interop lanes each, and the other four runtimes should grow it. Python lanes cannot run on this machine because its Python runtime has no msgpack, and they fail identically before and after. Two Odin test failures are pre-existing rather than caused by the repoint, verified rather than assumed: idunn-daemon fixtures use /srv paths that Path::is_absolute rejects on Windows, and a muninn test expects an Unreliable media channel while every cultnet lineage including both previously pinned revisions declares it Reliable. Odin's recipe required the vendor/cultnet-rs gitlink, so removing the submodule would have made it unadmittable; the core stack is now pinned by rev in Cargo.lock inside the frozen source tree instead of by a gitlink Idunn verifies directly.", "status": "ok", "ts": "2026-09-04T02:02:32+00:00", "type": "architecture"}
{"note": "Swarm-wide core-stack consolidation. A survey of every vendored copy under F:/Projects found the divergence far smaller than the number of forks implied: against CultLib, Epiphany's CultCache, CodexConnector's CultCache, VoidBot's CultCache-TS and Ghostlight's CultCache-Py each hold nothing unique. What the forks mostly held was reach rather than capability, and one earlier claim was wrong: raw_document_record_from_envelope was reported missing from CultLib when it was present but private, because a pub-fn scan cannot distinguish a visibility difference from an absence. It is public now, and CultMesh gained get_all_with_keys and soa, two genuinely absent delegations to CultCache. With those exposed, Epiphany repointed to CultLib with zero code changes and 16 green test binaries, and CodexConnector with zero changes and 35 tests; both now carry no submodules at all. CodexConnector's fork held the pre-migration RuntimePresenceCorrelation enum, but the connector never referenced the type, so that migration cost nothing. Each consumer had pinned a different branch of the standalone repos -- resident-retention-compaction, public-anchor-parent-permissions, canonical-binary-slots, idunn-runtime-authority-contract, windows-atomic-replace-retry -- which is the combinatorial explosion that made separate repos untenable. Remaining forks are non-Rust and blocked on distribution rather than divergence: npm and pip cannot consume a package from a subdirectory of a git repo the way cargo git dependencies can, CultLib has no publish workflow, and a whole-monorepo submodule costs 140MB to replace a 104KB package.", "status": "ok", "ts": "2026-09-04T02:27:13+00:00", "type": "architecture"}
{"note": "The TypeScript and Python forks existed because nothing was publishable, not because the code diverged: npm and pip cannot consume a package from a subdirectory of a git repo the way cargo git dependencies can, so vendoring was the only way to depend on CultLib. CultLib 8cb3b72 adds a tag-triggered publish workflow for @gamecult/cultcache-ts to npm and cultcache-py to PyPI, each refusing a tag whose version disagrees with its manifest, with PyPI on trusted publishing so no long-lived token is stored. Licensing was the blocker discovered on the way: cultcache-py declared itself 'Private GameCult infrastructure' and cultcache-rs and cultmesh-rs declared no license at all, inside a repo whose LICENSE is MIT and whose every other package says MIT. That was load-bearing rather than cosmetic, because a package calling itself private is not one to push to a public registry; the operator confirmed the swarm is MIT and all three now say so. cultcache-ts is scoped to @gamecult so CultLib holds the name unambiguously on a public registry, which moves CultLib's own cultmesh-ts and cultnet-ts imports with it. Ghostlight's own repoint is not a dependency swap: ghostlight_state_store.py puts vendor/cultcache-py/src on sys.path precisely so the state tooling runs from a clone with no install, and session bootstrap depends on that, so replacing it with a pip dependency trades a fork for an install step unless bootstrap installs it.", "status": "ok", "ts": "2026-09-04T02:42:08+00:00", "type": "architecture"}
{"ts": "2026-09-04T11:02:22+00:00", "type": "verification", "status": "ok", "note": "CultLib main is at 8cb3b72. The consolidation work landed by fast-forward rather than squash, which mattered because four repos pin revisions from that branch: Ghostlight 85f7024, Epiphany and CodexConnector e171eca, Odin cbde940. All four verified as ancestors of origin/main after the push, so they resolve from a fresh clone; a squash merge would have orphaned every one of them and broken the builds it was meant to unify. Rust packages green at the merge point: cultcache-rs 53, cultnet-rs 107, cultmesh-rs 7. The merged branch is deleted, its commits reachable through main."}
{"note": "CultLib main is at 8cb3b72. The consolidation work landed by fast-forward rather than squash, which mattered because four repos pin revisions from that branch: Ghostlight 85f7024, Epiphany and CodexConnector e171eca, Odin cbde940. All four verified as ancestors of origin/main after the push, so they resolve from a fresh clone; a squash merge would have orphaned every one of them and broken the builds it was meant to unify. Rust packages green at the merge point: cultcache-rs 53, cultnet-rs 107, cultmesh-rs 7. The merged branch is deleted, its commits reachable through main.", "status": "ok", "ts": "2026-09-04T11:02:22+00:00", "type": "verification"}
{"ts": "2026-09-04T12:56:04+00:00", "type": "architecture", "status": "ok", "note": "Odin 27cc815 consumes CultCache and CultNet from CultLib; vendor/cultmesh-rs is the last fork and itself consumes CultLib, so exactly one version of each crate spans the graph. The commit had to carry the operator's in-flight CultMesh RUDP document server because it is a prerequisite rather than a coincidence: the previously committed CultMesh calls assume_connected(), a CultNet method the fork carried and CultLib does not, so the old code cannot build against CultLib at all. That was established by reverting the file and watching it fail, after an attempt to split the repoint into two independently building commits. The same test was run on the in-flight idunn-daemon work and it passed, so those five files were left uncommitted and the committed tree was verified to build without them. Three CultLib API differences needed adapting in Odin: transport options carry a reconnect_policy the fork lacked at seven sites, create_ack builds from ack state and cannot fail, and the transport profile owns each channel's reliable expiry. Odin's Idunn recipe still declares required_gitlinks = [vendor/cultnet-rs] and will refuse admission until that line is dropped; the fix exists in the working tree but the deployment directory is untracked, so it could not be committed. Source custody for the core stack now rests on the revision pinned in Cargo.lock inside the frozen source tree rather than on a gitlink Idunn verifies directly."}

View file

@ -31,3 +31,4 @@
{"key": "2026-09-04T022713Z0000-0029-8579bf4c2945", "payload": "eyJub3RlIjogIlN3YXJtLXdpZGUgY29yZS1zdGFjayBjb25zb2xpZGF0aW9uLiBBIHN1cnZleSBvZiBldmVyeSB2ZW5kb3JlZCBjb3B5IHVuZGVyIEY6L1Byb2plY3RzIGZvdW5kIHRoZSBkaXZlcmdlbmNlIGZhciBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBmb3JrcyBpbXBsaWVkOiBhZ2FpbnN0IEN1bHRMaWIsIEVwaXBoYW55J3MgQ3VsdENhY2hlLCBDb2RleENvbm5lY3RvcidzIEN1bHRDYWNoZSwgVm9pZEJvdCdzIEN1bHRDYWNoZS1UUyBhbmQgR2hvc3RsaWdodCdzIEN1bHRDYWNoZS1QeSBlYWNoIGhvbGQgbm90aGluZyB1bmlxdWUuIFdoYXQgdGhlIGZvcmtzIG1vc3RseSBoZWxkIHdhcyByZWFjaCByYXRoZXIgdGhhbiBjYXBhYmlsaXR5LCBhbmQgb25lIGVhcmxpZXIgY2xhaW0gd2FzIHdyb25nOiByYXdfZG9jdW1lbnRfcmVjb3JkX2Zyb21fZW52ZWxvcGUgd2FzIHJlcG9ydGVkIG1pc3NpbmcgZnJvbSBDdWx0TGliIHdoZW4gaXQgd2FzIHByZXNlbnQgYnV0IHByaXZhdGUsIGJlY2F1c2UgYSBwdWItZm4gc2NhbiBjYW5ub3QgZGlzdGluZ3Vpc2ggYSB2aXNpYmlsaXR5IGRpZmZlcmVuY2UgZnJvbSBhbiBhYnNlbmNlLiBJdCBpcyBwdWJsaWMgbm93LCBhbmQgQ3VsdE1lc2ggZ2FpbmVkIGdldF9hbGxfd2l0aF9rZXlzIGFuZCBzb2EsIHR3byBnZW51aW5lbHkgYWJzZW50IGRlbGVnYXRpb25zIHRvIEN1bHRDYWNoZS4gV2l0aCB0aG9zZSBleHBvc2VkLCBFcGlwaGFueSByZXBvaW50ZWQgdG8gQ3VsdExpYiB3aXRoIHplcm8gY29kZSBjaGFuZ2VzIGFuZCAxNiBncmVlbiB0ZXN0IGJpbmFyaWVzLCBhbmQgQ29kZXhDb25uZWN0b3Igd2l0aCB6ZXJvIGNoYW5nZXMgYW5kIDM1IHRlc3RzOyBib3RoIG5vdyBjYXJyeSBubyBzdWJtb2R1bGVzIGF0IGFsbC4gQ29kZXhDb25uZWN0b3IncyBmb3JrIGhlbGQgdGhlIHByZS1taWdyYXRpb24gUnVudGltZVByZXNlbmNlQ29ycmVsYXRpb24gZW51bSwgYnV0IHRoZSBjb25uZWN0b3IgbmV2ZXIgcmVmZXJlbmNlZCB0aGUgdHlwZSwgc28gdGhhdCBtaWdyYXRpb24gY29zdCBub3RoaW5nLiBFYWNoIGNvbnN1bWVyIGhhZCBwaW5uZWQgYSBkaWZmZXJlbnQgYnJhbmNoIG9mIHRoZSBzdGFuZGFsb25lIHJlcG9zIC0tIHJlc2lkZW50LXJldGVudGlvbi1jb21wYWN0aW9uLCBwdWJsaWMtYW5jaG9yLXBhcmVudC1wZXJtaXNzaW9ucywgY2Fub25pY2FsLWJpbmFyeS1zbG90cywgaWR1bm4tcnVudGltZS1hdXRob3JpdHktY29udHJhY3QsIHdpbmRvd3MtYXRvbWljLXJlcGxhY2UtcmV0cnkgLS0gd2hpY2ggaXMgdGhlIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIHRoYXQgbWFkZSBzZXBhcmF0ZSByZXBvcyB1bnRlbmFibGUuIFJlbWFpbmluZyBmb3JrcyBhcmUgbm9uLVJ1c3QgYW5kIGJsb2NrZWQgb24gZGlzdHJpYnV0aW9uIHJhdGhlciB0aGFuIGRpdmVyZ2VuY2U6IG5wbSBhbmQgcGlwIGNhbm5vdCBjb25zdW1lIGEgcGFja2FnZSBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIGEgZ2l0IHJlcG8gdGhlIHdheSBjYXJnbyBnaXQgZGVwZW5kZW5jaWVzIGNhbiwgQ3VsdExpYiBoYXMgbm8gcHVibGlzaCB3b3JrZmxvdywgYW5kIGEgd2hvbGUtbW9ub3JlcG8gc3VibW9kdWxlIGNvc3RzIDE0ME1CIHRvIHJlcGxhY2UgYSAxMDRLQiBwYWNrYWdlLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wNFQwMjoyNzoxMyswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-09-04T02:27:13.607885+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T024208Z0000-0030-d81ffd7f00a7", "payload": "eyJub3RlIjogIlRoZSBUeXBlU2NyaXB0IGFuZCBQeXRob24gZm9ya3MgZXhpc3RlZCBiZWNhdXNlIG5vdGhpbmcgd2FzIHB1Ymxpc2hhYmxlLCBub3QgYmVjYXVzZSB0aGUgY29kZSBkaXZlcmdlZDogbnBtIGFuZCBwaXAgY2Fubm90IGNvbnN1bWUgYSBwYWNrYWdlIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgYSBnaXQgcmVwbyB0aGUgd2F5IGNhcmdvIGdpdCBkZXBlbmRlbmNpZXMgY2FuLCBzbyB2ZW5kb3Jpbmcgd2FzIHRoZSBvbmx5IHdheSB0byBkZXBlbmQgb24gQ3VsdExpYi4gQ3VsdExpYiA4Y2IzYjcyIGFkZHMgYSB0YWctdHJpZ2dlcmVkIHB1Ymxpc2ggd29ya2Zsb3cgZm9yIEBnYW1lY3VsdC9jdWx0Y2FjaGUtdHMgdG8gbnBtIGFuZCBjdWx0Y2FjaGUtcHkgdG8gUHlQSSwgZWFjaCByZWZ1c2luZyBhIHRhZyB3aG9zZSB2ZXJzaW9uIGRpc2FncmVlcyB3aXRoIGl0cyBtYW5pZmVzdCwgd2l0aCBQeVBJIG9uIHRydXN0ZWQgcHVibGlzaGluZyBzbyBubyBsb25nLWxpdmVkIHRva2VuIGlzIHN0b3JlZC4gTGljZW5zaW5nIHdhcyB0aGUgYmxvY2tlciBkaXNjb3ZlcmVkIG9uIHRoZSB3YXk6IGN1bHRjYWNoZS1weSBkZWNsYXJlZCBpdHNlbGYgJ1ByaXZhdGUgR2FtZUN1bHQgaW5mcmFzdHJ1Y3R1cmUnIGFuZCBjdWx0Y2FjaGUtcnMgYW5kIGN1bHRtZXNoLXJzIGRlY2xhcmVkIG5vIGxpY2Vuc2UgYXQgYWxsLCBpbnNpZGUgYSByZXBvIHdob3NlIExJQ0VOU0UgaXMgTUlUIGFuZCB3aG9zZSBldmVyeSBvdGhlciBwYWNrYWdlIHNheXMgTUlULiBUaGF0IHdhcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW4gY29zbWV0aWMsIGJlY2F1c2UgYSBwYWNrYWdlIGNhbGxpbmcgaXRzZWxmIHByaXZhdGUgaXMgbm90IG9uZSB0byBwdXNoIHRvIGEgcHVibGljIHJlZ2lzdHJ5OyB0aGUgb3BlcmF0b3IgY29uZmlybWVkIHRoZSBzd2FybSBpcyBNSVQgYW5kIGFsbCB0aHJlZSBub3cgc2F5IHNvLiBjdWx0Y2FjaGUtdHMgaXMgc2NvcGVkIHRvIEBnYW1lY3VsdCBzbyBDdWx0TGliIGhvbGRzIHRoZSBuYW1lIHVuYW1iaWd1b3VzbHkgb24gYSBwdWJsaWMgcmVnaXN0cnksIHdoaWNoIG1vdmVzIEN1bHRMaWIncyBvd24gY3VsdG1lc2gtdHMgYW5kIGN1bHRuZXQtdHMgaW1wb3J0cyB3aXRoIGl0LiBHaG9zdGxpZ2h0J3Mgb3duIHJlcG9pbnQgaXMgbm90IGEgZGVwZW5kZW5jeSBzd2FwOiBnaG9zdGxpZ2h0X3N0YXRlX3N0b3JlLnB5IHB1dHMgdmVuZG9yL2N1bHRjYWNoZS1weS9zcmMgb24gc3lzLnBhdGggcHJlY2lzZWx5IHNvIHRoZSBzdGF0ZSB0b29saW5nIHJ1bnMgZnJvbSBhIGNsb25lIHdpdGggbm8gaW5zdGFsbCwgYW5kIHNlc3Npb24gYm9vdHN0cmFwIGRlcGVuZHMgb24gdGhhdCwgc28gcmVwbGFjaW5nIGl0IHdpdGggYSBwaXAgZGVwZW5kZW5jeSB0cmFkZXMgYSBmb3JrIGZvciBhbiBpbnN0YWxsIHN0ZXAgdW5sZXNzIGJvb3RzdHJhcCBpbnN0YWxscyBpdC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMDI6NDI6MDgrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-04T02:42:08.708617+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T110222Z0000-0031-85c17157816e", "payload": "eyJub3RlIjogIkN1bHRMaWIgbWFpbiBpcyBhdCA4Y2IzYjcyLiBUaGUgY29uc29saWRhdGlvbiB3b3JrIGxhbmRlZCBieSBmYXN0LWZvcndhcmQgcmF0aGVyIHRoYW4gc3F1YXNoLCB3aGljaCBtYXR0ZXJlZCBiZWNhdXNlIGZvdXIgcmVwb3MgcGluIHJldmlzaW9ucyBmcm9tIHRoYXQgYnJhbmNoOiBHaG9zdGxpZ2h0IDg1ZjcwMjQsIEVwaXBoYW55IGFuZCBDb2RleENvbm5lY3RvciBlMTcxZWNhLCBPZGluIGNiZGU5NDAuIEFsbCBmb3VyIHZlcmlmaWVkIGFzIGFuY2VzdG9ycyBvZiBvcmlnaW4vbWFpbiBhZnRlciB0aGUgcHVzaCwgc28gdGhleSByZXNvbHZlIGZyb20gYSBmcmVzaCBjbG9uZTsgYSBzcXVhc2ggbWVyZ2Ugd291bGQgaGF2ZSBvcnBoYW5lZCBldmVyeSBvbmUgb2YgdGhlbSBhbmQgYnJva2VuIHRoZSBidWlsZHMgaXQgd2FzIG1lYW50IHRvIHVuaWZ5LiBSdXN0IHBhY2thZ2VzIGdyZWVuIGF0IHRoZSBtZXJnZSBwb2ludDogY3VsdGNhY2hlLXJzIDUzLCBjdWx0bmV0LXJzIDEwNywgY3VsdG1lc2gtcnMgNy4gVGhlIG1lcmdlZCBicmFuY2ggaXMgZGVsZXRlZCwgaXRzIGNvbW1pdHMgcmVhY2hhYmxlIHRocm91Z2ggbWFpbi4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTE6MDI6MjIrMDA6MDAiLCAidHlwZSI6ICJ2ZXJpZmljYXRpb24ifQ==", "stored_at": "2026-09-04T11:02:22.414751+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T125604Z0000-0032-b4125867c7d2", "payload": "eyJub3RlIjogIk9kaW4gMjdjYzgxNSBjb25zdW1lcyBDdWx0Q2FjaGUgYW5kIEN1bHROZXQgZnJvbSBDdWx0TGliOyB2ZW5kb3IvY3VsdG1lc2gtcnMgaXMgdGhlIGxhc3QgZm9yayBhbmQgaXRzZWxmIGNvbnN1bWVzIEN1bHRMaWIsIHNvIGV4YWN0bHkgb25lIHZlcnNpb24gb2YgZWFjaCBjcmF0ZSBzcGFucyB0aGUgZ3JhcGguIFRoZSBjb21taXQgaGFkIHRvIGNhcnJ5IHRoZSBvcGVyYXRvcidzIGluLWZsaWdodCBDdWx0TWVzaCBSVURQIGRvY3VtZW50IHNlcnZlciBiZWNhdXNlIGl0IGlzIGEgcHJlcmVxdWlzaXRlIHJhdGhlciB0aGFuIGEgY29pbmNpZGVuY2U6IHRoZSBwcmV2aW91c2x5IGNvbW1pdHRlZCBDdWx0TWVzaCBjYWxscyBhc3N1bWVfY29ubmVjdGVkKCksIGEgQ3VsdE5ldCBtZXRob2QgdGhlIGZvcmsgY2FycmllZCBhbmQgQ3VsdExpYiBkb2VzIG5vdCwgc28gdGhlIG9sZCBjb2RlIGNhbm5vdCBidWlsZCBhZ2FpbnN0IEN1bHRMaWIgYXQgYWxsLiBUaGF0IHdhcyBlc3RhYmxpc2hlZCBieSByZXZlcnRpbmcgdGhlIGZpbGUgYW5kIHdhdGNoaW5nIGl0IGZhaWwsIGFmdGVyIGFuIGF0dGVtcHQgdG8gc3BsaXQgdGhlIHJlcG9pbnQgaW50byB0d28gaW5kZXBlbmRlbnRseSBidWlsZGluZyBjb21taXRzLiBUaGUgc2FtZSB0ZXN0IHdhcyBydW4gb24gdGhlIGluLWZsaWdodCBpZHVubi1kYWVtb24gd29yayBhbmQgaXQgcGFzc2VkLCBzbyB0aG9zZSBmaXZlIGZpbGVzIHdlcmUgbGVmdCB1bmNvbW1pdHRlZCBhbmQgdGhlIGNvbW1pdHRlZCB0cmVlIHdhcyB2ZXJpZmllZCB0byBidWlsZCB3aXRob3V0IHRoZW0uIFRocmVlIEN1bHRMaWIgQVBJIGRpZmZlcmVuY2VzIG5lZWRlZCBhZGFwdGluZyBpbiBPZGluOiB0cmFuc3BvcnQgb3B0aW9ucyBjYXJyeSBhIHJlY29ubmVjdF9wb2xpY3kgdGhlIGZvcmsgbGFja2VkIGF0IHNldmVuIHNpdGVzLCBjcmVhdGVfYWNrIGJ1aWxkcyBmcm9tIGFjayBzdGF0ZSBhbmQgY2Fubm90IGZhaWwsIGFuZCB0aGUgdHJhbnNwb3J0IHByb2ZpbGUgb3ducyBlYWNoIGNoYW5uZWwncyByZWxpYWJsZSBleHBpcnkuIE9kaW4ncyBJZHVubiByZWNpcGUgc3RpbGwgZGVjbGFyZXMgcmVxdWlyZWRfZ2l0bGlua3MgPSBbdmVuZG9yL2N1bHRuZXQtcnNdIGFuZCB3aWxsIHJlZnVzZSBhZG1pc3Npb24gdW50aWwgdGhhdCBsaW5lIGlzIGRyb3BwZWQ7IHRoZSBmaXggZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUgYnV0IHRoZSBkZXBsb3ltZW50IGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQsIHNvIGl0IGNvdWxkIG5vdCBiZSBjb21taXR0ZWQuIFNvdXJjZSBjdXN0b2R5IGZvciB0aGUgY29yZSBzdGFjayBub3cgcmVzdHMgb24gdGhlIHJldmlzaW9uIHBpbm5lZCBpbiBDYXJnby5sb2NrIGluc2lkZSB0aGUgZnJvemVuIHNvdXJjZSB0cmVlIHJhdGhlciB0aGFuIG9uIGEgZ2l0bGluayBJZHVubiB2ZXJpZmllcyBkaXJlY3RseS4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTI6NTY6MDQrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-04T12:56:04.405078+00:00", "type": "ghostlight.evidence_record.v0"}

View file

@ -361,5 +361,5 @@ current_status:
scale_checkpoint: Runs 108 through 115 prove load and failure properties of the pre-rebuild body, not world completeness. The 1,200 and 2,400 actor figures are synthetic evaluation profiles only. Production expansion is sparse and causal; structural admission cannot require interest, diversity, name uniqueness, or an actor count. The committed replacement authority suite passes, but no further scale run is admitted until Yggdrasil serves the exact world-v2 release through the rebuilt Idunn recipe/binding/router seam, the live state root satisfies the complete world-v2 allowed-path contract, restart preserves exact journal and digest identity, and no old service, state path, process grant, or route can regain write authority.
presentation_checkpoint: The historical press-layout and seed-ownership split are complete. `notes/historical-newspaper-layout-grammar.md` remains the durable grammar. Manifest v2 at `output/tex/canopy-ledger-run-61-style-1847-flow-723.manifest.toml` independently binds `style_seed=1847`, `flow_seed=723`, frozen source SHA-256 `8f195140f52a40ba705d6a66987146a1500ae89668e5d82b01d1792eb3afb882`, and the final artifact `output/pdf/canopy-ledger-run-61-style-1847-flow-723.pdf`, SHA-256 `a457f4b1702a7a52480e42fce0039f0dbe677ff32958e98f1c412b346237190c`. An identical seed pair produces byte-identical TeX and PDF; changing only flow preserves the exact style section while materially changing a plausible layout, and changing only style preserves flow topology. Cut-first and cut-midstory templates pass visual inspection; the failed split-card template is deleted. Frozen copy/assets, actual PDF `/BM /Multiply`, and economic-layer advertising authority remain invariant.
public_reference_checkpoint: The published public architecture is immutable pre-rebuild history, not current rebuild authority. Canonical Ghostlight commit `15ea0f0` owns five archived pages covering the former overview, authority, pipelines, 43 named production stages, and eight titled elaborators. Site commit `2035e799c2cf7470b2bfc70d5a878d5d3be5e90f` publishes a shared mobile Home/Blog/Docs masthead, visibly marks every Docs page as a teardown archive, and publishes the postmortem `The World Counter Lied` at `https://ghostlight.gamecult.org/Blog/the-world-counter-lied`; live HTTP inspection returned 200 for the postmortem and Docs index and found the masthead and archive banner. Do not use the archived pages to steer the whole-machine rebuild. `docs/architecture/ghostlight-dungeon-mvp.md` owns the adopted target; publish replacement architecture only after the replacement body is implemented and verified. The site repository owns public composition and deployment.
next_action: Review and subtract the uncommitted Idunn projection and bounded RUDP transport, repoint Odin off its vendored CultNet fork onto CultLib `85f7024` as Ghostlight did at `d0510ac`, add UDP route actuation plus an independently persisted post-reload data-plane observation, and verify that focused pass on Yggdrasil. Then implement the directly managed Rust Odin observation/correlation daemon and exact transaction-frozen capability dependency closure. Install rebuilt Idunn, admit Odin first, then CodexConnector and Ghostlight; prove same-generation continuity, fencing, signed health, route cutover, Odin-outage freeze, and negative legacy authority before purging old units, releases, state roots, and the remote acceptance debris. `GameCult/cultcache-rs` and `GameCult/cultnet-rs` now have no readers anywhere: Epiphany `68939b2c` and CodexConnector `6519289` consume CultLib and carry no submodules at all, and Odin's equivalent repoint is done in its worktree. Both repos are retirable now: that work landed on CultLib main by fast-forward at `8cb3b72`, so every pinned revision -- Ghostlight `85f7024`, Epiphany and CodexConnector `e171eca`, Odin `cbde940` -- is an ancestor of main and resolves from a fresh clone. Still vendored are `VoidBot/vendor/cultcache-ts`, `Ghostlight/vendor/cultcache-py` and `Odin/vendor/cultmesh-rs`. The first two vendored because npm and pip cannot take a package from a subdirectory of a git repo the way cargo can, so there was nothing to depend on. CultLib `8cb3b72` adds a publish workflow: tagging `cultcache-ts-v*` or `cultcache-py-v*` ships `@gamecult/cultcache-ts` to npm and `cultcache-py` to PyPI, refusing any tag whose version disagrees with the manifest. Both repoints wait on the first publish, which needs an `NPM_TOKEN` secret and a PyPI trusted publisher. Ghostlight's is not a bare dependency swap: `tools/ghostlight_state_store.py` puts `vendor/cultcache-py/src` on `sys.path` so the state tooling works from a clone with no install step, and session bootstrap depends on that. Detail on the Odin repoint: Odin's vendored CultNet submodule and CultCache copy are gone from its worktree and both come from CultLib, with only `vendor/cultmesh-rs` still vendored and itself consuming CultLib. That repoint is verified but uncommitted, because its one-line edit to `vendor/cultmesh-rs/src/lib.rs` cannot be separated from 433 lines of in-flight CultMesh work and an untracked `rudp_document_server` module. It depends on CultLib branch `claude/cultnet-reliable-expiry` at `cbde940`, which must reach main by merge rather than squash or the pinned rev is orphaned. Live citations name CultLib `85f7024`, a permanent ancestor of main; evidence records keep their pre-consolidation SHAs as dated history. Local run scaffolding, downloaded acceptance copies, and redundant Git bundles are already purged, and `.gitignore` now refuses them.
next_action: Review and subtract the uncommitted Idunn projection and bounded RUDP transport, add UDP route actuation plus an independently persisted post-reload data-plane observation, and verify that focused pass on Yggdrasil. Then implement the directly managed Rust Odin observation/correlation daemon and exact transaction-frozen capability dependency closure. Install rebuilt Idunn, admit Odin first, then CodexConnector and Ghostlight; prove same-generation continuity, fencing, signed health, route cutover, Odin-outage freeze, and negative legacy authority before purging old units, releases, state roots, and the remote acceptance debris. `GameCult/cultcache-rs` and `GameCult/cultnet-rs` now have no readers anywhere: Epiphany `68939b2c` and CodexConnector `6519289` consume CultLib and carry no submodules at all, and Odin `27cc815` does the same. Both repos are retirable now: that work landed on CultLib main by fast-forward at `8cb3b72`, so every pinned revision -- Ghostlight `85f7024`, Epiphany and CodexConnector `e171eca`, Odin `cbde940` -- is an ancestor of main and resolves from a fresh clone. Still vendored are `VoidBot/vendor/cultcache-ts`, `Ghostlight/vendor/cultcache-py` and `Odin/vendor/cultmesh-rs`. The first two vendored because npm and pip cannot take a package from a subdirectory of a git repo the way cargo can, so there was nothing to depend on. CultLib `8cb3b72` adds a publish workflow: tagging `cultcache-ts-v*` or `cultcache-py-v*` ships `@gamecult/cultcache-ts` to npm and `cultcache-py` to PyPI, refusing any tag whose version disagrees with the manifest. Both repoints wait on the first publish, which needs an `NPM_TOKEN` secret and a PyPI trusted publisher. Ghostlight's is not a bare dependency swap: `tools/ghostlight_state_store.py` puts `vendor/cultcache-py/src` on `sys.path` so the state tooling works from a clone with no install step, and session bootstrap depends on that. Detail on the Odin repoint: Odin's vendored CultNet submodule and CultCache copy are gone from its worktree and both come from CultLib, with only `vendor/cultmesh-rs` still vendored and itself consuming CultLib. Odin's commit had to carry the in-flight CultMesh RUDP document server with it: the previously committed CultMesh calls `assume_connected()`, a CultNet method the fork had and CultLib does not, so the old code cannot build against CultLib at all. It depends on CultLib branch `claude/cultnet-reliable-expiry` at `cbde940`, which must reach main by merge rather than squash or the pinned rev is orphaned. Live citations name CultLib `85f7024`, a permanent ancestor of main; evidence records keep their pre-consolidation SHAs as dated history. Local run scaffolding, downloaded acceptance copies, and redundant Git bundles are already purged, and `.gitignore` now refuses them.
gestalt_population: Gestalt Personas own shared population baselines; persistent member deltas own named individuality; WorldKernel materialization and approval-gated fission preserve lineage and identity. Materialisation/folding changes only representation and the exact member delta, advances resolution epoch, and retires the old cover; it has no Gestalt-wide effect authority. Selected actionable member exceptions are mandatory Projector perspective owners, so aggregation cannot silently erase their decision. Presence projection is limited to nearby active leaves and exact-location dormant members, includes reciprocal player relationship evidence, and may propose an earned cast without committing it. Simulation cells are derived covers only.