Point the state surfaces at the play agent gate
The map, handoff, plan and Session Zero doc now name plan step 16, the play agent, as the playtest gate. L2-L4, D1-D3 and the L1 follow-ups are recorded as deferred by ruling, not dropped. A source check corrected the map. Inference routes per lane by model name to the SDK sidecar or CodexConnector, and no local transport exists. The sidecar is a private msgpack pipe behind InferencePort, not the CultNet connector API the map claimed every backend shares. The handoff's session_zero.begin item is retired: the name is refused, and only tests reference it. One evidence record covers the pivot. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
4e61f586bf
commit
5ff1d54efa
6 changed files with 90 additions and 44 deletions
|
|
@ -1,7 +1,10 @@
|
|||
# Ghostlight Dungeon Session Zero
|
||||
|
||||
Status: adopted direction, 2026-09-15. Not implemented. Plan step 15 in
|
||||
`notes/ghostlight-implementation-plan.md` carries the pass order.
|
||||
Status: adopted direction, 2026-09-15. Not implemented. Its role as the
|
||||
playtest gate is superseded (operator, 2026-09-22) by the play agent,
|
||||
`ghostlight-play-agent.md` (plan step 16). D1–D3 and the library passes
|
||||
L2–L4 they consume are deferred by ruling, not dropped. Plan step 15 in
|
||||
`notes/ghostlight-implementation-plan.md` carries the deferred pass order.
|
||||
|
||||
## Ownership
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ Active phases. It alone derives authority, applies the typed
|
|||
ontology reducer, and commits an atomic CultCache revision. World creation,
|
||||
autonomous turns, player commands, elaboration, consumer patches, time
|
||||
advance, and administrative changes all enter through the same
|
||||
`CommandEnvelope` path; Session Zero (plan step 15) runs inside that same
|
||||
kernel and has no separate owner.
|
||||
`CommandEnvelope` path; the play agent (plan step 16) holds a named author
|
||||
capability in that same kernel and has no separate owner.
|
||||
|
||||
The replacement owner is sealed. Its runtime boundary remains create/open,
|
||||
immutable snapshot, submit, and typed receipts. Mutable aggregate state,
|
||||
|
|
@ -251,7 +251,10 @@ unplaced; retire it or place its subjects.
|
|||
### Constraints
|
||||
|
||||
- The operator's Claude subscription, inherited by the SDK sidecar from the
|
||||
ambient Claude Code login, is the only live provider. Codex remains lapsed:
|
||||
ambient Claude Code login, is the only live provider, and stays as the
|
||||
cloud fallback until a local lane (Bonsai 2 on Raven's machine) has
|
||||
carried the playtest; no local-model transport exists in source yet.
|
||||
Deleting the sidecar is decided after the gate. Codex remains lapsed:
|
||||
no Codex subscription and no API budget; the Codex connector is stopped;
|
||||
the smoke substrate at `F:\Projects\Ghostlight-smoke` stays.
|
||||
- CodexConnector is a deliberately isolated Codex fork so that Epiphany
|
||||
|
|
@ -263,7 +266,8 @@ unplaced; retire it or place its subjects.
|
|||
|
||||
### In order
|
||||
|
||||
1. The playtest gate below (operator order, 2026-09-15).
|
||||
1. The playtest gate below (operator order 2026-09-15; redirected to the
|
||||
play agent 2026-09-22).
|
||||
2. The outbound half of the consumer contract: the response batch with a
|
||||
non-loopback CultMesh lease.
|
||||
3. The deployment gate below.
|
||||
|
|
@ -272,17 +276,28 @@ unplaced; retire it or place its subjects.
|
|||
|
||||
### Playtest gate
|
||||
|
||||
Passes when a human, on a local daemon with the SDK sidecar, runs Dungeon's
|
||||
Session Zero end to end (`docs/architecture/ghostlight-session-zero.md`):
|
||||
chooses a Vault, describes the experience, sets lens weights, sketches,
|
||||
chooses a start, activates, and plays by speaking, gesturing, and travelling
|
||||
while detail grows toward them. It proves one player; hosted play and
|
||||
multi-player membership are not in this gate. Plan step 15 tracks library
|
||||
passes L0–L4 and Dungeon passes D1–D3; D3 closes the gate.
|
||||
The gate is plan step 16, the play agent
|
||||
(`docs/architecture/ghostlight-play-agent.md`, section "Playtest gate"):
|
||||
a human on a local daemon, every play lane on a local model, creates and
|
||||
seeds a world from a Vault, activates it, plays, and restarts mid-session with
|
||||
the world intact. The target owns the pass list; its cut map
|
||||
(`ghostlight-play-agent-cut.md`) is next.
|
||||
|
||||
Dungeon is a consumer of the Ghostlight library. Session Zero is Dungeon
|
||||
authority; the library capabilities it needs are consumer-neutral and live in
|
||||
the ontology doc's "Elaboration lenses and detail rules (target)". The world kernel is
|
||||
Operator rulings, 2026-09-22. One Dungeon-owned operational agent dispatches
|
||||
and interprets Persona turns, prompts the player, and negotiates results. It
|
||||
replaces the Interpreter and the cover/cell/catalog/owner-click orchestration
|
||||
on Dungeon's play path; the library keeps them for offline simulation. The
|
||||
Projector -> Persona passes are unchanged and a Persona never sees structured
|
||||
state. Rejected: Personas reading their own state, which is the
|
||||
structured-state dump the projector/interpreter sandwich exists to prevent.
|
||||
The agent holds its own named kernel authority, like the clock capability; an
|
||||
actor's act commits only by exercising that actor's affordance.
|
||||
|
||||
Deferred by ruling, not dropped (the target's "Deferred, by ruling"): L2-L4,
|
||||
Session Zero D1-D3 (plan step 15, `docs/architecture/ghostlight-session-zero.md`),
|
||||
and L1 follow-ups f16 (configurable lens sets; operator: yes), f1, f13, f14.
|
||||
|
||||
Dungeon is a consumer of the Ghostlight library. The world kernel is
|
||||
the `ghostlight` library crate and Dungeon consumes it across a public
|
||||
boundary sealed by admission: the kernel rejects any ID, digest or
|
||||
opportunity it did not issue. L0 is closed (`108b691..ab95d78`); its
|
||||
|
|
@ -294,7 +309,7 @@ data the owner replaces with `SetLensWeights`, each elaborator session records
|
|||
the lens it drew and that lens's instruction text, and elaboration sessions run
|
||||
concurrently under Dungeon's elaboration pool
|
||||
(`GHOSTLIGHT_ELABORATION_MAX_CONCURRENT`, default 2), apart from the simulation
|
||||
pool. L2, per-world evidence binding, is next.
|
||||
pool.
|
||||
|
||||
Also owed on the way, found 2026-09-15 by reading source:
|
||||
|
||||
|
|
@ -302,12 +317,10 @@ Also owed on the way, found 2026-09-15 by reading source:
|
|||
- The Eve story card renders bare speech text only (`eve.rs`): no speaker,
|
||||
no displays, no place or co-presence.
|
||||
- Active elaboration runs with `NullEvidenceSource` (`controllers.rs`), so no
|
||||
Vault reaches it.
|
||||
Vault reaches it. This is L2's subject and is deferred with L2; the play
|
||||
path stops elaborating while Active.
|
||||
- Ticks run cells in sequence at 15–50 s each; a reply takes minutes.
|
||||
|
||||
`runtime.rs` still registers `session_zero.begin`; check whether it is a
|
||||
refused name or a surviving authority while in that file.
|
||||
|
||||
The eight titles ship as the library's stock lens set. Their 2026-09 removal
|
||||
had no operator decision; the correction record in `state/evidence.jsonl`
|
||||
carries the history.
|
||||
|
|
|
|||
|
|
@ -862,7 +862,7 @@ first person as a stage direction); a silent turn invoking the `speak` entry
|
|||
versus a fourth narrative tool for a wordless turn (recommend `speak` with
|
||||
no utterance; one carrier, one command per turn).
|
||||
|
||||
### 15. Session Zero — L0 and L1 landed; L2 next
|
||||
### 15. Session Zero — L0 and L1 landed; L2–L4 and D1–D3 deferred by ruling
|
||||
|
||||
Adopted 2026-09-15. Two owners, one ordering. Library capabilities,
|
||||
consumer-neutral, are specified in `docs/architecture/ghostlight-world-ontology.md`
|
||||
|
|
@ -870,6 +870,12 @@ under "Elaboration lenses and detail rules (target)". Ghostlight Dungeon's
|
|||
Session Zero consumes them and is specified in
|
||||
`docs/architecture/ghostlight-session-zero.md`. This entry only tracks state.
|
||||
|
||||
Deferred by ruling, 2026-09-22 (operator, decision 3): Session Zero is no
|
||||
longer the playtest gate; step 16, the play agent, is. L2–L4 and D1–D3 are
|
||||
deferred, not dropped, until a consumer that still runs the offline
|
||||
machinery needs them; the list, with L1.f16, f1, f13 and f14, is
|
||||
`docs/architecture/ghostlight-play-agent.md`, "Deferred, by ruling".
|
||||
|
||||
Operator decisions, 2026-09-15: the world kernel is extracted from
|
||||
`crates/ghostlight-dungeon` into a library crate before any library pass, and
|
||||
the eight titles ship as the library's stock lens set.
|
||||
|
|
@ -886,7 +892,18 @@ and genesis-subject cuts; (L4) individuation where a place's level asks for
|
|||
persons. Dungeon
|
||||
passes: (D1) Vault registry and world creation with lens weights and a detail
|
||||
rule; (D2) the Session Zero Eve surface; (D3) travel affordance and
|
||||
per-affordance player controls, which closes the playtest gate.
|
||||
per-affordance player controls, which closed the playtest gate until the
|
||||
2026-09-22 ruling.
|
||||
|
||||
### 16. The play agent — target adopted; cut map next
|
||||
|
||||
Adopted 2026-09-22. Target `docs/architecture/ghostlight-play-agent.md`
|
||||
(commit `cb0b604`); its means will be in `ghostlight-play-agent-cut.md`.
|
||||
This step is the playtest gate (the target's "Playtest gate"). One
|
||||
Dungeon-owned operational agent replaces the Interpreter and the
|
||||
cover/cell/catalog/owner-click orchestration on Dungeon's play path; the
|
||||
Projector → Persona passes are unchanged; the library keeps the offline
|
||||
machinery. This entry only tracks state.
|
||||
|
||||
## Subtraction budget
|
||||
|
||||
|
|
|
|||
|
|
@ -20,4 +20,5 @@
|
|||
{"note": "The titled elaborators were never an operator-approved cut, 2026-09-15. Patina, Charter, Ledger, Hearth, Tangle, Veil, Ember, and Numen fell in three steps: 4aebe17 (2026-09-01) listed titled elaborator quotas for deletion under the operator's whole-machine order; 6bb6869 deleted elaboration.rs and the titles with it; 9c662bd (2026-09-04) classed ElaboratorTitle as a model tribunal and reused 'eight elaborators' for per-jurisdiction loop instances without flagging the change. No record holds operator approval of the titles' removal. The tribunal was the titled semantic verifier and the fixed quotas, not the title: the Run 108 inspection called the titles excellent distinct lanes, and the 2026-09-04 elaborator swarm kept them. Operator direction: titles return as lenses over the typed ontology. A swarm of elaborators draws a title per session by the world's weights (world data, which Dungeon's Session Zero lets the player set); any title may add any structure, the title shapes what kind, and the weights set the world's flavor. No title gates admission, holds authority, or fills a quota. Landed as L1; target docs/architecture/ghostlight-stock-lenses.md. Lesson: when cutting a compensator, separate the judging machinery from the capability it judged, and put a named, operator-visible feature before the operator before deleting it.", "status": "accepted", "ts": "2026-09-15T20:31:32+00:00", "type": "correction"}
|
||||
{"note": "Library and consumer boundary, merged from two records, 2026-09-15. Ghostlight Dungeon is a consumer of the Ghostlight library, which serves all GameCult narrative simulation. Session Zero, Vault choice, players, sliders, and starting locations are Dungeon authority and never shape the library. Operator decisions: (1) extract the world kernel into a library crate before any library pass (executed as L0; see the L0 record). (2) The eight titles ship as the library's stock lens set. (3) Each world will carry a typed detail rule (plan step 15 L3, not landed), a function from place to detail level that the library evaluates; consumers choose the rule (Dungeon ByDistance anchored on important subjects, the player first; Delvehold Uniform). It must be typed data, not consumer code, because the deficit it produces is an admission input and journal replay re-runs reduce. WorldScaleIntent per-kind targets remain the ceiling the rule distributes. Lesson: name the owner, library or consumer, before designing a feature; a player-facing flow placed on the kernel quietly makes one consumer's policy library vocabulary.", "status": "accepted", "ts": "2026-09-15T20:55:07+00:00", "type": "architecture"}
|
||||
{"note": "L0 closed, 2026-09-16 (Ghostlight 108b691..ab95d78, gamecult-ops 6aba281..803f2c7; postmortem docs/architecture/ghostlight-library-extraction-postmortem.md). The world kernel is the ghostlight library crate and ghostlight-dungeon consumes it. Belief-changing findings: (1) private constructors do not seal a public type that derives Deserialize, and Dungeon's Eve payloads need those derives, so ruling Q1-9 defines sealing as unforgeable admission: external code may hold a syntactically valid ID, digest or opportunity, and the kernel rejects every one it did not issue, proven by crates/ghostlight/tests/external_admission.rs. (2) compile_fail doc-tests pin names and, on stable rustc, not even error codes; they prove 'does not compile', not privacy. (3) Rejection tests need forgeries shaped like real values: short fake digests passed against kernels comparing only length, a prefix, all but the last character, case-insensitively, or only the hex after the label. (4) Every text scanner written in L0 lost to a short evasion (the minter count, the gamecult-ops wiring test and its fix); treat such checks as tripwires with stated limits, and use a semantic tool for semantic properties. The minter scanner stays as a tripwire (Q1-10 defaulted); Clippy disallowed-methods is the recorded fix.", "status": "accepted", "ts": "2026-09-16T00:27:09+00:00", "type": "architecture"}
|
||||
{"ts": "2026-09-16T18:08:25+00:00", "type": "architecture", "status": "accepted", "note": "L1 closed, 2026-09-16 (Ghostlight 835ea4d..872ba35 plus Cut 5 docs; postmortem docs/architecture/ghostlight-stock-lenses-postmortem.md). The ghostlight library ships eight stock lenses; lens weights are world data (consumer.v5), required at creation with no library default, replaced by the owner's SetLensWeights in any phase; a set that draws the same as the current one is refused as NoCanonicalChange. Each elaborator session draws its lens replayably from world id and command id and records the lens and its instruction text on the session (controller_work.v16); the lens never enters the command id, which stays the idempotency key. Belief-changing findings: (1) before L1 the elaborator repair loop never worked across sweeps: a deficit session's key moved on any commit (orphan plus repeated inference) and a boundary session was Superseded forever after any commit; resume now reads in-flight rows from the store by what they answer (L1-Q9), and rows ready to submit are excluded because adopting a committed row stalls the deficit (L1-Q10). (2) Concurrent sessions are distinct through a per-sweep in-memory claim set; elaboration has its own permit ceiling separate from the simulation budget. (3) A panicking session task used to kill the runtime elaboration driver silently; it is now an error returned after siblings finish. (4) Agents told to wait for long jobs still ended their turns mid-build until briefs named the mechanism: block inside a tool call. Open for the operator: L1.f1 quarantine handling, L1.f13 seed-lane orphans, L1.f14 row retirement, L1.f16 consumer lens sets."}
|
||||
{"note": "L1 closed, 2026-09-16 (Ghostlight 835ea4d..872ba35 plus Cut 5 docs; postmortem docs/architecture/ghostlight-stock-lenses-postmortem.md). The ghostlight library ships eight stock lenses; lens weights are world data (consumer.v5), required at creation with no library default, replaced by the owner's SetLensWeights in any phase; a set that draws the same as the current one is refused as NoCanonicalChange. Each elaborator session draws its lens replayably from world id and command id and records the lens and its instruction text on the session (controller_work.v16); the lens never enters the command id, which stays the idempotency key. Belief-changing findings: (1) before L1 the elaborator repair loop never worked across sweeps: a deficit session's key moved on any commit (orphan plus repeated inference) and a boundary session was Superseded forever after any commit; resume now reads in-flight rows from the store by what they answer (L1-Q9), and rows ready to submit are excluded because adopting a committed row stalls the deficit (L1-Q10). (2) Concurrent sessions are distinct through a per-sweep in-memory claim set; elaboration has its own permit ceiling separate from the simulation budget. (3) A panicking session task used to kill the runtime elaboration driver silently; it is now an error returned after siblings finish. (4) Agents told to wait for long jobs still ended their turns mid-build until briefs named the mechanism: block inside a tool call. Open for the operator: L1.f1 quarantine handling, L1.f13 seed-lane orphans, L1.f14 row retirement, L1.f16 consumer lens sets.", "status": "accepted", "ts": "2026-09-16T18:08:25+00:00", "type": "architecture"}
|
||||
{"ts": "2026-09-21T22:53:11+00:00", "type": "architecture", "status": "accepted", "note": "Playtest gate redirected, 2026-09-22 (operator; target docs/architecture/ghostlight-play-agent.md, plan step 16). (1) The controller machinery (cover, grouped cells, action catalogs, Interpreter pass, owner-click dispatch) suits offline generation and simulation, not interactive role-play; on Dungeon's play path one operational play agent replaces it and the library keeps it. (2) Projector -> Persona is unchanged and a Persona never sees structured state; the player's view is rendered by the same Projector. Rejected: Personas reading their own state, the structured-state dump the projector/interpreter sandwich prevents. (3) The agent holds a named kernel authority (declare in Active without answering elaboration demand, whole-world reach, advance time); an actor's act commits only through that actor's affordance; raw ops are the agent's rulings; the agent is Dungeon's detail demand. (4) L2-L4, Session Zero D1-D3, L1.f16/f1/f13/f14 deferred by ruling, not dropped. (5) Source check: inference routes per lane by model name to the SDK sidecar (prefix claude) or CodexConnector, no runtime fallback, no local-model transport; the sidecar is a private msgpack child-process pipe behind InferencePort, not the CultNet connector API."}
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@
|
|||
{"key": "2026-09-15T205507Z0000-0020-bf387e427c99", "payload": "eyJub3RlIjogIkxpYnJhcnkgYW5kIGNvbnN1bWVyIGJvdW5kYXJ5LCBtZXJnZWQgZnJvbSB0d28gcmVjb3JkcywgMjAyNi0wOS0xNS4gR2hvc3RsaWdodCBEdW5nZW9uIGlzIGEgY29uc3VtZXIgb2YgdGhlIEdob3N0bGlnaHQgbGlicmFyeSwgd2hpY2ggc2VydmVzIGFsbCBHYW1lQ3VsdCBuYXJyYXRpdmUgc2ltdWxhdGlvbi4gU2Vzc2lvbiBaZXJvLCBWYXVsdCBjaG9pY2UsIHBsYXllcnMsIHNsaWRlcnMsIGFuZCBzdGFydGluZyBsb2NhdGlvbnMgYXJlIER1bmdlb24gYXV0aG9yaXR5IGFuZCBuZXZlciBzaGFwZSB0aGUgbGlicmFyeS4gT3BlcmF0b3IgZGVjaXNpb25zOiAoMSkgZXh0cmFjdCB0aGUgd29ybGQga2VybmVsIGludG8gYSBsaWJyYXJ5IGNyYXRlIGJlZm9yZSBhbnkgbGlicmFyeSBwYXNzIChleGVjdXRlZCBhcyBMMDsgc2VlIHRoZSBMMCByZWNvcmQpLiAoMikgVGhlIGVpZ2h0IHRpdGxlcyBzaGlwIGFzIHRoZSBsaWJyYXJ5J3Mgc3RvY2sgbGVucyBzZXQuICgzKSBFYWNoIHdvcmxkIHdpbGwgY2FycnkgYSB0eXBlZCBkZXRhaWwgcnVsZSAocGxhbiBzdGVwIDE1IEwzLCBub3QgbGFuZGVkKSwgYSBmdW5jdGlvbiBmcm9tIHBsYWNlIHRvIGRldGFpbCBsZXZlbCB0aGF0IHRoZSBsaWJyYXJ5IGV2YWx1YXRlczsgY29uc3VtZXJzIGNob29zZSB0aGUgcnVsZSAoRHVuZ2VvbiBCeURpc3RhbmNlIGFuY2hvcmVkIG9uIGltcG9ydGFudCBzdWJqZWN0cywgdGhlIHBsYXllciBmaXJzdDsgRGVsdmVob2xkIFVuaWZvcm0pLiBJdCBtdXN0IGJlIHR5cGVkIGRhdGEsIG5vdCBjb25zdW1lciBjb2RlLCBiZWNhdXNlIHRoZSBkZWZpY2l0IGl0IHByb2R1Y2VzIGlzIGFuIGFkbWlzc2lvbiBpbnB1dCBhbmQgam91cm5hbCByZXBsYXkgcmUtcnVucyByZWR1Y2UuIFdvcmxkU2NhbGVJbnRlbnQgcGVyLWtpbmQgdGFyZ2V0cyByZW1haW4gdGhlIGNlaWxpbmcgdGhlIHJ1bGUgZGlzdHJpYnV0ZXMuIExlc3NvbjogbmFtZSB0aGUgb3duZXIsIGxpYnJhcnkgb3IgY29uc3VtZXIsIGJlZm9yZSBkZXNpZ25pbmcgYSBmZWF0dXJlOyBhIHBsYXllci1mYWNpbmcgZmxvdyBwbGFjZWQgb24gdGhlIGtlcm5lbCBxdWlldGx5IG1ha2VzIG9uZSBjb25zdW1lcidzIHBvbGljeSBsaWJyYXJ5IHZvY2FidWxhcnkuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA5LTE1VDIwOjU1OjA3KzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-09-16T18:10:01.998147+00:00", "type": "ghostlight.evidence_record.v0"}
|
||||
{"key": "2026-09-16T002709Z0000-0021-b03ab600d273", "payload": "eyJub3RlIjogIkwwIGNsb3NlZCwgMjAyNi0wOS0xNiAoR2hvc3RsaWdodCAxMDhiNjkxLi5hYjk1ZDc4LCBnYW1lY3VsdC1vcHMgNmFiYTI4MS4uODAzZjJjNzsgcG9zdG1vcnRlbSBkb2NzL2FyY2hpdGVjdHVyZS9naG9zdGxpZ2h0LWxpYnJhcnktZXh0cmFjdGlvbi1wb3N0bW9ydGVtLm1kKS4gVGhlIHdvcmxkIGtlcm5lbCBpcyB0aGUgZ2hvc3RsaWdodCBsaWJyYXJ5IGNyYXRlIGFuZCBnaG9zdGxpZ2h0LWR1bmdlb24gY29uc3VtZXMgaXQuIEJlbGllZi1jaGFuZ2luZyBmaW5kaW5nczogKDEpIHByaXZhdGUgY29uc3RydWN0b3JzIGRvIG5vdCBzZWFsIGEgcHVibGljIHR5cGUgdGhhdCBkZXJpdmVzIERlc2VyaWFsaXplLCBhbmQgRHVuZ2VvbidzIEV2ZSBwYXlsb2FkcyBuZWVkIHRob3NlIGRlcml2ZXMsIHNvIHJ1bGluZyBRMS05IGRlZmluZXMgc2VhbGluZyBhcyB1bmZvcmdlYWJsZSBhZG1pc3Npb246IGV4dGVybmFsIGNvZGUgbWF5IGhvbGQgYSBzeW50YWN0aWNhbGx5IHZhbGlkIElELCBkaWdlc3Qgb3Igb3Bwb3J0dW5pdHksIGFuZCB0aGUga2VybmVsIHJlamVjdHMgZXZlcnkgb25lIGl0IGRpZCBub3QgaXNzdWUsIHByb3ZlbiBieSBjcmF0ZXMvZ2hvc3RsaWdodC90ZXN0cy9leHRlcm5hbF9hZG1pc3Npb24ucnMuICgyKSBjb21waWxlX2ZhaWwgZG9jLXRlc3RzIHBpbiBuYW1lcyBhbmQsIG9uIHN0YWJsZSBydXN0Yywgbm90IGV2ZW4gZXJyb3IgY29kZXM7IHRoZXkgcHJvdmUgJ2RvZXMgbm90IGNvbXBpbGUnLCBub3QgcHJpdmFjeS4gKDMpIFJlamVjdGlvbiB0ZXN0cyBuZWVkIGZvcmdlcmllcyBzaGFwZWQgbGlrZSByZWFsIHZhbHVlczogc2hvcnQgZmFrZSBkaWdlc3RzIHBhc3NlZCBhZ2FpbnN0IGtlcm5lbHMgY29tcGFyaW5nIG9ubHkgbGVuZ3RoLCBhIHByZWZpeCwgYWxsIGJ1dCB0aGUgbGFzdCBjaGFyYWN0ZXIsIGNhc2UtaW5zZW5zaXRpdmVseSwgb3Igb25seSB0aGUgaGV4IGFmdGVyIHRoZSBsYWJlbC4gKDQpIEV2ZXJ5IHRleHQgc2Nhbm5lciB3cml0dGVuIGluIEwwIGxvc3QgdG8gYSBzaG9ydCBldmFzaW9uICh0aGUgbWludGVyIGNvdW50LCB0aGUgZ2FtZWN1bHQtb3BzIHdpcmluZyB0ZXN0IGFuZCBpdHMgZml4KTsgdHJlYXQgc3VjaCBjaGVja3MgYXMgdHJpcHdpcmVzIHdpdGggc3RhdGVkIGxpbWl0cywgYW5kIHVzZSBhIHNlbWFudGljIHRvb2wgZm9yIHNlbWFudGljIHByb3BlcnRpZXMuIFRoZSBtaW50ZXIgc2Nhbm5lciBzdGF5cyBhcyBhIHRyaXB3aXJlIChRMS0xMCBkZWZhdWx0ZWQpOyBDbGlwcHkgZGlzYWxsb3dlZC1tZXRob2RzIGlzIHRoZSByZWNvcmRlZCBmaXguIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA5LTE2VDAwOjI3OjA5KzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-09-16T18:10:02.009746+00:00", "type": "ghostlight.evidence_record.v0"}
|
||||
{"key": "2026-09-16T180825Z0000-0022-e4c0c1cf1b28", "payload": "eyJub3RlIjogIkwxIGNsb3NlZCwgMjAyNi0wOS0xNiAoR2hvc3RsaWdodCA4MzVlYTRkLi44NzJiYTM1IHBsdXMgQ3V0IDUgZG9jczsgcG9zdG1vcnRlbSBkb2NzL2FyY2hpdGVjdHVyZS9naG9zdGxpZ2h0LXN0b2NrLWxlbnNlcy1wb3N0bW9ydGVtLm1kKS4gVGhlIGdob3N0bGlnaHQgbGlicmFyeSBzaGlwcyBlaWdodCBzdG9jayBsZW5zZXM7IGxlbnMgd2VpZ2h0cyBhcmUgd29ybGQgZGF0YSAoY29uc3VtZXIudjUpLCByZXF1aXJlZCBhdCBjcmVhdGlvbiB3aXRoIG5vIGxpYnJhcnkgZGVmYXVsdCwgcmVwbGFjZWQgYnkgdGhlIG93bmVyJ3MgU2V0TGVuc1dlaWdodHMgaW4gYW55IHBoYXNlOyBhIHNldCB0aGF0IGRyYXdzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9uZSBpcyByZWZ1c2VkIGFzIE5vQ2Fub25pY2FsQ2hhbmdlLiBFYWNoIGVsYWJvcmF0b3Igc2Vzc2lvbiBkcmF3cyBpdHMgbGVucyByZXBsYXlhYmx5IGZyb20gd29ybGQgaWQgYW5kIGNvbW1hbmQgaWQgYW5kIHJlY29yZHMgdGhlIGxlbnMgYW5kIGl0cyBpbnN0cnVjdGlvbiB0ZXh0IG9uIHRoZSBzZXNzaW9uIChjb250cm9sbGVyX3dvcmsudjE2KTsgdGhlIGxlbnMgbmV2ZXIgZW50ZXJzIHRoZSBjb21tYW5kIGlkLCB3aGljaCBzdGF5cyB0aGUgaWRlbXBvdGVuY3kga2V5LiBCZWxpZWYtY2hhbmdpbmcgZmluZGluZ3M6ICgxKSBiZWZvcmUgTDEgdGhlIGVsYWJvcmF0b3IgcmVwYWlyIGxvb3AgbmV2ZXIgd29ya2VkIGFjcm9zcyBzd2VlcHM6IGEgZGVmaWNpdCBzZXNzaW9uJ3Mga2V5IG1vdmVkIG9uIGFueSBjb21taXQgKG9ycGhhbiBwbHVzIHJlcGVhdGVkIGluZmVyZW5jZSkgYW5kIGEgYm91bmRhcnkgc2Vzc2lvbiB3YXMgU3VwZXJzZWRlZCBmb3JldmVyIGFmdGVyIGFueSBjb21taXQ7IHJlc3VtZSBub3cgcmVhZHMgaW4tZmxpZ2h0IHJvd3MgZnJvbSB0aGUgc3RvcmUgYnkgd2hhdCB0aGV5IGFuc3dlciAoTDEtUTkpLCBhbmQgcm93cyByZWFkeSB0byBzdWJtaXQgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgYWRvcHRpbmcgYSBjb21taXR0ZWQgcm93IHN0YWxscyB0aGUgZGVmaWNpdCAoTDEtUTEwKS4gKDIpIENvbmN1cnJlbnQgc2Vzc2lvbnMgYXJlIGRpc3RpbmN0IHRocm91Z2ggYSBwZXItc3dlZXAgaW4tbWVtb3J5IGNsYWltIHNldDsgZWxhYm9yYXRpb24gaGFzIGl0cyBvd24gcGVybWl0IGNlaWxpbmcgc2VwYXJhdGUgZnJvbSB0aGUgc2ltdWxhdGlvbiBidWRnZXQuICgzKSBBIHBhbmlja2luZyBzZXNzaW9uIHRhc2sgdXNlZCB0byBraWxsIHRoZSBydW50aW1lIGVsYWJvcmF0aW9uIGRyaXZlciBzaWxlbnRseTsgaXQgaXMgbm93IGFuIGVycm9yIHJldHVybmVkIGFmdGVyIHNpYmxpbmdzIGZpbmlzaC4gKDQpIEFnZW50cyB0b2xkIHRvIHdhaXQgZm9yIGxvbmcgam9icyBzdGlsbCBlbmRlZCB0aGVpciB0dXJucyBtaWQtYnVpbGQgdW50aWwgYnJpZWZzIG5hbWVkIHRoZSBtZWNoYW5pc206IGJsb2NrIGluc2lkZSBhIHRvb2wgY2FsbC4gT3BlbiBmb3IgdGhlIG9wZXJhdG9yOiBMMS5mMSBxdWFyYW50aW5lIGhhbmRsaW5nLCBMMS5mMTMgc2VlZC1sYW5lIG9ycGhhbnMsIEwxLmYxNCByb3cgcmV0aXJlbWVudCwgTDEuZjE2IGNvbnN1bWVyIGxlbnMgc2V0cy4iLCAic3RhdHVzIjogImFjY2VwdGVkIiwgInRzIjogIjIwMjYtMDktMTZUMTg6MDg6MjUrMDA6MDAiLCAidHlwZSI6ICJhcmNoaXRlY3R1cmUifQ==", "stored_at": "2026-09-16T18:10:02.019412+00:00", "type": "ghostlight.evidence_record.v0"}
|
||||
{"key": "2026-09-21T225311Z0000-0023-d0f1b1936142", "payload": "eyJub3RlIjogIlBsYXl0ZXN0IGdhdGUgcmVkaXJlY3RlZCwgMjAyNi0wOS0yMiAob3BlcmF0b3I7IHRhcmdldCBkb2NzL2FyY2hpdGVjdHVyZS9naG9zdGxpZ2h0LXBsYXktYWdlbnQubWQsIHBsYW4gc3RlcCAxNikuICgxKSBUaGUgY29udHJvbGxlciBtYWNoaW5lcnkgKGNvdmVyLCBncm91cGVkIGNlbGxzLCBhY3Rpb24gY2F0YWxvZ3MsIEludGVycHJldGVyIHBhc3MsIG93bmVyLWNsaWNrIGRpc3BhdGNoKSBzdWl0cyBvZmZsaW5lIGdlbmVyYXRpb24gYW5kIHNpbXVsYXRpb24sIG5vdCBpbnRlcmFjdGl2ZSByb2xlLXBsYXk7IG9uIER1bmdlb24ncyBwbGF5IHBhdGggb25lIG9wZXJhdGlvbmFsIHBsYXkgYWdlbnQgcmVwbGFjZXMgaXQgYW5kIHRoZSBsaWJyYXJ5IGtlZXBzIGl0LiAoMikgUHJvamVjdG9yIC0+IFBlcnNvbmEgaXMgdW5jaGFuZ2VkIGFuZCBhIFBlcnNvbmEgbmV2ZXIgc2VlcyBzdHJ1Y3R1cmVkIHN0YXRlOyB0aGUgcGxheWVyJ3MgdmlldyBpcyByZW5kZXJlZCBieSB0aGUgc2FtZSBQcm9qZWN0b3IuIFJlamVjdGVkOiBQZXJzb25hcyByZWFkaW5nIHRoZWlyIG93biBzdGF0ZSwgdGhlIHN0cnVjdHVyZWQtc3RhdGUgZHVtcCB0aGUgcHJvamVjdG9yL2ludGVycHJldGVyIHNhbmR3aWNoIHByZXZlbnRzLiAoMykgVGhlIGFnZW50IGhvbGRzIGEgbmFtZWQga2VybmVsIGF1dGhvcml0eSAoZGVjbGFyZSBpbiBBY3RpdmUgd2l0aG91dCBhbnN3ZXJpbmcgZWxhYm9yYXRpb24gZGVtYW5kLCB3aG9sZS13b3JsZCByZWFjaCwgYWR2YW5jZSB0aW1lKTsgYW4gYWN0b3IncyBhY3QgY29tbWl0cyBvbmx5IHRocm91Z2ggdGhhdCBhY3RvcidzIGFmZm9yZGFuY2U7IHJhdyBvcHMgYXJlIHRoZSBhZ2VudCdzIHJ1bGluZ3M7IHRoZSBhZ2VudCBpcyBEdW5nZW9uJ3MgZGV0YWlsIGRlbWFuZC4gKDQpIEwyLUw0LCBTZXNzaW9uIFplcm8gRDEtRDMsIEwxLmYxNi9mMS9mMTMvZjE0IGRlZmVycmVkIGJ5IHJ1bGluZywgbm90IGRyb3BwZWQuICg1KSBTb3VyY2UgY2hlY2s6IGluZmVyZW5jZSByb3V0ZXMgcGVyIGxhbmUgYnkgbW9kZWwgbmFtZSB0byB0aGUgU0RLIHNpZGVjYXIgKHByZWZpeCBjbGF1ZGUpIG9yIENvZGV4Q29ubmVjdG9yLCBubyBydW50aW1lIGZhbGxiYWNrLCBubyBsb2NhbC1tb2RlbCB0cmFuc3BvcnQ7IHRoZSBzaWRlY2FyIGlzIGEgcHJpdmF0ZSBtc2dwYWNrIGNoaWxkLXByb2Nlc3MgcGlwZSBiZWhpbmQgSW5mZXJlbmNlUG9ydCwgbm90IHRoZSBDdWx0TmV0IGNvbm5lY3RvciBBUEkuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA5LTIxVDIyOjUzOjExKzAwOjAwIiwgInR5cGUiOiAiYXJjaGl0ZWN0dXJlIn0=", "stored_at": "2026-09-21T22:53:11.194006+00:00", "type": "ghostlight.evidence_record.v0"}
|
||||
|
|
|
|||
|
|
@ -387,16 +387,17 @@ current_status:
|
|||
commit 855727f, run 12; an elaborator session carries its lens and
|
||||
instruction text). Next, in the
|
||||
operator's order (2026-09-15):
|
||||
(a) the playtest gate (plan step 15): L0 is closed (the kernel is the
|
||||
`ghostlight` library crate; postmortem and follow-ups in
|
||||
docs/architecture/ghostlight-library-extraction-postmortem.md); L1, the
|
||||
stock lens set, is implemented (835ea4d..872ba35; cut map
|
||||
docs/architecture/ghostlight-stock-lenses-cut.md); L2 is next, then the
|
||||
remaining library capabilities (typed
|
||||
detail rules as a function from place to detail level, per-world evidence
|
||||
binding, elaborators in Draft; ontology doc "Elaboration lenses and detail
|
||||
rules"), then Dungeon's Session Zero consuming them
|
||||
(docs/architecture/ghostlight-session-zero.md). (b) the outbound consumer
|
||||
(a) the playtest gate, redirected by the operator 2026-09-22: plan
|
||||
step 16, the play agent (target docs/architecture/ghostlight-play-agent.md,
|
||||
committed cb0b604; the gate is its "Playtest gate" section; the cut map
|
||||
ghostlight-play-agent-cut.md is next). One Dungeon-owned operational
|
||||
agent replaces the Interpreter and the cover/cell/catalog/owner-click
|
||||
orchestration on Dungeon's play path; the Projector -> Persona passes are
|
||||
unchanged and a Persona never sees structured state. The library keeps
|
||||
the offline machinery. Deferred by ruling, not dropped: L2-L4, Session
|
||||
Zero D1-D3 (plan step 15), and L1.f16, f1, f13, f14; the list is the
|
||||
target's "Deferred, by ruling". L0 and L1 are closed (postmortems in
|
||||
docs/architecture/). (b) the outbound consumer
|
||||
response batch with a non-loopback CultMesh lease, shaped as Njordr's
|
||||
signal surface (custody, pressure and dependency, route, event deltas;
|
||||
spec owned by GameCult/Njordr `docs/architecture/njordr.md`, Ghostlight's
|
||||
|
|
@ -404,15 +405,25 @@ current_status:
|
|||
(c) the deployment gate (world-v3, Idunn/Odin as recorded in the
|
||||
handoff); (d) decision on Eve world.run_tick authority and the Eve
|
||||
owner's fourth command-result state for an overtaken turn. Constraints:
|
||||
the operator's Claude subscription, inherited by the sidecar from the
|
||||
ambient login, is the only live provider; no Codex subscription and no
|
||||
API budget. Model backends (Claude SDK sidecar, CodexConnector,
|
||||
OpenAI-compatible APIs) share one standardized CultNet connector API,
|
||||
the same one Epiphany uses. Ghostlight consumes the contract through the
|
||||
`codex-connector` crate pinned in Cargo.toml. CodexConnector itself
|
||||
stays isolated (its main is at 6519289), and is not a live provider
|
||||
here. A generic OpenAI-compatible connector is required before third
|
||||
parties use the deployment. Ghostlight never holds a credential. The elaborator swarm is drained; its review record
|
||||
inference is routed per lane by model name (`RoutedInferencePort`,
|
||||
crates/ghostlight/src/sdk_inference.rs): models prefixed `claude` go to
|
||||
the Claude SDK sidecar, every other model to CodexConnector, and an
|
||||
unclaimed model is refused at open, never fallen back. The sidecar,
|
||||
inheriting the operator's ambient Claude login, is the only live
|
||||
provider; no Codex subscription and no API budget. The playtest gate
|
||||
needs every play lane on a local model (Bonsai 2 on Raven's machine);
|
||||
no local-model transport exists in source yet, and where it lives is
|
||||
the play-agent target's open question 1. The sidecar stays as the cloud
|
||||
fallback until the local lane has carried the playtest; deleting it is
|
||||
decided after the gate. Operator direction: model backends share one
|
||||
standardized CultNet connector API, the same one Epiphany uses. Today
|
||||
only CodexConnector speaks it, consumed through the `codex-connector`
|
||||
crate pinned in Cargo.toml; the SDK sidecar is a private length-prefixed
|
||||
msgpack pipe to a Node child process behind the in-process
|
||||
`InferencePort` trait. CodexConnector itself stays isolated (its main
|
||||
is at 6519289), and is not a live provider here. A generic
|
||||
OpenAI-compatible connector is still required before third parties use
|
||||
the deployment; the local lane may be it (open question 1). Ghostlight never holds a credential. The elaborator swarm is drained; its review record
|
||||
and idea ledgers are in experiments/elaboration/ (start at its README),
|
||||
and the vault additions are in local bundles named there. Integration
|
||||
into the vaults is still wanted and deferred until the operator has time
|
||||
|
|
|
|||
Loading…
Reference in a new issue