diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 6e4c4fc..550534e 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -30,4 +30,5 @@ {"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"} {"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."} +{"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.", "status": "ok", "ts": "2026-09-04T12:56:04+00:00", "type": "architecture"} +{"ts": "2026-09-04T13:17:04+00:00", "type": "architecture", "status": "ok", "note": "Swarm triage: every repo under F:/Projects is now clean and pushed. Two findings bear directly on Ghostlight's deployment gate, both caused by the core-stack consolidation removing submodules that Idunn was still told to expect. Odin's deployment/idunn/recipe.toml declared required_gitlinks = [vendor/cultnet-rs], and gamecult-ops' operator binding templates declared gitlinks for vendor/cultcache-rs and vendor/cultnet-rs on codex-connector and vendor/cultnet-rs on odin; Idunn would have refused to admit those targets for gitlinks it could not find. All are corrected and committed at Odin eedce4f and gamecult-ops 8f7ae2a. Ghostlight's own binding is untouched because vendor/cultcache-py and vendor/eve still exist. The rest of the triage: Odin eedce4f also lands 4,167 lines of real in-flight work including UDP route actuation via RouteBinding::stable_socket and an NginxStreamUdp driver, plus the new odin-daemon crate, which cannot compile on Windows because it reads systemd listen file descriptors through std::os::fd, so Linux CI is its first witness. Epiphany 616a2c8e was an interrupted cargo fmt run rather than a feature, finished rather than reverted. Aetheria reclaimed about 1.6GB of scratch checkouts and sandboxed toolchain caches, all verified clean with no unpushed commits first, and the cleanup was scoped to the debris so Unity's Library and Build survived. Two apparently stranded commits turned out to be duplicates already upstream under different SHAs, found by patch-id rather than by subject."} diff --git a/state/ghostlight-state.cultcache.jsonl b/state/ghostlight-state.cultcache.jsonl index 10aab2f..6d34e85 100644 --- a/state/ghostlight-state.cultcache.jsonl +++ b/state/ghostlight-state.cultcache.jsonl @@ -32,3 +32,4 @@ {"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"} +{"key": "2026-09-04T131704Z0000-0033-28cbf7be3c30", "payload": "eyJub3RlIjogIlN3YXJtIHRyaWFnZTogZXZlcnkgcmVwbyB1bmRlciBGOi9Qcm9qZWN0cyBpcyBub3cgY2xlYW4gYW5kIHB1c2hlZC4gVHdvIGZpbmRpbmdzIGJlYXIgZGlyZWN0bHkgb24gR2hvc3RsaWdodCdzIGRlcGxveW1lbnQgZ2F0ZSwgYm90aCBjYXVzZWQgYnkgdGhlIGNvcmUtc3RhY2sgY29uc29saWRhdGlvbiByZW1vdmluZyBzdWJtb2R1bGVzIHRoYXQgSWR1bm4gd2FzIHN0aWxsIHRvbGQgdG8gZXhwZWN0LiBPZGluJ3MgZGVwbG95bWVudC9pZHVubi9yZWNpcGUudG9tbCBkZWNsYXJlZCByZXF1aXJlZF9naXRsaW5rcyA9IFt2ZW5kb3IvY3VsdG5ldC1yc10sIGFuZCBnYW1lY3VsdC1vcHMnIG9wZXJhdG9yIGJpbmRpbmcgdGVtcGxhdGVzIGRlY2xhcmVkIGdpdGxpbmtzIGZvciB2ZW5kb3IvY3VsdGNhY2hlLXJzIGFuZCB2ZW5kb3IvY3VsdG5ldC1ycyBvbiBjb2RleC1jb25uZWN0b3IgYW5kIHZlbmRvci9jdWx0bmV0LXJzIG9uIG9kaW47IElkdW5uIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBhZG1pdCB0aG9zZSB0YXJnZXRzIGZvciBnaXRsaW5rcyBpdCBjb3VsZCBub3QgZmluZC4gQWxsIGFyZSBjb3JyZWN0ZWQgYW5kIGNvbW1pdHRlZCBhdCBPZGluIGVlZGNlNGYgYW5kIGdhbWVjdWx0LW9wcyA4ZjdhZTJhLiBHaG9zdGxpZ2h0J3Mgb3duIGJpbmRpbmcgaXMgdW50b3VjaGVkIGJlY2F1c2UgdmVuZG9yL2N1bHRjYWNoZS1weSBhbmQgdmVuZG9yL2V2ZSBzdGlsbCBleGlzdC4gVGhlIHJlc3Qgb2YgdGhlIHRyaWFnZTogT2RpbiBlZWRjZTRmIGFsc28gbGFuZHMgNCwxNjcgbGluZXMgb2YgcmVhbCBpbi1mbGlnaHQgd29yayBpbmNsdWRpbmcgVURQIHJvdXRlIGFjdHVhdGlvbiB2aWEgUm91dGVCaW5kaW5nOjpzdGFibGVfc29ja2V0IGFuZCBhbiBOZ2lueFN0cmVhbVVkcCBkcml2ZXIsIHBsdXMgdGhlIG5ldyBvZGluLWRhZW1vbiBjcmF0ZSwgd2hpY2ggY2Fubm90IGNvbXBpbGUgb24gV2luZG93cyBiZWNhdXNlIGl0IHJlYWRzIHN5c3RlbWQgbGlzdGVuIGZpbGUgZGVzY3JpcHRvcnMgdGhyb3VnaCBzdGQ6Om9zOjpmZCwgc28gTGludXggQ0kgaXMgaXRzIGZpcnN0IHdpdG5lc3MuIEVwaXBoYW55IDYxNmEyYzhlIHdhcyBhbiBpbnRlcnJ1cHRlZCBjYXJnbyBmbXQgcnVuIHJhdGhlciB0aGFuIGEgZmVhdHVyZSwgZmluaXNoZWQgcmF0aGVyIHRoYW4gcmV2ZXJ0ZWQuIEFldGhlcmlhIHJlY2xhaW1lZCBhYm91dCAxLjZHQiBvZiBzY3JhdGNoIGNoZWNrb3V0cyBhbmQgc2FuZGJveGVkIHRvb2xjaGFpbiBjYWNoZXMsIGFsbCB2ZXJpZmllZCBjbGVhbiB3aXRoIG5vIHVucHVzaGVkIGNvbW1pdHMgZmlyc3QsIGFuZCB0aGUgY2xlYW51cCB3YXMgc2NvcGVkIHRvIHRoZSBkZWJyaXMgc28gVW5pdHkncyBMaWJyYXJ5IGFuZCBCdWlsZCBzdXJ2aXZlZC4gVHdvIGFwcGFyZW50bHkgc3RyYW5kZWQgY29tbWl0cyB0dXJuZWQgb3V0IHRvIGJlIGR1cGxpY2F0ZXMgYWxyZWFkeSB1cHN0cmVhbSB1bmRlciBkaWZmZXJlbnQgU0hBcywgZm91bmQgYnkgcGF0Y2gtaWQgcmF0aGVyIHRoYW4gYnkgc3ViamVjdC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTM6MTc6MDQrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-04T13:17:04.688694+00:00", "type": "ghostlight.evidence_record.v0"}