Persist the Idunn deployment authority rebuild

This commit is contained in:
Meta Vens 2026-09-02 16:11:39 +02:00
commit bed213cfff
4 changed files with 69 additions and 34 deletions

View file

@ -6,7 +6,7 @@ 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
records own durable findings.
## Immediate re-entry
## Immediate Re-entry Instruction
1. Work from `F:\Projects\Ghostlight`.
2. Run `git status --short`, `git log -1 --oneline`, and
@ -21,13 +21,17 @@ records own durable findings.
If the operator asks only to rehydrate, report the current gate and stop. A
persisted next action is not permission to begin edits.
Do not continue implementation automatically from a rehydrate-only request.
Do not trust this file for the exact live HEAD. Git and live runtime witnesses
own volatile identity.
## Current authority
The operator stopped Run 115 and ordered a whole-machine authority rebuild.
The adopted target is `docs/architecture/ghostlight-dungeon-mvp.md`.
One per-world `WorldKernel` owns one revisioned `WorldState` across Draft,
Active, and Archived phases. It alone derives authority, applies the typed
One per-world `WorldKernel` owns one revisioned `WorldState` across Draft and
Active phases. It alone derives authority, applies the typed
ontology reducer, and commits an atomic CultCache revision. Session Zero,
autonomous turns, player commands, imports, and administrative changes must
enter through the same `CommandEnvelope` path.
@ -94,16 +98,18 @@ load or evaluation evidence; none admits ontology or declares a world complete.
controller and opportunity fail-closed behavior, restart, idempotency,
one-owner, authentication, non-commit, mailbox cancellation, lost replies,
immutable genesis, and journal forgery rejection.
- The replacement remains crate-private. The legacy exported
`kernel::WorldKernel`, executable startup, Session Zero, player turn,
autonomous scheduling, Campaign/component, verifier/reconciliation, and
checkpoint paths remain live deletion targets. The next move exposes and
wires only the replacement runtime facade and mailbox, then cuts those owners
without dual-write.
- `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.
- Source subtraction is complete. Production cutover and runtime legacy purge
are not.
Do not deploy the rebuild branch or start another acceptance run while the
legacy executable still owns startup, Draft, player, autonomous, or recovery
mutation paths.
Do not start another world acceptance run while Yggdrasil still serves the
legacy executable and state layout.
## Immutable failure evidence
@ -120,10 +126,25 @@ body. The 1,200 and 2,400 actor profiles are synthetic fixtures only.
## Operational boundary
The deployed Yggdrasil service remains the pre-rebuild production body. Exact
release, service, discovery, and authentication witnesses belong to
`F:\Projects\gamecult-ops`; the frozen pre-rebuild map records the last
Ghostlight-side evidence. Do not infer deployed identity from workspace HEAD.
Yggdrasil still serves legacy Ghostlight release `a4080d4` from an enabled
`Restart=always` unit with health v1, campaign/Session Zero state, and no
`world.cc` or `app-sessions-v2.cc` witness. The Connector is also still on its
legacy enabled body. Idunn r21 is live, but its current deploy seam is not safe
to invoke: target policy is repeated across compiled Rust, raw shell command
records, a privileged dispatcher, and large gamecult-ops target programs. Its
root-side source-floor validator cannot inspect correctly Idunn-owned Git
mirrors, and the current fixed-port scripts stop the incumbent before a fresh
candidate is green.
The adopted cut puts a visible recipe and unit template in each target repo.
Idunn operator bindings own the admitted ref, runner/container image and
affordances, host paths, secrets, routing endpoint, rollout, retention, and
desired replica placement. Idunn freezes and materializes source as its own UID,
executes the configured build/test recipe, seals the candidate, waits for signed
staged readiness on a private endpoint, then alone revokes the incumbent
process/write grant, admits the candidate, moves the stable route, and drains
the old generation. Deployment and continuity remain separate authorities; a
deployment brake cannot suspend restart of the already-admitted body.
Heimdall owns account identity. Eve owns command invocation and lowering.
VoidBot owns Vault retrieval and evidence. Idunn owns deployment and daemon
@ -133,18 +154,19 @@ and proposals but cannot commit on their behalf.
## Next gate
Expose the sealed replacement as the crate and executable runtime identity,
with `WorldMailbox` as the only live world command boundary. Bind authenticated
runtime identity to its sealed caller evidence, make startup create or open one
owner and spawn one mailbox, then route Draft creation, approval, activation,
player decisions, and autonomous controller proposals through the existing
command path.
Rebuild the Idunn deployment seam before releasing another target brake. Define
one typed target recipe plus operator binding, remove raw executable command
authority and root Git inspection, and move Ghostlight and Connector build,
test, package, unit, health, and state semantics into visible target-owned
recipes. Keep fleet affordances and exact branch admission in Idunn-owned
configuration. Introduce a stable router data plane whose membership only
Idunn can change; candidate health must be green before the process/write lease
and route move.
Cut each old startup, Session Zero, player, autonomous, Campaign/component, and
recovery writer before enabling its replacement path. Do not dual-write, mirror
canonical state, or add a compatibility router. Runtime restart and negative
checks must prove the old paths cannot mutate or repair the replacement owner
before any live acceptance run.
Deploy the Connector and then Ghostlight through that contract. Runtime restart,
route continuity, signed health, exact receipts, exclusive world-v2 state, and
negative checks must agree before deleting old services, releases, state,
acceptance roots, and local run scaffolding.
## Essential references
@ -168,5 +190,10 @@ before any live acceptance run.
generic journal handle for the convenience of tests or adapters.
- Do not append a commit when reduction produces no canonical mutation.
- Do not resume Run 115.
- Do not invoke the current bounded Connector or Ghostlight redeploy helpers;
they fail at the root/Idunn Git boundary and still embody duplicate target
deployment authority.
- Do not prove world-v2 purity with a short deny list. Archive the complete old
state root or validate a complete allowed-path contract.
- Keep this handoff compact. Move chronology to Git, evidence, or the frozen
system map.

View file

@ -251,4 +251,5 @@
{"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"}
{"ts": "2026-09-01T17:40:32+00:00", "type": "implementation", "status": "ok", "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."}
{"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"}
{"ts": "2026-09-02T14:10:03+00:00", "type": "research", "status": "ok", "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."}

View file

@ -253,3 +253,4 @@
{"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"}

View file

@ -83,7 +83,7 @@ hard_boundaries:
live_architecture:
ghostlight_dungeon_rebuild:
- The authoritative target map is `docs/architecture/ghostlight-dungeon-mvp.md`.
- One sealed per-world WorldKernel owns one private revisioned WorldState, reducer, canonical ID allocator, and journal writer across draft, active, and archived phases. External code receives only create/open, immutable snapshot, submit, and typed receipt surfaces.
- One sealed per-world WorldKernel owns one private revisioned WorldState, reducer, canonical ID allocator, and journal writer across Draft and Active phases. External code receives only create/open, immutable snapshot, submit, and typed receipt surfaces.
- Every ingress submits one CommandEnvelope. The kernel derives authority from canonical state, lowers through one component mutation algebra, validates one complete candidate, and atomically persists WorldState plus WorldCommit through CultCache CAS.
- Rejected and no-effect commands do not allocate canonical IDs, advance revision or digests, or append journal rows. Translation gaps, scheduler queues, and DecisionOpportunity values are derived evidence and cannot enter WorldState by recording themselves.
- The typed ontology owns runtime-issued identities, subjects, decision controllers, components, places, routes, relations, custody, jurisdiction, knowledge, pressure, provenance, and external-owner grants. Aggregate Campaign and legacy component projection are not parallel truth.
@ -91,6 +91,12 @@ live_architecture:
- Scheduler queues, covers, transcript, news, surfaces, model receipts, compaction, checkpoints, world-size counts, and qualitative judgments are derived only.
- Expansion occurs at a typed causal boundary and uses the same mutation vocabulary as seed creation, action, import, individuation, and time. A sparse structurally closed horizon is valid.
- Pre-rebuild stores and acceptance roots remain immutable evidence. They do not enter the new runtime through a live compatibility writer.
deployment_authority:
- Each target repository owns a visible versioned deployment recipe: build, test, package, artifact map, unit template, health contract, state semantics, and requested runner profiles. A target may request an affordance; it cannot grant itself host authority.
- Idunn operator bindings own admitted source origins and refs, minimum revisions, exact release selection, container images and runner kinds, network, mounts, secrets, identities, capabilities, resources, routing endpoints, rollout policy, retention, and desired replica placement. `gamecult-ops` owns those fleet bindings and substrate provisioning, not target deployment programs.
- Idunn has two present authorities: deployment control changes an admitted body; continuity supervision keeps that same admitted body alive from signed health. The deployment brake gates only the first. A separately named lifecycle brake may suspend the second.
- A deployment starts a candidate on a private endpoint while the incumbent retains the stable route. Signed staged readiness precedes the one-way process and write-lease handoff; Idunn then revokes the incumbent admission, grants the candidate, atomically changes router membership, and drains the old generation. The router preserves the last admitted route but cannot choose membership.
- Typed target, action, exact source, recipe digest, runner binding, and deployment identity replace raw persisted shell-command authority. Source fetch and recipe materialization run as the Idunn identity; a narrow privileged boundary consumes sealed inputs and cannot interpret branch heads or mutable worktrees.
pre_rebuild_architecture:
ghostlight_dungeon:
@ -212,7 +218,7 @@ pre_rebuild_architecture:
- Institution, faction, and consumer decision models
active_subgoals:
- Expose the sealed replacement as Ghostlight Dungeon's runtime identity and wire one mailbox per world into startup. Route Draft creation, approval, activation, player decisions, and autonomous controller proposals through that owner, deleting or neutering each old Session Zero, legacy kernel, Campaign/component, scheduler, and recovery writer before its replacement path becomes live. Do not dual-write, mirror canonical state, or preserve a compatibility owner. Preserve the complete private authority loop and eighteen focused tests landed in `66ed2ec`, plus the dead-ingress subtraction in `12ee9f4`. Do not launch another scale run before runtime cutover and negative proof that the old owners can no longer mutate world state.
- Rebuild Idunn's deployment seam around one typed target recipe and operator binding. Ghostlight and CodexConnector must publish visible build, test, package, unit, health, and state contracts; Idunn configuration owns exact refs, runner containers and affordances, host bindings, routing, rollout, retention, and desired singleton placement. Remove raw executable command authority, root Git inspection, gamecult-ops target deployment programs, and stop-old-before-candidate activation before releasing another target brake.
- Connect a Delvehold-owned adapter to the admitted generic consumer contract: shared compiler/consumer WorldSeed admission, externally authoritative institution-or-Gestalt snapshots, attributed proposal acknowledgement, and committed-event newspaper composition over typed CultNet, without consumer-specific IDs or schemas in Ghostlight.
- Extend strategic/offscreen named-person individuation beyond the proven emerge-then-act path so people plot across sustained political waves, acquire relationships, fold, and return without granting a cell, arena, or model commit authority.
- Finish the semantic mutation migration: delete or demote remaining legacy model effect schemas and move aggregate campaign fields toward projection-only state. Seed publication and named-person presence now have explicit non-effect authority classifications.
@ -341,12 +347,12 @@ data_flow:
- If state grows faster than understanding, cut it back.
current_status:
summary: Ghostlight is in whole-machine teardown. Run 115 is terminal failed at world revision 2 with two of eight regions admitted and no strategic wave. Provider timeouts and a dangling institution location survived the qualification, verifier, reconciliation, context, timeout, and model-routing patches through commit 8964a92, proving that the pipeline lacks a single structural owner. The adopted rebuild retains NarrativePersona for embodied roleplay and admits OperationalAgent for operator-shaped cognition, both under explicit disjoint controller scopes. One WorldKernel, one typed ontology reducer, one CommandEnvelope ingress, and one atomic CultCache commit path own the target architecture. No acceptance run is active.
summary: Ghostlight's source teardown is complete at pushed commit `13d5136`: executable startup now enters the replacement runtime, the legacy scheduler/kernel/Session Zero pipeline modules are absent, and one CultCache implementation owns persistent state. Production has not cut over: Yggdrasil still runs legacy release `a4080d4` under an enabled `Restart=always` unit with health v1 and legacy state. The attempted deployment exposed duplicate authority across hard-coded Idunn policy, raw shell commands, the privileged dispatcher, and target-specific gamecult-ops programs, plus a root-versus-Idunn Git ownership failure and stop-old-before-candidate routing. The adopted deployment rebuild uses target-owned visible recipes, Idunn-configured runner and host bindings, candidate readiness behind a stable route, process/write-lease handoff, and separate deployment versus continuity authority. No deployment or acceptance run is active.
provider_acceptance_checkpoint: Exact pushed commit `139b8a6` completed Run 60 under `character-newsroom.v10` without world or per-wave replay. Its acceptance witness and terminal status bind the completed page and exact resume lineage. The independently dispatched blind reviewer, shown only the reader-facing fantasy newspaper, read it as a real left-populist civic broadsheet and did not immediately identify procedural generation, so the narrative reverse-Turing criterion passes. The review's substantive criticism is that the three stories feel like three rewrites of one briefing; accepted Run 60 remains immutable. The run used 96,902 prompt tokens and reported zero cache hits. Its delivered typeset artifact is `output/pdf/canopy-ledger-run-60-front-page.pdf`; frozen-source and visual verification remain accepted. Exact pushed `bc2ca39` then produced frozen-fact newsroom-only Run 61 Issues 13, 15, 16, 17, and 18 without world or wave model replay. Provider output proves `special_issue` convergence in Issues 13 and 15, independent `general_issue` beats in Issues 16 through 18, and assignment-selector cache hits. Blind review of Issues 13, 15, 16, and 17 passes both distinct recurring voices and issue-shape diversity, recognizing Ossan, Mera, Corin, and Lysa's biases plus modest cross-issue evolution. Run 62 exercised v12 without world or wave replay and failed only because two lead articles proposed invalid datelines; recurring reporter calls still recorded zero cache hits. Run 63 used exact pushed v13 `a52d57b`; Issues 17 and 18 completed before root stopped the final weekly recomposition, both repeated bylines again recorded zero cache hits, and live services remained unchanged. Preserve Runs 61 through 63 as stopped or completed immutable evidence. Copy defects remain later deadline-correction work rather than a reason to reopen accepted issue artifacts.
implementation_checkpoint: Pushed commit `12ee9f4` removes the dead legacy Elaboration and Mutation kernel ingresses and their component-write helpers, subtracting 686 lines without adding a compatibility path. Pushed commit `66ed2ec` completes the sealed private `foundation.v0` authority loop: Draft creation, approval, activation, canonical controller assignments and affordance grants, revision-bound opportunities, one shared human/autonomous decision reducer, one serialized mailbox, atomic journal replay, and exact rejection and lost-ack behavior. Eighteen focused world tests pass, including lifecycle, controller and opportunity fail-closed checks, restart, idempotency, one-owner, mailbox serialization and cancellation, authentication, immutable genesis, non-commit, and journal forgery rejection. The target authority map remains `docs/architecture/ghostlight-dungeon-mvp.md`; `d49b907` owns the total Persona interpretation contract. The replacement is still a private module rather than the crate and executable runtime identity: the legacy exported `kernel::WorldKernel`, startup, Session Zero, player turn, autonomous scheduling, Campaign/component, verifier/reconciliation, and checkpoint paths remain live deletion targets. The next cut exposes and wires only the replacement mailbox boundary, then removes those old owners without dual-write.
implementation_checkpoint: Pushed commit `6bb6869` makes the replacement mailbox/kernel architecture the crate and executable runtime identity and removes the legacy runtime owner. Pushed commit `13d5136` unifies app sessions, world journal, and controller custody under the vendored CultCache implementation and deletes the duplicate legacy CultCache dependency. The committed daemon tree has no old Session Zero, legacy kernel, scheduler, assessor, verifier/reconciliation, or legacy-transition module path. This proves source subtraction, not deployment: the running Yggdrasil process and state remain legacy until the Idunn recipe/binding/routing rebuild performs the one-way cut.
full_world_acceptance_checkpoint: Run 115 is terminal failed at `/var/lib/gamecult/ghostlight-dungeon/acceptance/full-world-delvehold-0a83034-115`, semantic revision 2, regions 2/8, waves 0/1. Resume2 ended on provider SSE timeout. Resume3 exhausted four reconciliation steps after `inst:kharad-road-keepers` referenced unknown `loc:kharad-rhythm-road`. Preserve the root, receipts, service invocation `d9254cd9b77946aebcf7a7fdae821402`, and failed patch sequence through 8964a92 as immutable evidence. Do not resume it.
scale_checkpoint: Runs 108 through 115 prove load and failure properties of the pre-rebuild body, not world completeness. The 1,200 and 2,400 actor figures are synthetic evaluation profiles only. Production expansion is sparse and causal; structural admission cannot require interest, diversity, name uniqueness, or an actor count. The private replacement authority suite now passes, but no further scale run is admitted until the executable starts and serves that owner through its mailbox, the old startup, Draft, player, autonomous, and recovery writers are structurally unable to mutate world state, and runtime restart and negative checks pass.
presentation_checkpoint: The historical press-layout and seed-ownership split are complete. `notes/historical-newspaper-layout-grammar.md` remains the durable grammar. Manifest v2 at `output/tex/canopy-ledger-run-61-style-1847-flow-723.manifest.toml` independently binds `style_seed=1847`, `flow_seed=723`, frozen source SHA-256 `8f195140f52a40ba705d6a66987146a1500ae89668e5d82b01d1792eb3afb882`, and the final artifact `output/pdf/canopy-ledger-run-61-style-1847-flow-723.pdf`, SHA-256 `a457f4b1702a7a52480e42fce0039f0dbe677ff32958e98f1c412b346237190c`. An identical seed pair produces byte-identical TeX and PDF; changing only flow preserves the exact style section while materially changing a plausible layout, and changing only style preserves flow topology. Cut-first and cut-midstory templates pass visual inspection; the failed split-card template is deleted. Frozen copy/assets, actual PDF `/BM /Multiply`, and economic-layer advertising authority remain invariant.
public_reference_checkpoint: The published public architecture is immutable pre-rebuild history, not current rebuild authority. Canonical Ghostlight commit `15ea0f0` owns five archived pages covering the former overview, authority, pipelines, 43 named production stages, and eight titled elaborators. Site commit `2035e799c2cf7470b2bfc70d5a878d5d3be5e90f` publishes a shared mobile Home/Blog/Docs masthead, visibly marks every Docs page as a teardown archive, and publishes the postmortem `The World Counter Lied` at `https://ghostlight.gamecult.org/Blog/the-world-counter-lied`; live HTTP inspection returned 200 for the postmortem and Docs index and found the masthead and archive banner. Do not use the archived pages to steer the whole-machine rebuild. `docs/architecture/ghostlight-dungeon-mvp.md` owns the adopted target; publish replacement architecture only after the replacement body is implemented and verified. The site repository owns public composition and deployment.
next_action: Expose the sealed replacement as the crate's runtime identity and make its `WorldMailbox` the only live world command boundary. Wire startup and authenticated identity to create or open one replacement owner, then route Draft creation, approval, activation, player decisions, and autonomous controller proposals through its existing command path. Delete or neuter each old owner before enabling the corresponding replacement path; do not dual-write, mirror Campaign state, or add a compatibility router. Preserve the eighteen-test private authority loop, Run 115 unchanged, and the ban on live acceptance until runtime restart and old-writer negative proofs pass.
next_action: Rebuild Idunn's deployment seam before releasing another brake. Replace hard-coded target policy, raw executable command records, root Git inspection, and gamecult-ops target programs with one typed target recipe and operator-binding contract. Put visible recipes and unit templates in Ghostlight and CodexConnector; configure exact refs, runner containers and affordances, host paths, secrets, routing, rollout, retention, and singleton placement in Idunn-owned bindings. Start each candidate on a private endpoint, require signed staged readiness, then let Idunn perform the process/write-admission handoff and stable-route swap. Deploy Connector and Ghostlight through that path, prove continuity and negative legacy authority, and only then purge old units, releases, state roots, acceptance debris, and local run scaffolding.
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.