Cut the handoff's chronology down to current authority and the next gate
Item 1 had grown to three hundred lines of per-pass SHAs, line numbers, and test counts that git and the ledger own. The handoff now carries what is true of the tree, the constraints, the ordered next moves, the operator's open decisions, and the deployment gate. Gating lessons move to the re-entry warnings; the map points there instead of repeating them. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
18f2eb96a2
commit
04db2dafa7
2 changed files with 127 additions and 398 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# Ghostlight Fresh Workspace Handoff
|
||||
|
||||
Updated: 2026-09-04
|
||||
Updated: 2026-09-06
|
||||
|
||||
This is the compact re-entry packet. It carries current authority and the next
|
||||
gate. Git owns chronology, the system map owns teardown detail, and evidence
|
||||
|
|
@ -86,48 +86,27 @@ attention is scarce and selection is forced. The mvp doc's teardown-era
|
|||
sentence calling it "test data, not a production elaboration target" was
|
||||
wrong and is amended. Do not re-cut the scale target as fixture noise.
|
||||
|
||||
## Landed and in flight
|
||||
## Landed
|
||||
|
||||
- `4aebe17` adopts the target authority map.
|
||||
- `64f50de` removes seven obsolete pipeline-smoke binaries and two live-fire
|
||||
orchestration scripts.
|
||||
- `a144c33` establishes the two disjoint cognition modes in
|
||||
`ghostlight-persona-projection`.
|
||||
- `d49b907` refines total Persona interpretation: source prose is receipt-bound
|
||||
noncanonical evidence, typed captures cite exact source spans, malformed spans,
|
||||
raw decode failure, and normal exhaustion receive whole-source gap fallback,
|
||||
infrastructure interruption returns the source pending, and only actual
|
||||
spoken words qualify for a speech proposal. This contract is live: the single
|
||||
`ControllerRunner` in `crates/ghostlight-dungeon/src/world/controllers.rs`
|
||||
carries it, and no legacy Persona runner survives in `crates/`.
|
||||
- An uncommitted broad `world.rs` prototype was rejected and deleted. It
|
||||
exposed mutable state and ID issuance, admitted translation-gap evidence into
|
||||
canonical types, allowed no-op commits, and left affordance and opportunity
|
||||
authority undefined. None of it is current authority.
|
||||
- `12ee9f4` deletes the dead legacy Elaboration and Mutation kernel ingresses
|
||||
and their component-write helpers: 686 lines removed without a replacement
|
||||
compatibility path.
|
||||
- `66ed2ec` completes the sealed private `foundation.v0` authority loop. Draft
|
||||
creation, approval, activation, canonical controller assignments, affordance
|
||||
grants, revision-bound opportunities, and one shared human/autonomous action
|
||||
reducer all commit through one aggregate and journal. One mailbox serializes
|
||||
submission and snapshot access. Eighteen focused tests at that commit (43 in
|
||||
`world/*.rs` at `d87cad8`) prove lifecycle,
|
||||
controller and opportunity fail-closed behavior, restart, idempotency,
|
||||
one-owner, authentication, non-commit, mailbox cancellation, lost replies,
|
||||
immutable genesis, and journal forgery rejection.
|
||||
- `6bb6869` makes the replacement mailbox/kernel architecture the crate and
|
||||
executable runtime identity and removes the legacy runtime owner.
|
||||
- `13d5136` unifies app sessions, world journal, and controller custody under
|
||||
one vendored CultCache implementation and removes the duplicate legacy
|
||||
dependency. The committed daemon tree contains no old Session Zero, legacy
|
||||
kernel, scheduler, assessor, verifier/reconciliation, or legacy-transition
|
||||
module path.
|
||||
- `9256648` exposes managed Ghostlight route presence, and `6a79cb0`
|
||||
republishes signed Warming for as long as the write lease is outstanding.
|
||||
With `a0b16b9` these are the whole provider side of the Idunn cut.
|
||||
- Source subtraction is complete. Production cutover and runtime legacy purge
|
||||
are not.
|
||||
Git owns the commit chronology; `git log` on `codex/ghostlight-dungeon-mvp`
|
||||
is the witness. What is true of the tree now:
|
||||
|
||||
- The replacement mailbox/kernel is the crate and executable runtime
|
||||
identity; no legacy Session Zero, kernel, scheduler, assessor,
|
||||
verifier/reconciliation, or transition module path survives, and no
|
||||
compatibility writer was kept.
|
||||
- One CultCache implementation, consumed from CultLib `85f7024`, owns app
|
||||
sessions, the world journal, and controller custody.
|
||||
- The Persona interpretation contract is structurally total and live in the
|
||||
single `ControllerRunner` in
|
||||
`crates/ghostlight-dungeon/src/world/controllers.rs`.
|
||||
- The Idunn provider side is complete: the runtime validates Expected and
|
||||
activation, publishes signed Warming until the write lease arrives, and
|
||||
exposes managed route presence. Production has not cut over.
|
||||
- Plan steps 6 and 8 through 11 are landed with their follow-ups: the ten
|
||||
ontology passes, the seed producer, interruption, witness, and the Claude
|
||||
SDK inference port. `notes/ghostlight-implementation-plan.md` carries each
|
||||
step's landed state; the ontology doc carries the mechanism.
|
||||
|
||||
Do not start another world acceptance run while Yggdrasil still serves the
|
||||
legacy executable and state layout.
|
||||
|
|
@ -217,351 +196,99 @@ and proposals but cannot commit on their behalf.
|
|||
|
||||
## Next gate
|
||||
|
||||
The adopted vocabulary is `docs/architecture/ghostlight-world-ontology.md`
|
||||
(twelve components, twenty-seven operations under one `WorldPatch`,
|
||||
world-authored affordances, derived `CausalBoundary` kinds, scope-digest
|
||||
binding, one `AdmitPatch` for seed, elaboration, and consumer ingress).
|
||||
The adopted vocabulary is `docs/architecture/ghostlight-world-ontology.md`;
|
||||
its "Current mechanism" section describes the kernel as it stands.
|
||||
`ghostlight-transition-algebra.md` and `ghostlight-multiresolution-agency.md`
|
||||
are teardown evidence. Plan step 6 is ten implementation passes, all landed.
|
||||
are teardown evidence.
|
||||
|
||||
1. Plan step 6, the ontology widening, is complete: all ten passes are
|
||||
integrated on `codex/ghostlight-dungeon-mvp`. Tip is `a1fd645` (Soul)
|
||||
over `b4d1943` (pass 10 machine) and `e0c6f9c` (patch author widened to
|
||||
a confined external consumer), on `1203aa3` (pass-9 docs and handoff) and
|
||||
`962f711` (intra-tick quarantine race closed). Pass tips in order:
|
||||
`5e53beb`, `e99af63`, `d2805fe`, `0f21a49`, `dbe176d`, `cb6a126`,
|
||||
`1852ddd`, `3ed3868`, `8aebfb6`, `a1fd645`. The push follows a
|
||||
background crate test and the branch read `ahead 3` at the time of
|
||||
writing; `git status -sb` is the witness. The series is distilled as one
|
||||
evidence record dated 2026-09-05 in `state/evidence.jsonl`.
|
||||
### The kernel now
|
||||
|
||||
What the kernel is now: twelve decision-constraining component kinds
|
||||
over twenty-seven named operations under one `WorldPatch`, one reducer,
|
||||
one CAS commit, one decode bound for both authoring lanes
|
||||
(`patch::decode_patch` with `MAX_PATCH_BYTES`, `MAX_PATCH_DECLARATIONS`,
|
||||
`MAX_PATCH_OPERATIONS`, `MAX_PATCH_EVIDENCE`; the `MAX_DRAFT_*` bounds
|
||||
are deleted), and three confined `SystemCapability` arms: `Clock`,
|
||||
`Elaborator { jurisdiction }`, `Consumer { consumer }`. Pass 10 added
|
||||
`world/consumer.rs`; `PatchGround { Jurisdiction, Consumer }` with
|
||||
`confine_to_ground` as the one confinement function (renamed from
|
||||
`confine_to_jurisdiction`); `ControllerAssignment::ExternallyControlled
|
||||
{ consumer }`, with `id()` and `mode()` now `Option` and every reader
|
||||
failing closed; `Mismatch::ControllerGrantMismatch` replacing
|
||||
`NoAffordances`; `CommandId::derived` shared by `session_command_id`;
|
||||
`ConsumerPort` (one method) in `world/mailbox.rs` and
|
||||
`WorldMailbox::submit_consumer`; route `POST /cultnet/world-patch`,
|
||||
loopback, msgpack, `CONSUMER_BODY_LIMIT`; `ConsumerRegistry` loaded from
|
||||
the file named by `GHOSTLIGHT_CONSUMER_CREDENTIALS`, digests only.
|
||||
Schemas are `world_state.consumer.v1` / `world_commit.consumer.v1`;
|
||||
`controller_work.v9`; `STATE_SCHEMA_GENERATION` in
|
||||
`idunn_health.rs` is now `world-v3`, so the Idunn expectation and every
|
||||
"world-v2" phrase in the deployment gate below now mean world-v3.
|
||||
Baseline at `a1fd645`: 313 test functions in `world/*.rs`, 357 crate
|
||||
source, plus one integration test (the focused `world::` run reports
|
||||
312 / 352; different counting rules, compare like with like).
|
||||
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 { jurisdiction }`, `Consumer { consumer }`. Proposals bind to a
|
||||
scope digest, and the kernel is the sole `ScopeChanged` detector: a bound
|
||||
narrative turn whose scope moved is re-lowered once by the Interpreter with
|
||||
the typed delta, never lost and never checked lane-side. `Witness` fans a
|
||||
fact out over a place subtree through the one reach owner. External
|
||||
consumers enter through `POST /cultnet/world-patch` under
|
||||
`PatchGround::Consumer`; the live contract is
|
||||
`docs/architecture/ghostlight-world-consumer-api.md`. The seed lane admits a
|
||||
Draft-only owner patch from a local Vault and pursues the derived scale
|
||||
deficit. Inference runs through one `InferencePort::prepare` with two
|
||||
transports: the CodexConnector and, per `claude`-prefixed lane model, the
|
||||
Node sidecar on the Claude Agent SDK. The Rust decoder is the one validator
|
||||
on both; the sidecar hands arguments through unvalidated. The sidecar and
|
||||
its receipt shape are a named stopgap, deleted whole when a Messages-API port
|
||||
has budget.
|
||||
|
||||
Rulings adopted in pass 10: no migration for the moved
|
||||
`session_command_id` derivation; `controller_work` is v9 so the refusal
|
||||
is structural; a malformed credentials file is fatal at startup
|
||||
(`open_consumer_registry` in `runtime.rs` returns the registry's error;
|
||||
a missing file still means no consumers); the outbound consumer response
|
||||
batch and a non-loopback CultMesh lease are the next seams, not this
|
||||
pass. Soul's series judgment: the eleven plan invariants hold
|
||||
structurally at the end of ten passes; the pairing invariant is
|
||||
re-decided at three gates by doctrine, not by a repair loop.
|
||||
Deferred by design: `PolityInCausalRange`, `IndividuationRequired`, and
|
||||
Verification 13 wait for relations and population slices. Stale: the
|
||||
pre-pass-6 ignored acceptance test
|
||||
`real_codex_connector_cognition_modes_commit_speech` in
|
||||
`world/controllers.rs` fails at `NoAudience` because its subjects are
|
||||
unplaced; retire it or place its subjects.
|
||||
|
||||
The pass-10 follow-ups are landed (`8173c9c`): `controller_work.v9`;
|
||||
fatal malformed credentials; redacting `Debug` on the consumer document;
|
||||
the elaboration lane calls `check_patch_caps` so `MAX_PATCH_EVIDENCE`
|
||||
binds on both lanes; distinct item-cap refusals in the receipt; one
|
||||
duplicate test deleted. Nothing is in flight and no worktree exists.
|
||||
Docs landed with them: `ghostlight-world-consumer-api.md` rewritten
|
||||
as a live contract (no longer drift); the ontology "Current mechanism"
|
||||
through pass 10 closing with "Step 6 of the plan is complete; the
|
||||
outbound consumer response is the next seam."; the mvp doc's
|
||||
`MutationAuthorityEnvelope` and external-mirror-as-subject-kind
|
||||
corrected; the plan's step-6 pass-10 line in past tense. Queued doc
|
||||
edits: none.
|
||||
### Constraints
|
||||
|
||||
First local live smoke, 2026-09-05, committed as `5e52943` and pushed:
|
||||
`notes/local-live-smoke.md` is the runbook. The production tick driver,
|
||||
cover, Persona membrane, operational lane, clock, and elaboration sweep
|
||||
ran three ticks against a real CodexConnector (head daemon with the
|
||||
`daemon` feature, ChatGPT auth) on a genesis world: revision 2 to 11, two
|
||||
singleton cells per tick, the Persona spoke each tick, the operational
|
||||
lane committed each tick, the elaboration sweep was clean, 40 to 70
|
||||
seconds per tick. The harness is the ignored test
|
||||
`live_smoke_ticks_a_genesis_world_against_the_connector` in `runtime.rs`
|
||||
(line 3177) with `fixture_with(Option<LiveController>)`; the evidence
|
||||
record is dated 2026-09-05T13:42Z. Two findings: the road works end to
|
||||
end; the prose is thin because genesis is three subjects in one room.
|
||||
That makes the seed producer the evidenced gap, not an argued one: no
|
||||
doc or steering surface named a "seed producer" before this smoke (the
|
||||
Delvehold boundary doc names only a seed admission primitive), so it is
|
||||
now the obvious next cut once the operator decisions below are taken.
|
||||
Stale: the pre-pass-6 ignored acceptance test
|
||||
`real_codex_connector_cognition_modes_commit_speech` in
|
||||
`world/controllers.rs` (line 6549) fails at `NoAudience` because its
|
||||
subjects are unplaced; retire it or place its subjects.
|
||||
- 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
|
||||
stops compiling Codex; nothing goes into it. Its `main` at `6519289` is
|
||||
the line Ghostlight runs.
|
||||
- Ghostlight never reads, copies, forwards, or logs a credential. The
|
||||
connector's Codex home is the operator's real `~/.codex`; the SDK sidecar
|
||||
inherits the operator's Claude Code login from the ambient environment.
|
||||
|
||||
Still deferred by design: `PolityInCausalRange`, `IndividuationRequired`,
|
||||
and Verification 13 wait for relations and population slices.
|
||||
### In order
|
||||
|
||||
The seed producer is landed and proven on the road. Tip is `b7042f1`
|
||||
(seed producer recorded, Soul follow-ups closed) over `491b06e` (the six
|
||||
seed-lane follow-ups) and `697ed07` (Soul), both pushed; no worktree
|
||||
exists. The seeded live smoke passed on the twelfth run, 2026-09-05:
|
||||
from the Kalsa Public vault (`GHOSTLIGHT_SEED_VAULT_ROOT` at
|
||||
`F:\Projects\Kalsa\Kalsa`, root label "Low Sere"), one seed session
|
||||
authored six qualified persons into Low Sere in one round (39 s),
|
||||
deficit 6 to 0; the world activated with nine subjects and six
|
||||
boundaries; three ticks of eight singleton cells each (95 to 123 s) with
|
||||
the seeded people speaking to each other by name. The run block and the
|
||||
"Seeded run, 2026-09-05" table are in `notes/local-live-smoke.md`; the
|
||||
evidence record is dated 2026-09-05T17:36Z; the ontology "Current
|
||||
mechanism" gained a "Rules the road imposed" paragraph (line 256).
|
||||
1. The operator installs the Claude Code CLI and logs in per the "Claude
|
||||
SDK route" in `notes/local-live-smoke.md`. Then the first SDK-backed road
|
||||
run, which is the belief-changing record still owed, and the first live
|
||||
interrupted cell (the runbook's "Interrupted cell" section names what the
|
||||
log must show).
|
||||
2. The outbound half of the consumer contract: the response batch with a
|
||||
non-loopback CultMesh lease.
|
||||
3. The deployment gate below.
|
||||
4. Integration of the elaborator swarm's ideas (item 2 below).
|
||||
|
||||
Uncommitted on main at the time of writing, to be committed once the
|
||||
unit suite is green: the road fixes in `runtime.rs`, `controllers.rs`,
|
||||
`elaboration.rs`, `patch.rs`, `tool_schema.rs` (strict-schema `anyOf`
|
||||
and typed const tags with an offline test over both lanes; connector
|
||||
`REQUEST_EXPIRY` 300 s and `RESPONSE_TIMEOUT` 900 s; content-addressed
|
||||
`provider_request_id`; `SEED_ROUND_BUDGET` 24 with budget-end submitting
|
||||
a non-empty draft; `SEED_INSTRUCTIONS` pacing and obligation rule; the
|
||||
brief prints ids and a placement rule; classified faults and cell
|
||||
outcomes logged at info; the live harness asserts a landed seed and
|
||||
speech, counts `NoProgress` as landed, continues through `Rejected`),
|
||||
plus the ontology paragraph, the smoke note, and the evidence record.
|
||||
Baseline at that tree: 342 test functions in `world/*.rs`, 394 crate
|
||||
source, plus one integration test. The connector is stopped after the
|
||||
run; the smoke substrate at `F:\Projects\Ghostlight-smoke` stays.
|
||||
### Decisions the operator owns
|
||||
|
||||
Plan step 9, the interruption pass, is integrated. Tip is `711f6ec`
|
||||
(step-9 docs) over `d20dc51` (Soul), `ad124ea` and `1a19fb2` (Hands),
|
||||
`1ef973a` (machine), on `a62708f`. The push follows a background crate
|
||||
test and the branch read `ahead 5` at the time of writing; `git status
|
||||
-sb` is the witness. What landed: the narrative lane no longer checks
|
||||
scope itself; the kernel is the sole `ScopeChanged` detector and the
|
||||
lane handles the refusal at `controllers.rs:3537` by interrupting (the
|
||||
operational lane keeps its one `ensure_scope_unchanged` at :2689, and
|
||||
the check at :1916 is the checkpoint-progression rule, not a lane
|
||||
check). `SubjectSnapshot` carries `components: ScopeComponents` and lost
|
||||
`holdings`, `dependencies`, `incident_routes`, `authority`, `controls`.
|
||||
`PersonaTurnBinding::interrupted_from`; `Overheard` (:1014),
|
||||
`Interruption` (:1027), `interpreter_round` (:1043), `select_fresh`
|
||||
(:1095), `select_scope` (:1104), `NarrativeRun::Interrupted`;
|
||||
`controller_work.v11` and `ghostlight.persona_turn_receipt.v3`;
|
||||
`ControllerHttpResult::Interrupted` renders as Eve `denied` with the
|
||||
detail in the receipt (`runtime.rs:1111`). Baseline at `711f6ec`: 354
|
||||
test functions in `world/*.rs`, 406 crate source, 13 in
|
||||
`ghostlight-persona-projection`, plus one integration test (Soul ran
|
||||
353 / 400 / 13; the usual counting-rule gap).
|
||||
- Whether a refused coupled constituent may re-submit once inside the same
|
||||
tick, decided with the submitted-versus-committed number in hand.
|
||||
- The authority for an owner-only Eve `world.run_tick` command, not built.
|
||||
- Routed to the Eve owner: whether the command-result vocabulary needs a
|
||||
fourth state for an overtaken turn instead of rendering an interruption as
|
||||
`denied`.
|
||||
|
||||
Soul verdict: the leak invariant holds structurally, fixed English per
|
||||
changed field, and a counterparty id inside the persisted components
|
||||
never reaches the prompt. Fork A corrected: a turn whose scope moved
|
||||
before binding is still `NoOpportunity` at zero cost; the cut affects a
|
||||
bound turn and costs at most one extra Interpreter round. Fork D is
|
||||
dead code, because grants are insert-only. Recipe lesson from the
|
||||
integration: the first fast-forward refused because main had moved by
|
||||
two doc commits, and the chained command deleted the branch pointer
|
||||
before that was noticed; the commits were recovered by SHA, rebased,
|
||||
and integrated. Never chain `merge --ff-only` with `branch -D` on one
|
||||
line; run the merge, confirm it, then delete.
|
||||
### World fixtures and the elaborator swarm
|
||||
|
||||
Plan step 10, the witness operation, is integrated. Tip is `1244595`
|
||||
(step-10 docs) over `70ea6b1` (Soul), `ecdeb92` (the operation),
|
||||
`307d8a5` (refactors: one owner for "under a place", one for "already a
|
||||
knower"), on `f6cd3b5`. The push follows a background crate test and the
|
||||
branch read `ahead 4` at the time of writing; `git status -sb` is the
|
||||
witness. Integration was gated this time: rebase, merge, confirm the
|
||||
tip, then remove the worktree. What landed: `under_place` is the one
|
||||
reach owner and `unheld` the one already-holder filter; `audience`,
|
||||
`fan_out`, and the `Witness` apply arm all call them. `ComponentOp::Witness
|
||||
{ fact, place, confidence }` with resolve, apply, and lowering arms;
|
||||
`operation_ground` returns the place, so confinement treats it like any
|
||||
other ground and a consumer cannot witness by construction.
|
||||
`ComponentOpKind::Witness { confidence }`, so a world-authored
|
||||
affordance can cause a witnessed event with no speaker. Tool `witness`;
|
||||
the catalog is pinned at 7 declarations, 29 operations, 38 tools, and
|
||||
the ontology doc now says twenty-nine (lines 443, 498, 796), aligned to
|
||||
the pinned count after the docs writer found it one behind. Schemas are
|
||||
`world_state.consumer.v2` / `world_commit.consumer.v2`. An empty
|
||||
subtree is `NoOperationEffect` at both layers. Soul pinned two-layer
|
||||
agreement over draft subjects and forget-then-witness, and made the
|
||||
no-`Told` pin exhaustive over all nineteen operation kinds. Baseline at
|
||||
`1244595`: 372 test functions in `world/*.rs`, 424 crate source, 13 in
|
||||
`ghostlight-persona-projection`, plus one integration test (Soul ran
|
||||
371 / 418).
|
||||
First-generation world fixtures are banked and pushed, one per world, each
|
||||
with Ink, training sidecar, visual plan, lore grounding, and BFL manifest,
|
||||
reviewer-accepted except visual replay, which waits on a scene-set blockout:
|
||||
Delvehold `cistern-house-nine-breaker-test` on `codex/world-delvehold`;
|
||||
Aetheria `navigator-berth-hearing-v0` on `codex/world-aetheria`; Zyphos
|
||||
`eclipse-nursery-handover` on `codex/world-zyphos`; Kalsa
|
||||
`stormshield-handoff-v0` on `codex/world-kalsa`; lore on each vault's
|
||||
`codex/ghostlight-worlds` branch.
|
||||
|
||||
The step-9 follow-ups are integrated at `651bfb2` over `5cd8853`,
|
||||
gated (rebase, merge, confirm the tip, remove the worktree). The push
|
||||
follows a background crate test and the branch read `ahead 1` at the
|
||||
time of writing; `git status -sb` is the witness. Landed: the
|
||||
unreachable `SPEAK_KIND` guard and its branch deleted from
|
||||
`interrupted`, with a comment on why a fresh opportunity always carries
|
||||
speech (the constant itself remains in use elsewhere in
|
||||
`controllers.rs`); `InferencePurpose` (`controllers.rs:92`),
|
||||
`PreparedInference::purpose` (:118), and `InferenceEvent` (:123)
|
||||
widened to `pub(crate)`, with two test seams `fixture_inference_events`
|
||||
(:274) and `fixture_recovery_required` (:220) re-exported from
|
||||
`world/mod.rs`; the driver end-to-end test
|
||||
`a_second_mid_turn_change_reaches_the_drivers_interrupted_arm`
|
||||
(`runtime.rs:3397`) through `run_cover_tick`, with two Interpreter calls
|
||||
and the overtaken turn committing nothing; and
|
||||
`a_witness_between_the_turn_and_submit_carries_no_overheard_row`
|
||||
(`controllers.rs:11377`), closing the step-10 seam Soul left. Baseline
|
||||
at `651bfb2`: 373 test functions in `world/*.rs`, 426 crate source, 13
|
||||
in `ghostlight-persona-projection`, plus one integration test (Hands ran
|
||||
372 / 420 / 13). Steps 9 and 10 are therefore complete with their
|
||||
follow-ups. Nothing is in flight and no worktree exists.
|
||||
The elaborator swarm is drained and handed off; a Ghostlight kernel session
|
||||
does not own it. The successor handoff is
|
||||
`C:\Users\Meta\.claude\worlds\README.md` (98 finished passes). Owed and
|
||||
deliberately deferred: integration of the `slot/<world>/<title>/<stamp>`
|
||||
branches into the lore vaults on `codex/ghostlight-worlds` and into
|
||||
`codex/world-<world>`; the idea index is the four ledger directories
|
||||
`experiments/elaboration/<world>/ledger/` on those world branches. Clones:
|
||||
`F:\Projects\Ghostlight-worlds\<world>` and
|
||||
`F:\Projects\<Lore>-worktrees\ghostlight-worlds` (full clones despite the
|
||||
name). The retired first-generation loop under
|
||||
`C:\Users\Meta\.claude\worlds\retired` must not be launched. Image rendering
|
||||
is deferred: workers emit imagegen-ready prompts only, and
|
||||
`scripts/generate_bfl_images.py` has no working default key path.
|
||||
|
||||
Open question routed to the Eve owner: whether the command-result
|
||||
vocabulary needs a fourth state for "overtaken" instead of rendering an
|
||||
interruption as `denied`.
|
||||
### Deployment gate
|
||||
|
||||
In flight: the operator ordered "Build the Claude connector" on
|
||||
2026-09-06, then overturned both opening assumptions before anything
|
||||
landed. Void: (1) an Anthropic API key against the Messages API, because
|
||||
no API spend is possible now; (2) a second backend inside the
|
||||
CodexConnector repo, because CodexConnector is a deliberate fork of
|
||||
Codex cut so that Epiphany stops compiling Codex, and nothing goes into
|
||||
it. The Modeling map `modeling-claude-connector.md` was stopped mid-map
|
||||
and is void even if partial text is on disk. Plan step 11, the Claude SDK inference port, is integrated. Tip is
|
||||
`0cbbf77` (step-11 docs: plan, system map, smoke runbook Claude SDK
|
||||
route with operator prerequisites, mvp paragraph) over `4f424a5` and
|
||||
`0fa411b` (Soul), `2ff1d43` (sidecar), `b150b5e` (Rust port), `708d621`
|
||||
(collapse of the two prepared-identity bodies and two constructors), on
|
||||
`feb603b`. The push follows a background crate test and the branch read
|
||||
`ahead 6` at the time of writing; `git status -sb` is the witness. The
|
||||
research is the evidence record at 2026-09-05T22:25Z. What landed:
|
||||
`world/sdk_inference.rs` (`SdkInferencePort`, `RoutedInferencePort`,
|
||||
`SidecarLink` with `ChildProcessLink`, the `SidecarFrame` kinds,
|
||||
`lower_query`, `assemble_output`, `SdkInferenceReceipt`);
|
||||
`ToolResultOracle` (`controllers.rs:247`) with `InterpreterOracle`,
|
||||
`GroupedOracle`, `OperationalOracle`, and `ElaborationOracle`
|
||||
(`elaboration.rs:976`) over three extracted folds; `prepare_invocation`
|
||||
(`controllers.rs:287`) shared by both ports; `open_inference` routing by
|
||||
`GHOSTLIGHT_SDK_MODEL_PREFIX` (default `claude`), `GHOSTLIGHT_SDK_SIDECAR`
|
||||
with no default (opt-in; the plan sentence claiming a default was
|
||||
corrected on main), `GHOSTLIGHT_CONTROLLER_CREDENTIAL` required only
|
||||
with a connector binding; `ControllerRunner::open` injection-only,
|
||||
`with_test_ports` gone; `sidecar/claude-sdk` pinned to
|
||||
`@anthropic-ai/claude-agent-sdk` 0.3.261, `@msgpack/msgpack` 3.1.3,
|
||||
`zod` 4.5.4, Node `>=24 <25`; no credential anywhere in the tree.
|
||||
Baseline at `0cbbf77`: 408 test functions in `world/*.rs`, 461 crate
|
||||
source, 13 in `ghostlight-persona-projection`, 24 sidecar, plus one
|
||||
integration test (Soul ran 407 / 455 / 13 / 24).
|
||||
|
||||
Soul verdict: integrate with follow-ups. The port is a retirable
|
||||
stopgap: deleting `world/sdk_inference.rs`, the sidecar package,
|
||||
`SdkBinding`, and the two `GHOSTLIGHT_SDK_*` variables removes it
|
||||
whole, while `prepare_invocation`, `ToolResultOracle` with its folds,
|
||||
and `RoutedInferencePort` survive as improvements. Decisive finding:
|
||||
the SDK Zod layer strips unknown keys and refuses missing required
|
||||
fields before the handler runs, so a `claude` lane would silently admit
|
||||
what the connector refuses and quarantine what the connector records as
|
||||
a gap. Ruling: one validator on both transports, the Rust decoder; the
|
||||
sidecar hands raw arguments through.
|
||||
|
||||
The step-11 follow-ups are integrated at `d72c246` over `a791d55` and
|
||||
`3514d76`; the merge was confirmed by SHA equality before the worktree
|
||||
was removed, and the push followed the test result line. `a791d55`
|
||||
(sidecar): loose schema conversion, every property optional and unknown
|
||||
keys kept, so Rust is the one validator on the SDK transport too;
|
||||
`protocol_violation` kept with its remaining causes stated;
|
||||
`resultFault` exported and tested. `d72c246` (Rust): `take_oracle`
|
||||
above the gates; the four `pub(crate)` widenings reverted (two
|
||||
`private_interfaces` warnings return, matching the three siblings that
|
||||
already warn); `fixture_prepared` collapsed; `DEFAULT_SDK_MODEL_PREFIX`
|
||||
used in `runtime.rs`. `3514d76` made the source-scanning test
|
||||
line-ending neutral. Residual liability, stated in plan step 11: a
|
||||
property whose value has the wrong type reaches Rust as absent, not as
|
||||
the wrong value, because the SDK derives the advertised schema from the
|
||||
same object and refuses a dynamic pass-through. Baseline at `d72c246`:
|
||||
408 test functions in `world/*.rs`, 461 crate source, 13 in
|
||||
`ghostlight-persona-projection`, 29 sidecar, plus one integration test
|
||||
(Hands ran 407 / 455 / 13 / 29). Step 11 is complete with its
|
||||
follow-ups. Nothing is in flight and no worktree exists.
|
||||
|
||||
Gating lesson, the second lapse of this session: `3514d76` was pushed
|
||||
red for ten minutes because the coordinator acted on a test run before
|
||||
reading its result line. Rule: the push follows the result line, never
|
||||
the launch; the first lapse was the chained `merge --ff-only` and
|
||||
`branch -D` that deleted a branch pointer. Both are recorded here and
|
||||
nowhere else durable.
|
||||
|
||||
Next: the operator installs the Claude Code CLI and logs in (or
|
||||
`setup-token`) per `notes/local-live-smoke.md`, then the first SDK road
|
||||
run, which is the belief-changing record still owed. Facts that
|
||||
survive the overturn: Ghostlight binds Codex-named types in four files
|
||||
(`controllers.rs:25`, `elaboration.rs:31`, `patch.rs:20`,
|
||||
`tool_schema.rs:9`) behind one `InferencePort::prepare`
|
||||
(`controllers.rs:226`); the default model names in `runtime.rs:427-434`
|
||||
are `gpt-5.6-luna/sol/terra`; the Cargo pin is `68fe94b`
|
||||
(`Cargo.toml:21`); CodexConnector `main` was fast-forwarded to `6519289`
|
||||
before the correction, which is the line Ghostlight runs, is harmless,
|
||||
and stays; CodexConnector has no state, notes, handoff, or evidence
|
||||
surface and its doctrine (`AGENTS.md`) is untouched. The smoke runbook
|
||||
describes only the Codex credential path.
|
||||
|
||||
Constraint, which this pass may lift: no road run is possible until a
|
||||
provider is available. The Codex subscription lapsed mid-build and the
|
||||
twelve seeded runs consumed half the operator monthly free quota. Until
|
||||
the Claude backend lands, work proves itself under fixture inference
|
||||
ports; the Codex connector is stopped and the smoke substrate at
|
||||
`F:\Projects\Ghostlight-smoke` stays.
|
||||
|
||||
Next seams: the outbound consumer response
|
||||
batch with the non-loopback CultMesh lease; then the deployment gate
|
||||
below. The elaborator swarm's ideas still sit on
|
||||
`slot/<world>/<title>/<stamp>` branches and the four ledger directories;
|
||||
their integration remains owed and deferred (item 2).
|
||||
|
||||
Decision the operator owns: the authority for an owner-only Eve
|
||||
`world.run_tick` command, which is not built.
|
||||
The ten specs and maps (`imagination-pass1..10.md`,
|
||||
`modeling-pass1..10.md`) remain in the session scratchpad only and are
|
||||
history, not steering; the docs own the design.
|
||||
|
||||
2. First-generation world fixtures are banked and pushed, one per world, each
|
||||
with Ink, training sidecar, visual plan, lore grounding, and BFL manifest,
|
||||
reviewer-accepted except visual replay, which waits on a scene-set
|
||||
blockout:
|
||||
- Delvehold `cistern-house-nine-breaker-test`: `codex/world-delvehold`
|
||||
tip `9374fd0`.
|
||||
- Aetheria `navigator-berth-hearing-v0`: `codex/world-aetheria` tip
|
||||
`fe679f4` (fixture commit `8860c47`); lore on AetheriaLore
|
||||
`codex/ghostlight-worlds` at `ba5c2ce`.
|
||||
- Zyphos `eclipse-nursery-handover`: `codex/world-zyphos` tip `055e6ee`;
|
||||
lore on Zyphos `codex/ghostlight-worlds` at `2fef909`.
|
||||
- Kalsa `stormshield-handoff-v0`: `codex/world-kalsa` tip `489c541`; lore
|
||||
on Kalsa `codex/ghostlight-worlds` at `c9f4c5c`.
|
||||
The elaborator swarm is drained and handed off; this session does not own
|
||||
it. The stop flag `C:\Users\Meta\.claude\worlds\logs\elab-stop.flag` was
|
||||
set at 2026-09-04 20:10; the drain completed at 21:10 with 98 finished
|
||||
passes in `logs\elab-done.csv`, ledgers republished to the
|
||||
world branches, and the successor handoff finalized at
|
||||
`C:\Users\Meta\.claude\worlds\README.md` with final counts and the Charter
|
||||
idea. Resume or restart of the loop waits on operator adjustments and
|
||||
belongs to the successor, not to a Ghostlight kernel session. What remains owed and is
|
||||
deliberately deferred: integration of the `slot/<world>/<title>/<stamp>`
|
||||
branches into the lore vaults on `codex/ghostlight-worlds` and into
|
||||
`codex/world-<world>`. The idea index is the four world-branch ledger
|
||||
directories `experiments/elaboration/<world>/ledger/` on `codex/world-<world>`
|
||||
for aetheria, delvehold, kalsa, zyphos. The substrate lessons (workers never
|
||||
run git; a supervisor outside the Codex sandbox commits and pushes each
|
||||
slot clone; full clones, not linked worktrees) stay in `state/evidence.jsonl`.
|
||||
`Invoke-Worlds.ps1` and the first-generation loop are retired under
|
||||
`C:\Users\Meta\.claude\worlds\retired`; do not launch them.
|
||||
Clone paths:
|
||||
`F:\Projects\Ghostlight-worlds\<world>` and
|
||||
`F:\Projects\<Lore>-worktrees\ghostlight-worlds` (full clones despite the
|
||||
name). Image rendering is deferred: the BFL key drive E: is gone, workers
|
||||
emit imagegen-ready prompts only, and `scripts/generate_bfl_images.py` has
|
||||
no working default key path.
|
||||
|
||||
The deployment gate below is deferred behind both orders, not cancelled:
|
||||
Deferred behind the orders above, not cancelled:
|
||||
|
||||
Review and subtract the uncommitted Idunn-owned Expected/activation/anchor/lease
|
||||
projection and bounded multi-session RUDP document transport. Repoint Odin off
|
||||
|
|
@ -588,19 +315,19 @@ acceptance roots, and local run scaffolding.
|
|||
## Essential references
|
||||
|
||||
- Target authority: `docs/architecture/ghostlight-dungeon-mvp.md`
|
||||
- Vocabulary and current mechanism: `docs/architecture/ghostlight-world-ontology.md`
|
||||
- Consumer contract: `docs/architecture/ghostlight-world-consumer-api.md`
|
||||
- Frozen teardown map: `notes/ghostlight-current-system-map.md`
|
||||
- Current implementation plan: `notes/ghostlight-implementation-plan.md`
|
||||
- Local live smoke runbook: `notes/local-live-smoke.md`
|
||||
- Human-readable state: `state/map.yaml`
|
||||
- Distilled evidence: `state/evidence.jsonl`
|
||||
- Distilled evidence: `state/evidence.jsonl` (full history in
|
||||
`state/evidence.archive.jsonl`)
|
||||
- Machine-managed state: `state/ghostlight-state.cultcache.jsonl`
|
||||
- Interface authority: `docs/architecture/ghostlight-eve-native-interface.md`
|
||||
- Gestalt authority: `docs/architecture/ghostlight-multiresolution-agency.md`
|
||||
- Operations: `F:\Projects\gamecult-ops`
|
||||
- Faculty-workflow lessons (Epiphany): `F:\Projects\Epiphany
|
||||
- Local live smoke runbook: `notes/local-live-smoke.md` (substrate at
|
||||
`F:\Projects\Ghostlight-smoke`, connector from the CodexConnector repo head
|
||||
with the `daemon` feature, environment, first-run table)
|
||||
otesaculty-workflow-lessons-2026-09-04.md`
|
||||
- Faculty-workflow lessons:
|
||||
`F:\Projects\Epiphany\notes\faculty-workflow-lessons-2026-09-04.md`
|
||||
|
||||
## Re-entry warnings
|
||||
|
||||
|
|
@ -621,3 +348,6 @@ otesaculty-workflow-lessons-2026-09-04.md`
|
|||
system map.
|
||||
- `docs/architecture/ghostlight-transition-algebra.md` is teardown evidence,
|
||||
not vocabulary authority.
|
||||
- Integration gating: merge, confirm the tip by SHA, then delete the branch;
|
||||
never chain `merge --ff-only` with `branch -D`. Push only after reading the
|
||||
test result line, never on the launch.
|
||||
|
|
|
|||
|
|
@ -369,8 +369,8 @@ current_status:
|
|||
step 9 interruption, step 10 witness, step 11 Claude SDK inference port
|
||||
with its follow-ups (one validator on both transports, Rust's decoder).
|
||||
Chronology, SHAs, and per-pass facts live in git history, the evidence
|
||||
ledger, notes/fresh-workspace-handoff.md item 1, and the docs; do not
|
||||
rebuild them here. Next, in the operator's order: (a) install the Claude
|
||||
ledger and its archive, and the docs; do not rebuild them here or in
|
||||
the handoff. Next, in the operator's order: (a) install the Claude
|
||||
Code CLI and log in per notes/local-live-smoke.md "Claude SDK route",
|
||||
then the first SDK-backed road run (the belief-changing record owed);
|
||||
(b) the outbound consumer response batch with a non-loopback CultMesh
|
||||
|
|
@ -382,6 +382,5 @@ current_status:
|
|||
holds a credential. The elaborator swarm is drained and handed off
|
||||
(C:\Users\Meta\.claude\worlds\README.md); its 98 ideas sit on slot/*
|
||||
branches, unmerged; integration into the vaults is owed and deferred.
|
||||
Gating rules learned this session: merge, confirm the tip by SHA, then
|
||||
delete; push only after reading the test result line.
|
||||
Gating rules are in the handoff's re-entry warnings.
|
||||
gestalt_population: Gestalt Personas own shared population baselines; persistent member deltas own named individuality; WorldKernel materialization and approval-gated fission preserve lineage and identity. Materialisation/folding changes only representation and the exact member delta, advances resolution epoch, and retires the old cover; it has no Gestalt-wide effect authority. Selected actionable member exceptions are mandatory Projector perspective owners, so aggregation cannot silently erase their decision. Presence projection is limited to nearby active leaves and exact-location dormant members, includes reciprocal player relationship evidence, and may propose an earned cast without committing it. Simulation cells are derived covers only.
|
||||
|
|
|
|||
Loading…
Reference in a new issue