The operator's design is detail first, then a ten-percent choke: generate goal-bearing actors at every level, then budget cells so attention is scarce and selection is forced. The mvp doc's teardown-era sentence calling the 2,400-subject profile "test data, not a production elaboration target" contradicted that and is amended. The ontology now carries an authored WorldScaleIntent with a structurally counted deficit that elaborators pursue after boundaries, a budgeted connected cover every tick with singleton detail cells and grouped coarse cells, partitioned views and per-constituent attribution in groups, and debt rotation. Gestalt as canonical identity, arena knowledge union, and semantic qualification stay deleted. Plan step six is nine passes; two proofs added; evidence records the correction. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
55 KiB
Ghostlight Multiresolution Agency Graph
Status: teardown evidence. Describes the pre-rebuild resolution cover,
strategic waves, demand/deficit elaboration, and the wave-level outcome
resolver, all on the deletion line. The current vocabulary is
docs/architecture/ghostlight-world-ontology.md. It keeps the resumable
per-jurisdiction elaborator session, compact mutation drafts, the complete
deterministic mismatch set, the authored WorldScaleIntent and its
deterministically derived deficit, the budgeted connected cover with singleton
detail focus and grouped coarse cells, debt rotation, and deterministic clocks
that advance regardless of attention. Detail first, then the ten-percent choke,
is the operator's design and survives. It drops gestalt as identity:
GestaltPersonaState, member deltas, arena knowledge union, fission as a scale
loop, promotion and folding, and cover-completeness targets.
Objective
Let a campaign contain the whole strategic setting without pretending every person, faction, institution, and population can receive a separate model turn. Ghostlight preserves canonical fine state and changes only the resolution at which that state is simulated during a wave.
This document is the authority map for the implemented multiresolution organ.
The wider runtime map remains ghostlight-dungeon-mvp.md.
Authority map
- Owner:
WorldKernelowns canonical subjects, world revision, resolution controls, accepted fission, and atomic strategic-wave commits. - Inputs: canonical actors, institutions, gestalt leaves, typed agency profiles and relations, resolution pins, current pressure demand, committed clocks/events, and the previous accepted cover.
- Outputs: a revision-bound
ResolutionCover, its plan receipt, one appraisal per selected cell, exact constituent-attributed proposals, and one atomic strategic transition. - Derived state: simulation cells, merge losses, content-addressed cell IDs, detail focus, and the active cover. None owns a person, population, secret, relationship, possession, or fictional fact.
- Forbidden writers: demand projection, graph construction, the partitioner, Projectors, Personas, Interpreters, scheduler, browser, and operator inspector cannot mutate canonical world state.
- Shared paths: scheduled ticks and return catch-up both compile the same
AdvanceStrategicTickcommand. Budget and pin changes use the campaign mailbox at safe boundaries. Provider parallelism uses a separate configuration epoch and does not repartition or advance fiction. - Cut line: the old flat strategic-plan proposer is gone. No active runtime path may tick a hand-picked list of factions outside the selected cover or union arena knowledge into a synthetic actor.
ActorState, InstitutionState, GestaltPersonaState, and durable gestalt
member deltas remain canonical owners. AgencyProfile and AgencyRelation are
typed partition inputs. SimulationCell is always disposable and rebuildable.
Latent-world scale and elaboration demand
- Owner: consumer-authored
WorldScaleIntentowns the desired active-cover ratio.ResolutionPolicycontinues to own only the active-cell entitlement. A deterministicWorldElaborationDemandderivation owns the resulting target and deficit; it owns no fictional content. - Inputs: active-cell budget, target active-cover basis points, the current count of simulation-eligible canonical subjects, and positive complexity weights for admitted realm jurisdictions.
- Outputs: target actionable-subject count, exact current deficit, a bounded round-effort budget, and deterministic per-realm target shares. At 240 cells and 1,000 basis points, the target is 2,400 subjects.
- Derived state: demand, deficit, invocation schedule, and realm target shares are resumable planning artifacts. They are not subjects, facts, Personas, cells, or mutation permits.
- Forbidden writers: the elaboration scheduler, titled workers, Gestalt
compression, Nemesis, and provider concurrency cannot create or count a
proposed subject as canonical. Only admitted population, institution, or
actor operations committed through
WorldKernelreduce the deficit. - Shared paths: initial compilation, destination expansion, resumed elaboration, and later consumer-requested scale changes use the same demand derivation and canonical actionability count. Each titled worker proposes at most one structural operation at a time; deterministic admission and kernel commit remain unchanged. The current scale loop raises complexity through grounded Gestalt fission or promotion of an individual into an active Actor leaf, never through unelaborated census or roster rows. Institution admission remains compiler-owned rather than being smuggled into this loop.
- Cut line: fixed elaboration-pass count is not a world-scale owner. It may bound which jurisdictions are being worked in one run, but it cannot declare the latent world sufficiently populated. Provider concurrency controls only simultaneous calls and never changes the target or deficit.
Realm complexity weights distribute the target; they do not increase it. Any integer remainder is assigned deterministically so the realm shares sum exactly to the world target. A rejected or conflicting proposal leaves the deficit visible rather than being hidden behind an assumed model-call yield.
The actionable count includes only active simulation-eligible agency leaves. Dormant member records are useful latent identity, but do not pay down the complexity deficit until grounded elaboration promotes them. Resolution may still compress roughly 2,400 such leaves into at most 240 cells.
The mutation budget is not a cold-prompt budget. Each titled elaborator owns a resumable working session per realm jurisdiction containing its current frontier, unresolved leads, recent admitted mutations, exact rejection findings, and title mandate. The canonical world remains long-term memory. Bounded retrieval supplies older relevant state. After each round, every title that committed work receives one agentic compaction turn. It emits a typed checkpoint bound to the exact admitted commit ancestry; raw conversation is never authority, and the next turn appends from the checkpoint. This round boundary is the current bounded context policy. Scheduler frequency remains proportional to slider share across sequential turns.
The scale workbench uses mutation drafts rather than asking a model to restate a complete kernel command. A fission draft owns only new child identities, partition values, and exact member/resource assignments. The deterministic tool attaches campaign revision, parent, axis, approval fields, and inherited capabilities, knowledge, goals, and pressures before running the ordinary fission validator. An individuation draft owns only the new member delta; the tool attaches the exact parent version and location. Unchanged world state is therefore never paid for in model output and cannot drift while being copied. The shared fission validator reports the complete deterministic mismatch set in one observation, so an agent can repair the same compact draft without replaying inference or guessing which invariant failed first. The lane-specific action schema requires one entry for every exact frozen resource and dormant-member ID and rejects extra keys. The elaborator still chooses child custody; it cannot silently omit a scarce thing the kernel must conserve.
Round effort is proportional to unresolved pressure rather than presumed model
yield: ceil(active_cell_budget * deficit / target), zero when the target is
satisfied. With 80 admitted leaves against the 2,400 target, the first round
funds 232 one-operation turns. After admission the deterministic owner recounts
active meaningful leaves and derives the next round afresh. A fission may add
several meaningful child leaves; a rejected proposal may add none. Neither case
changes the accounting rule or grants the scheduler fictional authority.
Canonical population resolution
Known population detail is represented by non-overlapping active gestalt
leaves. A material split uses approval-gated FissionGestalt:
- the compiler retrieves exact Vault evidence and produces a fission preview;
- every requested enumerated facet gets a child and one
other/unknownremainder is mandatory; - children inherit the parent baseline and own only later deltas;
- every exact scarce resource is assigned to one child rather than copied as an inheritable trait;
- member deltas are assigned to one child without rewriting identity;
- the parent remains as inactive lineage rather than being destroyed;
- the kernel validates the preview, evidence, versions, assignments, and residual child before one atomic commit.
The commit is a canonical WorldMutationBatch: child admission establishes
identity and occupancy, the lineage mutation inherits non-scarce baseline
components, custody transfers partition resources, and membership transfers
move exact named people. Agency profiles, inherited partition facets, and the
discarded cover are resolution projections of that accepted transition; they
cannot create a second result.
Reversible simulation aggregation never invokes fission and never deletes or reverses this lineage.
Canonical individual migration
Resolution aggregation and population membership are separate authorities. A
cell may temporarily contain many populations, but that never changes which
population baseline a durable person is composed from. WorldKernel owns one
explicit membership transition for that purpose.
- Owner:
WorldKernelowns a durable member's current active-leafgestalt_id. The member delta owns their identity, memories, relationships, possessions, injuries, obligations, and personal departures from the current baseline.GestaltLineageowns immutable fission ancestry. - Inputs: one exact member-attributed proposal, the source and destination active gestalt leaves, a typed migration relation, a reachable destination, and the campaign/resolution snapshot already bound to the strategic wave.
- Outputs: the same member identity attached to the destination leaf, with capability and knowledge deltas rebased so their effective personal state is bit-for-bit unchanged; one attributed migration event is emitted.
- Derived state: simulation cells, arena membership, member prompt
selection, and rematerialized
ActorStateprojections do not own population membership. - Forbidden writers: a source gestalt, destination gestalt, arena, demand model, Projector, Persona prose, or migration relation cannot move a person. Only an action attributed to that exact durable member may propose the transition, and the kernel validates it.
- Shared paths: source and destination may be leaves at any depth under unrelated lineage trees. The same rebase primitive handles crisis camps, neighborhoods, departments, corporations, species populations, and later refinements.
- Cut line: changing
GestaltMemberDelta.gestalt_iddirectly is forbidden. It would reinterpret the old delta against a different baseline and silently alter the person's knowledge, capability, or default goals.
A bounded set of salient dematerialized member exceptions may be projected
inside the cell containing their current gestalt. They remain separately
attributed people, not shared gestalt state. Selection favors unresolved
personal conditions, obligations, goals, and relationships to the player and
is capped so a large population does not dump its roster into the prompt. A
member may migrate only along an explicit active migration relation to a
reachable destination leaf. At any active leaf, the same member may instead
emit a member_activity from their exact location toward their current
population, an explicitly related subject, or another selected named person or
active subject at that exact location. Only the capped salient member
exceptions exposed to the cell may appear as named targets in its prompt;
canonical validation still checks the target's identity and current location.
Migration and ordinary activity share one per-member strategic action slot.
This lets a refugee who mattered during
a crisis choose to travel, offer work after settling, and later rematerialize
as the same person without forcing every refugee to consume an active Persona
cell or giving their agency to the destination Gestalt.
The membrane distinguishes a chosen journey from preparation for one. When a
member commits to board, depart, travel, or join a supplied destination within
the strategic horizon, the Interpreter must emit member_migration; approaching
the queue is not allowed to erase that commitment into member_activity.
Preparing applies only while departure remains unchosen. The semantic verifier
checks both directions so neither consideration becomes travel nor chosen
travel disappears into local activity.
Presence projection is location- and lineage-bounded. The planner sees only
active gestalt leaves at the player's location, dormant members whose exact
current location is there, and materialized members that might be eligible to
fold. Inactive ancestors and remote dormant rosters do not enter the prompt.
The kernel independently rejects individuation from an inactive leaf,
promotion outside the member's exact location, and automatic reconciliation
outside the player's active location. A direct internal command may preserve a
named offscreen actor, but model-driven presence reconciliation cannot teleport
one into view. Existing member deltas are preferred when their relationship,
memory, obligation, or goal makes an ordinary encounter a meaningful callback.
The player actor's reciprocal relationship to each nearby dormant member is
projected beside that member's exact delta. Presence planning is scene casting,
not roster cleanup: an earned local callback may surface without the player
asking for the person, while an incompatible event or absence of durable
callback evidence may still produce no promotion. The model only proposes the
cast; WorldKernel validates exact member, gestalt, location, and versions
before materialization. Live harnesses persist the private presence preflight
even when their acceptance assertion fails.
The presence-planner schema enumerates promotion IDs only from the supplied
nearby dormant roster, demotion IDs only from supplied materialized actors, and
gestalt and location IDs only from the exact scene candidates. A structurally
valid plan that mismatches member, gestalt, location, or version receives one
same-snapshot semantic correction. When that correction succeeds, both the
rejected and accepted stage receipts remain durable; the rejected receipt is
marked semantic_invalid with the bounded local reason.
Canonical population migration
Population fission and population movement are separate decisions. Fission answers which non-overlapping cohort exists. Migration answers where one active cohort goes. Simulation aggregation answers how much inference attention that cohort receives after arrival. None of those operations is a canonical merge.
- Owner:
WorldKernelexclusively owns an active gestalt leaf'shome_location_idand the matching agency-profile location set. - Inputs: one exact gestalt-attributed proposal, an active source leaf, an explicit migration relation to an active destination population leaf, a reachable destination, and the unchanged world and resolution revisions.
- Outputs: the source leaf and its agency profile move atomically, their versions advance, and one attributed population-migration event records the source and destination locations and populations.
- Derived state: the resolution cover may later place the migrant cohort and destination population in one cohesive or arena cell. That cover does not change either population's identity, knowledge, authority, or lineage.
- Forbidden writers: an arena, destination population, Projector, Persona, Interpreter, scheduler, or relation cannot move a population. A population move never carries named member deltas by implication; each named person's exact location and membership remain unchanged until that person acts.
- Shared paths: every active leaf uses the same transition, whether it is a
root population or a child many levels below it. Approval-gated fission may
first create destination, stayer, and
other/unknowncohorts; each resulting leaf can then migrate independently. - Cut line: collective departure is neither
preparenormember_migration. The former loses the chosen journey; the latter gives a population authority over a person. Canonical population merging remains absent: arrival changes geography, while derived covers provide cheap local aggregation.
Demand projection
A flash-model structured stage converts the committed event or strategic horizon into weights for geography, ideology, authority, economy role, species/body, and information. Focal subjects must be chosen from supplied IDs. Local semantic validation permits one same-snapshot correction. Failure falls back to the last accepted demand; the initial fallback favors geography and authority.
Demand is relevance evidence. It cannot create profiles, pins, cells, or facts.
Agency graph
Vertices are active canonical actors, institutions, and gestalt leaves. Edges carry containment, command, membership, alliance, rivalry, trade, migration, communication, coercion, and shared-location meaning. Subjects sharing a location receive derived adjacency. Disconnected components receive a resolution-only Steiner chain so the graph remains coarsenable; those bridge edges assert no lore relation, common authority, proximity, or shared knowledge.
The compiler must profile every non-player actor, institution, and gestalt exactly once across all six axes. It compiles a bounded local play region and a global skeleton of major powers, coarse regions, institutions, information channels, and strategic pressures. Runtime migration derives profiles for old flat campaigns without changing their world revision, actors, institutions, gestalts, or fictional time.
Budgeted connected cover
The campaign selects an active Persona-cell budget from 1 through 240, default 8, bounded by its pooled entitlement. Provider parallelism is a separate control capped at 32 concurrent cell pipelines. The scale fixture covers 1,000 canonical subjects with 200 unique cells, then dispatches every cell membrane in one wave while a seven-permit semaphore bounds physical provider work. Wave width and provider pressure are therefore separate authorities; all terminals still join, sort, validate, and commit as one atomic resolution wave. The partitioner:
- contracts valid
keep_togetherpins; - forces focal, directly engaged, leased, initiative, targeted, and
minimum_individual_detailsubjects into singleton cells; - respects
keep_separatepins and reports mandatory effective-budget overage rather than hiding a foreground subject; - starts at fine resolution and repeatedly merges the lowest-loss legal graph-adjacent pair with deterministic tie-breaking;
- performs one connected boundary-refinement pass and accepts a move only when compression cost improves by at least five percent;
- preserves a previous cover during its lease, or until a replacement improves the weighted objective by at least ten percent, unless a forced split or budget change applies;
- validates complete unique coverage, connectedness, cell identity, mode, and epoch before the cover can enter a wave.
Compression cost is merge loss multiplied by the number of collapsed trajectories. This prevents the objective from favoring one overloaded arena merely because a singleton has zero local loss.
The normalized merge loss is:
0.25 facet divergence
+ 0.20 hidden causal-boundary mass
+ 0.15 information-scope divergence
+ 0.15 spatial divergence
+ 0.10 clock/obligation divergence
+ 0.10 salience burial
+ 0.05 partition churn
Facet divergence is demand-weighted Jaccard distance. Spatial divergence uses known locations, direct travel time, and the current strategic horizon. Candidate scoring uses a deterministic mergeable representative sample for bounded local work; exact authority, hostile relation, coverage, connectivity, pins, and knowledge validation remain unsampled.
Union-by-size owns constituent-set merges. This is not merely an optimization:
it keeps the 1,000-subject path from degenerating into quadratic copying while
leaving stable merge ordering unchanged. The release property test completes
the 1,000-subject, budget-8 partition in approximately 50 ms on the development
host, under the 100 ms contract. Setting GHOSTLIGHT_PARTITION_TRACE enables a
development-only phase timing probe.
Cell modes
- Cohesive: all constituents share one actual collective authority, contain no active hostile edge, and remain within information and behavioral divergence thresholds. The cell may speak and act plurally.
- Arena: constituents remain distinct or opposed. The cell receives an attributed polyphonic situation and may simulate interaction, but it has no actor ID and cannot speak, know, decide, or act as a collective.
Cross-faction aggregation is therefore an arena. Arena interpreters may emit at
most min(4, 1 + ceil(log2(constituent_count))) actions, each attributed to an
exact constituent. The kernel validates that subject's knowledge, information
channel, resources, authority, relationships, location, and reachable
destinations. Secrets are never unioned.
Strategic outcome authority
A valid attributed attempt is not yet a world consequence. The Interpreter owns the narrow claim that a constituent chose an admissible attempt; it does not decide whether the attempt worked, what opposition did, or which durable state changed. Treating the attempt event as a sufficient result made the world busy in prose while its resources, relationships, knowledge, and pressures mostly stood still.
One wave-level strategic outcome resolver owns that missing decision. It runs after priority and incompatibility selection but before the command enters the kernel:
- Ghostlight content-addresses every selected
gestalt_activity,actor_activity, andmember_activityproposal. The digest binds exact source, intent, intended effect, targets, locations, state references, channels, and typed activity. - A local context compiler supplies only those selected attempts and their legal consequence handles: source capabilities and holdings, exact target state, active incident relations, current pressures, eligible named-member deltas, and source-discoverable canonical facts.
- One cheap structured model call resolves the batch. It returns exactly one
success, mixed, or failure result for every digest and chooses one bounded
typed effect, including an explicit
no_material_changewhen the attempt cannot honestly alter canonical state. - Local validation recomputes every permission from the unchanged campaign snapshot. It rejects invented owners, resources, relations, facts, pressure resolutions, player mutation, missing outcomes, duplicate outcomes, and conflicting effect targets. One same-snapshot correction is permitted.
WorldKernelrequires the outcome-stage receipt bound to the complete ordered digest set, then applies the plan and all outcomes to one private campaign copy. A late invalid effect aborts the wave; no clock, activity, outcome, detail debt, or world state reaches the committed campaign.
The public strategic_activity_outcome.v1 contract is a typed sum. Its MVP
effects are deliberately small:
- create, spend, or give away a resource owned by the acting population or named member;
- add or resolve pressure on the acting population or an exact targeted population;
- shift one exact active agency relation incident to the source and a supplied target by a bounded amount;
- add one memory, obligation, or relationship description to an exact named member who owns that perspective;
- learn one exact canonical fact that was discoverable at the attempt location or already known by an exact communication target;
- or record an explicit reason why no durable material change occurred.
The provider boundary uses a flat JSON proposal rather than asking the model to
emit the public tagged sum directly. The private flat shape avoids fragile
oneOf generation; a local interpreter is the only component allowed to turn
it into the typed public effect. JSON remains a model-provider boundary. The
accepted outcome, its binding, and its receipt are persisted through the
campaign's CultCache path.
Outcome resolution does not grant an arena collective authority. Every result remains bound to the exact constituent proposal digest. A rival can suffer a pressure or relation consequence, but cannot be made to speak, spend a resource, reveal knowledge, or acquire a private relationship as though the arena had chosen for it. Effects on the player are forbidden; accessible news may later reveal a committed consequence, but the absent player is never puppeted or directly harmed.
The resolver is batched once per strategic wave rather than once per cell or attempt. This keeps the stable rules and schema in one cacheable prompt prefix, lets it compare simultaneous opposition, and spends completion tokens only on the handful of attempts that survived selection. Provider concurrency still controls the preceding Persona-cell wave and does not alter outcome authority.
Fairness and quiet-world agency
Every active profile carries persistent non-fictional detail_debt. Aggregate
representation increases debt; singleton or explicit detail focus clears it.
Each strategic wave reserves focus for the highest-debt subject. At budget 1,
the root arena retains the global situation while explicitly appraising that
subject. Deterministic clocks and obligations advance regardless of focus, and
every cell must emit explicit action or inaction.
With N subjects, deterministic debt rotation gives every subject direct resolution attention within at most N strategic waves, absent a mandatory foreground override.
Persona-cell wave
Each selected cell runs one Ghostlight-owned Projector → Persona → Interpreter membrane:
- cohesive Projectors expose genuinely shared lived state plus attributed exceptions;
- arena Projectors expose attributed constituent slices and no synthetic actor;
- Personas receive only the private lived narrative stream;
- Interpreters emit a typed appraisal and exact constituent effects;
- malformed or semantically invalid output gets one same-snapshot correction.
An appraisal has two attributed lanes: actions[] for proposed transitions and
inactions[] for exact subjects that deliberately hold, wait, or continue an
already committed course. The old cell-wide inaction string is gone. This
matters in a mixed arena: one institution can act while two rivals hold without
the Interpreter manufacturing repeated posture transitions merely to preserve
their separately voiced decisions. Inaction IDs use the same constituent or
selected-member permission set, carry a bounded reason, cannot duplicate, and
cannot also appear in the action lane. They are audit/fairness evidence and
never mutate the world. A cell with no actions must still contain at least one
attributed inaction.
An arena may contain simultaneous views from distant locations. The Projector names each subject's actual location and keeps those views as separate scenes; a graph relation or activity target grants permission to attempt contact, not fictional co-presence. The Persona preserves those spatial boundaries unless the lived stream explicitly establishes an exact shared location or communication channel. Compression therefore cannot turn a regional arena into one impossible meeting room.
Perspective attribution is runtime-owned. The learned Projector emits bounded
subject_id → narrative segments, where the subject ID must be one exact
constituent or selected member exception from the permitted slice. Ghostlight
then lowers those private structured segments into one natural lived stream,
adding exact names and locations plus a deterministic scene-boundary block. The
Persona receives only that lowered prose. It never sees IDs or schemas.
- Owner: the permitted cell slice owns which subjects may have an internal perspective; the Projector owns only the lived language inside one bound segment.
- Inputs: exact cell constituents, selected member exceptions, perceived events, locations, private state slices, and the shared snapshot binding.
- Outputs: one to the cell action limit unique, non-empty narrative segments, lowered in stable order with runtime-owned perspective labels.
- Derived state: headings, scene labels, and the combined lived stream are disposable projections and own no canonical fact or decision.
- Forbidden writers: Projector prose cannot add a perspective owner by inventing a heading, voicing a mentioned outsider, or speaking as an arena.
- Shared paths: cohesive and arena cells use the same segment binding; their mode changes narration guidance, never perspective authority.
- Cut line: raw freeform cell Projector output is no longer appended directly to the Persona stream. Only runtime-bound segments cross the membrane.
The deterministic block contains names and locations, not schemas or state fields. A poetic omission therefore cannot erase geometry, and an invented Markdown section cannot grant a subject agency before the Persona turn.
Perspective ownership is equally strict. Only the cell's supplied constituents and selected member exceptions may receive an internal viewpoint or make a choice. A named person mentioned by a perceived event but owned by another cell remains an external observation. Personas may seek an unknown role or office, but cannot conjure it into available contact; target-requiring effects need one of the exact supplied subject IDs.
Physical provider concurrency batches these pipelines behind a separate
operator limit, default 8. Changing that limit increments only
provider_configuration_epoch; it preserves the selected cover, resolution
epoch, world revision, clocks, and fictional time.
All cell results must bind the same campaign revision and resolution epoch.
The kernel requires a Projector, Persona, and Interpreter receipt for every
cell, validates every proposal, resolves incompatibilities deterministically,
caps committed consequences at min(16, 2 × effective_budget), and commits the
entire wave once. One missing appraisal, stale receipt, malformed stage,
invalid cover, or invalid effect aborts the wave without partial mutation.
Interpreter intent and intended_effect prose is proposal rationale only. It
never becomes canonical event narration. The kernel derives each committed
event summary from the exact admitted posture, pressure markers, route, or
membership transition after applying it. Strategic plans therefore carry no
model-authored summary field that can assert a consequence outside the typed
effect.
Recent events are projected per constituent. A cell receives an event only for subjects that participated in it, occupy one of its locations, or possess one of its public channels; arena streams retain those viewer attributions. There is no global recent-event recap that can quietly teach every population the same fact.
Interpreter prompts use a compact stable output contract plus an exact per-subject permission table. The table names the only allowed effect kind, state references, public channels, and destinations for each constituent or member exception. Local validation repeats every slice-expressible constraint before accepting the terminal appraisal, so a malformed pressure marker or wrong subject/effect pairing receives the same-snapshot correction while the kernel still performs the authoritative canonical check. Named-member knowledge is never treated as an information channel; while dematerialized, the member can publish only through channels owned by their current leaf gestalt's agency profile.
subject_state_references is the single derivation path for canonical
constituent references used by both prompt slicing and wave admission. For a
Gestalt it includes reachable destinations produced by active migration
relations, along with the destination population and location references. The
scheduler does not append a second opinion after the fact, so a reference
shown to the Interpreter cannot become invalid merely by reaching the wave
resolver.
subject_id is the sole model-facing owner attribution. Nested effect owner
IDs are absent from the model contract: Ghostlight derives institution_id,
gestalt_id, actor_id, or the raw member ID during binding. The canonical
CellActionProposal still carries those IDs for downstream validation and
receipts, but a model cannot make two copies disagree. This also removes
repeated tokens and one class of correction calls from every actionful cell.
Institution rows distinguish current_posture from unresolved pressures.
The committed posture is projected as already true and is the exact baseline
against which a new institutional commitment is validated. It is never hidden
in a generic pressure list, where a Projector could mistake a completed choice
for a dilemma still awaiting action.
Institution posture proposals are bounded to 240 characters in both the stable
Interpreter contract and local JSON Schema, matching the canonical validator.
The model sees the limit before generation instead of spending a semantic retry
on an otherwise valid but overlong commitment.
A committed strategic effect must produce an exact canonical consequence.
Institutions cannot re-adopt their current posture. Population pressure effects
carry an explicit lifecycle: pressure_resolutions must name exact current
pressure markers, and pressure_additions must introduce genuinely new
unresolved constraints, threats, obligations, or conditions. Completed action
prose is not a pressure.
Populations may instead propose a bounded gestalt_activity: prepare,
coordinate, investigate, recruit, obstruct, trade, or communicate. Its source
is an exact active gestalt leaf; its targets must be adjacent canonical agency
subjects through an explicit active relation or exact shared location. A
dormant named person is addressable as member:<id> without becoming gestalt
state. Its locations and channels must belong to the source's permitted slice.
The effect commits only an attributed attempted-activity event. It does
not claim successful discovery, recruitment, persuasion, delivery, exchange,
obstruction, preparation, or target response. Event records carry exact
gestalt participant IDs so later demand and perception can attribute the
attempt without treating an arena as an actor. A later resolved outcome needs
its own admitted effect.
Two local attempts may omit a canonical target while retaining the source's
exact current location. Targetless investigate seeks facts from the
environment or an unnamed ordinary role. Targetless communicate records the
source speaking, offering, requesting permission, or notifying such a role.
Neither form creates a listener, reply, acceptance, discovery, or target
agency. All other target-bearing activity uses exact canonical subject IDs.
Activities may include incidental motion around unnamed local features while
remaining inside the source's canonical location. This does not create
topology or establish arrival. Only a clear commitment to a different supplied
canonical location or population destination requires a movement effect.
The shared validators run in the Interpreter membrane, wave resolver, and kernel. One gestalt can contribute at most one selected pressure transition or activity per tick; deterministic priority resolution cannot let two effect forms bypass that limit.
Named member exceptions use the same activity vocabulary through
member_activity. The event is attributed to member:<id> and the current
leaf; the member's delta, the source Gestalt, and any target remain unchanged.
An arena cannot translate the person's attempt into a collective action, and
the destination population cannot claim the person's voice. member_activity
and member_migration resolve under one exact member key, so only the
higher-priority compatible choice can commit in a wave.
Canonical non-player actors use actor_activity for preparation,
coordination, investigation, recruitment, obstruction, trade, and
communication. The action is bound to the actor's exact current location,
state references, information channels, and graph-adjacent or co-located
targets. actor_move and actor_activity share one actor action key, so a
cell cannot make the same person travel and act again in the same wave.
Human-controlled actors are inadmissible in both paths. An arena may carry the
actor's attributed proposal but cannot translate it into population speech,
member activity, or collective authority.
The Interpreter maps natural attempts narrowly: speech, offers, requests, and
notices are communication; coordination requires an actual attempt to arrange
joint work; preparation is the source's own concrete work; investigation seeks
information; recruitment invites participation; trade offers exchange; and
obstruction attempts interference. intended_effect repeats the attempted act,
not the hoped-for outcome. This keeps the semantic verifier focused on agency
and consequence rather than guessing what a broad activity label meant.
Semantic correction feedback names the exact failed boundary and current value. A repeated institution posture receives its present posture; an invalid population transition receives its exact current pressure set and the failed transition reason. The correction model is not expected to reconstruct a validator from a generic rejection.
The WorldKernel resolves every strategic batch against one immutable campaign snapshot. It applies validated transitions to a private working copy and swaps that copy into the campaign only after the whole batch succeeds. Earlier actions in the batch therefore cannot rewrite the spatial, relationship, or knowledge permissions used by later actions. This matters when, for example, a camp population signals refugees during the same strategic horizon in which those refugees depart: both choices are judged from the shared starting world, while the committed result still contains the migration. A late invalid action discards the working copy and leaves the campaign untouched.
An actionful cell has a fourth private stage after the Interpreter: the
cell_effect_verifier. This cheap structured reader compares the natural
Persona decision with each attributed typed effect. It rejects reversals,
subject swaps, omissions, wishful outcomes, or lossy mappings—for example,
mapping “Mira gives her berth to somebody else” into a migration of Mira
herself. The rejected appraisal and concise rationale return to one
same-snapshot Interpreter correction. Inaction cells skip the call. The kernel
requires a valid verifier receipt for every actionful cell; an invalid or
missing verifier cannot satisfy the wave receipt gate. The verifier receipt's
snapshot binding includes a MessagePack content hash of the ordered action
bundle. The kernel recomputes it, so a verdict for another proposal at the same
world revision and cell cannot be replayed as authority.
Verification is per action, not a batch opinion. The model returns exactly one
ordered action_index and discriminated result for every candidate: match,
or mismatch with one enumerated mismatch class.
Ghostlight constrains the verdict count and index range in the stage schema,
rejects omissions, duplicates, reordering, and incoherent discriminators, and derives
the rejected set locally. This keeps one bad arena action from contaminating
independent constituents and prevents a global pass/fail field from
contradicting its own rejected-index list.
Public state and controls
The schema catalog and CultCache stores publish:
agency_profile.v1,agency_relation.v1,gestalt_lineage.v1;resolution_policy.v1,resolution_pin.v1,resolution_demand.v1;simulation_cell.v1,resolution_cover.v1,resolution_plan_receipt.v1, andresolution_control_receipt.v1;cell_appraisal.v1,cell_action_proposal.v1, and the internal atomicresolution_wave_commit.v1bundle;strategic_activity_outcome.v1, persisted individually for inspection and also bound inside the atomic resolution wave;gestalt_migration.v1andmember_migration.v1as distinct collective and individual movement contracts inside strategic plans;gestalt_fission_preview.v1and approval-gatedFissionGestalt.
The authenticated campaign laboratory exposes budget, effective overage, pins, fission preview/approval, and a separate operator provider-parallelism control. The Eve operator projection carries the agency graph, active cover, cell modes, loss components, debt focus, pins, plan receipts, cell appraisals, and control receipts. Browser and Eve surfaces use a composite interface version so resolution-only and provider-only changes refresh without impersonating a world revision.
Verification
Property and golden tests cover budgets 1/4/8/32, complete unique connected coverage, deterministic ties, mandatory overage, contradictory pins, fairness, arena isolation, fission identity preservation, stale epochs, atomic waves, and the 1,000-subject target. Pressure goldens preserve geography under blockade, ideology under schism, workplace/economic role under strike, species/body and transport under epidemic, and information boundaries under espionage.
The live Gestalt-dynamics harness has two modes. Its golden mode traverses budgets 1 → 4 → 8 → 4 and proves independent population/member migration plus automatic rematerialization of the same durable person. Its fairness mode keeps the whole 24-subject setting in one arena for 24 total strategic ticks. It requires every runtime-selected detail focus within the bound, rejects inactive lineage parents as simulation subjects, and repeats the identity/callback check after sustained compression. Both migration endpoints must be active leaves at lineage depth two or greater.
Both modes distinguish selected attempts from resolved material consequences.
The harness counts direct typed transitions and non-no_material_change
activity outcomes separately, rejects a sustained run that never changes the
background world materially, and records every outcome in the private
preflight. A named member's dormant delta may now evolve offscreen, but any
change to memory, obligation, relationship, equipment, or knowledge must be
accounted for by an exact member-bound outcome before the return callback is
accepted.
Fairness acceptance treats a rejected provider wave the same way the daemon's scheduler does: the failed pulse records its private trace and commits nothing; a later pulse may try the same still-current revision again. The harness permits a bounded, operator-selected number of these fresh pulses per desired committed tick and reports every rejection in the final result. This does not expand the single stage's one-correction rule or rebase stale output.
The exact-build d044951 budget-8/provider-8 profile is the first complete live
proof of the attributed-inaction and immutable-batch machinery together. It ran
23 sustained waves over 24 active subjects in 742.435 seconds. Every subject
received direct resolution attention; 22 background subjects acted, while the
two without a committed action were represented by exact attributed inaction.
The wave plans selected 175 strategic effects: 85 population activities, 66
institution postures, 22 named-member activities, one population migration,
and one population-pressure transition. The appraisals also retained 179
attributed inactions, including 31 cells where some constituents acted while
others held. Ninety arena cells ran without an arena acquiring an actor ID or
collective voice. The eight-cell cover used only two partitions and preserved
the same boundaries across 21 of 22 wave transitions; its largest arena held
13 rivals.
The same run preserved Mira Venn's effective capabilities, knowledge,
equipment, conditions, obligations, memories, and relationship after her
durable delta crossed the hierarchy. The presence planner later selected her
from harbor-neighbors without the player naming her, and the kernel
materialized the same person beside the player. The player remained unchanged.
The private witness is
F:\GameCult\GhostlightDungeon\acceptance\gestalt-lease-b8p8-d044951-1.
The profile also names the next pressure point instead of laundering it into a
victory lap. Observed traffic used 1,988,812 prompt and 233,146 completion
tokens at a 66.64% prompt-cache hit rate. Nineteen rejected pulses consumed
807,304 prompt tokens—40.59% of observed prompt work. Eleven were caught by the
action-bound semantic verifier, three by Interpreter semantic validation, two
by JSON Schema, and three by transport failure. In that build, most population
effects were still attributed attempts recorded in event history rather than
resolved changes to resources, obligations, relationships, knowledge, or
pressures. The current candidate adds the separate strategic outcome resolver
described above without promoting the Interpreter into asserting success. A
revised live result is still required; the d044951 profile is evidence for
cover, fairness, attribution, and atomic batch behavior, not evidence for
material activity outcomes.
The callback and fairness claims are independently falsifiable. Strict live mode requires Mira's Persona to choose resettlement and proves the later callback without forcing that choice. Fairness mode may instead branch from the exact committed campaign inside that strict golden's result, then spend all 24 new provider-driven ticks on budget-one debt rotation. The baseline path and SHA-256 are recorded in the result; no migration command or Persona decision is fabricated during fairness setup.
A deterministic diaspora test drives two durable people from the same depth-two refugee leaf to two different depth-two destination branches in one strategic plan. It proves exact effective capabilities, knowledge, goals, memories, relationships, possessions, conditions, and obligations survive the rebases; destination populations receive none of that private state. Only the source and destination population version counters change. Each person can then materialize from their new local baseline with the same name and private delta.
Live pressure results
The 24-tick budget-one fairness run gestalt-dynamics-fairness-a4ea28b-1
covered all 24 canonical subjects with 24 distinct debt-selected foci. Its
accepted appraisals contained 77 attributed proposals: one population
migration, nine institution posture changes, 15 named-member activities, and 52
Gestalt activities. Consequence capping committed 45 actions from 15 background
subjects. Four
bad scheduler pulses were rejected without revision movement; fresh pulses at
the same current state recovered. Mira retained her exact private and effective
state and was automatically rematerialized at the end. The run took 641.578
seconds. Its committed baseline is bound by SHA-256 in the result.
The 24-faction scale matrix produced:
| Configured cells | Effective cells | Arenas | Committed actions | Seconds | Prompt tokens/action |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 2 | 18.913 | 11,734.5 |
| 4 | 4 | 3 | 8 | 15.619 | 4,682.1 |
| 8 | 8 | 7 | 16 | 26.300 | 3,546.6 |
| 32 | 24 | 0 | 16 | 55.906 | 7,410.5 |
Budget 4 is the latency sweet spot in this fixture. Budget 8 reaches the global 16-consequence cap with the best cognitive efficiency. Resolving every faction individually doubles prompt cost and wall time relative to budget 8, adds no committed consequences under the cap, and increases whole-wave tail-failure risk. Budget 1 remains a valid emergency compression mode, not an efficient default.
Repeated fairness prompts reached a 47.07% aggregate provider cache-hit ratio; Projector reached 75.45% and Persona 61.57%. Interpreter remained the dominant cost at 247,578 prompt tokens and only 34.54% cache hits. Prompt/context work should therefore target Interpreter permissions and stable-prefix layout before shrinking the Persona stream.
Resolution control is edge-triggered. active_cell_budget owns
resolution_epoch; provider parallelism owns only
provider_configuration_epoch. An unchanged control value is rejected without
persistence, epoch movement, or cover invalidation. Acceptance harnesses issue
either control only when its value actually differs, so repeated strategic
ticks preserve the previous cover, leases, and churn history. Stress runs may
select cell budget and provider parallelism independently.
A lease preserves a cut, not invalid topology. Before reusing a previous cover, the partitioner revalidates every multi-subject cell against the current agency graph. Migration, relation changes, fission, or activation can therefore break a leased cell and force replanning immediately. Cover validation reports empty, duplicate, disconnected, content-ID, and false-cohesion failures separately.
Fairness accounting uses the same definition as canonical detail debt: an
explicit aggregate detail_focus_subject_id and every singleton cell both
receive direct resolution attention. A named focus is not required for a
subject already receiving its own complete Persona pipeline.
The lease-preserving budget-4 profile committed all 23 requested sustained
waves and recovered from 18 rejected provider pulses without partial mutation.
It then failed its separate callback assertion because the presence planner
returned an empty cast. This isolated a player-experience fault from the agency
invariants: Mira remained the same dormant person in the correct destination,
but continuity was not surfaced. The focused gestalt-callback-6253f9f-1 run
then passed: after one fresh 24-subject arena wave, the planner promoted
mira-venn from harbor-neighbors without the player naming her, and the
kernel rematerialized the same private and effective state. The full run took
18.465 seconds. Its strategic membrane used 18,662 prompt and 1,096 completion
tokens; the additional presence decision used 2,504 prompt and 78 completion
tokens.
Institution posture is projected as already_committed_posture. It is durable
state already in force, not a new pressure or decision. Projector, Persona, and
Interpreter contracts all treat continuing or restating it as explicit
inaction; only a materially different commitment may emit an institution
posture transition. Local validation remains strict rather than silently
dropping a no-op.
The 31-wave budget-8 / provider-parallelism-4 profile
gestalt-lease-b8p4-6253f9f-1 passed after 1,211.592 seconds. All 24 subjects
received direct attention. Its sustained appraisals made 199 accepted proposals
from 22 distinct subjects; consequence resolution committed 51 institution
postures, 110 Gestalt activities, one population migration, and 31 named-member
activities, plus the initial arena consequence. Fifteen rejected pulses left
the world unchanged and later recovered. The same Mira callback passed after
the full run.
The profile used 1,468,039 strategic prompt tokens and 165,725 completion tokens, reached a 60.69% cache-hit ratio, and spent 7,567 prompt tokens per committed consequence. Interpreter remained the largest stage at 737,148 prompt tokens but reached 67.18% cache hits; Projector reached 70.03%. The presence decision added 2,606 prompt and 78 completion tokens. Live traces showed that the remaining repeated-posture failures occurred when several constituents in one arena held while others acted, motivating the attributed inaction lane rather than another prompt-only prohibition.
The first attributed-inaction/provider-parallelism-8 comparison committed nine waves, then exhausted its bounded retries at wave 10. It proved the new lane in mixed appraisals—across the first nine waves, 72 cells emitted 63 actions and 93 attributed inactions, including 18 action-plus-inaction appraisals—but also exposed an overprojection failure. The Interpreter invented roster-completion inactions for subjects absent from the Persona turn, overflowing the four-perspective limit, and once wrote a reason beyond the 240-character schema bound. The contract now admits inaction only for a subject that explicitly holds or waits in the Persona turn, forbids absence-as-inaction, and asks for a reason of at most 160 characters while retaining the 240-character hard bound.
The strategic outcome resolver closes the attempt/result authority gap. Institution postures, population migration, clocks, and history remain kernel state; selected Gestalt activities are digest-bound attempts. One batched resolver receives only those attempts and deterministic admissible consequence handles, then returns one typed result per attempt. The Interpreter cannot declare its own hoped-for outcome.
Local validation owns ordinary bounded preparations, pressure changes, and discoverable knowledge. Effects with easy-to-hide private authority mistakes— resource consumption or transfer, agency-relation shifts, and named-member memory, obligation, or relationship deltas—also pass through an independent same-snapshot semantic verifier. Its verdict is advisory to the resolver retry, never a writer. Applying that verifier to every harmless preparation was both expensive and over-strict, so the risk boundary is deliberately selective.
The current provider-backed golden completed four waves across budgets
1 -> 4 -> 8 -> 4 in 81.28 seconds in a debug build. It produced ten durable
consequences and seven typed material activity outcomes, with three explicit
no-material-change results, zero rejected pulses, exact member attribution,
the player unchanged, and the same Mira returning with her persistent delta.
It used 126,826 prompt tokens, 14,477 completion tokens, and a 58.34% prompt
cache-hit ratio. This proves the ordinary material-outcome path live. The
selective high-risk verifier was first covered locally, then forced through the
provider boundary below.
That witness now exists at
F:\GameCult\GhostlightDungeon\acceptance\forced-high-risk-outcome-contract-fixed-20260818.
Dock Labor Guild explicitly transferred its exact west winch rerouting plan
to the colocated Harbor Neighbors. The Flash resolver emitted the exact custody
transition, the independent verifier accepted it against the same snapshot,
and the canonical input remained byte-identical. The first witness also caught
a prompt/schema naming mismatch: prose said resource_recipient_id while the
schema requires other_subject_id. Naming the input-to-output mapping directly
removed the correction call; the accepted rerun used exactly two first-attempt-
valid provider calls in 2.95 seconds.
The Starfire deployment smoke ran a live provider-backed wave over three eligible singleton cells, committed three offscreen events and three channel-accessible news items in 19.55 seconds, and preserved the absent player. That fixture proves deployed cell isolation and atomic admission. The 20-plus-faction budget matrix, not the singleton smoke, proves aggregation.