Distill the evidence ledger to twelve records through one compaction path

44 records to 12: supersession chains collapsed to their survivors,
per-commit receipts folded into the decision they served, standing
pre-rebuild decisions merged into one record map.yaml already owns. Every
removed record is archived verbatim. `compact-evidence` is now the one
durable deletion path; the status tool reads folded scalars, and the
compaction helper imports the map readers instead of carrying copies.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-06 15:03:55 +02:00
commit 18f2eb96a2
8 changed files with 139 additions and 118 deletions

View file

@ -24,7 +24,10 @@ inside another project.
regenerates `evidence.jsonl` from the CultCache evidence document, so edits
and deletions that do not go through `tools/ghostlight_state_store.py` look
applied until the next append restores what you removed. Compaction means
deleting from the store and letting the export follow.
replacing the store's evidence document through
`ghostlight_state.py compact-evidence --replacement <distilled.jsonl>`,
which archives every current record verbatim to
`state/evidence.archive.jsonl` first; the export follows.
- Treat `state/evidence.jsonl` as the distilled durable ledger of what was
learned, verified, rejected, or accepted.
- Treat `notes/ghostlight-implementation-plan.md` as the current implementation
@ -63,6 +66,7 @@ npm run state:status
npm run state:prepare-compaction
& 'C:\Users\Meta\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' '.\tools\ghostlight_state.py' add-evidence --type research --status ok --note '...'
& 'C:\Users\Meta\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' '.\tools\ghostlight_state.py' add-branch --id branch-id --hypothesis '...'
& 'C:\Users\Meta\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' '.\tools\ghostlight_state.py' compact-evidence --replacement '.\distilled.jsonl'
```
## Session Bootstrap And Re-entry Protocol

View file

@ -328,3 +328,47 @@
{"note": "Run 104 round19 exposed a frozen-batch duplicate person: ordinals1272/1289 proposed the exact same canonical local ID and name Tarin Vel from adjacent Avelune carrier populations with near-identical content; serial admission failed after commits through1288. The round owner now canonicalizes exact local IDs, retains the earliest dispatch, publishes an immutable supersession checkpoint for later duplicates, excludes them from commit/session journals, and lets demand remeasure. Existing-world ID rejection remains with the shared validator. 500 library tests, 19 strategic-smoke tests, and all-target check pass.", "status": "ok", "ts": "2026-08-31T23:41:09+00:00", "type": "correction"}
{"note": "Immutable Run 109 proved Nemesis paging and the 240-cell dispatch at 2,400 subjects, banked 226 of 240 cell terminals, then isolated 14 connector-frame failures: six Projector frames serialized inactive constituent dossiers and eight Interpreter frames serialized unbounded activity-target permissions. Bounded decision-owner projection plus Interpreter target inspection preserves full private authority while keeping model frames bounded; 505 library tests and 20 strategic-smoke tests pass.", "status": "ok", "ts": "2026-09-01T01:29:25+00:00", "type": "verification"}
{"note": "Run 110 retried only Run 109's 14 failed cells and eliminated connector-frame failures, but 13 Interpreters exhausted agent steps by using target inspection as directory assistance. The corrected owner deterministically projects bounded exact canonical names from lived and Persona text before inference, removes the Interpreter query command, preserves full private permissions, and passes 505 library plus 20 strategic-smoke tests.", "status": "ok", "ts": "2026-09-01T01:52:59+00:00", "type": "verification"}
{"note": "VoidBot social intelligence is a first-class Ghostlight consumer: appraiser and relationship/perception training must support human-facing reads, grounded opinions, uncertainty, repair signals, and opinion updates over repeated interaction, not only fictional scene mutation.", "status": "accepted", "ts": "2026-05-02T14:41:30+00:00", "type": "architecture"}
{"note": "Generated environment images are accepted only as concept/material reference for illustrated IF. Multi-angle or branch-consistent replay needs a durable scene-set/blockout/layout source with named cameras and staging slots; imagegen should paint over camera-specific visual input rather than preserve room topology from memory.", "status": "ok", "ts": "2026-05-04T11:20:03+00:00", "type": "visual-doctrine"}
{"note": "Coordinator seam correction: future training-shaped loops should sandbox coordinator turns as their own promptable organ. Codex acts as meta-coordinator, preparing inputs, launching/reviewing workers, labeling interventions, and wiring structured state; raw coordinator training data must not be silently collapsed into omniscient chat steering.", "status": "ok", "ts": "2026-05-04T17:14:29+00:00", "type": "architecture"}
{"note": "Character cognition seam: Ghostlight machinery should be maximally smart, but characters must reason and socially maneuver only to the level supported by their modeled intelligence, culture, role, experience, stress, and state. Coordinator/narrator prose may translate opaque high-context tactics for reader legibility without granting that explanation to characters.", "status": "ok", "ts": "2026-05-04T18:44:45+00:00", "type": "architecture"}
{"note": "CultCache wire contract clarified: DatabaseEntry payloads must be MessagePack arrays indexed by explicit field keys with nil gaps for reserved/deleted slots; cultcache-py now exposes define_database_entry_type for that contract and CultLib generator was patched to preserve sparse key slots.", "status": "accepted", "ts": "2026-05-06T03:57:10+00:00", "type": "architecture"}
{"note": "Ghostlight agent-state schema is now the first shared cross-runtime payload contract. CultNet clients should carry ghostlight.agent_state.v0 unchanged inside typed document envelopes, with CultLib-style auth/session semantics handled by the transport layer rather than bespoke per-repo glue.", "status": "accepted", "ts": "2026-05-06T04:49:20+00:00", "type": "architecture"}
{"branch": "codex/ghostlight-dungeon-mvp", "note": "Multiplayer is an intended post-solo extension of the existing one-WorldKernel, many-actor authority model. Multiple authenticated humans will control distinct actors through the same campaign mailbox, perception gates, initiative, and atomic commit path; no party prompt or room-state authority is introduced. The paid alpha remains single-player while multiresolution Gestalt proof stays the immediate forge priority.", "status": "accepted", "ts": "2026-08-18T14:36:02+00:00", "type": "design"}
{"note": "DELVE/HOLD boundary: live Ghostlight WorldKernel, multiresolution agency, typed transitions, persistence, and receipts are reusable, but current InstitutionState and strategic resource handles do not implement HOLD quantities, prices, recipes, capacity, inventories, orders, contracts, or conservation. Delvehold therefore retains quantitative economy authority; a forced ontology may bypass world generation but never WorldKernel validation. Owner witnesses: crates/ghostlight-dungeon/src/domain.rs and F:\\Projects\\Delvehold\\Delvehold\\Game Design\\Shared World\\World State Model.md.", "status": "ok", "ts": "2026-08-26T00:50:11+00:00", "type": "architecture"}
{"note": "Delvehold is a proving consumer of Ghostlight's generic world-simulation API, not a Ghostlight integration organ. Ghostlight may add only generic capabilities: one seed admission primitive shared by compiler and consumer producers, generic externally owned subject authority, consumer-supplied effect schemas, and typed proposals and receipts. The greathold ID, all delvehold.* bindings, and detailed projection/economy translation remain Delvehold-owned. Cells and WorldKernel never switch on consumer-specific names.", "status": "ok", "ts": "2026-08-26T15:55:05+00:00", "type": "architecture"}
{"note": "Supersedes the 2026-08-26T15:51 research note only where it called Delvehold the redirected primary play target: Delvehold is the first proving consumer of the generic world API, while adversarial single-player Dungeon play remains an active regression and context-discovery path. Implemented one compiler/consumer WorldSeed admission transaction, institution-scoped ExternalSubjectAuthority, WorldKernel-owned revisioned snapshots, atomic strategic-wave proposals, acknowledgement receipts, and typed loopback CultNet RUDP operations. Consumer-specific IDs and quantitative economy semantics remain outside Ghostlight.", "status": "ok", "ts": "2026-08-26T16:46:55+00:00", "type": "architecture"}
{"note": "The generic external authority/snapshot contract admits both institution and Gestalt subjects. This closes the Delvehold sovereign-gestalt requirement without adding a Delvehold-specific type: one tagged ExternalSubjectProjection carries either canonical shape, WorldKernel validates exact authority kind and subject ID, refreshes derived agency facets, and keeps the subject non-simulation-eligible while still targetable by foreign proposals.", "status": "ok", "ts": "2026-08-26T17:12:55+00:00", "type": "architecture"}
{"note": "Operator architecture directive: a newspaper is a persistent political/editorial Persona, not a neutral fact summary. Each publication owns audience, remembered beats, narrative memeplex, selective pickup, recurring throughlines, ideological framing, and rivals; competing Delvehold publications may frame one committed event substrate differently. Grounding owns factual assertion/provenance constraints but must preserve clearly legible interpretation, selection, framing, and insinuation. Current Canopy Ledger acceptance remains one publication instance. Do not patch this into the fact-check prompt or derail run43. The detailed owner/state cut belongs in the implementation plan after current acceptance.", "status": "ok", "ts": "2026-08-29T05:15:35+00:00", "type": "correction"}
{"note": "Read-only inspection of immutable Delvehold Run 108 through the focused CampaignStore explorer found a strong authored crisis theater but a failed whole-world complexity shape. The canonical state has 55 locations, 68 institutions, 164 facts, 3,141 Gestalts, 366 Actors, 371 member records, and 2,430 agency relations; exactly 2,400 active leaves are distributed across five realms plus the boundary scene. The eight titled elaborators produce excellent distinct lanes for texture, civic authority, economy, care, politics, secrets, urgent pressure, and numinous meaning. Repeated fission then substitutes taxonomy for novelty: 557 searchable records contain other-unknown, 780 contain residual, many active leaves inherit identical goals, and identity generation repeats public names across distinct people (including at least eight materialized Actors named Mara Venn and four named Nera Quill). Treat this as promising base material for one international crisis region, not yet a plausible entire world or training-ready autonomous narrative substrate. The next world-shape design must gate semantic distinctness, identity diversity, relation/pressure contribution, and horizontal geographic and cultural expansion rather than counting active leaves alone.", "status": "ok", "ts": "2026-09-01T03:06:42+00:00", "type": "research"}
{"note": "Run 115 terminated at revision 2 with 2/8 regions and 0/1 waves after an SSE timeout and a dangling institution location exhausted the model reconciliation workbench. The qualification/verifier/reconciliation/context/timeout/routing patch sequence through 8964a92 did not establish structural ownership. Operator ordered a whole-machine rebuild: one WorldKernel, one typed ontology reducer, one CommandEnvelope/CultCache commit path; NarrativePersona retains Projector-Persona-Interpreter prose isolation, while OperationalAgent is an explicit disjoint controller for operator-shaped cognition. Actor counts and qualitative interest remain evaluation evidence, never admission or completeness authority.", "status": "accepted", "ts": "2026-09-01T12:11:39+00:00", "type": "architecture"}
{"note": "Mind maintenance falsified stale rebuild steering: the map still claimed subtraction had not begun and the handoff later revived Run 111 as an active continuation. Rebuilt the handoff and implementation plan around the adopted one-WorldState authority, landed cuts 64f50de/a144c33, total interpretation, current deletion line, and focused verification gate; chronology remains in Git, evidence, and the frozen teardown map.", "status": "ok", "ts": "2026-09-01T12:37:47+00:00", "type": "architecture"}
{"note": "Rejected and deleted the uncommitted first world.rs foundation after focused tests passed. Review found the public module exposed mutable WorldState and ID issuance, translation-gap inference had become canonical world mutation, empty batches could advance revision, controller commands lacked consumed opportunity/readiness/affordance binding, external ownership was bypassed by world-author authority, command evidence did not bind fact evidence, and batch self-digests were unverifiable. Next cut is private-first: seal WorldKernel/aggregate/journal ownership before reintroducing a minimal reducer behind it.", "status": "rejected", "ts": "2026-09-01T13:03:26+00:00", "type": "architecture"}
{"note": "Commit b53251f lands a private provisional foundation.v0 WorldKernel owner: immutable genesis and exact create retry, sealed authentication evidence, one live CultCache owner, canonical WorldId issuance and reduction kept private, digest/replay recovery, persisted no-op and rejection non-commit, path-identity revocation, and poison/reopen after a simulated post-durable lost acknowledgement. Nine focused world tests pass. The legacy exported kernel remains live; this is the sealed foundation, not cutover.", "status": "ok", "ts": "2026-09-01T14:18:40+00:00", "type": "implementation"}
{"note": "Commit d49b907 makes the replacement Persona interpretation contract structurally total. Persona source prose is immutable noncanonical evidence bound to typed world/controller/opportunity/revision and inference receipts; only exact typed captures may propose state, actual quoted dialogue is required for speech, malformed spans or raw tool payloads become exact whole-source translation gaps, normal step exhaustion adds an unresolved-source gap, and infrastructure interruption discards partial captures and returns the source pending. Ten focused projection tests pass. Legacy exported Persona runners still contain terminal failure paths and do not expose record_gap; they remain deletion targets, so totality is not yet a live-runtime claim.", "status": "ok", "ts": "2026-09-01T14:37:59+00:00", "type": "implementation"}
{"note": "Commits 12ee9f4 and 66ed2ec advance the authority rebuild past the private reducer phase. The first removes 686 lines of dead legacy Elaboration and Mutation ingress without a compatibility writer. The second completes the sealed Draft-to-Active authority loop with canonical controller assignments and affordance grants, revision-bound opportunities, one shared human and autonomous ExerciseDecision reducer, one serialized mailbox, atomic replay, and exact rejection and lost-ack behavior; eighteen focused world tests pass. This is not runtime cutover: the legacy exported kernel and startup, Session Zero, player, autonomous, and recovery paths remain live owners. The next move exposes and wires the replacement runtime identity and mailbox, deleting each old owner without dual-write.", "status": "ok", "ts": "2026-09-01T17:40:32+00:00", "type": "implementation"}
{"note": "Pushed Ghostlight 13d5136 has no legacy runtime modules and one CultCache owner, but Yggdrasil still runs legacy a4080d4. Read-only cutover audit proved the current Idunn path structurally unfit: source/ref/floor policy is duplicated across compiled Rust, raw executable command records, a privileged shell dispatcher, and large gamecult-ops target programs; root Git cannot inspect correctly idunn-owned mirrors; Ghostlight world-v2 purity checks ignore most legacy state; and fixed-port activation stops the incumbent before the candidate is green. Adopted cut: visible target-owned recipes and unit templates, Idunn-configured refs/runner containers/affordances/host bindings, Git and recipe materialization as idunn, narrow sealed privileged consequences, candidate staged health behind a stable router, process/write-lease handoff, atomic route change, and separate deployment versus continuity authority. Do not issue the current Connector or Ghostlight redeploy requests.", "status": "ok", "ts": "2026-09-02T14:10:03+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-02T14:10:03+00:00 Idunn cutover design receipt where it named target-owned unit templates, an executable-affecting-commit selector, and staged health. Odin cebe425 rejects raw repository unit/container templates: targets own constrained launch declarations and the operator-selected workload driver lowers them. Deterministic plan validation retains commit, tree, recipe, and Gitlink facts but does not prove ancestry, signatures, or object custody; a future narrow Idunn source driver must. CultNet 87d0b0f and Odin cebe425 establish Expected, Idunn-observed activation, service-signed Present, process lease before writable state, Odin Ready, and route membership only after Ready. Actuation and Idunn main integration remain absent.", "status": "ok", "ts": "2026-09-02T19:30:00+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-02T19:30:00+00:00 deployment integration checkpoint. Owning Body inspection found CultNet pushed through e542225 (generation-bound activation, lifecycle brake, process lease, provider-observed capabilities, and explicit disagreements) and Odin pushed through d527d72 (exact source freezing and narrow actuator ports), with an uncommitted four-file integration for dynamic systemd isolation, authenticated Ready-only provider selection, protected one-shot activation delivery, and the e542225 gitlink. The remaining deployment owner is not another driver gate: replace control_plane.rs command ownership with exactly DeploymentCommand, DeploymentTransaction, and AdmittedGeneration; persist each of the nine phases before effects; persist prepared activation before start; reject pre-persistence orphans; and atomically complete the transaction with exact admitted-generation CAS. Production cutover remains unproven.", "status": "ok", "ts": "2026-09-03T00:58:55+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-03T00:58:55+00:00 deployment-owner checkpoint. CultNet f4ab237, Odin 65cf2b2, Ghostlight a0b16b9, and CodexConnector ede3c30 land the routed runtime contracts, durable three-record/nine-phase transaction owner, and provider sides. Live admission remains absent. Current Odin projection/RUDP/UDP-route and Rust Odin correlation work is uncommitted; the Nginx route receipt proves configuration plus nginx -T visibility only, not live-worker adoption or packet delivery, so an exact data-plane observation remains required before fence clearance, drain, or cutover acceptance.", "status": "ok", "ts": "2026-09-03T06:13:20+00:00", "type": "research"}
{"note": "Mind and workspace compaction. The evidence ledger was 258 records of which 235 were per-release/per-run receipts, self-consuming falsification chains, and May fixture doctrine already owned by docs/architecture and map hard_boundaries; those moved to state/evidence.archive.jsonl and were deleted from the CultCache evidence document, since evidence.jsonl is a regenerated export and a store-only deletion is the sole durable compaction. Twenty-three records remain: still-binding contracts (CultCache wire format, agent_state.v0, cognition ceiling, image-geometry authority, sandboxed coordinator, VoidBot appraisal, multiplayer extension, the Delvehold boundary set, newspaper-as-Persona) plus the whole rebuild era from Run 108 forward. A duplicate multiplayer note recorded twice under different timestamps was reduced to one. The worktree shed 87MB of untracked debris: three Git bundles whose commits are all ancestors of HEAD, ~60 legacy live-fire run scripts and sftp batches, the forbidden redeploy helpers, downloaded run61-63 acceptance copies whose authoritative roots remain on Yggdrasil and whose frozen copy is digest-bound in output/tex, a redb file created by a stray --help argument, and 71MB of tmp/ legacy campaign caches and newspaper renders. .gitignore now refuses all of it. map.yaml and the handoff had stale frontiers naming 13d5136 and a0b16b9; both now name 6a79cb0.", "status": "ok", "ts": "2026-09-03T20:00:00+00:00", "type": "maintenance"}
{"note": "Core GameCult stack ownership resolved. CultLib is the canonical home for CultCache, CultNet and CultMesh across every runtime because wire parity conformance lives only there; a runtime-specific repo cannot own the engine other runtimes must agree with. The standalone GameCult/cultcache-rs and GameCult/cultnet-rs repos are pre-consolidation origins that kept receiving work after the 5c69bfc import, and Ghostlight became a third lineage by written charter: vendor/README.md declares a locally owned compatible protocol generation, which is duplicate authority over the wire stack held outside the only harness that checks parity. That is why runtime_authority_contracts.rs forked: Ghostlight vendors e542225 while map and handoff declare CultNet f4ab237 authoritative, and the two disagree on whether Present may coexist with a disagreement -- Ghostlight's copy makes them exclusive, f4ab237 separates presence from readiness and gates through into_undisputed_present. Re-vendoring fixes that instance, not the mechanism. CultLib branch claude/consolidate-rust-core-stack commit 34488e8 returns the Rust CultCache engine to CultLib: the standalone body as base (3,714 lines, 46 passing tests) over CultLib's 1,554, with the cultnet-rs RUDP gate passing 20 unchanged. Two CultLib-only commits remain unported debt. cultmesh-rs is homeless: the only Rust CultMesh implementation in existence is 1,363 lines inside Ghostlight's vendor, absent from CultLib and from any repo, so it has never been parity tested against the browser, Kotlin and TypeScript implementations it must interoperate with. Ghostlight must consume CultLib by pinned rev and stop vendoring before the standalone repos are retired.", "status": "ok", "ts": "2026-09-03T21:00:00+00:00", "type": "architecture"}
{"note": "Ghostlight's vendored core-stack fork is retired at d0510ac: cultcache-rs, cultnet-rs and cultmesh-rs now come from CultLib pinned at 85f7024 and vendor/README.md's 'locally owned compatible protocol generation' charter is deleted with them. The predicted migration did not exist. RuntimePresenceCorrelation moving from enum to struct is Odin's side of the contract and no Ghostlight file references it; with line endings normalised the e542225 and f4ab237 copies differ by 132 lines, and the only production change reaching a provider is IdunnExpectedRoute requiring rudp:// schemes for rudp transport, which this service does not use. Ghostlight compiled unchanged and passes 89 workspace tests against the pinned rev. One thing was nearly lost: the vendored transport.rs alone checked a framed payload length against the advertised maximum before allocating, so a four-byte header could otherwise size a buffer to whatever a peer claims; it is now CultLib 85f7024 with a test. Verified by diffing all twelve vendored cultnet files against CultLib before deleting rather than after. vendor/ still holds the cultcache-py and eve submodules; cultcache-py is the same runtime-specific-repo pattern and CultLib carries packages/cultcache-py, but it backs the state tooling rather than the daemon.", "status": "ok", "ts": "2026-09-03T23:13:55+00:00", "type": "architecture"}
{"note": "The pre-existing worktree drift is landed at 751b5c4 and 322cc11. The daemon no longer names GHOSTLIGHT_RUNTIME_ID, GHOSTLIGHT_DUNGEON_BIND or GHOSTLIGHT_DUNGEON_ROOT under management; Idunn supplies the runtime id in the activation bundle, the candidate bind, and the state root as a recipe argument binding. That binding is required rather than cosmetic: Odin deployment.rs refuses a stateful workload with no state_root argument binding and refuses one whose binding disagrees with the admitted root, so the old recipe could not have deployed. The acceptance harness identity is renamed GHOSTLIGHT_ACCEPTANCE_RUNTIME_ID so a test-supplied id cannot be read as the managed one. 89 workspace tests pass. Provenance finding that changes the cultnet-rs retirement gate: the contract revisions the Mind cites, CultNet f4ab237 and its predecessor e542225, are not ancestors of CultLib main and exist only on GameCult/cultnet-rs branch codex/idunn-runtime-authority-contract. Their content is on CultLib main at 85f7024, verified by symbol, but the SHAs are not, because the consolidation ported commits forward rather than merging them. Deleting GameCult/cultnet-rs therefore breaks every citation in map.yaml, the handoff, both notes and the evidence ledger. Odin 65cf2b2 and d527d72 are likewise off Odin main, on pushed branch codex/ygg-idunn-independent-bootstrap, which is resolvable and needs no action.", "status": "ok", "ts": "2026-09-03T23:26:24+00:00", "type": "architecture"}
{"note": "Live contract citations are re-anchored from CultNet f4ab237 onto CultLib 85f7024 across map.yaml, the handoff, and both notes. Verified before swapping rather than assuming equivalence: at 85f7024 packages/cultnet-rs carries IDUNN_LIFECYCLE_BRAKE_* distinct from IDUNN_DEPLOYMENT_BRAKE_*, IdunnProcessWriteLeaseRecord, GameCultRuntimeCapability, OdinTopologyDisagreement with disagreements() and into_undisputed_present separating presence from readiness, generation-bound IdunnRuntimeActivationRecord with a distinct activation-proof signing purpose, and IdunnExpectedRoute rejecting non-rudp:// endpoints for RUDP routes. All six cited contracts hold. 85f7024 is both CultLib's current main head and a permanent ancestor of main, so the citation survives every future advance, which f4ab237 never could. Two citations were instructions rather than descriptions and could not be swapped mechanically: map.yaml next_action and the handoff next gate both said advance Odin to CultNet f4ab237, which would have advanced Odin deeper into the repo being deleted. Both now say repoint Odin off its vendored CultNet fork onto CultLib 85f7024 as Ghostlight did at d0510ac. Evidence records keep their pre-consolidation SHAs as dated history; this record is the resolution key for reading them. The retirement gate for GameCult/cultnet-rs is now one item: Odin's vendored CultNet gitlink is the last reader of that repo.", "status": "ok", "ts": "2026-09-03T23:51:32+00:00", "type": "architecture"}
{"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"}
{"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"}
{"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"}
{"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.", "status": "ok", "ts": "2026-09-04T13:17:04+00:00", "type": "architecture"}
{"note": "Run 115 root cause is vocabulary-shaped, not model-shaped. Legacy transition.rs used caller-supplied SubjectRef{kind,id:String}, two-phase AdmitEntity{initial_components}, and a flat Vec<PermittedWorldMutation>, so a dangling reference like inst:kharad-road-keepers -> loc:kharad-rhythm-road was a runtime discovery rather than an unrepresentable input; reconciliation existed only to repair that class and exhausted after four steps. Depth lived in free strings (posture, resource_kind, capability_id, persistent_features), so the prior attempt to fix shallowness added model tribunals (ElaboratorTitle, WorldComplexity*Qualification, *Verification) as compensators for an ontology with nowhere to hold depth. Adopted cut: reducer-issued typed ID namespaces, draft handles resolved inside one closed WorldPatch before any ID allocates, twelve decision-constraining components, and elaboration that answers a derived CausalBoundary instead of running waves and quotas. Recorded in docs/architecture/ghostlight-world-ontology.md.", "status": "ok", "ts": "2026-09-04T13:39:08+00:00", "type": "research"}
{"note": "Ontology v2 unifies elaboration and character action under one WorldPatch and one deterministic verifier. Three decisions change future belief: (1) affordances are world-authored data (preconditions, effect slots, weighted outcome bands) over a closed 29-operation kernel set, so genre lives in the seed and the kernel never learns one; (2) uncertainty is resolved by kernel entropy seeded from world/revision/command, so no model ever chooses success, which deletes the legacy wave-level outcome resolver; (3) proposals bind to a scope digest of the components their verification reads rather than the whole state digest, so eight elaborator loops and many subjects do not serialize on one revision, replacing the stale-means-discard rule. Elaborator tools are a derived projection of the operation set and cannot drift. ghostlight-multiresolution-agency.md is demoted to teardown evidence keeping only resumable sessions, compact drafts, and the complete mismatch set.", "status": "ok", "ts": "2026-09-04T14:01:12+00:00", "type": "research"}
{"note": "Operator correction, 2026-09-04: the 2,400-subject / 240-cell / 10% cover profile is a design target, not a load fixture. A world feels alive only when actors at every level pursue their own goals; that requires generating that detail first and then choking multiresolution simulation so attention is scarce and selection is forced. The mvp doc sentence calling the profile \"test data, not a production elaboration target\" was teardown-era text, not operator design, and is amended. Ontology v2 now carries: an authored WorldScaleIntent with a structurally counted deficit (qualified subject = active, one controller, one Goal commitment, one affordance) that elaborators pursue after boundaries; a budgeted connected cover every tick with singleton detail cells and grouped coarse cells; per-constituent attribution and partitioned knowledge in grouped cells; debt rotation. Still deleted: gestalt as canonical identity, arena knowledge union, semantic qualification and verification models, fission quotas as mutation, string identifiers.", "status": "ok", "ts": "2026-09-04T14:14:10+00:00", "type": "research"}
{"note": "Codex CLI fan-out that must commit cannot run in a linked git worktree. A linked worktree's .git is a file pointing into the parent repo's .git/worktrees/, which is outside the Codex sandbox's writable roots, so every git commit fails with index.lock Permission denied; the default sandbox also blocks outbound push. All four world workers died on this on 2026-09-04. Fix: full clones at the same paths (F:/Projects/Ghostlight-worlds/<world>, F:/Projects/<Lore>-worktrees/ghostlight-worlds; .git is a directory despite the directory name) and launch with -c sandbox_workspace_write.network_access=true. Uncommitted worker output was banked by hand to codex/world-<world> and codex/ghostlight-worlds before the worktrees were removed. Rule for any future Codex fan-out that writes: give each worker a clone whose entire .git lives under its own writable root, and grant network if it must push.", "status": "ok", "ts": "2026-09-04T14:18:47+00:00", "type": "verification"}
{"note": "Supersedes the 2026-09-04T14:18 clone-plus-network record, which was necessary but not sufficient. The Codex workspace-write sandbox keeps .git read-only even when the whole clone sits under the writable root, so a Codex worker can never commit or push regardless of clone layout or network grant. Rule for any Codex fan-out that must produce committed work: the worker writes files only; a supervisor outside the sandbox commits and pushes the clone after the worker exits. The world elaborator scheduler (C:/Users/Meta/.claude/worlds/Invoke-Elaborators.ps1) does this per slot to slot/<world>/<title>/<stamp> branches in both the Ghostlight world clone and the lore clone, recording completions in logs/elab-done.csv; integration into codex/world-<world> and codex/ghostlight-worlds is a separate deliberate pass. First banked fixture: Delvehold cistern-house-nine-breaker-test, codex/world-delvehold 9374fd0.", "status": "ok", "ts": "2026-09-04T15:04:24+00:00", "type": "verification"}
{"note": "Plan step 6, the ontology widening, is complete: ten passes landed on codex/ghostlight-dungeon-mvp between 2026-09-04 and 2026-09-05, each as a Hands cut in an isolation worktree, a Soul falsification in the same tree, and a fast-forward integration. Pass tips: 1 typed ID namespaces and closed patch resolution 5e53beb; 2 Position/Route/containment and scope-digest binding e99af63; 3 Custody/Dependency/conservation d2805fe; 4 world-authored affordance catalog with kernel-entropy bands 0f21a49; 5 Authority/Selection/Redress dbe176d; 6 Knowledge/Channel/Fact standing cb6a126; 7 clock, Commitment, Pressure, derived CausalBoundary and the structural answer rule 1852ddd; 8 confined elaborator lane and derived tool catalog 3ed3868; 9 budgeted connected cover with tick-driven fairness ceil(N/R), R = cells minus urgency slots, verified 22 ticks at the 2,400/240 profile 8aebfb6; 10 confined external consumer ingress over POST /cultnet/world-patch a1fd645. The kernel now holds 12 decision-constraining component kinds over 27 named operations under one WorldPatch, one reducer, one CAS commit, one decode bound for both authoring lanes, and three confined SystemCapability arms (Clock, Elaborator, Consumer); the action vocabulary is data in the seed and the kernel never learns a genre. The eleven plan invariants hold structurally at the end of the series per Soul: one deterministic reducer and atomic commit; kernel-derived authority; one controller per scope with no fallback or double action; total interpretation with exact gaps; deterministic structural rejection without a model verifier; scoped knowledge until explicit communication; external-consumer sovereignty; sparse causal sufficiency with counts as evidence only; restart reconstructs the exact world; IDs allocated only inside an admitted reduction; opportunities bound to a scope digest rather than a revision. The pairing invariant is re-decided at three gates by doctrine, not by a repair loop. Test surface grew from 43 world / 83 crate at the series start to 313 world / 357 crate source functions at a1fd645 (focused world:: run 312 / 352). Two design decisions remain with the operator and are recorded nowhere else durable: whether a refused coupled constituent may re-submit once inside the same tick, to be decided with the submitted-versus-committed number in hand; and the authority for an owner-only Eve world.run_tick command. The next seam after the series is the outbound consumer response batch and a non-loopback CultMesh lease.", "status": "ok", "ts": "2026-09-05T02:13:22+00:00", "type": "implementation"}
{"note": "First local live smoke of the rebuilt kernel (2026-09-05): production tick driver, cover, Persona membrane, operational lane, clock, and elaboration sweep ran three ticks against a real CodexConnector (head daemon, ChatGPT auth) on a genesis world; revision 2->11, two singleton cells per tick, Persona spoke each tick, elaboration clean (nothing derived to answer). Wall time 40-70 s per tick. The road works; prose is thin because genesis is three subjects in one room with one affordance, which is the seed-producer gap. Runbook: notes/local-live-smoke.md. Stale: the pre-pass-6 ignored acceptance test in controllers.rs fails at NoAudience.", "status": "ok", "ts": "2026-09-05T13:42:18+00:00", "type": "verification"}
{"note": "Seeded live smoke passed (2026-09-05): from the Kalsa Public vault, one seed session authored six qualified persons into Low Sere in one round (39 s), deficit 6->0; the world activated with nine subjects and six boundaries; three ticks of eight singleton cells each (95-123 s) with the seeded people speaking to each other by name. Twelve runs; every failure was on the road and each became a rule: one credential family (real codex home), strict schemas (anyOf, typed tags, offline totality test), a supported Persona model, expiry skew vs response timeout, ids beside labels in the brief, seed budget 24 with parallel calls and budget-end submit, content-addressed provider request ids, the commitment shape rule in the tool description, and the placement rule. The harness fails on an empty seed or a silent world.", "status": "ok", "ts": "2026-09-05T17:36:41+00:00", "type": "verification"}
{"note": "Claude Agent SDK as a transport (2026-09-06, research-agent-sdk.md): the system prompt is fully replaceable, built-ins strippable (tools: []), CLAUDE.md loading stoppable (settingSources: []), and assistant tool_use blocks are returned verbatim with usage and stop reason; but no silent capture exists (every denied tool call becomes a tool result the model reads), a Responses-style input list cannot be replayed (the harness owns the assistant side), there is no request id or replay, and each query is one subprocess. Chosen shape: execute-through, Ghostlight tools registered as in-process SDK tools whose handler hands each call back to Ghostlight for the result its own evaluator computes. Rejected: a Messages-API backend (no API spend), a backend inside CodexConnector (deliberately isolated Codex fork). Nothing installed locally: no claude CLI, no SDK, no subscription credential; the operator must install and log in before a road run.", "status": "ok", "ts": "2026-09-05T22:25:31+00:00", "type": "research"}
{"note": "Claude SDK inference port landed (plan step 11, 2026-09-06): a second InferencePort over a Node sidecar on the Claude Agent SDK, routed per lane by model prefix; checkpoint integrity proved transport-agnostic so both ports share one prepare_invocation; the sidecar computes no tool result, Rust answers every call through a per-lane ToolResultOracle that is the evaluator own fold (divergence impossible by construction). Lesson that changes how any future transport is judged: a transport-side validator is a second semantics. The SDK Zod layer stripped unknown keys and refused missing fields before the handler, so a claude lane silently admitted what the connector refused and quarantined what the connector recorded as a gap; the fix is one validator on both transports (Rust decoder), the sidecar handing arguments through unvalidated. Not yet run on the road: no Claude Code CLI or subscription credential on this machine. Receipt is the SDK message, a named stopgap liability; exit is a Messages-API port when API budget exists, deleting the sidecar whole.", "status": "ok", "ts": "2026-09-06T00:35:37+00:00", "type": "implementation"}

View file

@ -1,44 +1,12 @@
{"note": "VoidBot social intelligence is a first-class Ghostlight consumer: appraiser and relationship/perception training must support human-facing reads, grounded opinions, uncertainty, repair signals, and opinion updates over repeated interaction, not only fictional scene mutation.", "status": "accepted", "ts": "2026-05-02T14:41:30+00:00", "type": "architecture"}
{"note": "Generated environment images are accepted only as concept/material reference for illustrated IF. Multi-angle or branch-consistent replay needs a durable scene-set/blockout/layout source with named cameras and staging slots; imagegen should paint over camera-specific visual input rather than preserve room topology from memory.", "status": "ok", "ts": "2026-05-04T11:20:03+00:00", "type": "visual-doctrine"}
{"note": "Coordinator seam correction: future training-shaped loops should sandbox coordinator turns as their own promptable organ. Codex acts as meta-coordinator, preparing inputs, launching/reviewing workers, labeling interventions, and wiring structured state; raw coordinator training data must not be silently collapsed into omniscient chat steering.", "status": "ok", "ts": "2026-05-04T17:14:29+00:00", "type": "architecture"}
{"note": "Character cognition seam: Ghostlight machinery should be maximally smart, but characters must reason and socially maneuver only to the level supported by their modeled intelligence, culture, role, experience, stress, and state. Coordinator/narrator prose may translate opaque high-context tactics for reader legibility without granting that explanation to characters.", "status": "ok", "ts": "2026-05-04T18:44:45+00:00", "type": "architecture"}
{"note": "CultCache wire contract clarified: DatabaseEntry payloads must be MessagePack arrays indexed by explicit field keys with nil gaps for reserved/deleted slots; cultcache-py now exposes define_database_entry_type for that contract and CultLib generator was patched to preserve sparse key slots.", "status": "accepted", "ts": "2026-05-06T03:57:10+00:00", "type": "architecture"}
{"note": "Ghostlight agent-state schema is now the first shared cross-runtime payload contract. CultNet clients should carry ghostlight.agent_state.v0 unchanged inside typed document envelopes, with CultLib-style auth/session semantics handled by the transport layer rather than bespoke per-repo glue.", "status": "accepted", "ts": "2026-05-06T04:49:20+00:00", "type": "architecture"}
{"branch": "codex/ghostlight-dungeon-mvp", "note": "Multiplayer is an intended post-solo extension of the existing one-WorldKernel, many-actor authority model. Multiple authenticated humans will control distinct actors through the same campaign mailbox, perception gates, initiative, and atomic commit path; no party prompt or room-state authority is introduced. The paid alpha remains single-player while multiresolution Gestalt proof stays the immediate forge priority.", "status": "accepted", "ts": "2026-08-18T14:36:02+00:00", "type": "design"}
{"note": "DELVE/HOLD boundary: live Ghostlight WorldKernel, multiresolution agency, typed transitions, persistence, and receipts are reusable, but current InstitutionState and strategic resource handles do not implement HOLD quantities, prices, recipes, capacity, inventories, orders, contracts, or conservation. Delvehold therefore retains quantitative economy authority; a forced ontology may bypass world generation but never WorldKernel validation. Owner witnesses: crates/ghostlight-dungeon/src/domain.rs and F:\\Projects\\Delvehold\\Delvehold\\Game Design\\Shared World\\World State Model.md.", "status": "ok", "ts": "2026-08-26T00:50:11+00:00", "type": "architecture"}
{"note": "Delvehold is a proving consumer of Ghostlight's generic world-simulation API, not a Ghostlight integration organ. Ghostlight may add only generic capabilities: one seed admission primitive shared by compiler and consumer producers, generic externally owned subject authority, consumer-supplied effect schemas, and typed proposals and receipts. The greathold ID, all delvehold.* bindings, and detailed projection/economy translation remain Delvehold-owned. Cells and WorldKernel never switch on consumer-specific names.", "status": "ok", "ts": "2026-08-26T15:55:05+00:00", "type": "architecture"}
{"note": "Supersedes the 2026-08-26T15:51 research note only where it called Delvehold the redirected primary play target: Delvehold is the first proving consumer of the generic world API, while adversarial single-player Dungeon play remains an active regression and context-discovery path. Implemented one compiler/consumer WorldSeed admission transaction, institution-scoped ExternalSubjectAuthority, WorldKernel-owned revisioned snapshots, atomic strategic-wave proposals, acknowledgement receipts, and typed loopback CultNet RUDP operations. Consumer-specific IDs and quantitative economy semantics remain outside Ghostlight.", "status": "ok", "ts": "2026-08-26T16:46:55+00:00", "type": "architecture"}
{"note": "The generic external authority/snapshot contract admits both institution and Gestalt subjects. This closes the Delvehold sovereign-gestalt requirement without adding a Delvehold-specific type: one tagged ExternalSubjectProjection carries either canonical shape, WorldKernel validates exact authority kind and subject ID, refreshes derived agency facets, and keeps the subject non-simulation-eligible while still targetable by foreign proposals.", "status": "ok", "ts": "2026-08-26T17:12:55+00:00", "type": "architecture"}
{"note": "Operator architecture directive: a newspaper is a persistent political/editorial Persona, not a neutral fact summary. Each publication owns audience, remembered beats, narrative memeplex, selective pickup, recurring throughlines, ideological framing, and rivals; competing Delvehold publications may frame one committed event substrate differently. Grounding owns factual assertion/provenance constraints but must preserve clearly legible interpretation, selection, framing, and insinuation. Current Canopy Ledger acceptance remains one publication instance. Do not patch this into the fact-check prompt or derail run43. The detailed owner/state cut belongs in the implementation plan after current acceptance.", "status": "ok", "ts": "2026-08-29T05:15:35+00:00", "type": "correction"}
{"note": "Read-only inspection of immutable Delvehold Run 108 through the focused CampaignStore explorer found a strong authored crisis theater but a failed whole-world complexity shape. The canonical state has 55 locations, 68 institutions, 164 facts, 3,141 Gestalts, 366 Actors, 371 member records, and 2,430 agency relations; exactly 2,400 active leaves are distributed across five realms plus the boundary scene. The eight titled elaborators produce excellent distinct lanes for texture, civic authority, economy, care, politics, secrets, urgent pressure, and numinous meaning. Repeated fission then substitutes taxonomy for novelty: 557 searchable records contain other-unknown, 780 contain residual, many active leaves inherit identical goals, and identity generation repeats public names across distinct people (including at least eight materialized Actors named Mara Venn and four named Nera Quill). Treat this as promising base material for one international crisis region, not yet a plausible entire world or training-ready autonomous narrative substrate. The next world-shape design must gate semantic distinctness, identity diversity, relation/pressure contribution, and horizontal geographic and cultural expansion rather than counting active leaves alone.", "status": "ok", "ts": "2026-09-01T03:06:42+00:00", "type": "research"}
{"note": "Run 115 terminated at revision 2 with 2/8 regions and 0/1 waves after an SSE timeout and a dangling institution location exhausted the model reconciliation workbench. The qualification/verifier/reconciliation/context/timeout/routing patch sequence through 8964a92 did not establish structural ownership. Operator ordered a whole-machine rebuild: one WorldKernel, one typed ontology reducer, one CommandEnvelope/CultCache commit path; NarrativePersona retains Projector-Persona-Interpreter prose isolation, while OperationalAgent is an explicit disjoint controller for operator-shaped cognition. Actor counts and qualitative interest remain evaluation evidence, never admission or completeness authority.", "status": "accepted", "ts": "2026-09-01T12:11:39+00:00", "type": "architecture"}
{"note": "Mind maintenance falsified stale rebuild steering: the map still claimed subtraction had not begun and the handoff later revived Run 111 as an active continuation. Rebuilt the handoff and implementation plan around the adopted one-WorldState authority, landed cuts 64f50de/a144c33, total interpretation, current deletion line, and focused verification gate; chronology remains in Git, evidence, and the frozen teardown map.", "status": "ok", "ts": "2026-09-01T12:37:47+00:00", "type": "architecture"}
{"note": "Rejected and deleted the uncommitted first world.rs foundation after focused tests passed. Review found the public module exposed mutable WorldState and ID issuance, translation-gap inference had become canonical world mutation, empty batches could advance revision, controller commands lacked consumed opportunity/readiness/affordance binding, external ownership was bypassed by world-author authority, command evidence did not bind fact evidence, and batch self-digests were unverifiable. Next cut is private-first: seal WorldKernel/aggregate/journal ownership before reintroducing a minimal reducer behind it.", "status": "rejected", "ts": "2026-09-01T13:03:26+00:00", "type": "architecture"}
{"note": "Commit b53251f lands a private provisional foundation.v0 WorldKernel owner: immutable genesis and exact create retry, sealed authentication evidence, one live CultCache owner, canonical WorldId issuance and reduction kept private, digest/replay recovery, persisted no-op and rejection non-commit, path-identity revocation, and poison/reopen after a simulated post-durable lost acknowledgement. Nine focused world tests pass. The legacy exported kernel remains live; this is the sealed foundation, not cutover.", "status": "ok", "ts": "2026-09-01T14:18:40+00:00", "type": "implementation"}
{"note": "Commit d49b907 makes the replacement Persona interpretation contract structurally total. Persona source prose is immutable noncanonical evidence bound to typed world/controller/opportunity/revision and inference receipts; only exact typed captures may propose state, actual quoted dialogue is required for speech, malformed spans or raw tool payloads become exact whole-source translation gaps, normal step exhaustion adds an unresolved-source gap, and infrastructure interruption discards partial captures and returns the source pending. Ten focused projection tests pass. Legacy exported Persona runners still contain terminal failure paths and do not expose record_gap; they remain deletion targets, so totality is not yet a live-runtime claim.", "status": "ok", "ts": "2026-09-01T14:37:59+00:00", "type": "implementation"}
{"note": "Commits 12ee9f4 and 66ed2ec advance the authority rebuild past the private reducer phase. The first removes 686 lines of dead legacy Elaboration and Mutation ingress without a compatibility writer. The second completes the sealed Draft-to-Active authority loop with canonical controller assignments and affordance grants, revision-bound opportunities, one shared human and autonomous ExerciseDecision reducer, one serialized mailbox, atomic replay, and exact rejection and lost-ack behavior; eighteen focused world tests pass. This is not runtime cutover: the legacy exported kernel and startup, Session Zero, player, autonomous, and recovery paths remain live owners. The next move exposes and wires the replacement runtime identity and mailbox, deleting each old owner without dual-write.", "status": "ok", "ts": "2026-09-01T17:40:32+00:00", "type": "implementation"}
{"note": "Pushed Ghostlight 13d5136 has no legacy runtime modules and one CultCache owner, but Yggdrasil still runs legacy a4080d4. Read-only cutover audit proved the current Idunn path structurally unfit: source/ref/floor policy is duplicated across compiled Rust, raw executable command records, a privileged shell dispatcher, and large gamecult-ops target programs; root Git cannot inspect correctly idunn-owned mirrors; Ghostlight world-v2 purity checks ignore most legacy state; and fixed-port activation stops the incumbent before the candidate is green. Adopted cut: visible target-owned recipes and unit templates, Idunn-configured refs/runner containers/affordances/host bindings, Git and recipe materialization as idunn, narrow sealed privileged consequences, candidate staged health behind a stable router, process/write-lease handoff, atomic route change, and separate deployment versus continuity authority. Do not issue the current Connector or Ghostlight redeploy requests.", "status": "ok", "ts": "2026-09-02T14:10:03+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-02T14:10:03+00:00 Idunn cutover design receipt where it named target-owned unit templates, an executable-affecting-commit selector, and staged health. Odin cebe425 rejects raw repository unit/container templates: targets own constrained launch declarations and the operator-selected workload driver lowers them. Deterministic plan validation retains commit, tree, recipe, and Gitlink facts but does not prove ancestry, signatures, or object custody; a future narrow Idunn source driver must. CultNet 87d0b0f and Odin cebe425 establish Expected, Idunn-observed activation, service-signed Present, process lease before writable state, Odin Ready, and route membership only after Ready. Actuation and Idunn main integration remain absent.", "status": "ok", "ts": "2026-09-02T19:30:00+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-02T19:30:00+00:00 deployment integration checkpoint. Owning Body inspection found CultNet pushed through e542225 (generation-bound activation, lifecycle brake, process lease, provider-observed capabilities, and explicit disagreements) and Odin pushed through d527d72 (exact source freezing and narrow actuator ports), with an uncommitted four-file integration for dynamic systemd isolation, authenticated Ready-only provider selection, protected one-shot activation delivery, and the e542225 gitlink. The remaining deployment owner is not another driver gate: replace control_plane.rs command ownership with exactly DeploymentCommand, DeploymentTransaction, and AdmittedGeneration; persist each of the nine phases before effects; persist prepared activation before start; reject pre-persistence orphans; and atomically complete the transaction with exact admitted-generation CAS. Production cutover remains unproven.", "status": "ok", "ts": "2026-09-03T00:58:55+00:00", "type": "research"}
{"note": "Supersedes the 2026-09-03T00:58:55+00:00 deployment-owner checkpoint. CultNet f4ab237, Odin 65cf2b2, Ghostlight a0b16b9, and CodexConnector ede3c30 land the routed runtime contracts, durable three-record/nine-phase transaction owner, and provider sides. Live admission remains absent. Current Odin projection/RUDP/UDP-route and Rust Odin correlation work is uncommitted; the Nginx route receipt proves configuration plus nginx -T visibility only, not live-worker adoption or packet delivery, so an exact data-plane observation remains required before fence clearance, drain, or cutover acceptance.", "status": "ok", "ts": "2026-09-03T06:13:20+00:00", "type": "research"}
{"note": "Mind and workspace compaction. The evidence ledger was 258 records of which 235 were per-release/per-run receipts, self-consuming falsification chains, and May fixture doctrine already owned by docs/architecture and map hard_boundaries; those moved to state/evidence.archive.jsonl and were deleted from the CultCache evidence document, since evidence.jsonl is a regenerated export and a store-only deletion is the sole durable compaction. Twenty-three records remain: still-binding contracts (CultCache wire format, agent_state.v0, cognition ceiling, image-geometry authority, sandboxed coordinator, VoidBot appraisal, multiplayer extension, the Delvehold boundary set, newspaper-as-Persona) plus the whole rebuild era from Run 108 forward. A duplicate multiplayer note recorded twice under different timestamps was reduced to one. The worktree shed 87MB of untracked debris: three Git bundles whose commits are all ancestors of HEAD, ~60 legacy live-fire run scripts and sftp batches, the forbidden redeploy helpers, downloaded run61-63 acceptance copies whose authoritative roots remain on Yggdrasil and whose frozen copy is digest-bound in output/tex, a redb file created by a stray --help argument, and 71MB of tmp/ legacy campaign caches and newspaper renders. .gitignore now refuses all of it. map.yaml and the handoff had stale frontiers naming 13d5136 and a0b16b9; both now name 6a79cb0.", "status": "ok", "ts": "2026-09-03T20:00:00+00:00", "type": "maintenance"}
{"note": "Core GameCult stack ownership resolved. CultLib is the canonical home for CultCache, CultNet and CultMesh across every runtime because wire parity conformance lives only there; a runtime-specific repo cannot own the engine other runtimes must agree with. The standalone GameCult/cultcache-rs and GameCult/cultnet-rs repos are pre-consolidation origins that kept receiving work after the 5c69bfc import, and Ghostlight became a third lineage by written charter: vendor/README.md declares a locally owned compatible protocol generation, which is duplicate authority over the wire stack held outside the only harness that checks parity. That is why runtime_authority_contracts.rs forked: Ghostlight vendors e542225 while map and handoff declare CultNet f4ab237 authoritative, and the two disagree on whether Present may coexist with a disagreement -- Ghostlight's copy makes them exclusive, f4ab237 separates presence from readiness and gates through into_undisputed_present. Re-vendoring fixes that instance, not the mechanism. CultLib branch claude/consolidate-rust-core-stack commit 34488e8 returns the Rust CultCache engine to CultLib: the standalone body as base (3,714 lines, 46 passing tests) over CultLib's 1,554, with the cultnet-rs RUDP gate passing 20 unchanged. Two CultLib-only commits remain unported debt. cultmesh-rs is homeless: the only Rust CultMesh implementation in existence is 1,363 lines inside Ghostlight's vendor, absent from CultLib and from any repo, so it has never been parity tested against the browser, Kotlin and TypeScript implementations it must interoperate with. Ghostlight must consume CultLib by pinned rev and stop vendoring before the standalone repos are retired.", "status": "ok", "ts": "2026-09-03T21:00:00+00:00", "type": "architecture"}
{"note": "Ghostlight's vendored core-stack fork is retired at d0510ac: cultcache-rs, cultnet-rs and cultmesh-rs now come from CultLib pinned at 85f7024 and vendor/README.md's 'locally owned compatible protocol generation' charter is deleted with them. The predicted migration did not exist. RuntimePresenceCorrelation moving from enum to struct is Odin's side of the contract and no Ghostlight file references it; with line endings normalised the e542225 and f4ab237 copies differ by 132 lines, and the only production change reaching a provider is IdunnExpectedRoute requiring rudp:// schemes for rudp transport, which this service does not use. Ghostlight compiled unchanged and passes 89 workspace tests against the pinned rev. One thing was nearly lost: the vendored transport.rs alone checked a framed payload length against the advertised maximum before allocating, so a four-byte header could otherwise size a buffer to whatever a peer claims; it is now CultLib 85f7024 with a test. Verified by diffing all twelve vendored cultnet files against CultLib before deleting rather than after. vendor/ still holds the cultcache-py and eve submodules; cultcache-py is the same runtime-specific-repo pattern and CultLib carries packages/cultcache-py, but it backs the state tooling rather than the daemon.", "status": "ok", "ts": "2026-09-03T23:13:55+00:00", "type": "architecture"}
{"note": "The pre-existing worktree drift is landed at 751b5c4 and 322cc11. The daemon no longer names GHOSTLIGHT_RUNTIME_ID, GHOSTLIGHT_DUNGEON_BIND or GHOSTLIGHT_DUNGEON_ROOT under management; Idunn supplies the runtime id in the activation bundle, the candidate bind, and the state root as a recipe argument binding. That binding is required rather than cosmetic: Odin deployment.rs refuses a stateful workload with no state_root argument binding and refuses one whose binding disagrees with the admitted root, so the old recipe could not have deployed. The acceptance harness identity is renamed GHOSTLIGHT_ACCEPTANCE_RUNTIME_ID so a test-supplied id cannot be read as the managed one. 89 workspace tests pass. Provenance finding that changes the cultnet-rs retirement gate: the contract revisions the Mind cites, CultNet f4ab237 and its predecessor e542225, are not ancestors of CultLib main and exist only on GameCult/cultnet-rs branch codex/idunn-runtime-authority-contract. Their content is on CultLib main at 85f7024, verified by symbol, but the SHAs are not, because the consolidation ported commits forward rather than merging them. Deleting GameCult/cultnet-rs therefore breaks every citation in map.yaml, the handoff, both notes and the evidence ledger. Odin 65cf2b2 and d527d72 are likewise off Odin main, on pushed branch codex/ygg-idunn-independent-bootstrap, which is resolvable and needs no action.", "status": "ok", "ts": "2026-09-03T23:26:24+00:00", "type": "architecture"}
{"note": "Live contract citations are re-anchored from CultNet f4ab237 onto CultLib 85f7024 across map.yaml, the handoff, and both notes. Verified before swapping rather than assuming equivalence: at 85f7024 packages/cultnet-rs carries IDUNN_LIFECYCLE_BRAKE_* distinct from IDUNN_DEPLOYMENT_BRAKE_*, IdunnProcessWriteLeaseRecord, GameCultRuntimeCapability, OdinTopologyDisagreement with disagreements() and into_undisputed_present separating presence from readiness, generation-bound IdunnRuntimeActivationRecord with a distinct activation-proof signing purpose, and IdunnExpectedRoute rejecting non-rudp:// endpoints for RUDP routes. All six cited contracts hold. 85f7024 is both CultLib's current main head and a permanent ancestor of main, so the citation survives every future advance, which f4ab237 never could. Two citations were instructions rather than descriptions and could not be swapped mechanically: map.yaml next_action and the handoff next gate both said advance Odin to CultNet f4ab237, which would have advanced Odin deeper into the repo being deleted. Both now say repoint Odin off its vendored CultNet fork onto CultLib 85f7024 as Ghostlight did at d0510ac. Evidence records keep their pre-consolidation SHAs as dated history; this record is the resolution key for reading them. The retirement gate for GameCult/cultnet-rs is now one item: Odin's vendored CultNet gitlink is the last reader of that repo.", "status": "ok", "ts": "2026-09-03T23:51:32+00:00", "type": "architecture"}
{"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"}
{"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"}
{"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"}
{"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.", "status": "ok", "ts": "2026-09-04T13:17:04+00:00", "type": "architecture"}
{"note": "Run 115 root cause is vocabulary-shaped, not model-shaped. Legacy transition.rs used caller-supplied SubjectRef{kind,id:String}, two-phase AdmitEntity{initial_components}, and a flat Vec<PermittedWorldMutation>, so a dangling reference like inst:kharad-road-keepers -> loc:kharad-rhythm-road was a runtime discovery rather than an unrepresentable input; reconciliation existed only to repair that class and exhausted after four steps. Depth lived in free strings (posture, resource_kind, capability_id, persistent_features), so the prior attempt to fix shallowness added model tribunals (ElaboratorTitle, WorldComplexity*Qualification, *Verification) as compensators for an ontology with nowhere to hold depth. Adopted cut: reducer-issued typed ID namespaces, draft handles resolved inside one closed WorldPatch before any ID allocates, twelve decision-constraining components, and elaboration that answers a derived CausalBoundary instead of running waves and quotas. Recorded in docs/architecture/ghostlight-world-ontology.md.", "status": "ok", "ts": "2026-09-04T13:39:08+00:00", "type": "research"}
{"note": "Ontology v2 unifies elaboration and character action under one WorldPatch and one deterministic verifier. Three decisions change future belief: (1) affordances are world-authored data (preconditions, effect slots, weighted outcome bands) over a closed 29-operation kernel set, so genre lives in the seed and the kernel never learns one; (2) uncertainty is resolved by kernel entropy seeded from world/revision/command, so no model ever chooses success, which deletes the legacy wave-level outcome resolver; (3) proposals bind to a scope digest of the components their verification reads rather than the whole state digest, so eight elaborator loops and many subjects do not serialize on one revision, replacing the stale-means-discard rule. Elaborator tools are a derived projection of the operation set and cannot drift. ghostlight-multiresolution-agency.md is demoted to teardown evidence keeping only resumable sessions, compact drafts, and the complete mismatch set.", "status": "ok", "ts": "2026-09-04T14:01:12+00:00", "type": "research"}
{"note": "Operator correction, 2026-09-04: the 2,400-subject / 240-cell / 10% cover profile is a design target, not a load fixture. A world feels alive only when actors at every level pursue their own goals; that requires generating that detail first and then choking multiresolution simulation so attention is scarce and selection is forced. The mvp doc sentence calling the profile \"test data, not a production elaboration target\" was teardown-era text, not operator design, and is amended. Ontology v2 now carries: an authored WorldScaleIntent with a structurally counted deficit (qualified subject = active, one controller, one Goal commitment, one affordance) that elaborators pursue after boundaries; a budgeted connected cover every tick with singleton detail cells and grouped coarse cells; per-constituent attribution and partitioned knowledge in grouped cells; debt rotation. Still deleted: gestalt as canonical identity, arena knowledge union, semantic qualification and verification models, fission quotas as mutation, string identifiers.", "status": "ok", "ts": "2026-09-04T14:14:10+00:00", "type": "research"}
{"note": "Codex CLI fan-out that must commit cannot run in a linked git worktree. A linked worktree's .git is a file pointing into the parent repo's .git/worktrees/, which is outside the Codex sandbox's writable roots, so every git commit fails with index.lock Permission denied; the default sandbox also blocks outbound push. All four world workers died on this on 2026-09-04. Fix: full clones at the same paths (F:/Projects/Ghostlight-worlds/<world>, F:/Projects/<Lore>-worktrees/ghostlight-worlds; .git is a directory despite the directory name) and launch with -c sandbox_workspace_write.network_access=true. Uncommitted worker output was banked by hand to codex/world-<world> and codex/ghostlight-worlds before the worktrees were removed. Rule for any future Codex fan-out that writes: give each worker a clone whose entire .git lives under its own writable root, and grant network if it must push.", "status": "ok", "ts": "2026-09-04T14:18:47+00:00", "type": "verification"}
{"note": "Supersedes the 2026-09-04T14:18 clone-plus-network record, which was necessary but not sufficient. The Codex workspace-write sandbox keeps .git read-only even when the whole clone sits under the writable root, so a Codex worker can never commit or push regardless of clone layout or network grant. Rule for any Codex fan-out that must produce committed work: the worker writes files only; a supervisor outside the sandbox commits and pushes the clone after the worker exits. The world elaborator scheduler (C:/Users/Meta/.claude/worlds/Invoke-Elaborators.ps1) does this per slot to slot/<world>/<title>/<stamp> branches in both the Ghostlight world clone and the lore clone, recording completions in logs/elab-done.csv; integration into codex/world-<world> and codex/ghostlight-worlds is a separate deliberate pass. First banked fixture: Delvehold cistern-house-nine-breaker-test, codex/world-delvehold 9374fd0.", "status": "ok", "ts": "2026-09-04T15:04:24+00:00", "type": "verification"}
{"note": "Plan step 6, the ontology widening, is complete: ten passes landed on codex/ghostlight-dungeon-mvp between 2026-09-04 and 2026-09-05, each as a Hands cut in an isolation worktree, a Soul falsification in the same tree, and a fast-forward integration. Pass tips: 1 typed ID namespaces and closed patch resolution 5e53beb; 2 Position/Route/containment and scope-digest binding e99af63; 3 Custody/Dependency/conservation d2805fe; 4 world-authored affordance catalog with kernel-entropy bands 0f21a49; 5 Authority/Selection/Redress dbe176d; 6 Knowledge/Channel/Fact standing cb6a126; 7 clock, Commitment, Pressure, derived CausalBoundary and the structural answer rule 1852ddd; 8 confined elaborator lane and derived tool catalog 3ed3868; 9 budgeted connected cover with tick-driven fairness ceil(N/R), R = cells minus urgency slots, verified 22 ticks at the 2,400/240 profile 8aebfb6; 10 confined external consumer ingress over POST /cultnet/world-patch a1fd645. The kernel now holds 12 decision-constraining component kinds over 27 named operations under one WorldPatch, one reducer, one CAS commit, one decode bound for both authoring lanes, and three confined SystemCapability arms (Clock, Elaborator, Consumer); the action vocabulary is data in the seed and the kernel never learns a genre. The eleven plan invariants hold structurally at the end of the series per Soul: one deterministic reducer and atomic commit; kernel-derived authority; one controller per scope with no fallback or double action; total interpretation with exact gaps; deterministic structural rejection without a model verifier; scoped knowledge until explicit communication; external-consumer sovereignty; sparse causal sufficiency with counts as evidence only; restart reconstructs the exact world; IDs allocated only inside an admitted reduction; opportunities bound to a scope digest rather than a revision. The pairing invariant is re-decided at three gates by doctrine, not by a repair loop. Test surface grew from 43 world / 83 crate at the series start to 313 world / 357 crate source functions at a1fd645 (focused world:: run 312 / 352). Two design decisions remain with the operator and are recorded nowhere else durable: whether a refused coupled constituent may re-submit once inside the same tick, to be decided with the submitted-versus-committed number in hand; and the authority for an owner-only Eve world.run_tick command. The next seam after the series is the outbound consumer response batch and a non-loopback CultMesh lease.", "status": "ok", "ts": "2026-09-05T02:13:22+00:00", "type": "implementation"}
{"note": "First local live smoke of the rebuilt kernel (2026-09-05): production tick driver, cover, Persona membrane, operational lane, clock, and elaboration sweep ran three ticks against a real CodexConnector (head daemon, ChatGPT auth) on a genesis world; revision 2->11, two singleton cells per tick, Persona spoke each tick, elaboration clean (nothing derived to answer). Wall time 40-70 s per tick. The road works; prose is thin because genesis is three subjects in one room with one affordance, which is the seed-producer gap. Runbook: notes/local-live-smoke.md. Stale: the pre-pass-6 ignored acceptance test in controllers.rs fails at NoAudience.", "status": "ok", "ts": "2026-09-05T13:42:18+00:00", "type": "verification"}
{"note": "Seeded live smoke passed (2026-09-05): from the Kalsa Public vault, one seed session authored six qualified persons into Low Sere in one round (39 s), deficit 6->0; the world activated with nine subjects and six boundaries; three ticks of eight singleton cells each (95-123 s) with the seeded people speaking to each other by name. Twelve runs; every failure was on the road and each became a rule: one credential family (real codex home), strict schemas (anyOf, typed tags, offline totality test), a supported Persona model, expiry skew vs response timeout, ids beside labels in the brief, seed budget 24 with parallel calls and budget-end submit, content-addressed provider request ids, the commitment shape rule in the tool description, and the placement rule. The harness fails on an empty seed or a silent world.", "status": "ok", "ts": "2026-09-05T17:36:41+00:00", "type": "verification"}
{"note": "Claude Agent SDK as a transport (2026-09-06, research-agent-sdk.md): the system prompt is fully replaceable, built-ins strippable (tools: []), CLAUDE.md loading stoppable (settingSources: []), and assistant tool_use blocks are returned verbatim with usage and stop reason; but no silent capture exists (every denied tool call becomes a tool result the model reads), a Responses-style input list cannot be replayed (the harness owns the assistant side), there is no request id or replay, and each query is one subprocess. Chosen shape: execute-through, Ghostlight tools registered as in-process SDK tools whose handler hands each call back to Ghostlight for the result its own evaluator computes. Rejected: a Messages-API backend (no API spend), a backend inside CodexConnector (deliberately isolated Codex fork). Nothing installed locally: no claude CLI, no SDK, no subscription credential; the operator must install and log in before a road run.", "status": "ok", "ts": "2026-09-05T22:25:31+00:00", "type": "research"}
{"ts": "2026-09-06T00:35:37+00:00", "type": "implementation", "status": "ok", "note": "Claude SDK inference port landed (plan step 11, 2026-09-06): a second InferencePort over a Node sidecar on the Claude Agent SDK, routed per lane by model prefix; checkpoint integrity proved transport-agnostic so both ports share one prepare_invocation; the sidecar computes no tool result, Rust answers every call through a per-lane ToolResultOracle that is the evaluator own fold (divergence impossible by construction). Lesson that changes how any future transport is judged: a transport-side validator is a second semantics. The SDK Zod layer stripped unknown keys and refused missing fields before the handler, so a claude lane silently admitted what the connector refused and quarantined what the connector recorded as a gap; the fix is one validator on both transports (Rust decoder), the sidecar handing arguments through unvalidated. Not yet run on the road: no Claude Code CLI or subscription credential on this machine. Receipt is the SDK message, a named stopgap liability; exit is a Messages-API port when API budget exists, deleting the sidecar whole."}
{"note": "Delvehold boundary, merged from four records of 2026-08-26. Delvehold is the first proving consumer of Ghostlight's generic world-simulation API, not an integration organ; adversarial single-player Dungeon play remains a regression and context-discovery path. Ghostlight adds only generic capability: one seed admission path shared by produced and consumer seeds, generic externally owned subject authority that admits institution and population-scale subjects through one tagged projection, consumer-supplied effect schemas, and typed proposals and receipts. Delvehold retains quantitative economy authority (quantities, prices, recipes, capacity, inventories, orders, contracts, conservation); Ghostlight resource handles never impersonate them. A forced ontology may bypass world generation but never kernel validation. The greathold ID and every delvehold.* binding stay Delvehold-owned; no cell or kernel switches on a consumer name. The legacy implementation those records described (WorldSeed transaction, ExternalSubjectAuthority, loopback RUDP operations) was torn down; the live implementation is the pass-10 confined consumer ingress in docs/architecture/ghostlight-world-consumer-api.md.", "status": "accepted", "ts": "2026-08-26T17:12:55+00:00", "type": "architecture"}
{"note": "Standing pre-rebuild decisions, merged from seven records dated 2026-05-02 to 2026-08-29; map.yaml hard_boundaries and mission own the binding text. (1) VoidBot appraisal: appraiser and relationship/perception training must support human-facing reads, grounded opinions, uncertainty, repair signals, and opinion updates over repeated contact, not only fictional scene mutation. (2) Generated environment images are concept and material reference only; multi-angle or branch-consistent replay needs a durable scene-set source with named cameras and staging slots. (3) Coordinator turns are a sandboxed promptable organ with exact visible input, raw output, and labeled interventions; the meta-coordinator never collapses them into omniscient chat steering. (4) Character cognition is modeled state: the machinery is maximally smart, characters reason and maneuver only to the level their modeled state supports, and narrator prose may explain tactics for the reader without granting that explanation to characters. (5) ghostlight.agent_state.v0 is the shared cross-runtime payload contract, carried unchanged inside typed CultNet envelopes. (6) Multiplayer extends the one-WorldKernel, many-actor authority model: humans control distinct canonical actors through the same commit path, with no party prompt or room-state authority. (7) A newspaper is a persistent political/editorial Persona owning audience, remembered beats, framing, selective pickup, throughlines, and rivals; grounding constrains factual assertion and provenance while preserving legible interpretation; only the economic layer supplies advertisers.", "status": "accepted", "ts": "2026-08-29T05:15:35+00:00", "type": "architecture"}
{"note": "Sealing the replacement kernel, 2026-09-01, four records merged; git owns the commits (b53251f, d49b907, 12ee9f4, 66ed2ec). The first uncommitted world.rs foundation passed its focused tests and was deleted anyway: it exposed mutable WorldState and ID issuance, let translation-gap inference become canonical mutation, let empty batches advance revision, left controller commands without consumed opportunity, readiness, and affordance binding, and made batch self-digests unverifiable. The rule that came out of it: seal private WorldKernel, aggregate, and journal ownership first, then reintroduce a minimal reducer behind it; never publish mutable world types or an ID issuer for test or adapter convenience. The Persona interpretation contract is structurally total: source prose is immutable noncanonical evidence bound to typed receipts, only exact typed captures propose state, actual quoted dialogue is required for speech, malformed spans and step exhaustion become whole-source gaps, and infrastructure interruption returns the source pending. Legacy ingresses were deleted without a compatibility writer.", "status": "ok", "ts": "2026-09-01T17:40:32+00:00", "type": "implementation"}
{"note": "Deployment authority, merged from a four-record supersession chain, 2026-09-02 to 2026-09-03; map.yaml live_architecture.deployment_authority owns the full current rule. The read-only cutover audit found the old Idunn path structurally unfit: source, ref, and floor policy duplicated across compiled Rust, raw executable command records, a privileged shell dispatcher, and gamecult-ops target programs; root Git unable to inspect idunn-owned mirrors; world-v2 purity checks ignoring most legacy state; fixed-port activation stopping the incumbent before the candidate was green. Adopted: target-owned visible recipes with constrained launch declarations (raw unit and container templates rejected; the operator-selected workload driver lowers them), Idunn-configured refs, runner, and host bindings, Git and recipe materialization as the Idunn identity, Expected published by plan, service-signed Present, a process write lease before writable state, Odin-derived Ready, route membership only after Ready, and deployment separate from continuity. The owner is exactly DeploymentCommand, DeploymentTransaction, and AdmittedGeneration with nine persisted phases before effects (Odin 65cf2b2; contracts on CultLib 85f7024; provider sides Ghostlight 6a79cb0 and CodexConnector ede3c30). Live admission remains absent. The Nginx route receipt proves configuration plus nginx -T visibility only, so an independently persisted data-plane observation is required before fence clearance, drain, or cutover acceptance. Do not issue the old Connector or Ghostlight redeploy helpers.", "status": "accepted", "ts": "2026-09-03T06:13:20+00:00", "type": "research"}
{"note": "Core-stack consolidation, merged from ten records, 2026-09-03 to 2026-09-04. CultLib is the canonical home for CultCache, CultNet, and CultMesh across every runtime because wire-parity conformance lives only there; Ghostlight consumes all three by pinned rev 85f7024 (d0510ac), a permanent ancestor of CultLib main, and its vendored fork charter is deleted. Resolution key for older records: CultNet e542225 and f4ab237 and Odin d527d72 and 65cf2b2 were never on their repos' main branches; their content is on CultLib 85f7024 and Odin branch codex/ygg-idunn-independent-bootstrap, ported forward rather than merged, so those SHAs are dated history and GameCult/cultnet-rs may be retired. A whole-file symbol comparison, not a diff of recent changes, found four real capabilities in the forks (reliable send expiry owned by the transport profile, snapshot and per-entry compare-exchange, a framed-length check before allocation), all ported with tests; every other fork under F:/Projects held reach rather than divergence, and each consumer pinning a different branch was the combinatorial reason separate repos failed. CultLib main landed by fast-forward at 8cb3b72, so every consumer pin (Ghostlight 85f7024, Epiphany and CodexConnector e171eca, Odin cbde940) resolves from a fresh clone; a squash would have orphaned all of them. Odin eedce4f consumes CultLib, its recipe no longer requires gitlinks, and gamecult-ops 8f7ae2a drops the phantom gitlinks Idunn would have refused; odin-daemon reads systemd file descriptors and compiles only on Linux. Non-Rust forks persist for distribution, not divergence: npm and pip cannot consume a package from a git subdirectory, so CultLib 8cb3b72 adds tag-triggered publishing (@gamecult/cultcache-ts, cultcache-py on PyPI, MIT confirmed by the operator). Ghostlight keeps vendor/cultcache-py on sys.path deliberately so the state tooling runs from a bare clone; replacing it means session bootstrap must install.", "status": "accepted", "ts": "2026-09-04T13:17:04+00:00", "type": "architecture"}
{"note": "Why the whole-machine rebuild, merged from three records, 2026-09-01 to 2026-09-04. Run 108 inspection: 2,400 active leaves across five realms with strong authored crisis theater, but repeated fission substituted taxonomy for novelty (557 other-unknown records, 780 residual, inherited identical goals, eight distinct Actors named Mara Venn); counting active leaves measured nothing about world shape. Run 115 terminated at revision 2, regions 2/8, waves 0/1, after an SSE timeout and a dangling institution location exhausted four reconciliation steps; the qualification, verifier, reconciliation, timeout, and routing patch sequence through 8964a92 never established ownership, and the operator ordered one WorldKernel, one typed reducer, one CommandEnvelope/CultCache commit path. The root cause was vocabulary-shaped, not model-shaped: caller-supplied string SubjectRefs, two-phase entity admission, and a flat mutation list made a dangling reference a runtime discovery rather than an unrepresentable input, and depth lived in free strings, so the model tribunals (ElaboratorTitle, WorldComplexity qualification and verification) were compensators for an ontology with nowhere to hold depth. Adopted cut: reducer-issued typed ID namespaces, draft handles resolved inside one closed WorldPatch before any ID allocates, twelve decision-constraining components, and elaboration that answers a derived CausalBoundary instead of running waves and quotas. Counts, cover ratios, interest, and diversity are evaluation evidence, never admission or completeness authority. Run 115's root at /var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-0a83034-115 and invocation d9254cd9b77946aebcf7a7fdae821402 stay immutable; do not resume it.", "status": "accepted", "ts": "2026-09-04T13:39:08+00:00", "type": "research"}
{"note": "Ontology v2 decisions and the scale directive, 2026-09-04, two records merged; docs/architecture/ghostlight-world-ontology.md owns the vocabulary. Elaboration and character action lower under one WorldPatch and one deterministic verifier. Affordances are world-authored data (preconditions, effect slots, weighted outcome bands) over a closed operation set, so genre lives in the seed and the kernel never learns one; uncertainty resolves by kernel entropy seeded from world, revision, and command, so no model ever chooses success; proposals bind to a scope digest of the components their verification reads rather than the whole state digest, so many subjects and elaborators do not serialize on one revision. Elaborator tools are a derived projection of the operation set and cannot drift. Operator correction, preserve in intent: the 2,400-subject / 240-cell / 10% cover profile is deliberate design, not a load fixture; a world feels alive only when actors at every level pursue their own goals, so that detail is generated first and multiresolution simulation is then choked so attention is scarce and selection is forced. The seed carries a WorldScaleIntent whose structurally counted deficit (an active subject with one controller, one Goal commitment, one affordance) the elaborators pursue after boundaries; a budgeted connected cover runs every tick with singleton detail cells and grouped coarse cells. Deleted for good: gestalt as canonical identity, arena knowledge union, semantic qualification and verification models, fission quotas as mutation, string identifiers.", "status": "accepted", "ts": "2026-09-04T14:14:10+00:00", "type": "research"}
{"note": "Codex CLI fan-out cannot commit. A linked git worktree fails because its .git file points outside the sandbox's writable roots, and a full clone fails too: the Codex workspace-write sandbox keeps .git read-only even under the writable root, so a Codex worker can never commit or push regardless of clone layout or network grant. Rule for any Codex fan-out that must produce committed work: the worker writes files only; a supervisor outside the sandbox commits and pushes the clone after the worker exits. The elaborator scheduler (C:/Users/Meta/.claude/worlds) does this per slot to slot/<world>/<title>/<stamp> branches in the Ghostlight world clone and the lore clone; integration into codex/world-<world> and codex/ghostlight-worlds is a separate deliberate pass, still owed. Clones live at F:/Projects/Ghostlight-worlds/<world> and F:/Projects/<Lore>-worktrees/ghostlight-worlds (full clones despite the name).", "status": "ok", "ts": "2026-09-04T15:04:24+00:00", "type": "verification"}
{"note": "Plan step 6, the ontology widening, is complete: ten passes landed on codex/ghostlight-dungeon-mvp, 2026-09-04 to 2026-09-05, each a Hands cut in an isolation worktree, a Soul falsification in the same tree, and a gated integration (pass tips are in git history and the handoff). The kernel holds twelve decision-constraining component kinds over a pinned operation catalog under one WorldPatch, one reducer, one CAS commit, one decode bound for both authoring lanes, and three confined SystemCapability arms (Clock, Elaborator, Consumer). Soul's series verdict: the eleven plan invariants hold structurally (one reducer and atomic commit; kernel-derived authority; one controller per scope with no fallback or double action; total interpretation with exact gaps; deterministic structural rejection without a model verifier; scoped knowledge until explicit communication; external-consumer sovereignty; sparse causal sufficiency with counts as evidence only; restart reconstructs the exact world; IDs allocated only inside an admitted reduction; opportunities bound to a scope digest rather than a revision); the pairing invariant is re-decided at three gates by doctrine, not by a repair loop. The budgeted cover verified 22 ticks at the 2,400/240 profile with fairness ceil(N/R), R being cells minus urgency slots. Two decisions stay with the operator and are recorded nowhere else durable: whether a refused coupled constituent may re-submit once inside the same tick, decided with the submitted-versus-committed number in hand; and the authority for an owner-only Eve world.run_tick command.", "status": "ok", "ts": "2026-09-05T02:13:22+00:00", "type": "implementation"}
{"note": "The rebuilt kernel runs on the road, 2026-09-05; runbook notes/local-live-smoke.md. Genesis smoke: tick driver, cover, Persona membrane, operational lane, clock, and elaboration sweep ran three ticks against a real CodexConnector; the road worked and the prose was thin because genesis is three subjects in one room, which made the seed producer an evidenced gap rather than an argued one. Seeded smoke: from the Kalsa Public vault one seed session authored six qualified persons into Low Sere in one round, deficit 6 to 0, and three ticks of eight singleton cells had the seeded people speaking to each other by name. Twelve runs were needed; every failure was on the road, not in the kernel, and each is now a rule in the tree: one credential family (the operator's real codex home), strict schemas (anyOf, typed tags, an offline totality test over both lanes), a Persona model the account supports, connector expiry skew below the response timeout, canonical ids printed beside labels, a seed round budget with parallel calls and budget-end submit, content-addressed provider request ids, the commitment shape rule in the tool description, and the placement rule. The harness fails on an empty seed or a silent world. The Codex subscription lapsed during this series and the runs consumed half the monthly free quota; no Codex road run is possible until it is renewed.", "status": "ok", "ts": "2026-09-05T17:36:41+00:00", "type": "verification"}
{"note": "Claude SDK inference port, plan step 11, 2026-09-06, two records merged. Research: the Agent SDK's system prompt is fully replaceable, built-ins strippable, CLAUDE.md loading stoppable, and assistant tool_use blocks come back verbatim with usage; but there is no silent capture, no replayable input list, no request id, and each query is one subprocess. Rejected: a Messages-API backend (no API budget) and a backend inside CodexConnector (a deliberately isolated Codex fork; nothing goes into it). Landed: a second InferencePort over a Node sidecar, routed per lane by model prefix, execute-through: the sidecar computes no tool result and Rust answers every call through a per-lane ToolResultOracle that is the evaluator's own fold, so divergence is impossible by construction; both ports share one prepare_invocation. Lesson that changes how any future transport is judged: a transport-side validator is a second semantics. The SDK's Zod layer stripped unknown keys and refused missing fields before the handler ran, so a claude lane silently admitted what the connector refused; the fix is one validator on both transports, the Rust decoder, with the sidecar handing arguments through unvalidated. Residual liability: a wrong-typed property reaches Rust as absent. The receipt is the SDK message, a named stopgap; the exit is a Messages-API port when API budget exists, deleting the sidecar whole. Not yet run on the road: the operator must install the Claude Code CLI and log in first; Ghostlight never holds the credential.", "status": "ok", "ts": "2026-09-06T00:35:37+00:00", "type": "implementation"}
{"ts": "2026-09-06T13:03:22+00:00", "type": "maintenance", "status": "ok", "note": "Evidence ledger distilled 2026-09-06: 44 records to 12. Supersession chains collapsed to their survivors, per-commit implementation receipts folded into the decision they served, and the pre-rebuild standing decisions merged into one record because map.yaml owns their binding text. Every removed record is appended verbatim to state/evidence.archive.jsonl. The compaction ran through tools/ghostlight_state.py compact-evidence, now the one durable path: evidence.jsonl is a regenerated export, so a store-only replacement is the only deletion that sticks."}

View file

@ -1,45 +1,13 @@
{"key": "__global__", "payload": "eyJicmFuY2hlcyI6IFtdfQ==", "stored_at": "2026-05-06T03:45:25.021649+00:00", "type": "ghostlight.branches.v0"}
{"key": "2026-05-02T144130Z0000-0013-25ae28d75c46", "payload": "eyJub3RlIjogIlZvaWRCb3Qgc29jaWFsIGludGVsbGlnZW5jZSBpcyBhIGZpcnN0LWNsYXNzIEdob3N0bGlnaHQgY29uc3VtZXI6IGFwcHJhaXNlciBhbmQgcmVsYXRpb25zaGlwL3BlcmNlcHRpb24gdHJhaW5pbmcgbXVzdCBzdXBwb3J0IGh1bWFuLWZhY2luZyByZWFkcywgZ3JvdW5kZWQgb3BpbmlvbnMsIHVuY2VydGFpbnR5LCByZXBhaXIgc2lnbmFscywgYW5kIG9waW5pb24gdXBkYXRlcyBvdmVyIHJlcGVhdGVkIGludGVyYWN0aW9uLCBub3Qgb25seSBmaWN0aW9uYWwgc2NlbmUgbXV0YXRpb24uIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA1LTAyVDE0OjQxOjMwKzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-05-06T03:45:25.189100+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-05-04T112003Z0000-0045-c9c07c5bdf77", "payload": "eyJub3RlIjogIkdlbmVyYXRlZCBlbnZpcm9ubWVudCBpbWFnZXMgYXJlIGFjY2VwdGVkIG9ubHkgYXMgY29uY2VwdC9tYXRlcmlhbCByZWZlcmVuY2UgZm9yIGlsbHVzdHJhdGVkIElGLiBNdWx0aS1hbmdsZSBvciBicmFuY2gtY29uc2lzdGVudCByZXBsYXkgbmVlZHMgYSBkdXJhYmxlIHNjZW5lLXNldC9ibG9ja291dC9sYXlvdXQgc291cmNlIHdpdGggbmFtZWQgY2FtZXJhcyBhbmQgc3RhZ2luZyBzbG90czsgaW1hZ2VnZW4gc2hvdWxkIHBhaW50IG92ZXIgY2FtZXJhLXNwZWNpZmljIHZpc3VhbCBpbnB1dCByYXRoZXIgdGhhbiBwcmVzZXJ2ZSByb29tIHRvcG9sb2d5IGZyb20gbWVtb3J5LiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wNS0wNFQxMToyMDowMyswMDowMCIsICJ0eXBlIjogInZpc3VhbC1kb2N0cmluZSJ9", "stored_at": "2026-05-06T03:45:25.706649+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-05-04T171429Z0000-0053-afcd67ab0f21", "payload": "eyJub3RlIjogIkNvb3JkaW5hdG9yIHNlYW0gY29ycmVjdGlvbjogZnV0dXJlIHRyYWluaW5nLXNoYXBlZCBsb29wcyBzaG91bGQgc2FuZGJveCBjb29yZGluYXRvciB0dXJucyBhcyB0aGVpciBvd24gcHJvbXB0YWJsZSBvcmdhbi4gQ29kZXggYWN0cyBhcyBtZXRhLWNvb3JkaW5hdG9yLCBwcmVwYXJpbmcgaW5wdXRzLCBsYXVuY2hpbmcvcmV2aWV3aW5nIHdvcmtlcnMsIGxhYmVsaW5nIGludGVydmVudGlvbnMsIGFuZCB3aXJpbmcgc3RydWN0dXJlZCBzdGF0ZTsgcmF3IGNvb3JkaW5hdG9yIHRyYWluaW5nIGRhdGEgbXVzdCBub3QgYmUgc2lsZW50bHkgY29sbGFwc2VkIGludG8gb21uaXNjaWVudCBjaGF0IHN0ZWVyaW5nLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wNS0wNFQxNzoxNDoyOSswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-05-06T03:45:25.854530+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-05-04T184445Z0000-0055-2ae342d43219", "payload": "eyJub3RlIjogIkNoYXJhY3RlciBjb2duaXRpb24gc2VhbTogR2hvc3RsaWdodCBtYWNoaW5lcnkgc2hvdWxkIGJlIG1heGltYWxseSBzbWFydCwgYnV0IGNoYXJhY3RlcnMgbXVzdCByZWFzb24gYW5kIHNvY2lhbGx5IG1hbmV1dmVyIG9ubHkgdG8gdGhlIGxldmVsIHN1cHBvcnRlZCBieSB0aGVpciBtb2RlbGVkIGludGVsbGlnZW5jZSwgY3VsdHVyZSwgcm9sZSwgZXhwZXJpZW5jZSwgc3RyZXNzLCBhbmQgc3RhdGUuIENvb3JkaW5hdG9yL25hcnJhdG9yIHByb3NlIG1heSB0cmFuc2xhdGUgb3BhcXVlIGhpZ2gtY29udGV4dCB0YWN0aWNzIGZvciByZWFkZXIgbGVnaWJpbGl0eSB3aXRob3V0IGdyYW50aW5nIHRoYXQgZXhwbGFuYXRpb24gdG8gY2hhcmFjdGVycy4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDUtMDRUMTg6NDQ6NDUrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-05-06T03:45:25.886446+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-05-06T035710Z0000-0066-272010506962", "payload": "eyJub3RlIjogIkN1bHRDYWNoZSB3aXJlIGNvbnRyYWN0IGNsYXJpZmllZDogRGF0YWJhc2VFbnRyeSBwYXlsb2FkcyBtdXN0IGJlIE1lc3NhZ2VQYWNrIGFycmF5cyBpbmRleGVkIGJ5IGV4cGxpY2l0IGZpZWxkIGtleXMgd2l0aCBuaWwgZ2FwcyBmb3IgcmVzZXJ2ZWQvZGVsZXRlZCBzbG90czsgY3VsdGNhY2hlLXB5IG5vdyBleHBvc2VzIGRlZmluZV9kYXRhYmFzZV9lbnRyeV90eXBlIGZvciB0aGF0IGNvbnRyYWN0IGFuZCBDdWx0TGliIGdlbmVyYXRvciB3YXMgcGF0Y2hlZCB0byBwcmVzZXJ2ZSBzcGFyc2Uga2V5IHNsb3RzLiIsICJzdGF0dXMiOiAiYWNjZXB0ZWQiLCAidHMiOiAiMjAyNi0wNS0wNlQwMzo1NzoxMCswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-05-06T03:57:10.429056+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-05-06T044920Z0000-0067-d18749ed9b85", "payload": "eyJub3RlIjogIkdob3N0bGlnaHQgYWdlbnQtc3RhdGUgc2NoZW1hIGlzIG5vdyB0aGUgZmlyc3Qgc2hhcmVkIGNyb3NzLXJ1bnRpbWUgcGF5bG9hZCBjb250cmFjdC4gQ3VsdE5ldCBjbGllbnRzIHNob3VsZCBjYXJyeSBnaG9zdGxpZ2h0LmFnZW50X3N0YXRlLnYwIHVuY2hhbmdlZCBpbnNpZGUgdHlwZWQgZG9jdW1lbnQgZW52ZWxvcGVzLCB3aXRoIEN1bHRMaWItc3R5bGUgYXV0aC9zZXNzaW9uIHNlbWFudGljcyBoYW5kbGVkIGJ5IHRoZSB0cmFuc3BvcnQgbGF5ZXIgcmF0aGVyIHRoYW4gYmVzcG9rZSBwZXItcmVwbyBnbHVlLiIsICJzdGF0dXMiOiAiYWNjZXB0ZWQiLCAidHMiOiAiMjAyNi0wNS0wNlQwNDo0OToyMCswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-05-06T04:49:20.304695+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-18T143602Z0000-0075-38277e5390c5", "payload": "eyJicmFuY2giOiAiY29kZXgvZ2hvc3RsaWdodC1kdW5nZW9uLW12cCIsICJub3RlIjogIk11bHRpcGxheWVyIGlzIGFuIGludGVuZGVkIHBvc3Qtc29sbyBleHRlbnNpb24gb2YgdGhlIGV4aXN0aW5nIG9uZS1Xb3JsZEtlcm5lbCwgbWFueS1hY3RvciBhdXRob3JpdHkgbW9kZWwuIE11bHRpcGxlIGF1dGhlbnRpY2F0ZWQgaHVtYW5zIHdpbGwgY29udHJvbCBkaXN0aW5jdCBhY3RvcnMgdGhyb3VnaCB0aGUgc2FtZSBjYW1wYWlnbiBtYWlsYm94LCBwZXJjZXB0aW9uIGdhdGVzLCBpbml0aWF0aXZlLCBhbmQgYXRvbWljIGNvbW1pdCBwYXRoOyBubyBwYXJ0eSBwcm9tcHQgb3Igcm9vbS1zdGF0ZSBhdXRob3JpdHkgaXMgaW50cm9kdWNlZC4gVGhlIHBhaWQgYWxwaGEgcmVtYWlucyBzaW5nbGUtcGxheWVyIHdoaWxlIG11bHRpcmVzb2x1dGlvbiBHZXN0YWx0IHByb29mIHN0YXlzIHRoZSBpbW1lZGlhdGUgZm9yZ2UgcHJpb3JpdHkuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA4LTE4VDE0OjM2OjAyKzAwOjAwIiwgInR5cGUiOiAiZGVzaWduIn0=", "stored_at": "2026-08-18T14:36:02.925590+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-26T005011Z0000-0135-2d1c23496415", "payload": "eyJub3RlIjogIkRFTFZFL0hPTEQgYm91bmRhcnk6IGxpdmUgR2hvc3RsaWdodCBXb3JsZEtlcm5lbCwgbXVsdGlyZXNvbHV0aW9uIGFnZW5jeSwgdHlwZWQgdHJhbnNpdGlvbnMsIHBlcnNpc3RlbmNlLCBhbmQgcmVjZWlwdHMgYXJlIHJldXNhYmxlLCBidXQgY3VycmVudCBJbnN0aXR1dGlvblN0YXRlIGFuZCBzdHJhdGVnaWMgcmVzb3VyY2UgaGFuZGxlcyBkbyBub3QgaW1wbGVtZW50IEhPTEQgcXVhbnRpdGllcywgcHJpY2VzLCByZWNpcGVzLCBjYXBhY2l0eSwgaW52ZW50b3JpZXMsIG9yZGVycywgY29udHJhY3RzLCBvciBjb25zZXJ2YXRpb24uIERlbHZlaG9sZCB0aGVyZWZvcmUgcmV0YWlucyBxdWFudGl0YXRpdmUgZWNvbm9teSBhdXRob3JpdHk7IGEgZm9yY2VkIG9udG9sb2d5IG1heSBieXBhc3Mgd29ybGQgZ2VuZXJhdGlvbiBidXQgbmV2ZXIgV29ybGRLZXJuZWwgdmFsaWRhdGlvbi4gT3duZXIgd2l0bmVzc2VzOiBjcmF0ZXMvZ2hvc3RsaWdodC1kdW5nZW9uL3NyYy9kb21haW4ucnMgYW5kIEY6XFxQcm9qZWN0c1xcRGVsdmVob2xkXFxEZWx2ZWhvbGRcXEdhbWUgRGVzaWduXFxTaGFyZWQgV29ybGRcXFdvcmxkIFN0YXRlIE1vZGVsLm1kLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOC0yNlQwMDo1MDoxMSswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-08-26T00:50:11.582781+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-26T155505Z0000-0137-59ce136e84c9", "payload": "eyJub3RlIjogIkRlbHZlaG9sZCBpcyBhIHByb3ZpbmcgY29uc3VtZXIgb2YgR2hvc3RsaWdodCdzIGdlbmVyaWMgd29ybGQtc2ltdWxhdGlvbiBBUEksIG5vdCBhIEdob3N0bGlnaHQgaW50ZWdyYXRpb24gb3JnYW4uIEdob3N0bGlnaHQgbWF5IGFkZCBvbmx5IGdlbmVyaWMgY2FwYWJpbGl0aWVzOiBvbmUgc2VlZCBhZG1pc3Npb24gcHJpbWl0aXZlIHNoYXJlZCBieSBjb21waWxlciBhbmQgY29uc3VtZXIgcHJvZHVjZXJzLCBnZW5lcmljIGV4dGVybmFsbHkgb3duZWQgc3ViamVjdCBhdXRob3JpdHksIGNvbnN1bWVyLXN1cHBsaWVkIGVmZmVjdCBzY2hlbWFzLCBhbmQgdHlwZWQgcHJvcG9zYWxzIGFuZCByZWNlaXB0cy4gVGhlIGdyZWF0aG9sZCBJRCwgYWxsIGRlbHZlaG9sZC4qIGJpbmRpbmdzLCBhbmQgZGV0YWlsZWQgcHJvamVjdGlvbi9lY29ub215IHRyYW5zbGF0aW9uIHJlbWFpbiBEZWx2ZWhvbGQtb3duZWQuIENlbGxzIGFuZCBXb3JsZEtlcm5lbCBuZXZlciBzd2l0Y2ggb24gY29uc3VtZXItc3BlY2lmaWMgbmFtZXMuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTI2VDE1OjU1OjA1KzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-08-26T15:55:05.625298+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-26T164655Z0000-0138-849e5de32fc5", "payload": "eyJub3RlIjogIlN1cGVyc2VkZXMgdGhlIDIwMjYtMDgtMjZUMTU6NTEgcmVzZWFyY2ggbm90ZSBvbmx5IHdoZXJlIGl0IGNhbGxlZCBEZWx2ZWhvbGQgdGhlIHJlZGlyZWN0ZWQgcHJpbWFyeSBwbGF5IHRhcmdldDogRGVsdmVob2xkIGlzIHRoZSBmaXJzdCBwcm92aW5nIGNvbnN1bWVyIG9mIHRoZSBnZW5lcmljIHdvcmxkIEFQSSwgd2hpbGUgYWR2ZXJzYXJpYWwgc2luZ2xlLXBsYXllciBEdW5nZW9uIHBsYXkgcmVtYWlucyBhbiBhY3RpdmUgcmVncmVzc2lvbiBhbmQgY29udGV4dC1kaXNjb3ZlcnkgcGF0aC4gSW1wbGVtZW50ZWQgb25lIGNvbXBpbGVyL2NvbnN1bWVyIFdvcmxkU2VlZCBhZG1pc3Npb24gdHJhbnNhY3Rpb24sIGluc3RpdHV0aW9uLXNjb3BlZCBFeHRlcm5hbFN1YmplY3RBdXRob3JpdHksIFdvcmxkS2VybmVsLW93bmVkIHJldmlzaW9uZWQgc25hcHNob3RzLCBhdG9taWMgc3RyYXRlZ2ljLXdhdmUgcHJvcG9zYWxzLCBhY2tub3dsZWRnZW1lbnQgcmVjZWlwdHMsIGFuZCB0eXBlZCBsb29wYmFjayBDdWx0TmV0IFJVRFAgb3BlcmF0aW9ucy4gQ29uc3VtZXItc3BlY2lmaWMgSURzIGFuZCBxdWFudGl0YXRpdmUgZWNvbm9teSBzZW1hbnRpY3MgcmVtYWluIG91dHNpZGUgR2hvc3RsaWdodC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDgtMjZUMTY6NDY6NTUrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-08-26T16:46:55.684556+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-26T171255Z0000-0139-aa631fe6e30f", "payload": "eyJub3RlIjogIlRoZSBnZW5lcmljIGV4dGVybmFsIGF1dGhvcml0eS9zbmFwc2hvdCBjb250cmFjdCBhZG1pdHMgYm90aCBpbnN0aXR1dGlvbiBhbmQgR2VzdGFsdCBzdWJqZWN0cy4gVGhpcyBjbG9zZXMgdGhlIERlbHZlaG9sZCBzb3ZlcmVpZ24tZ2VzdGFsdCByZXF1aXJlbWVudCB3aXRob3V0IGFkZGluZyBhIERlbHZlaG9sZC1zcGVjaWZpYyB0eXBlOiBvbmUgdGFnZ2VkIEV4dGVybmFsU3ViamVjdFByb2plY3Rpb24gY2FycmllcyBlaXRoZXIgY2Fub25pY2FsIHNoYXBlLCBXb3JsZEtlcm5lbCB2YWxpZGF0ZXMgZXhhY3QgYXV0aG9yaXR5IGtpbmQgYW5kIHN1YmplY3QgSUQsIHJlZnJlc2hlcyBkZXJpdmVkIGFnZW5jeSBmYWNldHMsIGFuZCBrZWVwcyB0aGUgc3ViamVjdCBub24tc2ltdWxhdGlvbi1lbGlnaWJsZSB3aGlsZSBzdGlsbCB0YXJnZXRhYmxlIGJ5IGZvcmVpZ24gcHJvcG9zYWxzLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOC0yNlQxNzoxMjo1NSswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-08-26T17:12:55.998149+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-29T051535Z0000-0208-bc3353485949", "payload": "eyJub3RlIjogIk9wZXJhdG9yIGFyY2hpdGVjdHVyZSBkaXJlY3RpdmU6IGEgbmV3c3BhcGVyIGlzIGEgcGVyc2lzdGVudCBwb2xpdGljYWwvZWRpdG9yaWFsIFBlcnNvbmEsIG5vdCBhIG5ldXRyYWwgZmFjdCBzdW1tYXJ5LiBFYWNoIHB1YmxpY2F0aW9uIG93bnMgYXVkaWVuY2UsIHJlbWVtYmVyZWQgYmVhdHMsIG5hcnJhdGl2ZSBtZW1lcGxleCwgc2VsZWN0aXZlIHBpY2t1cCwgcmVjdXJyaW5nIHRocm91Z2hsaW5lcywgaWRlb2xvZ2ljYWwgZnJhbWluZywgYW5kIHJpdmFsczsgY29tcGV0aW5nIERlbHZlaG9sZCBwdWJsaWNhdGlvbnMgbWF5IGZyYW1lIG9uZSBjb21taXR0ZWQgZXZlbnQgc3Vic3RyYXRlIGRpZmZlcmVudGx5LiBHcm91bmRpbmcgb3ducyBmYWN0dWFsIGFzc2VydGlvbi9wcm92ZW5hbmNlIGNvbnN0cmFpbnRzIGJ1dCBtdXN0IHByZXNlcnZlIGNsZWFybHkgbGVnaWJsZSBpbnRlcnByZXRhdGlvbiwgc2VsZWN0aW9uLCBmcmFtaW5nLCBhbmQgaW5zaW51YXRpb24uIEN1cnJlbnQgQ2Fub3B5IExlZGdlciBhY2NlcHRhbmNlIHJlbWFpbnMgb25lIHB1YmxpY2F0aW9uIGluc3RhbmNlLiBEbyBub3QgcGF0Y2ggdGhpcyBpbnRvIHRoZSBmYWN0LWNoZWNrIHByb21wdCBvciBkZXJhaWwgcnVuNDMuIFRoZSBkZXRhaWxlZCBvd25lci9zdGF0ZSBjdXQgYmVsb25ncyBpbiB0aGUgaW1wbGVtZW50YXRpb24gcGxhbiBhZnRlciBjdXJyZW50IGFjY2VwdGFuY2UuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTI5VDA1OjE1OjM1KzAwOjAwIiwgInR5cGUiOiAiY29ycmVjdGlvbiJ9", "stored_at": "2026-08-29T05:15:35.726834+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T030642Z0000-0247-6db695a30bfa", "payload": "eyJub3RlIjogIlJlYWQtb25seSBpbnNwZWN0aW9uIG9mIGltbXV0YWJsZSBEZWx2ZWhvbGQgUnVuIDEwOCB0aHJvdWdoIHRoZSBmb2N1c2VkIENhbXBhaWduU3RvcmUgZXhwbG9yZXIgZm91bmQgYSBzdHJvbmcgYXV0aG9yZWQgY3Jpc2lzIHRoZWF0ZXIgYnV0IGEgZmFpbGVkIHdob2xlLXdvcmxkIGNvbXBsZXhpdHkgc2hhcGUuIFRoZSBjYW5vbmljYWwgc3RhdGUgaGFzIDU1IGxvY2F0aW9ucywgNjggaW5zdGl0dXRpb25zLCAxNjQgZmFjdHMsIDMsMTQxIEdlc3RhbHRzLCAzNjYgQWN0b3JzLCAzNzEgbWVtYmVyIHJlY29yZHMsIGFuZCAyLDQzMCBhZ2VuY3kgcmVsYXRpb25zOyBleGFjdGx5IDIsNDAwIGFjdGl2ZSBsZWF2ZXMgYXJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBmaXZlIHJlYWxtcyBwbHVzIHRoZSBib3VuZGFyeSBzY2VuZS4gVGhlIGVpZ2h0IHRpdGxlZCBlbGFib3JhdG9ycyBwcm9kdWNlIGV4Y2VsbGVudCBkaXN0aW5jdCBsYW5lcyBmb3IgdGV4dHVyZSwgY2l2aWMgYXV0aG9yaXR5LCBlY29ub215LCBjYXJlLCBwb2xpdGljcywgc2VjcmV0cywgdXJnZW50IHByZXNzdXJlLCBhbmQgbnVtaW5vdXMgbWVhbmluZy4gUmVwZWF0ZWQgZmlzc2lvbiB0aGVuIHN1YnN0aXR1dGVzIHRheG9ub215IGZvciBub3ZlbHR5OiA1NTcgc2VhcmNoYWJsZSByZWNvcmRzIGNvbnRhaW4gb3RoZXItdW5rbm93biwgNzgwIGNvbnRhaW4gcmVzaWR1YWwsIG1hbnkgYWN0aXZlIGxlYXZlcyBpbmhlcml0IGlkZW50aWNhbCBnb2FscywgYW5kIGlkZW50aXR5IGdlbmVyYXRpb24gcmVwZWF0cyBwdWJsaWMgbmFtZXMgYWNyb3NzIGRpc3RpbmN0IHBlb3BsZSAoaW5jbHVkaW5nIGF0IGxlYXN0IGVpZ2h0IG1hdGVyaWFsaXplZCBBY3RvcnMgbmFtZWQgTWFyYSBWZW5uIGFuZCBmb3VyIG5hbWVkIE5lcmEgUXVpbGwpLiBUcmVhdCB0aGlzIGFzIHByb21pc2luZyBiYXNlIG1hdGVyaWFsIGZvciBvbmUgaW50ZXJuYXRpb25hbCBjcmlzaXMgcmVnaW9uLCBub3QgeWV0IGEgcGxhdXNpYmxlIGVudGlyZSB3b3JsZCBvciB0cmFpbmluZy1yZWFkeSBhdXRvbm9tb3VzIG5hcnJhdGl2ZSBzdWJzdHJhdGUuIFRoZSBuZXh0IHdvcmxkLXNoYXBlIGRlc2lnbiBtdXN0IGdhdGUgc2VtYW50aWMgZGlzdGluY3RuZXNzLCBpZGVudGl0eSBkaXZlcnNpdHksIHJlbGF0aW9uL3ByZXNzdXJlIGNvbnRyaWJ1dGlvbiwgYW5kIGhvcml6b250YWwgZ2VvZ3JhcGhpYyBhbmQgY3VsdHVyYWwgZXhwYW5zaW9uIHJhdGhlciB0aGFuIGNvdW50aW5nIGFjdGl2ZSBsZWF2ZXMgYWxvbmUuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTAxVDAzOjA2OjQyKzAwOjAwIiwgInR5cGUiOiAicmVzZWFyY2gifQ==", "stored_at": "2026-09-01T03:06:42.158746+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T121139Z0000-0248-b250ea443e4e", "payload": "eyJub3RlIjogIlJ1biAxMTUgdGVybWluYXRlZCBhdCByZXZpc2lvbiAyIHdpdGggMi84IHJlZ2lvbnMgYW5kIDAvMSB3YXZlcyBhZnRlciBhbiBTU0UgdGltZW91dCBhbmQgYSBkYW5nbGluZyBpbnN0aXR1dGlvbiBsb2NhdGlvbiBleGhhdXN0ZWQgdGhlIG1vZGVsIHJlY29uY2lsaWF0aW9uIHdvcmtiZW5jaC4gVGhlIHF1YWxpZmljYXRpb24vdmVyaWZpZXIvcmVjb25jaWxpYXRpb24vY29udGV4dC90aW1lb3V0L3JvdXRpbmcgcGF0Y2ggc2VxdWVuY2UgdGhyb3VnaCA4OTY0YTkyIGRpZCBub3QgZXN0YWJsaXNoIHN0cnVjdHVyYWwgb3duZXJzaGlwLiBPcGVyYXRvciBvcmRlcmVkIGEgd2hvbGUtbWFjaGluZSByZWJ1aWxkOiBvbmUgV29ybGRLZXJuZWwsIG9uZSB0eXBlZCBvbnRvbG9neSByZWR1Y2VyLCBvbmUgQ29tbWFuZEVudmVsb3BlL0N1bHRDYWNoZSBjb21taXQgcGF0aDsgTmFycmF0aXZlUGVyc29uYSByZXRhaW5zIFByb2plY3Rvci1QZXJzb25hLUludGVycHJldGVyIHByb3NlIGlzb2xhdGlvbiwgd2hpbGUgT3BlcmF0aW9uYWxBZ2VudCBpcyBhbiBleHBsaWNpdCBkaXNqb2ludCBjb250cm9sbGVyIGZvciBvcGVyYXRvci1zaGFwZWQgY29nbml0aW9uLiBBY3RvciBjb3VudHMgYW5kIHF1YWxpdGF0aXZlIGludGVyZXN0IHJlbWFpbiBldmFsdWF0aW9uIGV2aWRlbmNlLCBuZXZlciBhZG1pc3Npb24gb3IgY29tcGxldGVuZXNzIGF1dGhvcml0eS4iLCAic3RhdHVzIjogImFjY2VwdGVkIiwgInRzIjogIjIwMjYtMDktMDFUMTI6MTE6MzkrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-01T12:11:39.688226+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T123747Z0000-0249-37687ac034c6", "payload": "eyJub3RlIjogIk1pbmQgbWFpbnRlbmFuY2UgZmFsc2lmaWVkIHN0YWxlIHJlYnVpbGQgc3RlZXJpbmc6IHRoZSBtYXAgc3RpbGwgY2xhaW1lZCBzdWJ0cmFjdGlvbiBoYWQgbm90IGJlZ3VuIGFuZCB0aGUgaGFuZG9mZiBsYXRlciByZXZpdmVkIFJ1biAxMTEgYXMgYW4gYWN0aXZlIGNvbnRpbnVhdGlvbi4gUmVidWlsdCB0aGUgaGFuZG9mZiBhbmQgaW1wbGVtZW50YXRpb24gcGxhbiBhcm91bmQgdGhlIGFkb3B0ZWQgb25lLVdvcmxkU3RhdGUgYXV0aG9yaXR5LCBsYW5kZWQgY3V0cyA2NGY1MGRlL2ExNDRjMzMsIHRvdGFsIGludGVycHJldGF0aW9uLCBjdXJyZW50IGRlbGV0aW9uIGxpbmUsIGFuZCBmb2N1c2VkIHZlcmlmaWNhdGlvbiBnYXRlOyBjaHJvbm9sb2d5IHJlbWFpbnMgaW4gR2l0LCBldmlkZW5jZSwgYW5kIHRoZSBmcm96ZW4gdGVhcmRvd24gbWFwLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wMVQxMjozNzo0NyswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-09-01T12:37:47.089831+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T130326Z0000-0250-72c176f77744", "payload": "eyJub3RlIjogIlJlamVjdGVkIGFuZCBkZWxldGVkIHRoZSB1bmNvbW1pdHRlZCBmaXJzdCB3b3JsZC5ycyBmb3VuZGF0aW9uIGFmdGVyIGZvY3VzZWQgdGVzdHMgcGFzc2VkLiBSZXZpZXcgZm91bmQgdGhlIHB1YmxpYyBtb2R1bGUgZXhwb3NlZCBtdXRhYmxlIFdvcmxkU3RhdGUgYW5kIElEIGlzc3VhbmNlLCB0cmFuc2xhdGlvbi1nYXAgaW5mZXJlbmNlIGhhZCBiZWNvbWUgY2Fub25pY2FsIHdvcmxkIG11dGF0aW9uLCBlbXB0eSBiYXRjaGVzIGNvdWxkIGFkdmFuY2UgcmV2aXNpb24sIGNvbnRyb2xsZXIgY29tbWFuZHMgbGFja2VkIGNvbnN1bWVkIG9wcG9ydHVuaXR5L3JlYWRpbmVzcy9hZmZvcmRhbmNlIGJpbmRpbmcsIGV4dGVybmFsIG93bmVyc2hpcCB3YXMgYnlwYXNzZWQgYnkgd29ybGQtYXV0aG9yIGF1dGhvcml0eSwgY29tbWFuZCBldmlkZW5jZSBkaWQgbm90IGJpbmQgZmFjdCBldmlkZW5jZSwgYW5kIGJhdGNoIHNlbGYtZGlnZXN0cyB3ZXJlIHVudmVyaWZpYWJsZS4gTmV4dCBjdXQgaXMgcHJpdmF0ZS1maXJzdDogc2VhbCBXb3JsZEtlcm5lbC9hZ2dyZWdhdGUvam91cm5hbCBvd25lcnNoaXAgYmVmb3JlIHJlaW50cm9kdWNpbmcgYSBtaW5pbWFsIHJlZHVjZXIgYmVoaW5kIGl0LiIsICJzdGF0dXMiOiAicmVqZWN0ZWQiLCAidHMiOiAiMjAyNi0wOS0wMVQxMzowMzoyNiswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-09-01T13:03:26.351584+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T141840Z0000-0251-0503ba842a66", "payload": "eyJub3RlIjogIkNvbW1pdCBiNTMyNTFmIGxhbmRzIGEgcHJpdmF0ZSBwcm92aXNpb25hbCBmb3VuZGF0aW9uLnYwIFdvcmxkS2VybmVsIG93bmVyOiBpbW11dGFibGUgZ2VuZXNpcyBhbmQgZXhhY3QgY3JlYXRlIHJldHJ5LCBzZWFsZWQgYXV0aGVudGljYXRpb24gZXZpZGVuY2UsIG9uZSBsaXZlIEN1bHRDYWNoZSBvd25lciwgY2Fub25pY2FsIFdvcmxkSWQgaXNzdWFuY2UgYW5kIHJlZHVjdGlvbiBrZXB0IHByaXZhdGUsIGRpZ2VzdC9yZXBsYXkgcmVjb3ZlcnksIHBlcnNpc3RlZCBuby1vcCBhbmQgcmVqZWN0aW9uIG5vbi1jb21taXQsIHBhdGgtaWRlbnRpdHkgcmV2b2NhdGlvbiwgYW5kIHBvaXNvbi9yZW9wZW4gYWZ0ZXIgYSBzaW11bGF0ZWQgcG9zdC1kdXJhYmxlIGxvc3QgYWNrbm93bGVkZ2VtZW50LiBOaW5lIGZvY3VzZWQgd29ybGQgdGVzdHMgcGFzcy4gVGhlIGxlZ2FjeSBleHBvcnRlZCBrZXJuZWwgcmVtYWlucyBsaXZlOyB0aGlzIGlzIHRoZSBzZWFsZWQgZm91bmRhdGlvbiwgbm90IGN1dG92ZXIuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTAxVDE0OjE4OjQwKzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-01T14:18:40.242605+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T143759Z0000-0252-5215bd873810", "payload": "eyJub3RlIjogIkNvbW1pdCBkNDliOTA3IG1ha2VzIHRoZSByZXBsYWNlbWVudCBQZXJzb25hIGludGVycHJldGF0aW9uIGNvbnRyYWN0IHN0cnVjdHVyYWxseSB0b3RhbC4gUGVyc29uYSBzb3VyY2UgcHJvc2UgaXMgaW1tdXRhYmxlIG5vbmNhbm9uaWNhbCBldmlkZW5jZSBib3VuZCB0byB0eXBlZCB3b3JsZC9jb250cm9sbGVyL29wcG9ydHVuaXR5L3JldmlzaW9uIGFuZCBpbmZlcmVuY2UgcmVjZWlwdHM7IG9ubHkgZXhhY3QgdHlwZWQgY2FwdHVyZXMgbWF5IHByb3Bvc2Ugc3RhdGUsIGFjdHVhbCBxdW90ZWQgZGlhbG9ndWUgaXMgcmVxdWlyZWQgZm9yIHNwZWVjaCwgbWFsZm9ybWVkIHNwYW5zIG9yIHJhdyB0b29sIHBheWxvYWRzIGJlY29tZSBleGFjdCB3aG9sZS1zb3VyY2UgdHJhbnNsYXRpb24gZ2Fwcywgbm9ybWFsIHN0ZXAgZXhoYXVzdGlvbiBhZGRzIGFuIHVucmVzb2x2ZWQtc291cmNlIGdhcCwgYW5kIGluZnJhc3RydWN0dXJlIGludGVycnVwdGlvbiBkaXNjYXJkcyBwYXJ0aWFsIGNhcHR1cmVzIGFuZCByZXR1cm5zIHRoZSBzb3VyY2UgcGVuZGluZy4gVGVuIGZvY3VzZWQgcHJvamVjdGlvbiB0ZXN0cyBwYXNzLiBMZWdhY3kgZXhwb3J0ZWQgUGVyc29uYSBydW5uZXJzIHN0aWxsIGNvbnRhaW4gdGVybWluYWwgZmFpbHVyZSBwYXRocyBhbmQgZG8gbm90IGV4cG9zZSByZWNvcmRfZ2FwOyB0aGV5IHJlbWFpbiBkZWxldGlvbiB0YXJnZXRzLCBzbyB0b3RhbGl0eSBpcyBub3QgeWV0IGEgbGl2ZS1ydW50aW1lIGNsYWltLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wMVQxNDozNzo1OSswMDowMCIsICJ0eXBlIjogImltcGxlbWVudGF0aW9uIn0=", "stored_at": "2026-09-01T14:37:59.318539+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T174032Z0000-0253-0d12cf9f16ae", "payload": "eyJub3RlIjogIkNvbW1pdHMgMTJlZTlmNCBhbmQgNjZlZDJlYyBhZHZhbmNlIHRoZSBhdXRob3JpdHkgcmVidWlsZCBwYXN0IHRoZSBwcml2YXRlIHJlZHVjZXIgcGhhc2UuIFRoZSBmaXJzdCByZW1vdmVzIDY4NiBsaW5lcyBvZiBkZWFkIGxlZ2FjeSBFbGFib3JhdGlvbiBhbmQgTXV0YXRpb24gaW5ncmVzcyB3aXRob3V0IGEgY29tcGF0aWJpbGl0eSB3cml0ZXIuIFRoZSBzZWNvbmQgY29tcGxldGVzIHRoZSBzZWFsZWQgRHJhZnQtdG8tQWN0aXZlIGF1dGhvcml0eSBsb29wIHdpdGggY2Fub25pY2FsIGNvbnRyb2xsZXIgYXNzaWdubWVudHMgYW5kIGFmZm9yZGFuY2UgZ3JhbnRzLCByZXZpc2lvbi1ib3VuZCBvcHBvcnR1bml0aWVzLCBvbmUgc2hhcmVkIGh1bWFuIGFuZCBhdXRvbm9tb3VzIEV4ZXJjaXNlRGVjaXNpb24gcmVkdWNlciwgb25lIHNlcmlhbGl6ZWQgbWFpbGJveCwgYXRvbWljIHJlcGxheSwgYW5kIGV4YWN0IHJlamVjdGlvbiBhbmQgbG9zdC1hY2sgYmVoYXZpb3I7IGVpZ2h0ZWVuIGZvY3VzZWQgd29ybGQgdGVzdHMgcGFzcy4gVGhpcyBpcyBub3QgcnVudGltZSBjdXRvdmVyOiB0aGUgbGVnYWN5IGV4cG9ydGVkIGtlcm5lbCBhbmQgc3RhcnR1cCwgU2Vzc2lvbiBaZXJvLCBwbGF5ZXIsIGF1dG9ub21vdXMsIGFuZCByZWNvdmVyeSBwYXRocyByZW1haW4gbGl2ZSBvd25lcnMuIFRoZSBuZXh0IG1vdmUgZXhwb3NlcyBhbmQgd2lyZXMgdGhlIHJlcGxhY2VtZW50IHJ1bnRpbWUgaWRlbnRpdHkgYW5kIG1haWxib3gsIGRlbGV0aW5nIGVhY2ggb2xkIG93bmVyIHdpdGhvdXQgZHVhbC13cml0ZS4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDFUMTc6NDA6MzIrMDA6MDAiLCAidHlwZSI6ICJpbXBsZW1lbnRhdGlvbiJ9", "stored_at": "2026-09-01T17:40:32.825638+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-02T141003Z0000-0254-040b0bdbc683", "payload": "eyJub3RlIjogIlB1c2hlZCBHaG9zdGxpZ2h0IDEzZDUxMzYgaGFzIG5vIGxlZ2FjeSBydW50aW1lIG1vZHVsZXMgYW5kIG9uZSBDdWx0Q2FjaGUgb3duZXIsIGJ1dCBZZ2dkcmFzaWwgc3RpbGwgcnVucyBsZWdhY3kgYTQwODBkNC4gUmVhZC1vbmx5IGN1dG92ZXIgYXVkaXQgcHJvdmVkIHRoZSBjdXJyZW50IElkdW5uIHBhdGggc3RydWN0dXJhbGx5IHVuZml0OiBzb3VyY2UvcmVmL2Zsb29yIHBvbGljeSBpcyBkdXBsaWNhdGVkIGFjcm9zcyBjb21waWxlZCBSdXN0LCByYXcgZXhlY3V0YWJsZSBjb21tYW5kIHJlY29yZHMsIGEgcHJpdmlsZWdlZCBzaGVsbCBkaXNwYXRjaGVyLCBhbmQgbGFyZ2UgZ2FtZWN1bHQtb3BzIHRhcmdldCBwcm9ncmFtczsgcm9vdCBHaXQgY2Fubm90IGluc3BlY3QgY29ycmVjdGx5IGlkdW5uLW93bmVkIG1pcnJvcnM7IEdob3N0bGlnaHQgd29ybGQtdjIgcHVyaXR5IGNoZWNrcyBpZ25vcmUgbW9zdCBsZWdhY3kgc3RhdGU7IGFuZCBmaXhlZC1wb3J0IGFjdGl2YXRpb24gc3RvcHMgdGhlIGluY3VtYmVudCBiZWZvcmUgdGhlIGNhbmRpZGF0ZSBpcyBncmVlbi4gQWRvcHRlZCBjdXQ6IHZpc2libGUgdGFyZ2V0LW93bmVkIHJlY2lwZXMgYW5kIHVuaXQgdGVtcGxhdGVzLCBJZHVubi1jb25maWd1cmVkIHJlZnMvcnVubmVyIGNvbnRhaW5lcnMvYWZmb3JkYW5jZXMvaG9zdCBiaW5kaW5ncywgR2l0IGFuZCByZWNpcGUgbWF0ZXJpYWxpemF0aW9uIGFzIGlkdW5uLCBuYXJyb3cgc2VhbGVkIHByaXZpbGVnZWQgY29uc2VxdWVuY2VzLCBjYW5kaWRhdGUgc3RhZ2VkIGhlYWx0aCBiZWhpbmQgYSBzdGFibGUgcm91dGVyLCBwcm9jZXNzL3dyaXRlLWxlYXNlIGhhbmRvZmYsIGF0b21pYyByb3V0ZSBjaGFuZ2UsIGFuZCBzZXBhcmF0ZSBkZXBsb3ltZW50IHZlcnN1cyBjb250aW51aXR5IGF1dGhvcml0eS4gRG8gbm90IGlzc3VlIHRoZSBjdXJyZW50IENvbm5lY3RvciBvciBHaG9zdGxpZ2h0IHJlZGVwbG95IHJlcXVlc3RzLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wMlQxNDoxMDowMyswMDowMCIsICJ0eXBlIjogInJlc2VhcmNoIn0=", "stored_at": "2026-09-02T14:10:03.672658+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-02T193000Z0000-0255-cf239716f068", "payload": "eyJub3RlIjogIlN1cGVyc2VkZXMgdGhlIDIwMjYtMDktMDJUMTQ6MTA6MDMrMDA6MDAgSWR1bm4gY3V0b3ZlciBkZXNpZ24gcmVjZWlwdCB3aGVyZSBpdCBuYW1lZCB0YXJnZXQtb3duZWQgdW5pdCB0ZW1wbGF0ZXMsIGFuIGV4ZWN1dGFibGUtYWZmZWN0aW5nLWNvbW1pdCBzZWxlY3RvciwgYW5kIHN0YWdlZCBoZWFsdGguIE9kaW4gY2ViZTQyNSByZWplY3RzIHJhdyByZXBvc2l0b3J5IHVuaXQvY29udGFpbmVyIHRlbXBsYXRlczogdGFyZ2V0cyBvd24gY29uc3RyYWluZWQgbGF1bmNoIGRlY2xhcmF0aW9ucyBhbmQgdGhlIG9wZXJhdG9yLXNlbGVjdGVkIHdvcmtsb2FkIGRyaXZlciBsb3dlcnMgdGhlbS4gRGV0ZXJtaW5pc3RpYyBwbGFuIHZhbGlkYXRpb24gcmV0YWlucyBjb21taXQsIHRyZWUsIHJlY2lwZSwgYW5kIEdpdGxpbmsgZmFjdHMgYnV0IGRvZXMgbm90IHByb3ZlIGFuY2VzdHJ5LCBzaWduYXR1cmVzLCBvciBvYmplY3QgY3VzdG9keTsgYSBmdXR1cmUgbmFycm93IElkdW5uIHNvdXJjZSBkcml2ZXIgbXVzdC4gQ3VsdE5ldCA4N2QwYjBmIGFuZCBPZGluIGNlYmU0MjUgZXN0YWJsaXNoIEV4cGVjdGVkLCBJZHVubi1vYnNlcnZlZCBhY3RpdmF0aW9uLCBzZXJ2aWNlLXNpZ25lZCBQcmVzZW50LCBwcm9jZXNzIGxlYXNlIGJlZm9yZSB3cml0YWJsZSBzdGF0ZSwgT2RpbiBSZWFkeSwgYW5kIHJvdXRlIG1lbWJlcnNoaXAgb25seSBhZnRlciBSZWFkeS4gQWN0dWF0aW9uIGFuZCBJZHVubiBtYWluIGludGVncmF0aW9uIHJlbWFpbiBhYnNlbnQuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTAyVDE5OjMwOjAwKzAwOjAwIiwgInR5cGUiOiAicmVzZWFyY2gifQ==", "stored_at": "2026-09-02T19:30:00.871222+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T005855Z0000-0256-92538929adaa", "payload": "eyJub3RlIjogIlN1cGVyc2VkZXMgdGhlIDIwMjYtMDktMDJUMTk6MzA6MDArMDA6MDAgZGVwbG95bWVudCBpbnRlZ3JhdGlvbiBjaGVja3BvaW50LiBPd25pbmcgQm9keSBpbnNwZWN0aW9uIGZvdW5kIEN1bHROZXQgcHVzaGVkIHRocm91Z2ggZTU0MjIyNSAoZ2VuZXJhdGlvbi1ib3VuZCBhY3RpdmF0aW9uLCBsaWZlY3ljbGUgYnJha2UsIHByb2Nlc3MgbGVhc2UsIHByb3ZpZGVyLW9ic2VydmVkIGNhcGFiaWxpdGllcywgYW5kIGV4cGxpY2l0IGRpc2FncmVlbWVudHMpIGFuZCBPZGluIHB1c2hlZCB0aHJvdWdoIGQ1MjdkNzIgKGV4YWN0IHNvdXJjZSBmcmVlemluZyBhbmQgbmFycm93IGFjdHVhdG9yIHBvcnRzKSwgd2l0aCBhbiB1bmNvbW1pdHRlZCBmb3VyLWZpbGUgaW50ZWdyYXRpb24gZm9yIGR5bmFtaWMgc3lzdGVtZCBpc29sYXRpb24sIGF1dGhlbnRpY2F0ZWQgUmVhZHktb25seSBwcm92aWRlciBzZWxlY3Rpb24sIHByb3RlY3RlZCBvbmUtc2hvdCBhY3RpdmF0aW9uIGRlbGl2ZXJ5LCBhbmQgdGhlIGU1NDIyMjUgZ2l0bGluay4gVGhlIHJlbWFpbmluZyBkZXBsb3ltZW50IG93bmVyIGlzIG5vdCBhbm90aGVyIGRyaXZlciBnYXRlOiByZXBsYWNlIGNvbnRyb2xfcGxhbmUucnMgY29tbWFuZCBvd25lcnNoaXAgd2l0aCBleGFjdGx5IERlcGxveW1lbnRDb21tYW5kLCBEZXBsb3ltZW50VHJhbnNhY3Rpb24sIGFuZCBBZG1pdHRlZEdlbmVyYXRpb247IHBlcnNpc3QgZWFjaCBvZiB0aGUgbmluZSBwaGFzZXMgYmVmb3JlIGVmZmVjdHM7IHBlcnNpc3QgcHJlcGFyZWQgYWN0aXZhdGlvbiBiZWZvcmUgc3RhcnQ7IHJlamVjdCBwcmUtcGVyc2lzdGVuY2Ugb3JwaGFuczsgYW5kIGF0b21pY2FsbHkgY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uIHdpdGggZXhhY3QgYWRtaXR0ZWQtZ2VuZXJhdGlvbiBDQVMuIFByb2R1Y3Rpb24gY3V0b3ZlciByZW1haW5zIHVucHJvdmVuLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wM1QwMDo1ODo1NSswMDowMCIsICJ0eXBlIjogInJlc2VhcmNoIn0=", "stored_at": "2026-09-03T00:58:55.719269+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T061320Z0000-0257-585cbf59625e", "payload": "eyJub3RlIjogIlN1cGVyc2VkZXMgdGhlIDIwMjYtMDktMDNUMDA6NTg6NTUrMDA6MDAgZGVwbG95bWVudC1vd25lciBjaGVja3BvaW50LiBDdWx0TmV0IGY0YWIyMzcsIE9kaW4gNjVjZjJiMiwgR2hvc3RsaWdodCBhMGIxNmI5LCBhbmQgQ29kZXhDb25uZWN0b3IgZWRlM2MzMCBsYW5kIHRoZSByb3V0ZWQgcnVudGltZSBjb250cmFjdHMsIGR1cmFibGUgdGhyZWUtcmVjb3JkL25pbmUtcGhhc2UgdHJhbnNhY3Rpb24gb3duZXIsIGFuZCBwcm92aWRlciBzaWRlcy4gTGl2ZSBhZG1pc3Npb24gcmVtYWlucyBhYnNlbnQuIEN1cnJlbnQgT2RpbiBwcm9qZWN0aW9uL1JVRFAvVURQLXJvdXRlIGFuZCBSdXN0IE9kaW4gY29ycmVsYXRpb24gd29yayBpcyB1bmNvbW1pdHRlZDsgdGhlIE5naW54IHJvdXRlIHJlY2VpcHQgcHJvdmVzIGNvbmZpZ3VyYXRpb24gcGx1cyBuZ2lueCAtVCB2aXNpYmlsaXR5IG9ubHksIG5vdCBsaXZlLXdvcmtlciBhZG9wdGlvbiBvciBwYWNrZXQgZGVsaXZlcnksIHNvIGFuIGV4YWN0IGRhdGEtcGxhbmUgb2JzZXJ2YXRpb24gcmVtYWlucyByZXF1aXJlZCBiZWZvcmUgZmVuY2UgY2xlYXJhbmNlLCBkcmFpbiwgb3IgY3V0b3ZlciBhY2NlcHRhbmNlLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wM1QwNjoxMzoyMCswMDowMCIsICJ0eXBlIjogInJlc2VhcmNoIn0=", "stored_at": "2026-09-03T06:13:20.965226+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T200000Z0000-0023-d51d0810fdfa", "payload": "eyJub3RlIjogIk1pbmQgYW5kIHdvcmtzcGFjZSBjb21wYWN0aW9uLiBUaGUgZXZpZGVuY2UgbGVkZ2VyIHdhcyAyNTggcmVjb3JkcyBvZiB3aGljaCAyMzUgd2VyZSBwZXItcmVsZWFzZS9wZXItcnVuIHJlY2VpcHRzLCBzZWxmLWNvbnN1bWluZyBmYWxzaWZpY2F0aW9uIGNoYWlucywgYW5kIE1heSBmaXh0dXJlIGRvY3RyaW5lIGFscmVhZHkgb3duZWQgYnkgZG9jcy9hcmNoaXRlY3R1cmUgYW5kIG1hcCBoYXJkX2JvdW5kYXJpZXM7IHRob3NlIG1vdmVkIHRvIHN0YXRlL2V2aWRlbmNlLmFyY2hpdmUuanNvbmwgYW5kIHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBDdWx0Q2FjaGUgZXZpZGVuY2UgZG9jdW1lbnQsIHNpbmNlIGV2aWRlbmNlLmpzb25sIGlzIGEgcmVnZW5lcmF0ZWQgZXhwb3J0IGFuZCBhIHN0b3JlLW9ubHkgZGVsZXRpb24gaXMgdGhlIHNvbGUgZHVyYWJsZSBjb21wYWN0aW9uLiBUd2VudHktdGhyZWUgcmVjb3JkcyByZW1haW46IHN0aWxsLWJpbmRpbmcgY29udHJhY3RzIChDdWx0Q2FjaGUgd2lyZSBmb3JtYXQsIGFnZW50X3N0YXRlLnYwLCBjb2duaXRpb24gY2VpbGluZywgaW1hZ2UtZ2VvbWV0cnkgYXV0aG9yaXR5LCBzYW5kYm94ZWQgY29vcmRpbmF0b3IsIFZvaWRCb3QgYXBwcmFpc2FsLCBtdWx0aXBsYXllciBleHRlbnNpb24sIHRoZSBEZWx2ZWhvbGQgYm91bmRhcnkgc2V0LCBuZXdzcGFwZXItYXMtUGVyc29uYSkgcGx1cyB0aGUgd2hvbGUgcmVidWlsZCBlcmEgZnJvbSBSdW4gMTA4IGZvcndhcmQuIEEgZHVwbGljYXRlIG11bHRpcGxheWVyIG5vdGUgcmVjb3JkZWQgdHdpY2UgdW5kZXIgZGlmZmVyZW50IHRpbWVzdGFtcHMgd2FzIHJlZHVjZWQgdG8gb25lLiBUaGUgd29ya3RyZWUgc2hlZCA4N01CIG9mIHVudHJhY2tlZCBkZWJyaXM6IHRocmVlIEdpdCBidW5kbGVzIHdob3NlIGNvbW1pdHMgYXJlIGFsbCBhbmNlc3RvcnMgb2YgSEVBRCwgfjYwIGxlZ2FjeSBsaXZlLWZpcmUgcnVuIHNjcmlwdHMgYW5kIHNmdHAgYmF0Y2hlcywgdGhlIGZvcmJpZGRlbiByZWRlcGxveSBoZWxwZXJzLCBkb3dubG9hZGVkIHJ1bjYxLTYzIGFjY2VwdGFuY2UgY29waWVzIHdob3NlIGF1dGhvcml0YXRpdmUgcm9vdHMgcmVtYWluIG9uIFlnZ2RyYXNpbCBhbmQgd2hvc2UgZnJvemVuIGNvcHkgaXMgZGlnZXN0LWJvdW5kIGluIG91dHB1dC90ZXgsIGEgcmVkYiBmaWxlIGNyZWF0ZWQgYnkgYSBzdHJheSAtLWhlbHAgYXJndW1lbnQsIGFuZCA3MU1CIG9mIHRtcC8gbGVnYWN5IGNhbXBhaWduIGNhY2hlcyBhbmQgbmV3c3BhcGVyIHJlbmRlcnMuIC5naXRpZ25vcmUgbm93IHJlZnVzZXMgYWxsIG9mIGl0LiBtYXAueWFtbCBhbmQgdGhlIGhhbmRvZmYgaGFkIHN0YWxlIGZyb250aWVycyBuYW1pbmcgMTNkNTEzNiBhbmQgYTBiMTZiOTsgYm90aCBub3cgbmFtZSA2YTc5Y2IwLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wM1QyMDowMDowMCswMDowMCIsICJ0eXBlIjogIm1haW50ZW5hbmNlIn0=", "stored_at": "2026-09-03T19:53:31.315783+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T210000Z0000-0024-8a273539a3cf", "payload": "eyJub3RlIjogIkNvcmUgR2FtZUN1bHQgc3RhY2sgb3duZXJzaGlwIHJlc29sdmVkLiBDdWx0TGliIGlzIHRoZSBjYW5vbmljYWwgaG9tZSBmb3IgQ3VsdENhY2hlLCBDdWx0TmV0IGFuZCBDdWx0TWVzaCBhY3Jvc3MgZXZlcnkgcnVudGltZSBiZWNhdXNlIHdpcmUgcGFyaXR5IGNvbmZvcm1hbmNlIGxpdmVzIG9ubHkgdGhlcmU7IGEgcnVudGltZS1zcGVjaWZpYyByZXBvIGNhbm5vdCBvd24gdGhlIGVuZ2luZSBvdGhlciBydW50aW1lcyBtdXN0IGFncmVlIHdpdGguIFRoZSBzdGFuZGFsb25lIEdhbWVDdWx0L2N1bHRjYWNoZS1ycyBhbmQgR2FtZUN1bHQvY3VsdG5ldC1ycyByZXBvcyBhcmUgcHJlLWNvbnNvbGlkYXRpb24gb3JpZ2lucyB0aGF0IGtlcHQgcmVjZWl2aW5nIHdvcmsgYWZ0ZXIgdGhlIDVjNjliZmMgaW1wb3J0LCBhbmQgR2hvc3RsaWdodCBiZWNhbWUgYSB0aGlyZCBsaW5lYWdlIGJ5IHdyaXR0ZW4gY2hhcnRlcjogdmVuZG9yL1JFQURNRS5tZCBkZWNsYXJlcyBhIGxvY2FsbHkgb3duZWQgY29tcGF0aWJsZSBwcm90b2NvbCBnZW5lcmF0aW9uLCB3aGljaCBpcyBkdXBsaWNhdGUgYXV0aG9yaXR5IG92ZXIgdGhlIHdpcmUgc3RhY2sgaGVsZCBvdXRzaWRlIHRoZSBvbmx5IGhhcm5lc3MgdGhhdCBjaGVja3MgcGFyaXR5LiBUaGF0IGlzIHdoeSBydW50aW1lX2F1dGhvcml0eV9jb250cmFjdHMucnMgZm9ya2VkOiBHaG9zdGxpZ2h0IHZlbmRvcnMgZTU0MjIyNSB3aGlsZSBtYXAgYW5kIGhhbmRvZmYgZGVjbGFyZSBDdWx0TmV0IGY0YWIyMzcgYXV0aG9yaXRhdGl2ZSwgYW5kIHRoZSB0d28gZGlzYWdyZWUgb24gd2hldGhlciBQcmVzZW50IG1heSBjb2V4aXN0IHdpdGggYSBkaXNhZ3JlZW1lbnQgLS0gR2hvc3RsaWdodCdzIGNvcHkgbWFrZXMgdGhlbSBleGNsdXNpdmUsIGY0YWIyMzcgc2VwYXJhdGVzIHByZXNlbmNlIGZyb20gcmVhZGluZXNzIGFuZCBnYXRlcyB0aHJvdWdoIGludG9fdW5kaXNwdXRlZF9wcmVzZW50LiBSZS12ZW5kb3JpbmcgZml4ZXMgdGhhdCBpbnN0YW5jZSwgbm90IHRoZSBtZWNoYW5pc20uIEN1bHRMaWIgYnJhbmNoIGNsYXVkZS9jb25zb2xpZGF0ZS1ydXN0LWNvcmUtc3RhY2sgY29tbWl0IDM0NDg4ZTggcmV0dXJucyB0aGUgUnVzdCBDdWx0Q2FjaGUgZW5naW5lIHRvIEN1bHRMaWI6IHRoZSBzdGFuZGFsb25lIGJvZHkgYXMgYmFzZSAoMyw3MTQgbGluZXMsIDQ2IHBhc3NpbmcgdGVzdHMpIG92ZXIgQ3VsdExpYidzIDEsNTU0LCB3aXRoIHRoZSBjdWx0bmV0LXJzIFJVRFAgZ2F0ZSBwYXNzaW5nIDIwIHVuY2hhbmdlZC4gVHdvIEN1bHRMaWItb25seSBjb21taXRzIHJlbWFpbiB1bnBvcnRlZCBkZWJ0LiBjdWx0bWVzaC1ycyBpcyBob21lbGVzczogdGhlIG9ubHkgUnVzdCBDdWx0TWVzaCBpbXBsZW1lbnRhdGlvbiBpbiBleGlzdGVuY2UgaXMgMSwzNjMgbGluZXMgaW5zaWRlIEdob3N0bGlnaHQncyB2ZW5kb3IsIGFic2VudCBmcm9tIEN1bHRMaWIgYW5kIGZyb20gYW55IHJlcG8sIHNvIGl0IGhhcyBuZXZlciBiZWVuIHBhcml0eSB0ZXN0ZWQgYWdhaW5zdCB0aGUgYnJvd3NlciwgS290bGluIGFuZCBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9ucyBpdCBtdXN0IGludGVyb3BlcmF0ZSB3aXRoLiBHaG9zdGxpZ2h0IG11c3QgY29uc3VtZSBDdWx0TGliIGJ5IHBpbm5lZCByZXYgYW5kIHN0b3AgdmVuZG9yaW5nIGJlZm9yZSB0aGUgc3RhbmRhbG9uZSByZXBvcyBhcmUgcmV0aXJlZC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDNUMjE6MDA6MDArMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-03T20:45:52.565333+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T231355Z0000-0025-cf375e89aa43", "payload": "eyJub3RlIjogIkdob3N0bGlnaHQncyB2ZW5kb3JlZCBjb3JlLXN0YWNrIGZvcmsgaXMgcmV0aXJlZCBhdCBkMDUxMGFjOiBjdWx0Y2FjaGUtcnMsIGN1bHRuZXQtcnMgYW5kIGN1bHRtZXNoLXJzIG5vdyBjb21lIGZyb20gQ3VsdExpYiBwaW5uZWQgYXQgODVmNzAyNCBhbmQgdmVuZG9yL1JFQURNRS5tZCdzICdsb2NhbGx5IG93bmVkIGNvbXBhdGlibGUgcHJvdG9jb2wgZ2VuZXJhdGlvbicgY2hhcnRlciBpcyBkZWxldGVkIHdpdGggdGhlbS4gVGhlIHByZWRpY3RlZCBtaWdyYXRpb24gZGlkIG5vdCBleGlzdC4gUnVudGltZVByZXNlbmNlQ29ycmVsYXRpb24gbW92aW5nIGZyb20gZW51bSB0byBzdHJ1Y3QgaXMgT2RpbidzIHNpZGUgb2YgdGhlIGNvbnRyYWN0IGFuZCBubyBHaG9zdGxpZ2h0IGZpbGUgcmVmZXJlbmNlcyBpdDsgd2l0aCBsaW5lIGVuZGluZ3Mgbm9ybWFsaXNlZCB0aGUgZTU0MjIyNSBhbmQgZjRhYjIzNyBjb3BpZXMgZGlmZmVyIGJ5IDEzMiBsaW5lcywgYW5kIHRoZSBvbmx5IHByb2R1Y3Rpb24gY2hhbmdlIHJlYWNoaW5nIGEgcHJvdmlkZXIgaXMgSWR1bm5FeHBlY3RlZFJvdXRlIHJlcXVpcmluZyBydWRwOi8vIHNjaGVtZXMgZm9yIHJ1ZHAgdHJhbnNwb3J0LCB3aGljaCB0aGlzIHNlcnZpY2UgZG9lcyBub3QgdXNlLiBHaG9zdGxpZ2h0IGNvbXBpbGVkIHVuY2hhbmdlZCBhbmQgcGFzc2VzIDg5IHdvcmtzcGFjZSB0ZXN0cyBhZ2FpbnN0IHRoZSBwaW5uZWQgcmV2LiBPbmUgdGhpbmcgd2FzIG5lYXJseSBsb3N0OiB0aGUgdmVuZG9yZWQgdHJhbnNwb3J0LnJzIGFsb25lIGNoZWNrZWQgYSBmcmFtZWQgcGF5bG9hZCBsZW5ndGggYWdhaW5zdCB0aGUgYWR2ZXJ0aXNlZCBtYXhpbXVtIGJlZm9yZSBhbGxvY2F0aW5nLCBzbyBhIGZvdXItYnl0ZSBoZWFkZXIgY291bGQgb3RoZXJ3aXNlIHNpemUgYSBidWZmZXIgdG8gd2hhdGV2ZXIgYSBwZWVyIGNsYWltczsgaXQgaXMgbm93IEN1bHRMaWIgODVmNzAyNCB3aXRoIGEgdGVzdC4gVmVyaWZpZWQgYnkgZGlmZmluZyBhbGwgdHdlbHZlIHZlbmRvcmVkIGN1bHRuZXQgZmlsZXMgYWdhaW5zdCBDdWx0TGliIGJlZm9yZSBkZWxldGluZyByYXRoZXIgdGhhbiBhZnRlci4gdmVuZG9yLyBzdGlsbCBob2xkcyB0aGUgY3VsdGNhY2hlLXB5IGFuZCBldmUgc3VibW9kdWxlczsgY3VsdGNhY2hlLXB5IGlzIHRoZSBzYW1lIHJ1bnRpbWUtc3BlY2lmaWMtcmVwbyBwYXR0ZXJuIGFuZCBDdWx0TGliIGNhcnJpZXMgcGFja2FnZXMvY3VsdGNhY2hlLXB5LCBidXQgaXQgYmFja3MgdGhlIHN0YXRlIHRvb2xpbmcgcmF0aGVyIHRoYW4gdGhlIGRhZW1vbi4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDNUMjM6MTM6NTUrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-03T23:27:13.913341+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T232624Z0000-0026-cdce3fe580c1", "payload": "eyJub3RlIjogIlRoZSBwcmUtZXhpc3Rpbmcgd29ya3RyZWUgZHJpZnQgaXMgbGFuZGVkIGF0IDc1MWI1YzQgYW5kIDMyMmNjMTEuIFRoZSBkYWVtb24gbm8gbG9uZ2VyIG5hbWVzIEdIT1NUTElHSFRfUlVOVElNRV9JRCwgR0hPU1RMSUdIVF9EVU5HRU9OX0JJTkQgb3IgR0hPU1RMSUdIVF9EVU5HRU9OX1JPT1QgdW5kZXIgbWFuYWdlbWVudDsgSWR1bm4gc3VwcGxpZXMgdGhlIHJ1bnRpbWUgaWQgaW4gdGhlIGFjdGl2YXRpb24gYnVuZGxlLCB0aGUgY2FuZGlkYXRlIGJpbmQsIGFuZCB0aGUgc3RhdGUgcm9vdCBhcyBhIHJlY2lwZSBhcmd1bWVudCBiaW5kaW5nLiBUaGF0IGJpbmRpbmcgaXMgcmVxdWlyZWQgcmF0aGVyIHRoYW4gY29zbWV0aWM6IE9kaW4gZGVwbG95bWVudC5ycyByZWZ1c2VzIGEgc3RhdGVmdWwgd29ya2xvYWQgd2l0aCBubyBzdGF0ZV9yb290IGFyZ3VtZW50IGJpbmRpbmcgYW5kIHJlZnVzZXMgb25lIHdob3NlIGJpbmRpbmcgZGlzYWdyZWVzIHdpdGggdGhlIGFkbWl0dGVkIHJvb3QsIHNvIHRoZSBvbGQgcmVjaXBlIGNvdWxkIG5vdCBoYXZlIGRlcGxveWVkLiBUaGUgYWNjZXB0YW5jZSBoYXJuZXNzIGlkZW50aXR5IGlzIHJlbmFtZWQgR0hPU1RMSUdIVF9BQ0NFUFRBTkNFX1JVTlRJTUVfSUQgc28gYSB0ZXN0LXN1cHBsaWVkIGlkIGNhbm5vdCBiZSByZWFkIGFzIHRoZSBtYW5hZ2VkIG9uZS4gODkgd29ya3NwYWNlIHRlc3RzIHBhc3MuIFByb3ZlbmFuY2UgZmluZGluZyB0aGF0IGNoYW5nZXMgdGhlIGN1bHRuZXQtcnMgcmV0aXJlbWVudCBnYXRlOiB0aGUgY29udHJhY3QgcmV2aXNpb25zIHRoZSBNaW5kIGNpdGVzLCBDdWx0TmV0IGY0YWIyMzcgYW5kIGl0cyBwcmVkZWNlc3NvciBlNTQyMjI1LCBhcmUgbm90IGFuY2VzdG9ycyBvZiBDdWx0TGliIG1haW4gYW5kIGV4aXN0IG9ubHkgb24gR2FtZUN1bHQvY3VsdG5ldC1ycyBicmFuY2ggY29kZXgvaWR1bm4tcnVudGltZS1hdXRob3JpdHktY29udHJhY3QuIFRoZWlyIGNvbnRlbnQgaXMgb24gQ3VsdExpYiBtYWluIGF0IDg1ZjcwMjQsIHZlcmlmaWVkIGJ5IHN5bWJvbCwgYnV0IHRoZSBTSEFzIGFyZSBub3QsIGJlY2F1c2UgdGhlIGNvbnNvbGlkYXRpb24gcG9ydGVkIGNvbW1pdHMgZm9yd2FyZCByYXRoZXIgdGhhbiBtZXJnaW5nIHRoZW0uIERlbGV0aW5nIEdhbWVDdWx0L2N1bHRuZXQtcnMgdGhlcmVmb3JlIGJyZWFrcyBldmVyeSBjaXRhdGlvbiBpbiBtYXAueWFtbCwgdGhlIGhhbmRvZmYsIGJvdGggbm90ZXMgYW5kIHRoZSBldmlkZW5jZSBsZWRnZXIuIE9kaW4gNjVjZjJiMiBhbmQgZDUyN2Q3MiBhcmUgbGlrZXdpc2Ugb2ZmIE9kaW4gbWFpbiwgb24gcHVzaGVkIGJyYW5jaCBjb2RleC95Z2ctaWR1bm4taW5kZXBlbmRlbnQtYm9vdHN0cmFwLCB3aGljaCBpcyByZXNvbHZhYmxlIGFuZCBuZWVkcyBubyBhY3Rpb24uIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTAzVDIzOjI2OjI0KzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-09-03T23:26:24.424346+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T235132Z0000-0027-b91f18d9b552", "payload": "eyJub3RlIjogIkxpdmUgY29udHJhY3QgY2l0YXRpb25zIGFyZSByZS1hbmNob3JlZCBmcm9tIEN1bHROZXQgZjRhYjIzNyBvbnRvIEN1bHRMaWIgODVmNzAyNCBhY3Jvc3MgbWFwLnlhbWwsIHRoZSBoYW5kb2ZmLCBhbmQgYm90aCBub3Rlcy4gVmVyaWZpZWQgYmVmb3JlIHN3YXBwaW5nIHJhdGhlciB0aGFuIGFzc3VtaW5nIGVxdWl2YWxlbmNlOiBhdCA4NWY3MDI0IHBhY2thZ2VzL2N1bHRuZXQtcnMgY2FycmllcyBJRFVOTl9MSUZFQ1lDTEVfQlJBS0VfKiBkaXN0aW5jdCBmcm9tIElEVU5OX0RFUExPWU1FTlRfQlJBS0VfKiwgSWR1bm5Qcm9jZXNzV3JpdGVMZWFzZVJlY29yZCwgR2FtZUN1bHRSdW50aW1lQ2FwYWJpbGl0eSwgT2RpblRvcG9sb2d5RGlzYWdyZWVtZW50IHdpdGggZGlzYWdyZWVtZW50cygpIGFuZCBpbnRvX3VuZGlzcHV0ZWRfcHJlc2VudCBzZXBhcmF0aW5nIHByZXNlbmNlIGZyb20gcmVhZGluZXNzLCBnZW5lcmF0aW9uLWJvdW5kIElkdW5uUnVudGltZUFjdGl2YXRpb25SZWNvcmQgd2l0aCBhIGRpc3RpbmN0IGFjdGl2YXRpb24tcHJvb2Ygc2lnbmluZyBwdXJwb3NlLCBhbmQgSWR1bm5FeHBlY3RlZFJvdXRlIHJlamVjdGluZyBub24tcnVkcDovLyBlbmRwb2ludHMgZm9yIFJVRFAgcm91dGVzLiBBbGwgc2l4IGNpdGVkIGNvbnRyYWN0cyBob2xkLiA4NWY3MDI0IGlzIGJvdGggQ3VsdExpYidzIGN1cnJlbnQgbWFpbiBoZWFkIGFuZCBhIHBlcm1hbmVudCBhbmNlc3RvciBvZiBtYWluLCBzbyB0aGUgY2l0YXRpb24gc3Vydml2ZXMgZXZlcnkgZnV0dXJlIGFkdmFuY2UsIHdoaWNoIGY0YWIyMzcgbmV2ZXIgY291bGQuIFR3byBjaXRhdGlvbnMgd2VyZSBpbnN0cnVjdGlvbnMgcmF0aGVyIHRoYW4gZGVzY3JpcHRpb25zIGFuZCBjb3VsZCBub3QgYmUgc3dhcHBlZCBtZWNoYW5pY2FsbHk6IG1hcC55YW1sIG5leHRfYWN0aW9uIGFuZCB0aGUgaGFuZG9mZiBuZXh0IGdhdGUgYm90aCBzYWlkIGFkdmFuY2UgT2RpbiB0byBDdWx0TmV0IGY0YWIyMzcsIHdoaWNoIHdvdWxkIGhhdmUgYWR2YW5jZWQgT2RpbiBkZWVwZXIgaW50byB0aGUgcmVwbyBiZWluZyBkZWxldGVkLiBCb3RoIG5vdyBzYXkgcmVwb2ludCBPZGluIG9mZiBpdHMgdmVuZG9yZWQgQ3VsdE5ldCBmb3JrIG9udG8gQ3VsdExpYiA4NWY3MDI0IGFzIEdob3N0bGlnaHQgZGlkIGF0IGQwNTEwYWMuIEV2aWRlbmNlIHJlY29yZHMga2VlcCB0aGVpciBwcmUtY29uc29saWRhdGlvbiBTSEFzIGFzIGRhdGVkIGhpc3Rvcnk7IHRoaXMgcmVjb3JkIGlzIHRoZSByZXNvbHV0aW9uIGtleSBmb3IgcmVhZGluZyB0aGVtLiBUaGUgcmV0aXJlbWVudCBnYXRlIGZvciBHYW1lQ3VsdC9jdWx0bmV0LXJzIGlzIG5vdyBvbmUgaXRlbTogT2RpbidzIHZlbmRvcmVkIEN1bHROZXQgZ2l0bGluayBpcyB0aGUgbGFzdCByZWFkZXIgb2YgdGhhdCByZXBvLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wM1QyMzo1MTozMiswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-09-03T23:51:32.201817+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T020232Z0000-0028-1f4b60d67cc6", "payload": "eyJub3RlIjogIk9kaW4gaXMgcmVwb2ludGVkIG9mZiB0aGUgdmVuZG9yZWQgY29yZS1zdGFjayBmb3JrcyBvbnRvIEN1bHRMaWIsIGNsb3NpbmcgdGhlIGxhc3QgY29kZSByZWFkZXIgb2YgR2FtZUN1bHQvY3VsdG5ldC1ycy4gVGhlIGZvcmtzIHdlcmUgbm90IHB1cmUgZHVwbGljYXRpb246IGEgd2hvbGUtZmlsZSBzeW1ib2wgY29tcGFyaXNvbiwgbm90IGEgZGlmZiBvZiByZWNlbnQgY2hhbmdlcywgZm91bmQgZm91ciBjYXBhYmlsaXRpZXMgQ3VsdExpYiBsYWNrZWQuIGN1bHRuZXQtcnMgbmVlZGVkIHJlbGlhYmxlIHNlbmQgZXhwaXJ5LCB3aGVyZSBhIHJlbGlhYmxlIHBhY2tldCBwYXN0IGl0cyBkZWFkbGluZSBpcyBkcm9wcGVkIHJhdGhlciB0aGFuIHJldHJhbnNtaXR0ZWQgYmVjYXVzZSBsaXZlIG1lZGlhIHRvbGVyYXRlcyBsb3NzIGJ1dCBub3QgbGF0ZW5lc3M7IGN1bHRjYWNoZS1ycyBuZWVkZWQgYm90aCBjb21wYXJlX2V4Y2hhbmdlX3NuYXBzaG90IGFuZCBhIHBlci1lbnRyeSBjb21wYXJlX2V4Y2hhbmdlIHdpdGggQ3VsdENhY2hlRXhwZWN0ZWRFbnZlbG9wZSwgd2hpY2ggQ3VsdExpYiBsYWNrZWQgZGVzcGl0ZSBjYXJyeWluZyB0aGUgbGFyZ2VyIGJvZHkuIEFsbCBhcmUgcG9ydGVkIHdpdGggdGVzdHMgb24gQ3VsdExpYiBicmFuY2ggY2xhdWRlL2N1bHRuZXQtcmVsaWFibGUtZXhwaXJ5IGF0IGNiZGU5NDAuIFRoZSBleHBpcnkgZGVzaWduIG1vdmVkIGR1cmluZyB0aGUgcG9ydDogQ3VsdExpYiBub3cgbGV0cyB0aGUgYWR2ZXJ0aXNlZCB0cmFuc3BvcnQgcHJvZmlsZSBvd24gZWFjaCBjaGFubmVsJ3MgZXhwaXJ5IHJhdGhlciB0aGFuIGEgcnVudGltZSBmaWVsZCB0aGF0IGNhbiBkaXNhZ3JlZSB3aXRoIHRoZSBwcm9maWxlIGEgcGVlciB3YXMgc2hvd24sIHdoaWNoIGlzIHdoZXJlIE9kaW4ncyBmb3JrIGFscmVhZHkgaGFkIGl0LiBUaGF0IGZpZWxkIGlzIHdpcmUtdmlzaWJsZSBhbmQgUnVzdCBwZWVycyBub3cgYWR2ZXJ0aXNlIGl0IG9uIHRoZSBtZWRpYSBjaGFubmVsOyBUeXBlU2NyaXB0LCBDIyBhbmQgS290bGluIGFjY2VwdCBpdCB1bmNoYW5nZWQgYWNyb3NzIGZpdmUgcGFzc2luZyBpbnRlcm9wIGxhbmVzIGVhY2gsIGFuZCB0aGUgb3RoZXIgZm91ciBydW50aW1lcyBzaG91bGQgZ3JvdyBpdC4gUHl0aG9uIGxhbmVzIGNhbm5vdCBydW4gb24gdGhpcyBtYWNoaW5lIGJlY2F1c2UgaXRzIFB5dGhvbiBydW50aW1lIGhhcyBubyBtc2dwYWNrLCBhbmQgdGhleSBmYWlsIGlkZW50aWNhbGx5IGJlZm9yZSBhbmQgYWZ0ZXIuIFR3byBPZGluIHRlc3QgZmFpbHVyZXMgYXJlIHByZS1leGlzdGluZyByYXRoZXIgdGhhbiBjYXVzZWQgYnkgdGhlIHJlcG9pbnQsIHZlcmlmaWVkIHJhdGhlciB0aGFuIGFzc3VtZWQ6IGlkdW5uLWRhZW1vbiBmaXh0dXJlcyB1c2UgL3NydiBwYXRocyB0aGF0IFBhdGg6OmlzX2Fic29sdXRlIHJlamVjdHMgb24gV2luZG93cywgYW5kIGEgbXVuaW5uIHRlc3QgZXhwZWN0cyBhbiBVbnJlbGlhYmxlIG1lZGlhIGNoYW5uZWwgd2hpbGUgZXZlcnkgY3VsdG5ldCBsaW5lYWdlIGluY2x1ZGluZyBib3RoIHByZXZpb3VzbHkgcGlubmVkIHJldmlzaW9ucyBkZWNsYXJlcyBpdCBSZWxpYWJsZS4gT2RpbidzIHJlY2lwZSByZXF1aXJlZCB0aGUgdmVuZG9yL2N1bHRuZXQtcnMgZ2l0bGluaywgc28gcmVtb3ZpbmcgdGhlIHN1Ym1vZHVsZSB3b3VsZCBoYXZlIG1hZGUgaXQgdW5hZG1pdHRhYmxlOyB0aGUgY29yZSBzdGFjayBpcyBub3cgcGlubmVkIGJ5IHJldiBpbiBDYXJnby5sb2NrIGluc2lkZSB0aGUgZnJvemVuIHNvdXJjZSB0cmVlIGluc3RlYWQgb2YgYnkgYSBnaXRsaW5rIElkdW5uIHZlcmlmaWVzIGRpcmVjdGx5LiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wNFQwMjowMjozMiswMDowMCIsICJ0eXBlIjogImFyY2hpdGVjdHVyZSJ9", "stored_at": "2026-09-04T02:02:32.061416+00:00", "type": "ghostlight.evidence_record.v0"}
{"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"}
{"key": "2026-09-04T131704Z0000-0033-28cbf7be3c30", "payload": "eyJub3RlIjogIlN3YXJtIHRyaWFnZTogZXZlcnkgcmVwbyB1bmRlciBGOi9Qcm9qZWN0cyBpcyBub3cgY2xlYW4gYW5kIHB1c2hlZC4gVHdvIGZpbmRpbmdzIGJlYXIgZGlyZWN0bHkgb24gR2hvc3RsaWdodCdzIGRlcGxveW1lbnQgZ2F0ZSwgYm90aCBjYXVzZWQgYnkgdGhlIGNvcmUtc3RhY2sgY29uc29saWRhdGlvbiByZW1vdmluZyBzdWJtb2R1bGVzIHRoYXQgSWR1bm4gd2FzIHN0aWxsIHRvbGQgdG8gZXhwZWN0LiBPZGluJ3MgZGVwbG95bWVudC9pZHVubi9yZWNpcGUudG9tbCBkZWNsYXJlZCByZXF1aXJlZF9naXRsaW5rcyA9IFt2ZW5kb3IvY3VsdG5ldC1yc10sIGFuZCBnYW1lY3VsdC1vcHMnIG9wZXJhdG9yIGJpbmRpbmcgdGVtcGxhdGVzIGRlY2xhcmVkIGdpdGxpbmtzIGZvciB2ZW5kb3IvY3VsdGNhY2hlLXJzIGFuZCB2ZW5kb3IvY3VsdG5ldC1ycyBvbiBjb2RleC1jb25uZWN0b3IgYW5kIHZlbmRvci9jdWx0bmV0LXJzIG9uIG9kaW47IElkdW5uIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBhZG1pdCB0aG9zZSB0YXJnZXRzIGZvciBnaXRsaW5rcyBpdCBjb3VsZCBub3QgZmluZC4gQWxsIGFyZSBjb3JyZWN0ZWQgYW5kIGNvbW1pdHRlZCBhdCBPZGluIGVlZGNlNGYgYW5kIGdhbWVjdWx0LW9wcyA4ZjdhZTJhLiBHaG9zdGxpZ2h0J3Mgb3duIGJpbmRpbmcgaXMgdW50b3VjaGVkIGJlY2F1c2UgdmVuZG9yL2N1bHRjYWNoZS1weSBhbmQgdmVuZG9yL2V2ZSBzdGlsbCBleGlzdC4gVGhlIHJlc3Qgb2YgdGhlIHRyaWFnZTogT2RpbiBlZWRjZTRmIGFsc28gbGFuZHMgNCwxNjcgbGluZXMgb2YgcmVhbCBpbi1mbGlnaHQgd29yayBpbmNsdWRpbmcgVURQIHJvdXRlIGFjdHVhdGlvbiB2aWEgUm91dGVCaW5kaW5nOjpzdGFibGVfc29ja2V0IGFuZCBhbiBOZ2lueFN0cmVhbVVkcCBkcml2ZXIsIHBsdXMgdGhlIG5ldyBvZGluLWRhZW1vbiBjcmF0ZSwgd2hpY2ggY2Fubm90IGNvbXBpbGUgb24gV2luZG93cyBiZWNhdXNlIGl0IHJlYWRzIHN5c3RlbWQgbGlzdGVuIGZpbGUgZGVzY3JpcHRvcnMgdGhyb3VnaCBzdGQ6Om9zOjpmZCwgc28gTGludXggQ0kgaXMgaXRzIGZpcnN0IHdpdG5lc3MuIEVwaXBoYW55IDYxNmEyYzhlIHdhcyBhbiBpbnRlcnJ1cHRlZCBjYXJnbyBmbXQgcnVuIHJhdGhlciB0aGFuIGEgZmVhdHVyZSwgZmluaXNoZWQgcmF0aGVyIHRoYW4gcmV2ZXJ0ZWQuIEFldGhlcmlhIHJlY2xhaW1lZCBhYm91dCAxLjZHQiBvZiBzY3JhdGNoIGNoZWNrb3V0cyBhbmQgc2FuZGJveGVkIHRvb2xjaGFpbiBjYWNoZXMsIGFsbCB2ZXJpZmllZCBjbGVhbiB3aXRoIG5vIHVucHVzaGVkIGNvbW1pdHMgZmlyc3QsIGFuZCB0aGUgY2xlYW51cCB3YXMgc2NvcGVkIHRvIHRoZSBkZWJyaXMgc28gVW5pdHkncyBMaWJyYXJ5IGFuZCBCdWlsZCBzdXJ2aXZlZC4gVHdvIGFwcGFyZW50bHkgc3RyYW5kZWQgY29tbWl0cyB0dXJuZWQgb3V0IHRvIGJlIGR1cGxpY2F0ZXMgYWxyZWFkeSB1cHN0cmVhbSB1bmRlciBkaWZmZXJlbnQgU0hBcywgZm91bmQgYnkgcGF0Y2gtaWQgcmF0aGVyIHRoYW4gYnkgc3ViamVjdC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTM6MTc6MDQrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-04T13:17:04.688694+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T133908Z0000-0034-4558985fc604", "payload": "eyJub3RlIjogIlJ1biAxMTUgcm9vdCBjYXVzZSBpcyB2b2NhYnVsYXJ5LXNoYXBlZCwgbm90IG1vZGVsLXNoYXBlZC4gTGVnYWN5IHRyYW5zaXRpb24ucnMgdXNlZCBjYWxsZXItc3VwcGxpZWQgU3ViamVjdFJlZntraW5kLGlkOlN0cmluZ30sIHR3by1waGFzZSBBZG1pdEVudGl0eXtpbml0aWFsX2NvbXBvbmVudHN9LCBhbmQgYSBmbGF0IFZlYzxQZXJtaXR0ZWRXb3JsZE11dGF0aW9uPiwgc28gYSBkYW5nbGluZyByZWZlcmVuY2UgbGlrZSBpbnN0OmtoYXJhZC1yb2FkLWtlZXBlcnMgLT4gbG9jOmtoYXJhZC1yaHl0aG0tcm9hZCB3YXMgYSBydW50aW1lIGRpc2NvdmVyeSByYXRoZXIgdGhhbiBhbiB1bnJlcHJlc2VudGFibGUgaW5wdXQ7IHJlY29uY2lsaWF0aW9uIGV4aXN0ZWQgb25seSB0byByZXBhaXIgdGhhdCBjbGFzcyBhbmQgZXhoYXVzdGVkIGFmdGVyIGZvdXIgc3RlcHMuIERlcHRoIGxpdmVkIGluIGZyZWUgc3RyaW5ncyAocG9zdHVyZSwgcmVzb3VyY2Vfa2luZCwgY2FwYWJpbGl0eV9pZCwgcGVyc2lzdGVudF9mZWF0dXJlcyksIHNvIHRoZSBwcmlvciBhdHRlbXB0IHRvIGZpeCBzaGFsbG93bmVzcyBhZGRlZCBtb2RlbCB0cmlidW5hbHMgKEVsYWJvcmF0b3JUaXRsZSwgV29ybGRDb21wbGV4aXR5KlF1YWxpZmljYXRpb24sICpWZXJpZmljYXRpb24pIGFzIGNvbXBlbnNhdG9ycyBmb3IgYW4gb250b2xvZ3kgd2l0aCBub3doZXJlIHRvIGhvbGQgZGVwdGguIEFkb3B0ZWQgY3V0OiByZWR1Y2VyLWlzc3VlZCB0eXBlZCBJRCBuYW1lc3BhY2VzLCBkcmFmdCBoYW5kbGVzIHJlc29sdmVkIGluc2lkZSBvbmUgY2xvc2VkIFdvcmxkUGF0Y2ggYmVmb3JlIGFueSBJRCBhbGxvY2F0ZXMsIHR3ZWx2ZSBkZWNpc2lvbi1jb25zdHJhaW5pbmcgY29tcG9uZW50cywgYW5kIGVsYWJvcmF0aW9uIHRoYXQgYW5zd2VycyBhIGRlcml2ZWQgQ2F1c2FsQm91bmRhcnkgaW5zdGVhZCBvZiBydW5uaW5nIHdhdmVzIGFuZCBxdW90YXMuIFJlY29yZGVkIGluIGRvY3MvYXJjaGl0ZWN0dXJlL2dob3N0bGlnaHQtd29ybGQtb250b2xvZ3kubWQuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA0VDEzOjM5OjA4KzAwOjAwIiwgInR5cGUiOiAicmVzZWFyY2gifQ==", "stored_at": "2026-09-04T13:39:08.623701+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T140112Z0000-0035-4f8eaa7056cc", "payload": "eyJub3RlIjogIk9udG9sb2d5IHYyIHVuaWZpZXMgZWxhYm9yYXRpb24gYW5kIGNoYXJhY3RlciBhY3Rpb24gdW5kZXIgb25lIFdvcmxkUGF0Y2ggYW5kIG9uZSBkZXRlcm1pbmlzdGljIHZlcmlmaWVyLiBUaHJlZSBkZWNpc2lvbnMgY2hhbmdlIGZ1dHVyZSBiZWxpZWY6ICgxKSBhZmZvcmRhbmNlcyBhcmUgd29ybGQtYXV0aG9yZWQgZGF0YSAocHJlY29uZGl0aW9ucywgZWZmZWN0IHNsb3RzLCB3ZWlnaHRlZCBvdXRjb21lIGJhbmRzKSBvdmVyIGEgY2xvc2VkIDI5LW9wZXJhdGlvbiBrZXJuZWwgc2V0LCBzbyBnZW5yZSBsaXZlcyBpbiB0aGUgc2VlZCBhbmQgdGhlIGtlcm5lbCBuZXZlciBsZWFybnMgb25lOyAoMikgdW5jZXJ0YWludHkgaXMgcmVzb2x2ZWQgYnkga2VybmVsIGVudHJvcHkgc2VlZGVkIGZyb20gd29ybGQvcmV2aXNpb24vY29tbWFuZCwgc28gbm8gbW9kZWwgZXZlciBjaG9vc2VzIHN1Y2Nlc3MsIHdoaWNoIGRlbGV0ZXMgdGhlIGxlZ2FjeSB3YXZlLWxldmVsIG91dGNvbWUgcmVzb2x2ZXI7ICgzKSBwcm9wb3NhbHMgYmluZCB0byBhIHNjb3BlIGRpZ2VzdCBvZiB0aGUgY29tcG9uZW50cyB0aGVpciB2ZXJpZmljYXRpb24gcmVhZHMgcmF0aGVyIHRoYW4gdGhlIHdob2xlIHN0YXRlIGRpZ2VzdCwgc28gZWlnaHQgZWxhYm9yYXRvciBsb29wcyBhbmQgbWFueSBzdWJqZWN0cyBkbyBub3Qgc2VyaWFsaXplIG9uIG9uZSByZXZpc2lvbiwgcmVwbGFjaW5nIHRoZSBzdGFsZS1tZWFucy1kaXNjYXJkIHJ1bGUuIEVsYWJvcmF0b3IgdG9vbHMgYXJlIGEgZGVyaXZlZCBwcm9qZWN0aW9uIG9mIHRoZSBvcGVyYXRpb24gc2V0IGFuZCBjYW5ub3QgZHJpZnQuIGdob3N0bGlnaHQtbXVsdGlyZXNvbHV0aW9uLWFnZW5jeS5tZCBpcyBkZW1vdGVkIHRvIHRlYXJkb3duIGV2aWRlbmNlIGtlZXBpbmcgb25seSByZXN1bWFibGUgc2Vzc2lvbnMsIGNvbXBhY3QgZHJhZnRzLCBhbmQgdGhlIGNvbXBsZXRlIG1pc21hdGNoIHNldC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTQ6MDE6MTIrMDA6MDAiLCAidHlwZSI6ICJyZXNlYXJjaCJ9", "stored_at": "2026-09-04T14:01:12.055210+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T141410Z0000-0036-a61849b93cf5", "payload": "eyJub3RlIjogIk9wZXJhdG9yIGNvcnJlY3Rpb24sIDIwMjYtMDktMDQ6IHRoZSAyLDQwMC1zdWJqZWN0IC8gMjQwLWNlbGwgLyAxMCUgY292ZXIgcHJvZmlsZSBpcyBhIGRlc2lnbiB0YXJnZXQsIG5vdCBhIGxvYWQgZml4dHVyZS4gQSB3b3JsZCBmZWVscyBhbGl2ZSBvbmx5IHdoZW4gYWN0b3JzIGF0IGV2ZXJ5IGxldmVsIHB1cnN1ZSB0aGVpciBvd24gZ29hbHM7IHRoYXQgcmVxdWlyZXMgZ2VuZXJhdGluZyB0aGF0IGRldGFpbCBmaXJzdCBhbmQgdGhlbiBjaG9raW5nIG11bHRpcmVzb2x1dGlvbiBzaW11bGF0aW9uIHNvIGF0dGVudGlvbiBpcyBzY2FyY2UgYW5kIHNlbGVjdGlvbiBpcyBmb3JjZWQuIFRoZSBtdnAgZG9jIHNlbnRlbmNlIGNhbGxpbmcgdGhlIHByb2ZpbGUgXCJ0ZXN0IGRhdGEsIG5vdCBhIHByb2R1Y3Rpb24gZWxhYm9yYXRpb24gdGFyZ2V0XCIgd2FzIHRlYXJkb3duLWVyYSB0ZXh0LCBub3Qgb3BlcmF0b3IgZGVzaWduLCBhbmQgaXMgYW1lbmRlZC4gT250b2xvZ3kgdjIgbm93IGNhcnJpZXM6IGFuIGF1dGhvcmVkIFdvcmxkU2NhbGVJbnRlbnQgd2l0aCBhIHN0cnVjdHVyYWxseSBjb3VudGVkIGRlZmljaXQgKHF1YWxpZmllZCBzdWJqZWN0ID0gYWN0aXZlLCBvbmUgY29udHJvbGxlciwgb25lIEdvYWwgY29tbWl0bWVudCwgb25lIGFmZm9yZGFuY2UpIHRoYXQgZWxhYm9yYXRvcnMgcHVyc3VlIGFmdGVyIGJvdW5kYXJpZXM7IGEgYnVkZ2V0ZWQgY29ubmVjdGVkIGNvdmVyIGV2ZXJ5IHRpY2sgd2l0aCBzaW5nbGV0b24gZGV0YWlsIGNlbGxzIGFuZCBncm91cGVkIGNvYXJzZSBjZWxsczsgcGVyLWNvbnN0aXR1ZW50IGF0dHJpYnV0aW9uIGFuZCBwYXJ0aXRpb25lZCBrbm93bGVkZ2UgaW4gZ3JvdXBlZCBjZWxsczsgZGVidCByb3RhdGlvbi4gU3RpbGwgZGVsZXRlZDogZ2VzdGFsdCBhcyBjYW5vbmljYWwgaWRlbnRpdHksIGFyZW5hIGtub3dsZWRnZSB1bmlvbiwgc2VtYW50aWMgcXVhbGlmaWNhdGlvbiBhbmQgdmVyaWZpY2F0aW9uIG1vZGVscywgZmlzc2lvbiBxdW90YXMgYXMgbXV0YXRpb24sIHN0cmluZyBpZGVudGlmaWVycy4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDRUMTQ6MTQ6MTArMDA6MDAiLCAidHlwZSI6ICJyZXNlYXJjaCJ9", "stored_at": "2026-09-04T14:14:10.337953+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T141847Z0000-0037-edecdf5c6e4b", "payload": "eyJub3RlIjogIkNvZGV4IENMSSBmYW4tb3V0IHRoYXQgbXVzdCBjb21taXQgY2Fubm90IHJ1biBpbiBhIGxpbmtlZCBnaXQgd29ya3RyZWUuIEEgbGlua2VkIHdvcmt0cmVlJ3MgLmdpdCBpcyBhIGZpbGUgcG9pbnRpbmcgaW50byB0aGUgcGFyZW50IHJlcG8ncyAuZ2l0L3dvcmt0cmVlcy8sIHdoaWNoIGlzIG91dHNpZGUgdGhlIENvZGV4IHNhbmRib3gncyB3cml0YWJsZSByb290cywgc28gZXZlcnkgZ2l0IGNvbW1pdCBmYWlscyB3aXRoIGluZGV4LmxvY2sgUGVybWlzc2lvbiBkZW5pZWQ7IHRoZSBkZWZhdWx0IHNhbmRib3ggYWxzbyBibG9ja3Mgb3V0Ym91bmQgcHVzaC4gQWxsIGZvdXIgd29ybGQgd29ya2VycyBkaWVkIG9uIHRoaXMgb24gMjAyNi0wOS0wNC4gRml4OiBmdWxsIGNsb25lcyBhdCB0aGUgc2FtZSBwYXRocyAoRjovUHJvamVjdHMvR2hvc3RsaWdodC13b3JsZHMvPHdvcmxkPiwgRjovUHJvamVjdHMvPExvcmU+LXdvcmt0cmVlcy9naG9zdGxpZ2h0LXdvcmxkczsgLmdpdCBpcyBhIGRpcmVjdG9yeSBkZXNwaXRlIHRoZSBkaXJlY3RvcnkgbmFtZSkgYW5kIGxhdW5jaCB3aXRoIC1jIHNhbmRib3hfd29ya3NwYWNlX3dyaXRlLm5ldHdvcmtfYWNjZXNzPXRydWUuIFVuY29tbWl0dGVkIHdvcmtlciBvdXRwdXQgd2FzIGJhbmtlZCBieSBoYW5kIHRvIGNvZGV4L3dvcmxkLTx3b3JsZD4gYW5kIGNvZGV4L2dob3N0bGlnaHQtd29ybGRzIGJlZm9yZSB0aGUgd29ya3RyZWVzIHdlcmUgcmVtb3ZlZC4gUnVsZSBmb3IgYW55IGZ1dHVyZSBDb2RleCBmYW4tb3V0IHRoYXQgd3JpdGVzOiBnaXZlIGVhY2ggd29ya2VyIGEgY2xvbmUgd2hvc2UgZW50aXJlIC5naXQgbGl2ZXMgdW5kZXIgaXRzIG93biB3cml0YWJsZSByb290LCBhbmQgZ3JhbnQgbmV0d29yayBpZiBpdCBtdXN0IHB1c2guIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA0VDE0OjE4OjQ3KzAwOjAwIiwgInR5cGUiOiAidmVyaWZpY2F0aW9uIn0=", "stored_at": "2026-09-04T14:18:47.920625+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T150424Z0000-0038-a237611b3305", "payload": "eyJub3RlIjogIlN1cGVyc2VkZXMgdGhlIDIwMjYtMDktMDRUMTQ6MTggY2xvbmUtcGx1cy1uZXR3b3JrIHJlY29yZCwgd2hpY2ggd2FzIG5lY2Vzc2FyeSBidXQgbm90IHN1ZmZpY2llbnQuIFRoZSBDb2RleCB3b3Jrc3BhY2Utd3JpdGUgc2FuZGJveCBrZWVwcyAuZ2l0IHJlYWQtb25seSBldmVuIHdoZW4gdGhlIHdob2xlIGNsb25lIHNpdHMgdW5kZXIgdGhlIHdyaXRhYmxlIHJvb3QsIHNvIGEgQ29kZXggd29ya2VyIGNhbiBuZXZlciBjb21taXQgb3IgcHVzaCByZWdhcmRsZXNzIG9mIGNsb25lIGxheW91dCBvciBuZXR3b3JrIGdyYW50LiBSdWxlIGZvciBhbnkgQ29kZXggZmFuLW91dCB0aGF0IG11c3QgcHJvZHVjZSBjb21taXR0ZWQgd29yazogdGhlIHdvcmtlciB3cml0ZXMgZmlsZXMgb25seTsgYSBzdXBlcnZpc29yIG91dHNpZGUgdGhlIHNhbmRib3ggY29tbWl0cyBhbmQgcHVzaGVzIHRoZSBjbG9uZSBhZnRlciB0aGUgd29ya2VyIGV4aXRzLiBUaGUgd29ybGQgZWxhYm9yYXRvciBzY2hlZHVsZXIgKEM6L1VzZXJzL01ldGEvLmNsYXVkZS93b3JsZHMvSW52b2tlLUVsYWJvcmF0b3JzLnBzMSkgZG9lcyB0aGlzIHBlciBzbG90IHRvIHNsb3QvPHdvcmxkPi88dGl0bGU+LzxzdGFtcD4gYnJhbmNoZXMgaW4gYm90aCB0aGUgR2hvc3RsaWdodCB3b3JsZCBjbG9uZSBhbmQgdGhlIGxvcmUgY2xvbmUsIHJlY29yZGluZyBjb21wbGV0aW9ucyBpbiBsb2dzL2VsYWItZG9uZS5jc3Y7IGludGVncmF0aW9uIGludG8gY29kZXgvd29ybGQtPHdvcmxkPiBhbmQgY29kZXgvZ2hvc3RsaWdodC13b3JsZHMgaXMgYSBzZXBhcmF0ZSBkZWxpYmVyYXRlIHBhc3MuIEZpcnN0IGJhbmtlZCBmaXh0dXJlOiBEZWx2ZWhvbGQgY2lzdGVybi1ob3VzZS1uaW5lLWJyZWFrZXItdGVzdCwgY29kZXgvd29ybGQtZGVsdmVob2xkIDkzNzRmZDAuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA0VDE1OjA0OjI0KzAwOjAwIiwgInR5cGUiOiAidmVyaWZpY2F0aW9uIn0=", "stored_at": "2026-09-04T15:04:24.134358+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T021322Z0000-0039-8fe6fe49acb8", "payload": "eyJub3RlIjogIlBsYW4gc3RlcCA2LCB0aGUgb250b2xvZ3kgd2lkZW5pbmcsIGlzIGNvbXBsZXRlOiB0ZW4gcGFzc2VzIGxhbmRlZCBvbiBjb2RleC9naG9zdGxpZ2h0LWR1bmdlb24tbXZwIGJldHdlZW4gMjAyNi0wOS0wNCBhbmQgMjAyNi0wOS0wNSwgZWFjaCBhcyBhIEhhbmRzIGN1dCBpbiBhbiBpc29sYXRpb24gd29ya3RyZWUsIGEgU291bCBmYWxzaWZpY2F0aW9uIGluIHRoZSBzYW1lIHRyZWUsIGFuZCBhIGZhc3QtZm9yd2FyZCBpbnRlZ3JhdGlvbi4gUGFzcyB0aXBzOiAxIHR5cGVkIElEIG5hbWVzcGFjZXMgYW5kIGNsb3NlZCBwYXRjaCByZXNvbHV0aW9uIDVlNTNiZWI7IDIgUG9zaXRpb24vUm91dGUvY29udGFpbm1lbnQgYW5kIHNjb3BlLWRpZ2VzdCBiaW5kaW5nIGU5OWFmNjM7IDMgQ3VzdG9keS9EZXBlbmRlbmN5L2NvbnNlcnZhdGlvbiBkMjgwNWZlOyA0IHdvcmxkLWF1dGhvcmVkIGFmZm9yZGFuY2UgY2F0YWxvZyB3aXRoIGtlcm5lbC1lbnRyb3B5IGJhbmRzIDBmMjFhNDk7IDUgQXV0aG9yaXR5L1NlbGVjdGlvbi9SZWRyZXNzIGRiZTE3NmQ7IDYgS25vd2xlZGdlL0NoYW5uZWwvRmFjdCBzdGFuZGluZyBjYjZhMTI2OyA3IGNsb2NrLCBDb21taXRtZW50LCBQcmVzc3VyZSwgZGVyaXZlZCBDYXVzYWxCb3VuZGFyeSBhbmQgdGhlIHN0cnVjdHVyYWwgYW5zd2VyIHJ1bGUgMTg1MmRkZDsgOCBjb25maW5lZCBlbGFib3JhdG9yIGxhbmUgYW5kIGRlcml2ZWQgdG9vbCBjYXRhbG9nIDNlZDM4Njg7IDkgYnVkZ2V0ZWQgY29ubmVjdGVkIGNvdmVyIHdpdGggdGljay1kcml2ZW4gZmFpcm5lc3MgY2VpbChOL1IpLCBSID0gY2VsbHMgbWludXMgdXJnZW5jeSBzbG90cywgdmVyaWZpZWQgMjIgdGlja3MgYXQgdGhlIDIsNDAwLzI0MCBwcm9maWxlIDhhZWJmYjY7IDEwIGNvbmZpbmVkIGV4dGVybmFsIGNvbnN1bWVyIGluZ3Jlc3Mgb3ZlciBQT1NUIC9jdWx0bmV0L3dvcmxkLXBhdGNoIGExZmQ2NDUuIFRoZSBrZXJuZWwgbm93IGhvbGRzIDEyIGRlY2lzaW9uLWNvbnN0cmFpbmluZyBjb21wb25lbnQga2luZHMgb3ZlciAyNyBuYW1lZCBvcGVyYXRpb25zIHVuZGVyIG9uZSBXb3JsZFBhdGNoLCBvbmUgcmVkdWNlciwgb25lIENBUyBjb21taXQsIG9uZSBkZWNvZGUgYm91bmQgZm9yIGJvdGggYXV0aG9yaW5nIGxhbmVzLCBhbmQgdGhyZWUgY29uZmluZWQgU3lzdGVtQ2FwYWJpbGl0eSBhcm1zIChDbG9jaywgRWxhYm9yYXRvciwgQ29uc3VtZXIpOyB0aGUgYWN0aW9uIHZvY2FidWxhcnkgaXMgZGF0YSBpbiB0aGUgc2VlZCBhbmQgdGhlIGtlcm5lbCBuZXZlciBsZWFybnMgYSBnZW5yZS4gVGhlIGVsZXZlbiBwbGFuIGludmFyaWFudHMgaG9sZCBzdHJ1Y3R1cmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgc2VyaWVzIHBlciBTb3VsOiBvbmUgZGV0ZXJtaW5pc3RpYyByZWR1Y2VyIGFuZCBhdG9taWMgY29tbWl0OyBrZXJuZWwtZGVyaXZlZCBhdXRob3JpdHk7IG9uZSBjb250cm9sbGVyIHBlciBzY29wZSB3aXRoIG5vIGZhbGxiYWNrIG9yIGRvdWJsZSBhY3Rpb247IHRvdGFsIGludGVycHJldGF0aW9uIHdpdGggZXhhY3QgZ2FwczsgZGV0ZXJtaW5pc3RpYyBzdHJ1Y3R1cmFsIHJlamVjdGlvbiB3aXRob3V0IGEgbW9kZWwgdmVyaWZpZXI7IHNjb3BlZCBrbm93bGVkZ2UgdW50aWwgZXhwbGljaXQgY29tbXVuaWNhdGlvbjsgZXh0ZXJuYWwtY29uc3VtZXIgc292ZXJlaWdudHk7IHNwYXJzZSBjYXVzYWwgc3VmZmljaWVuY3kgd2l0aCBjb3VudHMgYXMgZXZpZGVuY2Ugb25seTsgcmVzdGFydCByZWNvbnN0cnVjdHMgdGhlIGV4YWN0IHdvcmxkOyBJRHMgYWxsb2NhdGVkIG9ubHkgaW5zaWRlIGFuIGFkbWl0dGVkIHJlZHVjdGlvbjsgb3Bwb3J0dW5pdGllcyBib3VuZCB0byBhIHNjb3BlIGRpZ2VzdCByYXRoZXIgdGhhbiBhIHJldmlzaW9uLiBUaGUgcGFpcmluZyBpbnZhcmlhbnQgaXMgcmUtZGVjaWRlZCBhdCB0aHJlZSBnYXRlcyBieSBkb2N0cmluZSwgbm90IGJ5IGEgcmVwYWlyIGxvb3AuIFRlc3Qgc3VyZmFjZSBncmV3IGZyb20gNDMgd29ybGQgLyA4MyBjcmF0ZSBhdCB0aGUgc2VyaWVzIHN0YXJ0IHRvIDMxMyB3b3JsZCAvIDM1NyBjcmF0ZSBzb3VyY2UgZnVuY3Rpb25zIGF0IGExZmQ2NDUgKGZvY3VzZWQgd29ybGQ6OiBydW4gMzEyIC8gMzUyKS4gVHdvIGRlc2lnbiBkZWNpc2lvbnMgcmVtYWluIHdpdGggdGhlIG9wZXJhdG9yIGFuZCBhcmUgcmVjb3JkZWQgbm93aGVyZSBlbHNlIGR1cmFibGU6IHdoZXRoZXIgYSByZWZ1c2VkIGNvdXBsZWQgY29uc3RpdHVlbnQgbWF5IHJlLXN1Ym1pdCBvbmNlIGluc2lkZSB0aGUgc2FtZSB0aWNrLCB0byBiZSBkZWNpZGVkIHdpdGggdGhlIHN1Ym1pdHRlZC12ZXJzdXMtY29tbWl0dGVkIG51bWJlciBpbiBoYW5kOyBhbmQgdGhlIGF1dGhvcml0eSBmb3IgYW4gb3duZXItb25seSBFdmUgd29ybGQucnVuX3RpY2sgY29tbWFuZC4gVGhlIG5leHQgc2VhbSBhZnRlciB0aGUgc2VyaWVzIGlzIHRoZSBvdXRib3VuZCBjb25zdW1lciByZXNwb25zZSBiYXRjaCBhbmQgYSBub24tbG9vcGJhY2sgQ3VsdE1lc2ggbGVhc2UuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA1VDAyOjEzOjIyKzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-05T02:13:22.785718+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T134218Z0000-0040-c341057d3d7c", "payload": "eyJub3RlIjogIkZpcnN0IGxvY2FsIGxpdmUgc21va2Ugb2YgdGhlIHJlYnVpbHQga2VybmVsICgyMDI2LTA5LTA1KTogcHJvZHVjdGlvbiB0aWNrIGRyaXZlciwgY292ZXIsIFBlcnNvbmEgbWVtYnJhbmUsIG9wZXJhdGlvbmFsIGxhbmUsIGNsb2NrLCBhbmQgZWxhYm9yYXRpb24gc3dlZXAgcmFuIHRocmVlIHRpY2tzIGFnYWluc3QgYSByZWFsIENvZGV4Q29ubmVjdG9yIChoZWFkIGRhZW1vbiwgQ2hhdEdQVCBhdXRoKSBvbiBhIGdlbmVzaXMgd29ybGQ7IHJldmlzaW9uIDItPjExLCB0d28gc2luZ2xldG9uIGNlbGxzIHBlciB0aWNrLCBQZXJzb25hIHNwb2tlIGVhY2ggdGljaywgZWxhYm9yYXRpb24gY2xlYW4gKG5vdGhpbmcgZGVyaXZlZCB0byBhbnN3ZXIpLiBXYWxsIHRpbWUgNDAtNzAgcyBwZXIgdGljay4gVGhlIHJvYWQgd29ya3M7IHByb3NlIGlzIHRoaW4gYmVjYXVzZSBnZW5lc2lzIGlzIHRocmVlIHN1YmplY3RzIGluIG9uZSByb29tIHdpdGggb25lIGFmZm9yZGFuY2UsIHdoaWNoIGlzIHRoZSBzZWVkLXByb2R1Y2VyIGdhcC4gUnVuYm9vazogbm90ZXMvbG9jYWwtbGl2ZS1zbW9rZS5tZC4gU3RhbGU6IHRoZSBwcmUtcGFzcy02IGlnbm9yZWQgYWNjZXB0YW5jZSB0ZXN0IGluIGNvbnRyb2xsZXJzLnJzIGZhaWxzIGF0IE5vQXVkaWVuY2UuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA1VDEzOjQyOjE4KzAwOjAwIiwgInR5cGUiOiAidmVyaWZpY2F0aW9uIn0=", "stored_at": "2026-09-05T13:42:18.383052+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T173641Z0000-0041-d6b53753f89a", "payload": "eyJub3RlIjogIlNlZWRlZCBsaXZlIHNtb2tlIHBhc3NlZCAoMjAyNi0wOS0wNSk6IGZyb20gdGhlIEthbHNhIFB1YmxpYyB2YXVsdCwgb25lIHNlZWQgc2Vzc2lvbiBhdXRob3JlZCBzaXggcXVhbGlmaWVkIHBlcnNvbnMgaW50byBMb3cgU2VyZSBpbiBvbmUgcm91bmQgKDM5IHMpLCBkZWZpY2l0IDYtPjA7IHRoZSB3b3JsZCBhY3RpdmF0ZWQgd2l0aCBuaW5lIHN1YmplY3RzIGFuZCBzaXggYm91bmRhcmllczsgdGhyZWUgdGlja3Mgb2YgZWlnaHQgc2luZ2xldG9uIGNlbGxzIGVhY2ggKDk1LTEyMyBzKSB3aXRoIHRoZSBzZWVkZWQgcGVvcGxlIHNwZWFraW5nIHRvIGVhY2ggb3RoZXIgYnkgbmFtZS4gVHdlbHZlIHJ1bnM7IGV2ZXJ5IGZhaWx1cmUgd2FzIG9uIHRoZSByb2FkIGFuZCBlYWNoIGJlY2FtZSBhIHJ1bGU6IG9uZSBjcmVkZW50aWFsIGZhbWlseSAocmVhbCBjb2RleCBob21lKSwgc3RyaWN0IHNjaGVtYXMgKGFueU9mLCB0eXBlZCB0YWdzLCBvZmZsaW5lIHRvdGFsaXR5IHRlc3QpLCBhIHN1cHBvcnRlZCBQZXJzb25hIG1vZGVsLCBleHBpcnkgc2tldyB2cyByZXNwb25zZSB0aW1lb3V0LCBpZHMgYmVzaWRlIGxhYmVscyBpbiB0aGUgYnJpZWYsIHNlZWQgYnVkZ2V0IDI0IHdpdGggcGFyYWxsZWwgY2FsbHMgYW5kIGJ1ZGdldC1lbmQgc3VibWl0LCBjb250ZW50LWFkZHJlc3NlZCBwcm92aWRlciByZXF1ZXN0IGlkcywgdGhlIGNvbW1pdG1lbnQgc2hhcGUgcnVsZSBpbiB0aGUgdG9vbCBkZXNjcmlwdGlvbiwgYW5kIHRoZSBwbGFjZW1lbnQgcnVsZS4gVGhlIGhhcm5lc3MgZmFpbHMgb24gYW4gZW1wdHkgc2VlZCBvciBhIHNpbGVudCB3b3JsZC4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDVUMTc6MzY6NDErMDA6MDAiLCAidHlwZSI6ICJ2ZXJpZmljYXRpb24ifQ==", "stored_at": "2026-09-05T17:36:41.585793+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T222531Z0000-0042-844ee50e2d63", "payload": "eyJub3RlIjogIkNsYXVkZSBBZ2VudCBTREsgYXMgYSB0cmFuc3BvcnQgKDIwMjYtMDktMDYsIHJlc2VhcmNoLWFnZW50LXNkay5tZCk6IHRoZSBzeXN0ZW0gcHJvbXB0IGlzIGZ1bGx5IHJlcGxhY2VhYmxlLCBidWlsdC1pbnMgc3RyaXBwYWJsZSAodG9vbHM6IFtdKSwgQ0xBVURFLm1kIGxvYWRpbmcgc3RvcHBhYmxlIChzZXR0aW5nU291cmNlczogW10pLCBhbmQgYXNzaXN0YW50IHRvb2xfdXNlIGJsb2NrcyBhcmUgcmV0dXJuZWQgdmVyYmF0aW0gd2l0aCB1c2FnZSBhbmQgc3RvcCByZWFzb247IGJ1dCBubyBzaWxlbnQgY2FwdHVyZSBleGlzdHMgKGV2ZXJ5IGRlbmllZCB0b29sIGNhbGwgYmVjb21lcyBhIHRvb2wgcmVzdWx0IHRoZSBtb2RlbCByZWFkcyksIGEgUmVzcG9uc2VzLXN0eWxlIGlucHV0IGxpc3QgY2Fubm90IGJlIHJlcGxheWVkICh0aGUgaGFybmVzcyBvd25zIHRoZSBhc3Npc3RhbnQgc2lkZSksIHRoZXJlIGlzIG5vIHJlcXVlc3QgaWQgb3IgcmVwbGF5LCBhbmQgZWFjaCBxdWVyeSBpcyBvbmUgc3VicHJvY2Vzcy4gQ2hvc2VuIHNoYXBlOiBleGVjdXRlLXRocm91Z2gsIEdob3N0bGlnaHQgdG9vbHMgcmVnaXN0ZXJlZCBhcyBpbi1wcm9jZXNzIFNESyB0b29scyB3aG9zZSBoYW5kbGVyIGhhbmRzIGVhY2ggY2FsbCBiYWNrIHRvIEdob3N0bGlnaHQgZm9yIHRoZSByZXN1bHQgaXRzIG93biBldmFsdWF0b3IgY29tcHV0ZXMuIFJlamVjdGVkOiBhIE1lc3NhZ2VzLUFQSSBiYWNrZW5kIChubyBBUEkgc3BlbmQpLCBhIGJhY2tlbmQgaW5zaWRlIENvZGV4Q29ubmVjdG9yIChkZWxpYmVyYXRlbHkgaXNvbGF0ZWQgQ29kZXggZm9yaykuIE5vdGhpbmcgaW5zdGFsbGVkIGxvY2FsbHk6IG5vIGNsYXVkZSBDTEksIG5vIFNESywgbm8gc3Vic2NyaXB0aW9uIGNyZWRlbnRpYWw7IHRoZSBvcGVyYXRvciBtdXN0IGluc3RhbGwgYW5kIGxvZyBpbiBiZWZvcmUgYSByb2FkIHJ1bi4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDVUMjI6MjU6MzErMDA6MDAiLCAidHlwZSI6ICJyZXNlYXJjaCJ9", "stored_at": "2026-09-05T22:25:31.610150+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-06T003537Z0000-0043-781a784d5f65", "payload": "eyJub3RlIjogIkNsYXVkZSBTREsgaW5mZXJlbmNlIHBvcnQgbGFuZGVkIChwbGFuIHN0ZXAgMTEsIDIwMjYtMDktMDYpOiBhIHNlY29uZCBJbmZlcmVuY2VQb3J0IG92ZXIgYSBOb2RlIHNpZGVjYXIgb24gdGhlIENsYXVkZSBBZ2VudCBTREssIHJvdXRlZCBwZXIgbGFuZSBieSBtb2RlbCBwcmVmaXg7IGNoZWNrcG9pbnQgaW50ZWdyaXR5IHByb3ZlZCB0cmFuc3BvcnQtYWdub3N0aWMgc28gYm90aCBwb3J0cyBzaGFyZSBvbmUgcHJlcGFyZV9pbnZvY2F0aW9uOyB0aGUgc2lkZWNhciBjb21wdXRlcyBubyB0b29sIHJlc3VsdCwgUnVzdCBhbnN3ZXJzIGV2ZXJ5IGNhbGwgdGhyb3VnaCBhIHBlci1sYW5lIFRvb2xSZXN1bHRPcmFjbGUgdGhhdCBpcyB0aGUgZXZhbHVhdG9yIG93biBmb2xkIChkaXZlcmdlbmNlIGltcG9zc2libGUgYnkgY29uc3RydWN0aW9uKS4gTGVzc29uIHRoYXQgY2hhbmdlcyBob3cgYW55IGZ1dHVyZSB0cmFuc3BvcnQgaXMganVkZ2VkOiBhIHRyYW5zcG9ydC1zaWRlIHZhbGlkYXRvciBpcyBhIHNlY29uZCBzZW1hbnRpY3MuIFRoZSBTREsgWm9kIGxheWVyIHN0cmlwcGVkIHVua25vd24ga2V5cyBhbmQgcmVmdXNlZCBtaXNzaW5nIGZpZWxkcyBiZWZvcmUgdGhlIGhhbmRsZXIsIHNvIGEgY2xhdWRlIGxhbmUgc2lsZW50bHkgYWRtaXR0ZWQgd2hhdCB0aGUgY29ubmVjdG9yIHJlZnVzZWQgYW5kIHF1YXJhbnRpbmVkIHdoYXQgdGhlIGNvbm5lY3RvciByZWNvcmRlZCBhcyBhIGdhcDsgdGhlIGZpeCBpcyBvbmUgdmFsaWRhdG9yIG9uIGJvdGggdHJhbnNwb3J0cyAoUnVzdCBkZWNvZGVyKSwgdGhlIHNpZGVjYXIgaGFuZGluZyBhcmd1bWVudHMgdGhyb3VnaCB1bnZhbGlkYXRlZC4gTm90IHlldCBydW4gb24gdGhlIHJvYWQ6IG5vIENsYXVkZSBDb2RlIENMSSBvciBzdWJzY3JpcHRpb24gY3JlZGVudGlhbCBvbiB0aGlzIG1hY2hpbmUuIFJlY2VpcHQgaXMgdGhlIFNESyBtZXNzYWdlLCBhIG5hbWVkIHN0b3BnYXAgbGlhYmlsaXR5OyBleGl0IGlzIGEgTWVzc2FnZXMtQVBJIHBvcnQgd2hlbiBBUEkgYnVkZ2V0IGV4aXN0cywgZGVsZXRpbmcgdGhlIHNpZGVjYXIgd2hvbGUuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA2VDAwOjM1OjM3KzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-06T00:35:37.534424+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-26T171255Z0000-0000-720ac935783c", "payload": "eyJub3RlIjogIkRlbHZlaG9sZCBib3VuZGFyeSwgbWVyZ2VkIGZyb20gZm91ciByZWNvcmRzIG9mIDIwMjYtMDgtMjYuIERlbHZlaG9sZCBpcyB0aGUgZmlyc3QgcHJvdmluZyBjb25zdW1lciBvZiBHaG9zdGxpZ2h0J3MgZ2VuZXJpYyB3b3JsZC1zaW11bGF0aW9uIEFQSSwgbm90IGFuIGludGVncmF0aW9uIG9yZ2FuOyBhZHZlcnNhcmlhbCBzaW5nbGUtcGxheWVyIER1bmdlb24gcGxheSByZW1haW5zIGEgcmVncmVzc2lvbiBhbmQgY29udGV4dC1kaXNjb3ZlcnkgcGF0aC4gR2hvc3RsaWdodCBhZGRzIG9ubHkgZ2VuZXJpYyBjYXBhYmlsaXR5OiBvbmUgc2VlZCBhZG1pc3Npb24gcGF0aCBzaGFyZWQgYnkgcHJvZHVjZWQgYW5kIGNvbnN1bWVyIHNlZWRzLCBnZW5lcmljIGV4dGVybmFsbHkgb3duZWQgc3ViamVjdCBhdXRob3JpdHkgdGhhdCBhZG1pdHMgaW5zdGl0dXRpb24gYW5kIHBvcHVsYXRpb24tc2NhbGUgc3ViamVjdHMgdGhyb3VnaCBvbmUgdGFnZ2VkIHByb2plY3Rpb24sIGNvbnN1bWVyLXN1cHBsaWVkIGVmZmVjdCBzY2hlbWFzLCBhbmQgdHlwZWQgcHJvcG9zYWxzIGFuZCByZWNlaXB0cy4gRGVsdmVob2xkIHJldGFpbnMgcXVhbnRpdGF0aXZlIGVjb25vbXkgYXV0aG9yaXR5IChxdWFudGl0aWVzLCBwcmljZXMsIHJlY2lwZXMsIGNhcGFjaXR5LCBpbnZlbnRvcmllcywgb3JkZXJzLCBjb250cmFjdHMsIGNvbnNlcnZhdGlvbik7IEdob3N0bGlnaHQgcmVzb3VyY2UgaGFuZGxlcyBuZXZlciBpbXBlcnNvbmF0ZSB0aGVtLiBBIGZvcmNlZCBvbnRvbG9neSBtYXkgYnlwYXNzIHdvcmxkIGdlbmVyYXRpb24gYnV0IG5ldmVyIGtlcm5lbCB2YWxpZGF0aW9uLiBUaGUgZ3JlYXRob2xkIElEIGFuZCBldmVyeSBkZWx2ZWhvbGQuKiBiaW5kaW5nIHN0YXkgRGVsdmVob2xkLW93bmVkOyBubyBjZWxsIG9yIGtlcm5lbCBzd2l0Y2hlcyBvbiBhIGNvbnN1bWVyIG5hbWUuIFRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gdGhvc2UgcmVjb3JkcyBkZXNjcmliZWQgKFdvcmxkU2VlZCB0cmFuc2FjdGlvbiwgRXh0ZXJuYWxTdWJqZWN0QXV0aG9yaXR5LCBsb29wYmFjayBSVURQIG9wZXJhdGlvbnMpIHdhcyB0b3JuIGRvd247IHRoZSBsaXZlIGltcGxlbWVudGF0aW9uIGlzIHRoZSBwYXNzLTEwIGNvbmZpbmVkIGNvbnN1bWVyIGluZ3Jlc3MgaW4gZG9jcy9hcmNoaXRlY3R1cmUvZ2hvc3RsaWdodC13b3JsZC1jb25zdW1lci1hcGkubWQuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA4LTI2VDE3OjEyOjU1KzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-09-06T13:03:21.714499+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-08-29T051535Z0000-0001-c7dd24c03784", "payload": "eyJub3RlIjogIlN0YW5kaW5nIHByZS1yZWJ1aWxkIGRlY2lzaW9ucywgbWVyZ2VkIGZyb20gc2V2ZW4gcmVjb3JkcyBkYXRlZCAyMDI2LTA1LTAyIHRvIDIwMjYtMDgtMjk7IG1hcC55YW1sIGhhcmRfYm91bmRhcmllcyBhbmQgbWlzc2lvbiBvd24gdGhlIGJpbmRpbmcgdGV4dC4gKDEpIFZvaWRCb3QgYXBwcmFpc2FsOiBhcHByYWlzZXIgYW5kIHJlbGF0aW9uc2hpcC9wZXJjZXB0aW9uIHRyYWluaW5nIG11c3Qgc3VwcG9ydCBodW1hbi1mYWNpbmcgcmVhZHMsIGdyb3VuZGVkIG9waW5pb25zLCB1bmNlcnRhaW50eSwgcmVwYWlyIHNpZ25hbHMsIGFuZCBvcGluaW9uIHVwZGF0ZXMgb3ZlciByZXBlYXRlZCBjb250YWN0LCBub3Qgb25seSBmaWN0aW9uYWwgc2NlbmUgbXV0YXRpb24uICgyKSBHZW5lcmF0ZWQgZW52aXJvbm1lbnQgaW1hZ2VzIGFyZSBjb25jZXB0IGFuZCBtYXRlcmlhbCByZWZlcmVuY2Ugb25seTsgbXVsdGktYW5nbGUgb3IgYnJhbmNoLWNvbnNpc3RlbnQgcmVwbGF5IG5lZWRzIGEgZHVyYWJsZSBzY2VuZS1zZXQgc291cmNlIHdpdGggbmFtZWQgY2FtZXJhcyBhbmQgc3RhZ2luZyBzbG90cy4gKDMpIENvb3JkaW5hdG9yIHR1cm5zIGFyZSBhIHNhbmRib3hlZCBwcm9tcHRhYmxlIG9yZ2FuIHdpdGggZXhhY3QgdmlzaWJsZSBpbnB1dCwgcmF3IG91dHB1dCwgYW5kIGxhYmVsZWQgaW50ZXJ2ZW50aW9uczsgdGhlIG1ldGEtY29vcmRpbmF0b3IgbmV2ZXIgY29sbGFwc2VzIHRoZW0gaW50byBvbW5pc2NpZW50IGNoYXQgc3RlZXJpbmcuICg0KSBDaGFyYWN0ZXIgY29nbml0aW9uIGlzIG1vZGVsZWQgc3RhdGU6IHRoZSBtYWNoaW5lcnkgaXMgbWF4aW1hbGx5IHNtYXJ0LCBjaGFyYWN0ZXJzIHJlYXNvbiBhbmQgbWFuZXV2ZXIgb25seSB0byB0aGUgbGV2ZWwgdGhlaXIgbW9kZWxlZCBzdGF0ZSBzdXBwb3J0cywgYW5kIG5hcnJhdG9yIHByb3NlIG1heSBleHBsYWluIHRhY3RpY3MgZm9yIHRoZSByZWFkZXIgd2l0aG91dCBncmFudGluZyB0aGF0IGV4cGxhbmF0aW9uIHRvIGNoYXJhY3RlcnMuICg1KSBnaG9zdGxpZ2h0LmFnZW50X3N0YXRlLnYwIGlzIHRoZSBzaGFyZWQgY3Jvc3MtcnVudGltZSBwYXlsb2FkIGNvbnRyYWN0LCBjYXJyaWVkIHVuY2hhbmdlZCBpbnNpZGUgdHlwZWQgQ3VsdE5ldCBlbnZlbG9wZXMuICg2KSBNdWx0aXBsYXllciBleHRlbmRzIHRoZSBvbmUtV29ybGRLZXJuZWwsIG1hbnktYWN0b3IgYXV0aG9yaXR5IG1vZGVsOiBodW1hbnMgY29udHJvbCBkaXN0aW5jdCBjYW5vbmljYWwgYWN0b3JzIHRocm91Z2ggdGhlIHNhbWUgY29tbWl0IHBhdGgsIHdpdGggbm8gcGFydHkgcHJvbXB0IG9yIHJvb20tc3RhdGUgYXV0aG9yaXR5LiAoNykgQSBuZXdzcGFwZXIgaXMgYSBwZXJzaXN0ZW50IHBvbGl0aWNhbC9lZGl0b3JpYWwgUGVyc29uYSBvd25pbmcgYXVkaWVuY2UsIHJlbWVtYmVyZWQgYmVhdHMsIGZyYW1pbmcsIHNlbGVjdGl2ZSBwaWNrdXAsIHRocm91Z2hsaW5lcywgYW5kIHJpdmFsczsgZ3JvdW5kaW5nIGNvbnN0cmFpbnMgZmFjdHVhbCBhc3NlcnRpb24gYW5kIHByb3ZlbmFuY2Ugd2hpbGUgcHJlc2VydmluZyBsZWdpYmxlIGludGVycHJldGF0aW9uOyBvbmx5IHRoZSBlY29ub21pYyBsYXllciBzdXBwbGllcyBhZHZlcnRpc2Vycy4iLCAic3RhdHVzIjogImFjY2VwdGVkIiwgInRzIjogIjIwMjYtMDgtMjlUMDU6MTU6MzUrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-06T13:03:21.721572+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-01T174032Z0000-0002-aa0e085a7e03", "payload": "eyJub3RlIjogIlNlYWxpbmcgdGhlIHJlcGxhY2VtZW50IGtlcm5lbCwgMjAyNi0wOS0wMSwgZm91ciByZWNvcmRzIG1lcmdlZDsgZ2l0IG93bnMgdGhlIGNvbW1pdHMgKGI1MzI1MWYsIGQ0OWI5MDcsIDEyZWU5ZjQsIDY2ZWQyZWMpLiBUaGUgZmlyc3QgdW5jb21taXR0ZWQgd29ybGQucnMgZm91bmRhdGlvbiBwYXNzZWQgaXRzIGZvY3VzZWQgdGVzdHMgYW5kIHdhcyBkZWxldGVkIGFueXdheTogaXQgZXhwb3NlZCBtdXRhYmxlIFdvcmxkU3RhdGUgYW5kIElEIGlzc3VhbmNlLCBsZXQgdHJhbnNsYXRpb24tZ2FwIGluZmVyZW5jZSBiZWNvbWUgY2Fub25pY2FsIG11dGF0aW9uLCBsZXQgZW1wdHkgYmF0Y2hlcyBhZHZhbmNlIHJldmlzaW9uLCBsZWZ0IGNvbnRyb2xsZXIgY29tbWFuZHMgd2l0aG91dCBjb25zdW1lZCBvcHBvcnR1bml0eSwgcmVhZGluZXNzLCBhbmQgYWZmb3JkYW5jZSBiaW5kaW5nLCBhbmQgbWFkZSBiYXRjaCBzZWxmLWRpZ2VzdHMgdW52ZXJpZmlhYmxlLiBUaGUgcnVsZSB0aGF0IGNhbWUgb3V0IG9mIGl0OiBzZWFsIHByaXZhdGUgV29ybGRLZXJuZWwsIGFnZ3JlZ2F0ZSwgYW5kIGpvdXJuYWwgb3duZXJzaGlwIGZpcnN0LCB0aGVuIHJlaW50cm9kdWNlIGEgbWluaW1hbCByZWR1Y2VyIGJlaGluZCBpdDsgbmV2ZXIgcHVibGlzaCBtdXRhYmxlIHdvcmxkIHR5cGVzIG9yIGFuIElEIGlzc3VlciBmb3IgdGVzdCBvciBhZGFwdGVyIGNvbnZlbmllbmNlLiBUaGUgUGVyc29uYSBpbnRlcnByZXRhdGlvbiBjb250cmFjdCBpcyBzdHJ1Y3R1cmFsbHkgdG90YWw6IHNvdXJjZSBwcm9zZSBpcyBpbW11dGFibGUgbm9uY2Fub25pY2FsIGV2aWRlbmNlIGJvdW5kIHRvIHR5cGVkIHJlY2VpcHRzLCBvbmx5IGV4YWN0IHR5cGVkIGNhcHR1cmVzIHByb3Bvc2Ugc3RhdGUsIGFjdHVhbCBxdW90ZWQgZGlhbG9ndWUgaXMgcmVxdWlyZWQgZm9yIHNwZWVjaCwgbWFsZm9ybWVkIHNwYW5zIGFuZCBzdGVwIGV4aGF1c3Rpb24gYmVjb21lIHdob2xlLXNvdXJjZSBnYXBzLCBhbmQgaW5mcmFzdHJ1Y3R1cmUgaW50ZXJydXB0aW9uIHJldHVybnMgdGhlIHNvdXJjZSBwZW5kaW5nLiBMZWdhY3kgaW5ncmVzc2VzIHdlcmUgZGVsZXRlZCB3aXRob3V0IGEgY29tcGF0aWJpbGl0eSB3cml0ZXIuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTAxVDE3OjQwOjMyKzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-06T13:03:21.729090+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-03T061320Z0000-0003-4bb819ff11b4", "payload": "eyJub3RlIjogIkRlcGxveW1lbnQgYXV0aG9yaXR5LCBtZXJnZWQgZnJvbSBhIGZvdXItcmVjb3JkIHN1cGVyc2Vzc2lvbiBjaGFpbiwgMjAyNi0wOS0wMiB0byAyMDI2LTA5LTAzOyBtYXAueWFtbCBsaXZlX2FyY2hpdGVjdHVyZS5kZXBsb3ltZW50X2F1dGhvcml0eSBvd25zIHRoZSBmdWxsIGN1cnJlbnQgcnVsZS4gVGhlIHJlYWQtb25seSBjdXRvdmVyIGF1ZGl0IGZvdW5kIHRoZSBvbGQgSWR1bm4gcGF0aCBzdHJ1Y3R1cmFsbHkgdW5maXQ6IHNvdXJjZSwgcmVmLCBhbmQgZmxvb3IgcG9saWN5IGR1cGxpY2F0ZWQgYWNyb3NzIGNvbXBpbGVkIFJ1c3QsIHJhdyBleGVjdXRhYmxlIGNvbW1hbmQgcmVjb3JkcywgYSBwcml2aWxlZ2VkIHNoZWxsIGRpc3BhdGNoZXIsIGFuZCBnYW1lY3VsdC1vcHMgdGFyZ2V0IHByb2dyYW1zOyByb290IEdpdCB1bmFibGUgdG8gaW5zcGVjdCBpZHVubi1vd25lZCBtaXJyb3JzOyB3b3JsZC12MiBwdXJpdHkgY2hlY2tzIGlnbm9yaW5nIG1vc3QgbGVnYWN5IHN0YXRlOyBmaXhlZC1wb3J0IGFjdGl2YXRpb24gc3RvcHBpbmcgdGhlIGluY3VtYmVudCBiZWZvcmUgdGhlIGNhbmRpZGF0ZSB3YXMgZ3JlZW4uIEFkb3B0ZWQ6IHRhcmdldC1vd25lZCB2aXNpYmxlIHJlY2lwZXMgd2l0aCBjb25zdHJhaW5lZCBsYXVuY2ggZGVjbGFyYXRpb25zIChyYXcgdW5pdCBhbmQgY29udGFpbmVyIHRlbXBsYXRlcyByZWplY3RlZDsgdGhlIG9wZXJhdG9yLXNlbGVjdGVkIHdvcmtsb2FkIGRyaXZlciBsb3dlcnMgdGhlbSksIElkdW5uLWNvbmZpZ3VyZWQgcmVmcywgcnVubmVyLCBhbmQgaG9zdCBiaW5kaW5ncywgR2l0IGFuZCByZWNpcGUgbWF0ZXJpYWxpemF0aW9uIGFzIHRoZSBJZHVubiBpZGVudGl0eSwgRXhwZWN0ZWQgcHVibGlzaGVkIGJ5IHBsYW4sIHNlcnZpY2Utc2lnbmVkIFByZXNlbnQsIGEgcHJvY2VzcyB3cml0ZSBsZWFzZSBiZWZvcmUgd3JpdGFibGUgc3RhdGUsIE9kaW4tZGVyaXZlZCBSZWFkeSwgcm91dGUgbWVtYmVyc2hpcCBvbmx5IGFmdGVyIFJlYWR5LCBhbmQgZGVwbG95bWVudCBzZXBhcmF0ZSBmcm9tIGNvbnRpbnVpdHkuIFRoZSBvd25lciBpcyBleGFjdGx5IERlcGxveW1lbnRDb21tYW5kLCBEZXBsb3ltZW50VHJhbnNhY3Rpb24sIGFuZCBBZG1pdHRlZEdlbmVyYXRpb24gd2l0aCBuaW5lIHBlcnNpc3RlZCBwaGFzZXMgYmVmb3JlIGVmZmVjdHMgKE9kaW4gNjVjZjJiMjsgY29udHJhY3RzIG9uIEN1bHRMaWIgODVmNzAyNDsgcHJvdmlkZXIgc2lkZXMgR2hvc3RsaWdodCA2YTc5Y2IwIGFuZCBDb2RleENvbm5lY3RvciBlZGUzYzMwKS4gTGl2ZSBhZG1pc3Npb24gcmVtYWlucyBhYnNlbnQuIFRoZSBOZ2lueCByb3V0ZSByZWNlaXB0IHByb3ZlcyBjb25maWd1cmF0aW9uIHBsdXMgbmdpbnggLVQgdmlzaWJpbGl0eSBvbmx5LCBzbyBhbiBpbmRlcGVuZGVudGx5IHBlcnNpc3RlZCBkYXRhLXBsYW5lIG9ic2VydmF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSBmZW5jZSBjbGVhcmFuY2UsIGRyYWluLCBvciBjdXRvdmVyIGFjY2VwdGFuY2UuIERvIG5vdCBpc3N1ZSB0aGUgb2xkIENvbm5lY3RvciBvciBHaG9zdGxpZ2h0IHJlZGVwbG95IGhlbHBlcnMuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA5LTAzVDA2OjEzOjIwKzAwOjAwIiwgInR5cGUiOiAicmVzZWFyY2gifQ==", "stored_at": "2026-09-06T13:03:21.736955+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T131704Z0000-0004-960eef72bce9", "payload": "eyJub3RlIjogIkNvcmUtc3RhY2sgY29uc29saWRhdGlvbiwgbWVyZ2VkIGZyb20gdGVuIHJlY29yZHMsIDIwMjYtMDktMDMgdG8gMjAyNi0wOS0wNC4gQ3VsdExpYiBpcyB0aGUgY2Fub25pY2FsIGhvbWUgZm9yIEN1bHRDYWNoZSwgQ3VsdE5ldCwgYW5kIEN1bHRNZXNoIGFjcm9zcyBldmVyeSBydW50aW1lIGJlY2F1c2Ugd2lyZS1wYXJpdHkgY29uZm9ybWFuY2UgbGl2ZXMgb25seSB0aGVyZTsgR2hvc3RsaWdodCBjb25zdW1lcyBhbGwgdGhyZWUgYnkgcGlubmVkIHJldiA4NWY3MDI0IChkMDUxMGFjKSwgYSBwZXJtYW5lbnQgYW5jZXN0b3Igb2YgQ3VsdExpYiBtYWluLCBhbmQgaXRzIHZlbmRvcmVkIGZvcmsgY2hhcnRlciBpcyBkZWxldGVkLiBSZXNvbHV0aW9uIGtleSBmb3Igb2xkZXIgcmVjb3JkczogQ3VsdE5ldCBlNTQyMjI1IGFuZCBmNGFiMjM3IGFuZCBPZGluIGQ1MjdkNzIgYW5kIDY1Y2YyYjIgd2VyZSBuZXZlciBvbiB0aGVpciByZXBvcycgbWFpbiBicmFuY2hlczsgdGhlaXIgY29udGVudCBpcyBvbiBDdWx0TGliIDg1ZjcwMjQgYW5kIE9kaW4gYnJhbmNoIGNvZGV4L3lnZy1pZHVubi1pbmRlcGVuZGVudC1ib290c3RyYXAsIHBvcnRlZCBmb3J3YXJkIHJhdGhlciB0aGFuIG1lcmdlZCwgc28gdGhvc2UgU0hBcyBhcmUgZGF0ZWQgaGlzdG9yeSBhbmQgR2FtZUN1bHQvY3VsdG5ldC1ycyBtYXkgYmUgcmV0aXJlZC4gQSB3aG9sZS1maWxlIHN5bWJvbCBjb21wYXJpc29uLCBub3QgYSBkaWZmIG9mIHJlY2VudCBjaGFuZ2VzLCBmb3VuZCBmb3VyIHJlYWwgY2FwYWJpbGl0aWVzIGluIHRoZSBmb3JrcyAocmVsaWFibGUgc2VuZCBleHBpcnkgb3duZWQgYnkgdGhlIHRyYW5zcG9ydCBwcm9maWxlLCBzbmFwc2hvdCBhbmQgcGVyLWVudHJ5IGNvbXBhcmUtZXhjaGFuZ2UsIGEgZnJhbWVkLWxlbmd0aCBjaGVjayBiZWZvcmUgYWxsb2NhdGlvbiksIGFsbCBwb3J0ZWQgd2l0aCB0ZXN0czsgZXZlcnkgb3RoZXIgZm9yayB1bmRlciBGOi9Qcm9qZWN0cyBoZWxkIHJlYWNoIHJhdGhlciB0aGFuIGRpdmVyZ2VuY2UsIGFuZCBlYWNoIGNvbnN1bWVyIHBpbm5pbmcgYSBkaWZmZXJlbnQgYnJhbmNoIHdhcyB0aGUgY29tYmluYXRvcmlhbCByZWFzb24gc2VwYXJhdGUgcmVwb3MgZmFpbGVkLiBDdWx0TGliIG1haW4gbGFuZGVkIGJ5IGZhc3QtZm9yd2FyZCBhdCA4Y2IzYjcyLCBzbyBldmVyeSBjb25zdW1lciBwaW4gKEdob3N0bGlnaHQgODVmNzAyNCwgRXBpcGhhbnkgYW5kIENvZGV4Q29ubmVjdG9yIGUxNzFlY2EsIE9kaW4gY2JkZTk0MCkgcmVzb2x2ZXMgZnJvbSBhIGZyZXNoIGNsb25lOyBhIHNxdWFzaCB3b3VsZCBoYXZlIG9ycGhhbmVkIGFsbCBvZiB0aGVtLiBPZGluIGVlZGNlNGYgY29uc3VtZXMgQ3VsdExpYiwgaXRzIHJlY2lwZSBubyBsb25nZXIgcmVxdWlyZXMgZ2l0bGlua3MsIGFuZCBnYW1lY3VsdC1vcHMgOGY3YWUyYSBkcm9wcyB0aGUgcGhhbnRvbSBnaXRsaW5rcyBJZHVubiB3b3VsZCBoYXZlIHJlZnVzZWQ7IG9kaW4tZGFlbW9uIHJlYWRzIHN5c3RlbWQgZmlsZSBkZXNjcmlwdG9ycyBhbmQgY29tcGlsZXMgb25seSBvbiBMaW51eC4gTm9uLVJ1c3QgZm9ya3MgcGVyc2lzdCBmb3IgZGlzdHJpYnV0aW9uLCBub3QgZGl2ZXJnZW5jZTogbnBtIGFuZCBwaXAgY2Fubm90IGNvbnN1bWUgYSBwYWNrYWdlIGZyb20gYSBnaXQgc3ViZGlyZWN0b3J5LCBzbyBDdWx0TGliIDhjYjNiNzIgYWRkcyB0YWctdHJpZ2dlcmVkIHB1Ymxpc2hpbmcgKEBnYW1lY3VsdC9jdWx0Y2FjaGUtdHMsIGN1bHRjYWNoZS1weSBvbiBQeVBJLCBNSVQgY29uZmlybWVkIGJ5IHRoZSBvcGVyYXRvcikuIEdob3N0bGlnaHQga2VlcHMgdmVuZG9yL2N1bHRjYWNoZS1weSBvbiBzeXMucGF0aCBkZWxpYmVyYXRlbHkgc28gdGhlIHN0YXRlIHRvb2xpbmcgcnVucyBmcm9tIGEgYmFyZSBjbG9uZTsgcmVwbGFjaW5nIGl0IG1lYW5zIHNlc3Npb24gYm9vdHN0cmFwIG11c3QgaW5zdGFsbC4iLCAic3RhdHVzIjogImFjY2VwdGVkIiwgInRzIjogIjIwMjYtMDktMDRUMTM6MTc6MDQrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-06T13:03:21.744466+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T133908Z0000-0005-8ab1dcd22188", "payload": "eyJub3RlIjogIldoeSB0aGUgd2hvbGUtbWFjaGluZSByZWJ1aWxkLCBtZXJnZWQgZnJvbSB0aHJlZSByZWNvcmRzLCAyMDI2LTA5LTAxIHRvIDIwMjYtMDktMDQuIFJ1biAxMDggaW5zcGVjdGlvbjogMiw0MDAgYWN0aXZlIGxlYXZlcyBhY3Jvc3MgZml2ZSByZWFsbXMgd2l0aCBzdHJvbmcgYXV0aG9yZWQgY3Jpc2lzIHRoZWF0ZXIsIGJ1dCByZXBlYXRlZCBmaXNzaW9uIHN1YnN0aXR1dGVkIHRheG9ub215IGZvciBub3ZlbHR5ICg1NTcgb3RoZXItdW5rbm93biByZWNvcmRzLCA3ODAgcmVzaWR1YWwsIGluaGVyaXRlZCBpZGVudGljYWwgZ29hbHMsIGVpZ2h0IGRpc3RpbmN0IEFjdG9ycyBuYW1lZCBNYXJhIFZlbm4pOyBjb3VudGluZyBhY3RpdmUgbGVhdmVzIG1lYXN1cmVkIG5vdGhpbmcgYWJvdXQgd29ybGQgc2hhcGUuIFJ1biAxMTUgdGVybWluYXRlZCBhdCByZXZpc2lvbiAyLCByZWdpb25zIDIvOCwgd2F2ZXMgMC8xLCBhZnRlciBhbiBTU0UgdGltZW91dCBhbmQgYSBkYW5nbGluZyBpbnN0aXR1dGlvbiBsb2NhdGlvbiBleGhhdXN0ZWQgZm91ciByZWNvbmNpbGlhdGlvbiBzdGVwczsgdGhlIHF1YWxpZmljYXRpb24sIHZlcmlmaWVyLCByZWNvbmNpbGlhdGlvbiwgdGltZW91dCwgYW5kIHJvdXRpbmcgcGF0Y2ggc2VxdWVuY2UgdGhyb3VnaCA4OTY0YTkyIG5ldmVyIGVzdGFibGlzaGVkIG93bmVyc2hpcCwgYW5kIHRoZSBvcGVyYXRvciBvcmRlcmVkIG9uZSBXb3JsZEtlcm5lbCwgb25lIHR5cGVkIHJlZHVjZXIsIG9uZSBDb21tYW5kRW52ZWxvcGUvQ3VsdENhY2hlIGNvbW1pdCBwYXRoLiBUaGUgcm9vdCBjYXVzZSB3YXMgdm9jYWJ1bGFyeS1zaGFwZWQsIG5vdCBtb2RlbC1zaGFwZWQ6IGNhbGxlci1zdXBwbGllZCBzdHJpbmcgU3ViamVjdFJlZnMsIHR3by1waGFzZSBlbnRpdHkgYWRtaXNzaW9uLCBhbmQgYSBmbGF0IG11dGF0aW9uIGxpc3QgbWFkZSBhIGRhbmdsaW5nIHJlZmVyZW5jZSBhIHJ1bnRpbWUgZGlzY292ZXJ5IHJhdGhlciB0aGFuIGFuIHVucmVwcmVzZW50YWJsZSBpbnB1dCwgYW5kIGRlcHRoIGxpdmVkIGluIGZyZWUgc3RyaW5ncywgc28gdGhlIG1vZGVsIHRyaWJ1bmFscyAoRWxhYm9yYXRvclRpdGxlLCBXb3JsZENvbXBsZXhpdHkgcXVhbGlmaWNhdGlvbiBhbmQgdmVyaWZpY2F0aW9uKSB3ZXJlIGNvbXBlbnNhdG9ycyBmb3IgYW4gb250b2xvZ3kgd2l0aCBub3doZXJlIHRvIGhvbGQgZGVwdGguIEFkb3B0ZWQgY3V0OiByZWR1Y2VyLWlzc3VlZCB0eXBlZCBJRCBuYW1lc3BhY2VzLCBkcmFmdCBoYW5kbGVzIHJlc29sdmVkIGluc2lkZSBvbmUgY2xvc2VkIFdvcmxkUGF0Y2ggYmVmb3JlIGFueSBJRCBhbGxvY2F0ZXMsIHR3ZWx2ZSBkZWNpc2lvbi1jb25zdHJhaW5pbmcgY29tcG9uZW50cywgYW5kIGVsYWJvcmF0aW9uIHRoYXQgYW5zd2VycyBhIGRlcml2ZWQgQ2F1c2FsQm91bmRhcnkgaW5zdGVhZCBvZiBydW5uaW5nIHdhdmVzIGFuZCBxdW90YXMuIENvdW50cywgY292ZXIgcmF0aW9zLCBpbnRlcmVzdCwgYW5kIGRpdmVyc2l0eSBhcmUgZXZhbHVhdGlvbiBldmlkZW5jZSwgbmV2ZXIgYWRtaXNzaW9uIG9yIGNvbXBsZXRlbmVzcyBhdXRob3JpdHkuIFJ1biAxMTUncyByb290IGF0IC92YXIvbGliL2dhbWVjdWx0L2dob3N0bGlnaHQtZHVuZ2Vvbi9hY2NlcHRhbmNlL2Z1bGwtd29ybGQtZGVsdmVob2xkLTBhODMwMzQtMTE1IGFuZCBpbnZvY2F0aW9uIGQ5MjU0Y2Q5Yjc3OTQ2YWViY2Y3YTdmZGFlODIxNDAyIHN0YXkgaW1tdXRhYmxlOyBkbyBub3QgcmVzdW1lIGl0LiIsICJzdGF0dXMiOiAiYWNjZXB0ZWQiLCAidHMiOiAiMjAyNi0wOS0wNFQxMzozOTowOCswMDowMCIsICJ0eXBlIjogInJlc2VhcmNoIn0=", "stored_at": "2026-09-06T13:03:21.752470+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T141410Z0000-0006-2aa4d36359fd", "payload": "eyJub3RlIjogIk9udG9sb2d5IHYyIGRlY2lzaW9ucyBhbmQgdGhlIHNjYWxlIGRpcmVjdGl2ZSwgMjAyNi0wOS0wNCwgdHdvIHJlY29yZHMgbWVyZ2VkOyBkb2NzL2FyY2hpdGVjdHVyZS9naG9zdGxpZ2h0LXdvcmxkLW9udG9sb2d5Lm1kIG93bnMgdGhlIHZvY2FidWxhcnkuIEVsYWJvcmF0aW9uIGFuZCBjaGFyYWN0ZXIgYWN0aW9uIGxvd2VyIHVuZGVyIG9uZSBXb3JsZFBhdGNoIGFuZCBvbmUgZGV0ZXJtaW5pc3RpYyB2ZXJpZmllci4gQWZmb3JkYW5jZXMgYXJlIHdvcmxkLWF1dGhvcmVkIGRhdGEgKHByZWNvbmRpdGlvbnMsIGVmZmVjdCBzbG90cywgd2VpZ2h0ZWQgb3V0Y29tZSBiYW5kcykgb3ZlciBhIGNsb3NlZCBvcGVyYXRpb24gc2V0LCBzbyBnZW5yZSBsaXZlcyBpbiB0aGUgc2VlZCBhbmQgdGhlIGtlcm5lbCBuZXZlciBsZWFybnMgb25lOyB1bmNlcnRhaW50eSByZXNvbHZlcyBieSBrZXJuZWwgZW50cm9weSBzZWVkZWQgZnJvbSB3b3JsZCwgcmV2aXNpb24sIGFuZCBjb21tYW5kLCBzbyBubyBtb2RlbCBldmVyIGNob29zZXMgc3VjY2VzczsgcHJvcG9zYWxzIGJpbmQgdG8gYSBzY29wZSBkaWdlc3Qgb2YgdGhlIGNvbXBvbmVudHMgdGhlaXIgdmVyaWZpY2F0aW9uIHJlYWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBzdGF0ZSBkaWdlc3QsIHNvIG1hbnkgc3ViamVjdHMgYW5kIGVsYWJvcmF0b3JzIGRvIG5vdCBzZXJpYWxpemUgb24gb25lIHJldmlzaW9uLiBFbGFib3JhdG9yIHRvb2xzIGFyZSBhIGRlcml2ZWQgcHJvamVjdGlvbiBvZiB0aGUgb3BlcmF0aW9uIHNldCBhbmQgY2Fubm90IGRyaWZ0LiBPcGVyYXRvciBjb3JyZWN0aW9uLCBwcmVzZXJ2ZSBpbiBpbnRlbnQ6IHRoZSAyLDQwMC1zdWJqZWN0IC8gMjQwLWNlbGwgLyAxMCUgY292ZXIgcHJvZmlsZSBpcyBkZWxpYmVyYXRlIGRlc2lnbiwgbm90IGEgbG9hZCBmaXh0dXJlOyBhIHdvcmxkIGZlZWxzIGFsaXZlIG9ubHkgd2hlbiBhY3RvcnMgYXQgZXZlcnkgbGV2ZWwgcHVyc3VlIHRoZWlyIG93biBnb2Fscywgc28gdGhhdCBkZXRhaWwgaXMgZ2VuZXJhdGVkIGZpcnN0IGFuZCBtdWx0aXJlc29sdXRpb24gc2ltdWxhdGlvbiBpcyB0aGVuIGNob2tlZCBzbyBhdHRlbnRpb24gaXMgc2NhcmNlIGFuZCBzZWxlY3Rpb24gaXMgZm9yY2VkLiBUaGUgc2VlZCBjYXJyaWVzIGEgV29ybGRTY2FsZUludGVudCB3aG9zZSBzdHJ1Y3R1cmFsbHkgY291bnRlZCBkZWZpY2l0IChhbiBhY3RpdmUgc3ViamVjdCB3aXRoIG9uZSBjb250cm9sbGVyLCBvbmUgR29hbCBjb21taXRtZW50LCBvbmUgYWZmb3JkYW5jZSkgdGhlIGVsYWJvcmF0b3JzIHB1cnN1ZSBhZnRlciBib3VuZGFyaWVzOyBhIGJ1ZGdldGVkIGNvbm5lY3RlZCBjb3ZlciBydW5zIGV2ZXJ5IHRpY2sgd2l0aCBzaW5nbGV0b24gZGV0YWlsIGNlbGxzIGFuZCBncm91cGVkIGNvYXJzZSBjZWxscy4gRGVsZXRlZCBmb3IgZ29vZDogZ2VzdGFsdCBhcyBjYW5vbmljYWwgaWRlbnRpdHksIGFyZW5hIGtub3dsZWRnZSB1bmlvbiwgc2VtYW50aWMgcXVhbGlmaWNhdGlvbiBhbmQgdmVyaWZpY2F0aW9uIG1vZGVscywgZmlzc2lvbiBxdW90YXMgYXMgbXV0YXRpb24sIHN0cmluZyBpZGVudGlmaWVycy4iLCAic3RhdHVzIjogImFjY2VwdGVkIiwgInRzIjogIjIwMjYtMDktMDRUMTQ6MTQ6MTArMDA6MDAiLCAidHlwZSI6ICJyZXNlYXJjaCJ9", "stored_at": "2026-09-06T13:03:21.759991+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-04T150424Z0000-0007-a66f50c6855e", "payload": "eyJub3RlIjogIkNvZGV4IENMSSBmYW4tb3V0IGNhbm5vdCBjb21taXQuIEEgbGlua2VkIGdpdCB3b3JrdHJlZSBmYWlscyBiZWNhdXNlIGl0cyAuZ2l0IGZpbGUgcG9pbnRzIG91dHNpZGUgdGhlIHNhbmRib3gncyB3cml0YWJsZSByb290cywgYW5kIGEgZnVsbCBjbG9uZSBmYWlscyB0b286IHRoZSBDb2RleCB3b3Jrc3BhY2Utd3JpdGUgc2FuZGJveCBrZWVwcyAuZ2l0IHJlYWQtb25seSBldmVuIHVuZGVyIHRoZSB3cml0YWJsZSByb290LCBzbyBhIENvZGV4IHdvcmtlciBjYW4gbmV2ZXIgY29tbWl0IG9yIHB1c2ggcmVnYXJkbGVzcyBvZiBjbG9uZSBsYXlvdXQgb3IgbmV0d29yayBncmFudC4gUnVsZSBmb3IgYW55IENvZGV4IGZhbi1vdXQgdGhhdCBtdXN0IHByb2R1Y2UgY29tbWl0dGVkIHdvcms6IHRoZSB3b3JrZXIgd3JpdGVzIGZpbGVzIG9ubHk7IGEgc3VwZXJ2aXNvciBvdXRzaWRlIHRoZSBzYW5kYm94IGNvbW1pdHMgYW5kIHB1c2hlcyB0aGUgY2xvbmUgYWZ0ZXIgdGhlIHdvcmtlciBleGl0cy4gVGhlIGVsYWJvcmF0b3Igc2NoZWR1bGVyIChDOi9Vc2Vycy9NZXRhLy5jbGF1ZGUvd29ybGRzKSBkb2VzIHRoaXMgcGVyIHNsb3QgdG8gc2xvdC88d29ybGQ+Lzx0aXRsZT4vPHN0YW1wPiBicmFuY2hlcyBpbiB0aGUgR2hvc3RsaWdodCB3b3JsZCBjbG9uZSBhbmQgdGhlIGxvcmUgY2xvbmU7IGludGVncmF0aW9uIGludG8gY29kZXgvd29ybGQtPHdvcmxkPiBhbmQgY29kZXgvZ2hvc3RsaWdodC13b3JsZHMgaXMgYSBzZXBhcmF0ZSBkZWxpYmVyYXRlIHBhc3MsIHN0aWxsIG93ZWQuIENsb25lcyBsaXZlIGF0IEY6L1Byb2plY3RzL0dob3N0bGlnaHQtd29ybGRzLzx3b3JsZD4gYW5kIEY6L1Byb2plY3RzLzxMb3JlPi13b3JrdHJlZXMvZ2hvc3RsaWdodC13b3JsZHMgKGZ1bGwgY2xvbmVzIGRlc3BpdGUgdGhlIG5hbWUpLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wNFQxNTowNDoyNCswMDowMCIsICJ0eXBlIjogInZlcmlmaWNhdGlvbiJ9", "stored_at": "2026-09-06T13:03:21.768498+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T021322Z0000-0008-aab32a88adf6", "payload": "eyJub3RlIjogIlBsYW4gc3RlcCA2LCB0aGUgb250b2xvZ3kgd2lkZW5pbmcsIGlzIGNvbXBsZXRlOiB0ZW4gcGFzc2VzIGxhbmRlZCBvbiBjb2RleC9naG9zdGxpZ2h0LWR1bmdlb24tbXZwLCAyMDI2LTA5LTA0IHRvIDIwMjYtMDktMDUsIGVhY2ggYSBIYW5kcyBjdXQgaW4gYW4gaXNvbGF0aW9uIHdvcmt0cmVlLCBhIFNvdWwgZmFsc2lmaWNhdGlvbiBpbiB0aGUgc2FtZSB0cmVlLCBhbmQgYSBnYXRlZCBpbnRlZ3JhdGlvbiAocGFzcyB0aXBzIGFyZSBpbiBnaXQgaGlzdG9yeSBhbmQgdGhlIGhhbmRvZmYpLiBUaGUga2VybmVsIGhvbGRzIHR3ZWx2ZSBkZWNpc2lvbi1jb25zdHJhaW5pbmcgY29tcG9uZW50IGtpbmRzIG92ZXIgYSBwaW5uZWQgb3BlcmF0aW9uIGNhdGFsb2cgdW5kZXIgb25lIFdvcmxkUGF0Y2gsIG9uZSByZWR1Y2VyLCBvbmUgQ0FTIGNvbW1pdCwgb25lIGRlY29kZSBib3VuZCBmb3IgYm90aCBhdXRob3JpbmcgbGFuZXMsIGFuZCB0aHJlZSBjb25maW5lZCBTeXN0ZW1DYXBhYmlsaXR5IGFybXMgKENsb2NrLCBFbGFib3JhdG9yLCBDb25zdW1lcikuIFNvdWwncyBzZXJpZXMgdmVyZGljdDogdGhlIGVsZXZlbiBwbGFuIGludmFyaWFudHMgaG9sZCBzdHJ1Y3R1cmFsbHkgKG9uZSByZWR1Y2VyIGFuZCBhdG9taWMgY29tbWl0OyBrZXJuZWwtZGVyaXZlZCBhdXRob3JpdHk7IG9uZSBjb250cm9sbGVyIHBlciBzY29wZSB3aXRoIG5vIGZhbGxiYWNrIG9yIGRvdWJsZSBhY3Rpb247IHRvdGFsIGludGVycHJldGF0aW9uIHdpdGggZXhhY3QgZ2FwczsgZGV0ZXJtaW5pc3RpYyBzdHJ1Y3R1cmFsIHJlamVjdGlvbiB3aXRob3V0IGEgbW9kZWwgdmVyaWZpZXI7IHNjb3BlZCBrbm93bGVkZ2UgdW50aWwgZXhwbGljaXQgY29tbXVuaWNhdGlvbjsgZXh0ZXJuYWwtY29uc3VtZXIgc292ZXJlaWdudHk7IHNwYXJzZSBjYXVzYWwgc3VmZmljaWVuY3kgd2l0aCBjb3VudHMgYXMgZXZpZGVuY2Ugb25seTsgcmVzdGFydCByZWNvbnN0cnVjdHMgdGhlIGV4YWN0IHdvcmxkOyBJRHMgYWxsb2NhdGVkIG9ubHkgaW5zaWRlIGFuIGFkbWl0dGVkIHJlZHVjdGlvbjsgb3Bwb3J0dW5pdGllcyBib3VuZCB0byBhIHNjb3BlIGRpZ2VzdCByYXRoZXIgdGhhbiBhIHJldmlzaW9uKTsgdGhlIHBhaXJpbmcgaW52YXJpYW50IGlzIHJlLWRlY2lkZWQgYXQgdGhyZWUgZ2F0ZXMgYnkgZG9jdHJpbmUsIG5vdCBieSBhIHJlcGFpciBsb29wLiBUaGUgYnVkZ2V0ZWQgY292ZXIgdmVyaWZpZWQgMjIgdGlja3MgYXQgdGhlIDIsNDAwLzI0MCBwcm9maWxlIHdpdGggZmFpcm5lc3MgY2VpbChOL1IpLCBSIGJlaW5nIGNlbGxzIG1pbnVzIHVyZ2VuY3kgc2xvdHMuIFR3byBkZWNpc2lvbnMgc3RheSB3aXRoIHRoZSBvcGVyYXRvciBhbmQgYXJlIHJlY29yZGVkIG5vd2hlcmUgZWxzZSBkdXJhYmxlOiB3aGV0aGVyIGEgcmVmdXNlZCBjb3VwbGVkIGNvbnN0aXR1ZW50IG1heSByZS1zdWJtaXQgb25jZSBpbnNpZGUgdGhlIHNhbWUgdGljaywgZGVjaWRlZCB3aXRoIHRoZSBzdWJtaXR0ZWQtdmVyc3VzLWNvbW1pdHRlZCBudW1iZXIgaW4gaGFuZDsgYW5kIHRoZSBhdXRob3JpdHkgZm9yIGFuIG93bmVyLW9ubHkgRXZlIHdvcmxkLnJ1bl90aWNrIGNvbW1hbmQuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA1VDAyOjEzOjIyKzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-06T13:03:21.775655+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-05T173641Z0000-0009-de15e63cb5dc", "payload": "eyJub3RlIjogIlRoZSByZWJ1aWx0IGtlcm5lbCBydW5zIG9uIHRoZSByb2FkLCAyMDI2LTA5LTA1OyBydW5ib29rIG5vdGVzL2xvY2FsLWxpdmUtc21va2UubWQuIEdlbmVzaXMgc21va2U6IHRpY2sgZHJpdmVyLCBjb3ZlciwgUGVyc29uYSBtZW1icmFuZSwgb3BlcmF0aW9uYWwgbGFuZSwgY2xvY2ssIGFuZCBlbGFib3JhdGlvbiBzd2VlcCByYW4gdGhyZWUgdGlja3MgYWdhaW5zdCBhIHJlYWwgQ29kZXhDb25uZWN0b3I7IHRoZSByb2FkIHdvcmtlZCBhbmQgdGhlIHByb3NlIHdhcyB0aGluIGJlY2F1c2UgZ2VuZXNpcyBpcyB0aHJlZSBzdWJqZWN0cyBpbiBvbmUgcm9vbSwgd2hpY2ggbWFkZSB0aGUgc2VlZCBwcm9kdWNlciBhbiBldmlkZW5jZWQgZ2FwIHJhdGhlciB0aGFuIGFuIGFyZ3VlZCBvbmUuIFNlZWRlZCBzbW9rZTogZnJvbSB0aGUgS2Fsc2EgUHVibGljIHZhdWx0IG9uZSBzZWVkIHNlc3Npb24gYXV0aG9yZWQgc2l4IHF1YWxpZmllZCBwZXJzb25zIGludG8gTG93IFNlcmUgaW4gb25lIHJvdW5kLCBkZWZpY2l0IDYgdG8gMCwgYW5kIHRocmVlIHRpY2tzIG9mIGVpZ2h0IHNpbmdsZXRvbiBjZWxscyBoYWQgdGhlIHNlZWRlZCBwZW9wbGUgc3BlYWtpbmcgdG8gZWFjaCBvdGhlciBieSBuYW1lLiBUd2VsdmUgcnVucyB3ZXJlIG5lZWRlZDsgZXZlcnkgZmFpbHVyZSB3YXMgb24gdGhlIHJvYWQsIG5vdCBpbiB0aGUga2VybmVsLCBhbmQgZWFjaCBpcyBub3cgYSBydWxlIGluIHRoZSB0cmVlOiBvbmUgY3JlZGVudGlhbCBmYW1pbHkgKHRoZSBvcGVyYXRvcidzIHJlYWwgY29kZXggaG9tZSksIHN0cmljdCBzY2hlbWFzIChhbnlPZiwgdHlwZWQgdGFncywgYW4gb2ZmbGluZSB0b3RhbGl0eSB0ZXN0IG92ZXIgYm90aCBsYW5lcyksIGEgUGVyc29uYSBtb2RlbCB0aGUgYWNjb3VudCBzdXBwb3J0cywgY29ubmVjdG9yIGV4cGlyeSBza2V3IGJlbG93IHRoZSByZXNwb25zZSB0aW1lb3V0LCBjYW5vbmljYWwgaWRzIHByaW50ZWQgYmVzaWRlIGxhYmVscywgYSBzZWVkIHJvdW5kIGJ1ZGdldCB3aXRoIHBhcmFsbGVsIGNhbGxzIGFuZCBidWRnZXQtZW5kIHN1Ym1pdCwgY29udGVudC1hZGRyZXNzZWQgcHJvdmlkZXIgcmVxdWVzdCBpZHMsIHRoZSBjb21taXRtZW50IHNoYXBlIHJ1bGUgaW4gdGhlIHRvb2wgZGVzY3JpcHRpb24sIGFuZCB0aGUgcGxhY2VtZW50IHJ1bGUuIFRoZSBoYXJuZXNzIGZhaWxzIG9uIGFuIGVtcHR5IHNlZWQgb3IgYSBzaWxlbnQgd29ybGQuIFRoZSBDb2RleCBzdWJzY3JpcHRpb24gbGFwc2VkIGR1cmluZyB0aGlzIHNlcmllcyBhbmQgdGhlIHJ1bnMgY29uc3VtZWQgaGFsZiB0aGUgbW9udGhseSBmcmVlIHF1b3RhOyBubyBDb2RleCByb2FkIHJ1biBpcyBwb3NzaWJsZSB1bnRpbCBpdCBpcyByZW5ld2VkLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOS0wNVQxNzozNjo0MSswMDowMCIsICJ0eXBlIjogInZlcmlmaWNhdGlvbiJ9", "stored_at": "2026-09-06T13:03:21.782656+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-06T003537Z0000-0010-7bdc6c459ad7", "payload": "eyJub3RlIjogIkNsYXVkZSBTREsgaW5mZXJlbmNlIHBvcnQsIHBsYW4gc3RlcCAxMSwgMjAyNi0wOS0wNiwgdHdvIHJlY29yZHMgbWVyZ2VkLiBSZXNlYXJjaDogdGhlIEFnZW50IFNESydzIHN5c3RlbSBwcm9tcHQgaXMgZnVsbHkgcmVwbGFjZWFibGUsIGJ1aWx0LWlucyBzdHJpcHBhYmxlLCBDTEFVREUubWQgbG9hZGluZyBzdG9wcGFibGUsIGFuZCBhc3Npc3RhbnQgdG9vbF91c2UgYmxvY2tzIGNvbWUgYmFjayB2ZXJiYXRpbSB3aXRoIHVzYWdlOyBidXQgdGhlcmUgaXMgbm8gc2lsZW50IGNhcHR1cmUsIG5vIHJlcGxheWFibGUgaW5wdXQgbGlzdCwgbm8gcmVxdWVzdCBpZCwgYW5kIGVhY2ggcXVlcnkgaXMgb25lIHN1YnByb2Nlc3MuIFJlamVjdGVkOiBhIE1lc3NhZ2VzLUFQSSBiYWNrZW5kIChubyBBUEkgYnVkZ2V0KSBhbmQgYSBiYWNrZW5kIGluc2lkZSBDb2RleENvbm5lY3RvciAoYSBkZWxpYmVyYXRlbHkgaXNvbGF0ZWQgQ29kZXggZm9yazsgbm90aGluZyBnb2VzIGludG8gaXQpLiBMYW5kZWQ6IGEgc2Vjb25kIEluZmVyZW5jZVBvcnQgb3ZlciBhIE5vZGUgc2lkZWNhciwgcm91dGVkIHBlciBsYW5lIGJ5IG1vZGVsIHByZWZpeCwgZXhlY3V0ZS10aHJvdWdoOiB0aGUgc2lkZWNhciBjb21wdXRlcyBubyB0b29sIHJlc3VsdCBhbmQgUnVzdCBhbnN3ZXJzIGV2ZXJ5IGNhbGwgdGhyb3VnaCBhIHBlci1sYW5lIFRvb2xSZXN1bHRPcmFjbGUgdGhhdCBpcyB0aGUgZXZhbHVhdG9yJ3Mgb3duIGZvbGQsIHNvIGRpdmVyZ2VuY2UgaXMgaW1wb3NzaWJsZSBieSBjb25zdHJ1Y3Rpb247IGJvdGggcG9ydHMgc2hhcmUgb25lIHByZXBhcmVfaW52b2NhdGlvbi4gTGVzc29uIHRoYXQgY2hhbmdlcyBob3cgYW55IGZ1dHVyZSB0cmFuc3BvcnQgaXMganVkZ2VkOiBhIHRyYW5zcG9ydC1zaWRlIHZhbGlkYXRvciBpcyBhIHNlY29uZCBzZW1hbnRpY3MuIFRoZSBTREsncyBab2QgbGF5ZXIgc3RyaXBwZWQgdW5rbm93biBrZXlzIGFuZCByZWZ1c2VkIG1pc3NpbmcgZmllbGRzIGJlZm9yZSB0aGUgaGFuZGxlciByYW4sIHNvIGEgY2xhdWRlIGxhbmUgc2lsZW50bHkgYWRtaXR0ZWQgd2hhdCB0aGUgY29ubmVjdG9yIHJlZnVzZWQ7IHRoZSBmaXggaXMgb25lIHZhbGlkYXRvciBvbiBib3RoIHRyYW5zcG9ydHMsIHRoZSBSdXN0IGRlY29kZXIsIHdpdGggdGhlIHNpZGVjYXIgaGFuZGluZyBhcmd1bWVudHMgdGhyb3VnaCB1bnZhbGlkYXRlZC4gUmVzaWR1YWwgbGlhYmlsaXR5OiBhIHdyb25nLXR5cGVkIHByb3BlcnR5IHJlYWNoZXMgUnVzdCBhcyBhYnNlbnQuIFRoZSByZWNlaXB0IGlzIHRoZSBTREsgbWVzc2FnZSwgYSBuYW1lZCBzdG9wZ2FwOyB0aGUgZXhpdCBpcyBhIE1lc3NhZ2VzLUFQSSBwb3J0IHdoZW4gQVBJIGJ1ZGdldCBleGlzdHMsIGRlbGV0aW5nIHRoZSBzaWRlY2FyIHdob2xlLiBOb3QgeWV0IHJ1biBvbiB0aGUgcm9hZDogdGhlIG9wZXJhdG9yIG11c3QgaW5zdGFsbCB0aGUgQ2xhdWRlIENvZGUgQ0xJIGFuZCBsb2cgaW4gZmlyc3Q7IEdob3N0bGlnaHQgbmV2ZXIgaG9sZHMgdGhlIGNyZWRlbnRpYWwuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA5LTA2VDAwOjM1OjM3KzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-09-06T13:03:21.792350+00:00", "type": "ghostlight.evidence_record.v0"}
{"key": "2026-09-06T130322Z0000-0011-ea509cb1c023", "payload": "eyJub3RlIjogIkV2aWRlbmNlIGxlZGdlciBkaXN0aWxsZWQgMjAyNi0wOS0wNjogNDQgcmVjb3JkcyB0byAxMi4gU3VwZXJzZXNzaW9uIGNoYWlucyBjb2xsYXBzZWQgdG8gdGhlaXIgc3Vydml2b3JzLCBwZXItY29tbWl0IGltcGxlbWVudGF0aW9uIHJlY2VpcHRzIGZvbGRlZCBpbnRvIHRoZSBkZWNpc2lvbiB0aGV5IHNlcnZlZCwgYW5kIHRoZSBwcmUtcmVidWlsZCBzdGFuZGluZyBkZWNpc2lvbnMgbWVyZ2VkIGludG8gb25lIHJlY29yZCBiZWNhdXNlIG1hcC55YW1sIG93bnMgdGhlaXIgYmluZGluZyB0ZXh0LiBFdmVyeSByZW1vdmVkIHJlY29yZCBpcyBhcHBlbmRlZCB2ZXJiYXRpbSB0byBzdGF0ZS9ldmlkZW5jZS5hcmNoaXZlLmpzb25sLiBUaGUgY29tcGFjdGlvbiByYW4gdGhyb3VnaCB0b29scy9naG9zdGxpZ2h0X3N0YXRlLnB5IGNvbXBhY3QtZXZpZGVuY2UsIG5vdyB0aGUgb25lIGR1cmFibGUgcGF0aDogZXZpZGVuY2UuanNvbmwgaXMgYSByZWdlbmVyYXRlZCBleHBvcnQsIHNvIGEgc3RvcmUtb25seSByZXBsYWNlbWVudCBpcyB0aGUgb25seSBkZWxldGlvbiB0aGF0IHN0aWNrcy4iLCAic3RhdHVzIjogIm9rIiwgInRzIjogIjIwMjYtMDktMDZUMTM6MDM6MjIrMDA6MDAiLCAidHlwZSI6ICJtYWludGVuYW5jZSJ9", "stored_at": "2026-09-06T13:03:22.142513+00:00", "type": "ghostlight.evidence_record.v0"}

View file

@ -2,7 +2,7 @@
## Current Subgoal
None.
No active scratch subgoal.
## Working Notes

View file

@ -8,6 +8,8 @@ from dataclasses import dataclass
from pathlib import Path
from typing import Any
from ghostlight_state import extract_active_subgoals, extract_map_field
ROOT = Path(__file__).resolve().parents[1]
STATE_DIR = ROOT / "state"
@ -45,31 +47,6 @@ def run_git(args: list[str]) -> str:
return completed.stdout.strip()
def extract_map_field(name: str) -> str | None:
prefix = f" {name}:"
for line in read_text(MAP_PATH).splitlines():
if line.startswith(prefix):
return line.split(":", 1)[1].strip()
return None
def extract_active_subgoals() -> list[str]:
lines = read_text(MAP_PATH).splitlines()
results: list[str] = []
in_section = False
for line in lines:
if not in_section:
if line.strip() == "active_subgoals:":
in_section = True
continue
if line.startswith(" - "):
results.append(line[4:].strip())
continue
if line and not line.startswith(" "):
break
return results
def current_scratch_subgoal() -> str | None:
lines = read_text(SCRATCH_PATH).splitlines()
for index, line in enumerate(lines):

View file

@ -10,6 +10,7 @@ from ghostlight_state_store import (
append_evidence,
load_branches,
migrate_legacy_evidence,
replace_evidence,
save_branches,
)
@ -35,10 +36,22 @@ def utc_stamp() -> str:
def extract_map_field(name: str) -> str | None:
"""Read one ` name:` field under `current_status`, plain or block scalar."""
prefix = f" {name}:"
for line in read_text(MAP_PATH).splitlines():
if line.startswith(prefix):
return line.split(":", 1)[1].strip()
lines = read_text(MAP_PATH).splitlines()
for index, line in enumerate(lines):
if not line.startswith(prefix):
continue
value = line.split(":", 1)[1].strip()
if value not in {">", "|", ">-", "|-"}:
return value
block: list[str] = []
for continuation in lines[index + 1 :]:
if continuation.strip() and not continuation.startswith(" "):
break
block.append(continuation.strip())
joiner = "\n" if value.startswith("|") else " "
return joiner.join(part for part in block if part).strip() or None
return None
@ -112,6 +125,23 @@ def cmd_add_evidence(args: argparse.Namespace) -> int:
return 0
def cmd_compact_evidence(args: argparse.Namespace) -> int:
records: list[dict[str, Any]] = []
for number, line in enumerate(read_text(Path(args.replacement)).splitlines(), 1):
if not line.strip():
continue
record = json.loads(line)
missing = {"ts", "type", "status", "note"} - set(record)
if not isinstance(record, dict) or missing:
raise SystemExit(f"replacement line {number} lacks {sorted(missing)}")
records.append(record)
if not records:
raise SystemExit("refusing to compact the ledger to nothing")
archived, kept = replace_evidence(records)
print(f"Archived {archived} record(s) to state/evidence.archive.jsonl; ledger now holds {kept}.")
return 0
def cmd_migrate_evidence(_: argparse.Namespace) -> int:
imported = migrate_legacy_evidence()
print(f"Imported {imported} legacy evidence record(s) into CultCache.")
@ -169,6 +199,13 @@ def build_parser() -> argparse.ArgumentParser:
evidence_parser.add_argument("--branch")
evidence_parser.set_defaults(func=cmd_add_evidence)
compact_parser = subparsers.add_parser(
"compact-evidence",
help="Replace the evidence document with a distilled JSONL file; every current record is archived first.",
)
compact_parser.add_argument("--replacement", required=True)
compact_parser.set_defaults(func=cmd_compact_evidence)
migrate_evidence_parser = subparsers.add_parser(
"migrate-evidence",
help="Import legacy JSONL evidence missing from the CultCache authority.",

View file

@ -13,6 +13,7 @@ VENDOR_SRC = ROOT / "vendor" / "cultcache-py" / "src"
CACHE_PATH = STATE_DIR / "ghostlight-state.cultcache.jsonl"
BRANCHES_PATH = STATE_DIR / "branches.json"
EVIDENCE_PATH = STATE_DIR / "evidence.jsonl"
ARCHIVE_PATH = STATE_DIR / "evidence.archive.jsonl"
if str(VENDOR_SRC) not in sys.path:
sys.path.insert(0, str(VENDOR_SRC))
@ -100,6 +101,28 @@ def append_evidence(record: dict[str, Any]) -> None:
_export_evidence(cache)
def replace_evidence(records: list[dict[str, Any]]) -> tuple[int, int]:
"""Replace the whole evidence document with distilled records.
Every record currently in the store is appended verbatim to
``state/evidence.archive.jsonl`` before deletion, so the archive stays
the complete history and the export carries only what still steers.
Returns (archived, kept).
"""
cache = open_state_cache()
snapshot = cache.snapshot().get(EVIDENCE_DOC.type, {})
archived = sorted(snapshot.values(), key=lambda record: record.get("ts", ""))
with ARCHIVE_PATH.open("a", encoding="utf-8") as archive:
for record in archived:
archive.write(json.dumps(record, ensure_ascii=True) + "\n")
for key in list(snapshot):
cache.delete(EVIDENCE_DOC, key)
for index, record in enumerate(records):
cache.put(EVIDENCE_DOC, _evidence_key(record, index), record)
_export_evidence(cache)
return len(archived), len(records)
def migrate_legacy_evidence() -> int:
"""Import legacy JSONL records that predate the CultCache authority cut."""
cache = open_state_cache()