The gameSECTION 01 / 32

The last Archivist

A world built from knowledge. A game built around the programs its player learns to write.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Reality remembers what someone preserves.

Knowledge is physical.
Magic is a program.
Preservation is a choice.

An isometric action RPG about restoring a world whose relationships, memories and meanings are being erased. As the last Archivist, the player discovers concepts, composes executable knowledge and learns why each corrupted region is failing.

The central promise is expressive authorship: two players can recover the same vocabulary and build spells that solve the encounter in fundamentally different ways.

01 / World

Knowledge is physical

Relations form bridges. Memories preserve state. Missing provenance leaves gaps in the structure of reality.

02 / Play

Magic is programming

Typed semantic primitives combine with operators and carriers. Every cast is finite, explainable and constrained.

03 / Progress

Learn a language

Discovery unlocks new ways to compose effects, not only larger damage values.

04 / Conflict

Understand corruption

Enemies embody erasure, noise, contradiction and drift. Observation can change the fight.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
The gameSECTION 02 / 32

The expedition loop

Explore → Observe → Recover → Fight → Analyze → Compile → Restore → Archive.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

An expedition in eight movements

01

Explore

Choose a route through unstable archive architecture.

Routes, visible danger and the next restoration objective should be legible before combat.

02

Observe

Read tells, inspect exposed properties and record what actually happened.

Unknown fields remain unknown. Observation is an action with range, timing and risk.

03

Recover

Collect fragments that expand the spell vocabulary.

A recovered fragment gives a tangible new possibility or completes a restoration requirement.

04

Fight

Test a hypothesis against an enemy’s behavior.

The enemy exposes a readable response to a correct predicate, missed timing window or ineffective effect.

05

Analyze

Compare the expected outcome with the observed one.

Explain failed edges, stale evidence and resource costs without forcing the player to read a debug log.

06

Compile

Change a template or compose a new graph.

Show what will happen, what it costs and why it is or is not valid.

07

Restore

Rebuild a relation or stabilize a knowledge anchor.

Restoration changes the traversable world and is distinct from defeating an enemy.

08

Archive

Preserve the result and return with new expressive options.

Committed knowledge persists; the next expedition starts with a wider language.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
The gameSECTION 03 / 32

World & corruption

Information Aqueducts, lost relations, four enemy families and a restoration-driven boss.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Corruption has a rule you can learn

E01

Lacuna Scribe

Lacunae

Tell
Missing floor letters pulse before a gap opens.
Attack
A targeted gap deals 12 hp after 24 tick tell.
Discovery
Observe a missing bridge relation.
Counterplay
Recover a fragment to expose its ward; restore a safe crossing.
E02

Noiseborn Relay

Noiseborn

Tell
Three packets flicker; only the square-framed packet carries the valid checksum.
Attack
One 8 hp bolt and two decoys after 16 tick tell.
Discovery
Compare packet structure; do not mistake copies for independent evidence.
Counterplay
Filter the valid packet and interrupt the relay.
E03

Contradictor Bailiff

Contradictors

Tell
Mutually exclusive ward glyphs alternate on a 64 tick cycle.
Attack
18 hp cone after 32 tick tell.
Discovery
Witness the current ward and test its vulnerability predicate.
Counterplay
Gate attacks to the valid condition; stale observations fail visibly.
E04

Driftform Indexer

Driftforms

Tell
Its temporary type tag visibly changes every 96 ticks.
Attack
12 hp dash after 24 tick tell.
Discovery
Record a type change and compare with current membership.
Counterplay
Re-query Ontology.Type rather than relying on a stale cached tag.

The Lacuna Warden

B1

1.0..0.66

Warden deletes one of three visible bridge links; recover its fragment and expose a damage window.

Recovery: A permanent safe platform and baseline attack remain available.

B2

0.66..0.33

Two ward claims disagree; witness two independent attack origins and use a verified predicate to open the ward.

Recovery: Repeat attacks provide new observations; evidence cannot be permanently missed.

B3

0.33..0

Damage can suppress the Warden, but victory requires Canonize on the restoration anchor with one Authority and supported evidence.

Recovery: If evidence becomes disputed, return to observation; never consume Authority on rejected commit.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
The gameSECTION 04 / 32

Scope & delivery tiers

The complete catalog is specified now; the first playable milestone is deliberately bounded.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

One demo, inside a larger language

DimensionWorking demoFull design
Domains816
Primitive runtime64 original contracts256 contracts
Operators16 source operators32 operators
CarriersBolt / Beam / Field / Self8 delivery forms
World1 biome · 8 rooms · 3 anchors8 regions and campaign crises
Opposition4 families · 1 boss8 families and region-specific bosses
Session30-minute first-run targetCampaign pacing to be tested
X01

Core mastery expansion

Implement P01..P08 ordinals 09..16: 64 additional primitives, each with five required contract cases.

X02

Expansion domains

Implement P09..P16 ordinals 01..16: 128 additional primitives with sandbox/persistence isolation tests.

X03

Advanced grammar and carriers

Implement O17..O32 and Aura, Tether, Sigil, Construct with fanout and lifetime evidence.

X04

World and enemy expansion

Author the remaining seven regions and four corruption families with unique restoration rules and navigation evidence.

X05

Campaign and knowledge crises

Author region progression, contested-history encounters, final compression antagonist and multiple stewardship outcomes.

X06

Advanced item language

Add signatures, axioms, exceptions and artifacts through admitted schema transforms with no compiler bypass.

X07

Asset forge and authored polish

Build the optional development-time asset pipeline with tool versions, rights records, deterministic cleanup and human selection.

X08

Product hardening

Expand localization, hardware matrix, controller coverage, save migrations and accessibility based on demo evidence.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
The gameSECTION 05 / 32

The spell language

Meaning, computation and geometry stay separate so new combinations remain explainable.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

A spell is a finite, typed program

Primitive × Operator × Carrier × Target × Trigger

Domain primitives specify what an operation means. Operators specify evaluation order, branching and repetition. Carriers specify how an effect reaches the world. Equipment can change admitted parameters or schemas, but cannot bypass types, budgets or persistence rules.

SEMANTICS

Domain primitive

Memory.Restore moves an eligible target toward captured state. It knows nothing about whether delivery is a bolt or a field.

COMPOSITION

Structural operator

Gate evaluates a body only when its Boolean condition is true. Delay schedules a bounded later evaluation.

DELIVERY

Carrier

A Bolt determines travel, collision and reach. It does not invent damage or decide whether a claim is supported.

The compilation path

  1. parse versioned graph
  2. resolve catalog IDs and bindings
  3. unify exact ports and units
  4. validate visibility/capabilities
  5. normalize pure graph
  6. calculate worst-case resources and fanout
  7. prove bounded scheduling and termination
  8. emit effect plan with source map
  9. run reference VM
  10. project committed events to presentation
Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
The gameSECTION 06 / 32

Shapes & execution

The shared rules every primitive, operator and component must obey.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Values carry shape, units and provenance

Scalar

signed int64 / UnitRef / 1024 / value=raw/1024; no implicit unit conversions

raw: signed int64; unit: UnitRef; scale: 1024; meaning: value=raw/1024; no implicit unit conversions

Integer

signed int32

value: signed int32

Boolean

true or false; never unknown

value: true or false; never unknown

Entity

uint32 / uint32 / string

id: uint32; generation: uint32; encounter_id: string

EntitySet

unique List<Entity> / ascending id unless primitive explicitly supplies score or

items: unique List<Entity>; ordering: ascending id unless primitive explicitly supplies score order; max_items: 16

FieldRef

Entity / FieldKey / UnitRef / read or encounter_write; resolved from schema

entity: Entity; key: FieldKey; unit: UnitRef; access: read or encounter_write; resolved from schema

Vector3

Scalar<m> / Scalar<m> / Scalar<m> / world

x: Scalar<m>; y: Scalar<m>; z: Scalar<m>; frame: world

Duration

uint32 / 32

ticks: uint32; tick_rate_hz: 32

Record

string / map<string,typed payload> / List<string>; not zero-filled

schema_id: string; fields: map<string,typed payload>; unknown_fields: List<string>; not zero-filled

Evidence

Digest / Record / Entity / Duration / Duration optional / Entity / List<Digest>

id: Digest; proposition: Record; subject: Entity; observed_tick: Duration; receipt_tick: Duration optional; observer: Entity; source_ids: List<Digest>; ultimate_source_ids: List<Digest>; confidence: Scalar<ratio>; disposition: witnessed | derived | hypothetical; revoked: Boolean; valid_until: Duration; parents: List<Digest>

Scenario

Digest / Digest / Record / Seed / Record / List<FieldKey> / Digest / Duration <=

id: Digest; baseline_hash: Digest; state: Record; seed: Seed; input_edits: Record; missing_fields: List<FieldKey>; model_version: Digest; horizon: Duration <=64 ticks

Forecast

Digest / Digest / Duration / Record / List<Atom> / List<FieldKey> / Record / Lis

scenario_hash: Digest; baseline_hash: Digest; horizon: Duration; metrics: Record; coverage: List<Atom>; missing_fields: List<FieldKey>; input_edits: Record; actions: List<Atom>; world_write_capability: False

Effect

cast/node/ordinal / primitive ID / EntitySet / List<Predicate> / Record / List<R

id: cast/node/ordinal; opcode: primitive ID; targets: EntitySet; preconditions: List<Predicate>; read_versions: Record; deltas: List<Record>; scheduled_events: List<Event<Record>>; cost: ResourceBudget; provenance: List<Digest>; commit_policy: atomic current-tick batch

ResourceBudget

uint32 / uint32 / 0..100 / 0..100 / uint32

bandwidth: uint32; complexity: uint32; coherence: 0..100; entropy_debt: 0..100; archive_authority: uint32

When a cast becomes a world change

At each tick read from immutable start-of-tick snapshot, evaluate plans, then apply conflict-resolved deltas atomically per cast; later casts see the same read snapshot but reservation and write-version conflicts are serialized by cast_id. A version conflict rejects the later conflicting cast instead of silently reevaluating it.

numeric add

Conflict rule

Sum same-unit deltas then clamp once to effective capacity.

numeric multiply

Conflict rule

Multiply fixed-point modifiers in ascending effect ID order; cap total penalty at 75 percent unless a primitive is tighter.

capacity

Conflict rule

Apply capacity modifiers before current-value deltas; expiry restores cap without healing.

exclusive slots

Conflict rule

Conflicting replacements on the same slot reject the later cast by cast_id.

restoration

Conflict rule

Never restore currency, pickups, permanent progression, entity generation, attestation history or Archive Authority. Recheck navigation for position writes.

spawn

Conflict rule

Reserve IDs and summon slots before committing; no loot from temporary entities.

read staleness

Conflict rule

Observed data keeps its timestamp; staleness is not erased by encoding, copying or attesting.

periodic

Conflict rule

Current-tick effects are atomic; already committed prior ticks are never rolled back if a later scheduled activation fails.

Closed type catalog

Scalar, Integer, Boolean, Text, Atom, Digest, Vector3, Duration, Interval, Entity, EntitySet, FieldRef, FieldKey, UnitRef, Record, Codec, KeyRef, Seed, RollRef, Pattern, Token, Relationship, RelationKind, TypeRef, Modifier, Constraint, Comparator, Predicate, Clause, Rule, Evidence, PersonaRef, Trait, ContextRef, MeaningRef, Scenario, Forecast, GraphRef, GraphFragment, SyntaxTree, GrammarRef, Diagnostic, Certificate, ClockRef, GoalRef, PlanRef, SensorRef, Effect, ResourceBudget, Node, Edge, Port

Generic shapes

List<T>, Option<T>, Signal<T>, Memory<T>, Event<T>, Distribution<T>, Claim<T>, Expr<T>, Result<T>, Pair<T,U>

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
RepresentationSECTION 07 / 32

Information

Signals, encoding and transport. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Information / contracts 01–08

Representation is a tactical material.

The player can reduce a signal’s precision to carry it more cheaply, route it through an exposed relay, or distribute it to several recipients. None of those actions establishes that its contents are true. This distinction lets a packet remain perfectly encoded while the claim it carries is wrong.

A relay encounter can reward the player who recognizes the valid packet and preserves its precision, while another build spends bandwidth broadcasting a coarse threshold. Both manipulate representation; they should produce visibly different transport and precision tradeoffs.

Boundary Does not establish truth, create meaning or measure hidden state.
P01.01Demopure

Encode

value: Scalar, codec: Codec → Signal<Scalar>

Serialize value with the selected codec and retain its unit and source IDs; output error_bound is zero.

Reject
Codec does not support the value unit.
Counterplay
Intercept the carrier before delivery.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.02Demopure

Decode

signal: Signal<Scalar>, codec: Codec → Scalar

Recover the represented scalar and its declared error bound; decoding alone cannot write an entity field.

Reject
Codec ID differs from signal codec ID.
Counterplay
Scramble the packet before decoding.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.03Demopure

Compress

signal: Signal<Scalar>, step: Scalar → Signal<Scalar>

Round value to the nearest step with ties to even; add step/2 to error_bound; payload cost falls one tier, minimum one.

Reject
step is nonpositive or has the wrong unit.
Counterplay
Require precision finer than the compressed error bound.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.04Demopure

Expand

signal: Signal<Scalar>, factor: Integer → Signal<Scalar>

Increase payload resolution by factor while retaining the original error_bound; never reconstruct lost information.

Reject
factor is outside 1..4.
Counterplay
Demand fresh evidence instead of enlarged representation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.05Demopure

Filter

signals: List<Signal<Scalar>>, mask: List<Boolean> → List<Signal<Scalar>>

Retain packets whose corresponding mask is true, preserving input order and source lineage.

Reject
List lengths differ.
Counterplay
Emit decoy packets that satisfy a weak predicate.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.06Demoread

Route

signal: Signal<Scalar>, path: List<Entity> → Signal<Scalar>

Append the validated directed relay path to the packet route; reserve one bandwidth unit per hop.

Reject
Any relay edge is absent or path exceeds eight hops.
Counterplay
Break one relay edge before arrival.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P01.07Demoread

Broadcast

signal: Signal<Scalar>, receivers: EntitySet → List<Signal<Scalar>>

Return one addressed immutable packet per receiver in ascending entity ID order; reserve payload cost per copy.

Reject
Receiver count exceeds sixteen or any receiver is outside carrier reach.
Counterplay
Spread beyond the selected carrier radius.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P01.08Demopure

Quantize

signal: Signal<Scalar>, thresholds: List<Scalar> → Integer

Return the count of thresholds less than or equal to signal.value; thresholds are strictly ascending in the same unit.

Reject
Thresholds repeat, are unordered, or exceed sixteen entries.
Counterplay
Move the measured value below the next visible threshold.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Information / contracts 09–16

P01.09Expansionpure

Checksum

signal: Signal<Scalar> → Digest

Hash canonical packet payload, codec and unit, excluding mutable routing metadata.

Reject
Packet lacks canonical codec representation.
Counterplay
Alter payload after checksum creation to reveal tampering.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.10Expansionpure

Repair

signal: Signal<Scalar>, replicas: List<Signal<Scalar>> → Signal<Scalar>

Select an identical payload supported by a strict majority of at least three replicas; retain all replica source IDs.

Reject
No strict majority exists or codec IDs differ.
Counterplay
Corrupt a majority; evidence trust remains a separate concern.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.11Expansionpure

Multiplex

signals: List<Signal<Scalar>> → Signal<List<Scalar>>

Pack up to eight scalar payloads with ordered channel IDs, units and independent error bounds.

Reject
Channel IDs collide.
Counterplay
Jam a specific channel without affecting the rest.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.12Expansionpure

Demultiplex

signal: Signal<List<Scalar>>, channel: Integer → Signal<Scalar>

Extract the indexed channel without changing its payload, unit, error or source IDs.

Reject
Requested channel is absent.
Counterplay
Remove or block the desired channel upstream.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.13Expansionpure

Encrypt

signal: Signal<Scalar>, key: KeyRef → Signal<Scalar>

Mark payload inaccessible except to nodes with the matching in-game KeyRef; this is game logic, not real cryptography.

Reject
KeyRef is not owned by the caster.
Counterplay
Steal the in-game key or destroy the carrier.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.14Expansionpure

Decrypt

signal: Signal<Scalar>, key: KeyRef → Signal<Scalar>

Remove the game confidentiality wrapper only when key ID matches; retain packet lineage.

Reject
Key ID mismatches.
Counterplay
Rotate an enemy key before interception.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P01.15Expansionwrite

Cache

signal: Signal<Scalar>, ttl: Duration → Effect

Store one packet under cast/node ID until current_tick+ttl, replacing only that same owner slot.

Reject
Cache byte budget would be exceeded.
Counterplay
Wait for expiry or destroy the owning relay.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P01.16Expansionpure

Delta

before: Signal<Scalar>, after: Signal<Scalar> → Signal<Scalar>

Return after.value-before.value with summed error bounds and unioned source IDs.

Reject
Units or codec IDs differ.
Counterplay
Change an unmeasured field to evade this comparison.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
RepresentationSECTION 08 / 32

Semantics

Context-bound symbols and interpretation. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Semantics / contracts 01–08

The same symbol can mean different things.

Semantics binds symbols to explicit contexts and registered meanings. Translation, reframing and disambiguation must state what mapping they use. Analogy is useful, but it is not factual support. Literal physical responses are authored allowlisted interactions.

An inscription puzzle should make its context legible through the room, not demand arbitrary word guessing. A clever build can preserve or scope a binding while a drift-oriented enemy changes another one.

Boundary Does not manufacture global meanings or equate analogy with factual support.
P09.01Expansionread

Denote

symbol: Atom, context: ContextRef → MeaningRef

Resolve the exact symbol in the explicit context dictionary; no fallback to another context.

Reject
Dictionary has zero or multiple direct bindings.
Counterplay
Use a symbol ambiguous in the current context.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P09.02Expansionpure

Interpret

signal: Signal<Scalar>, meaning: MeaningRef → Claim<Scalar>

Apply the meaning's registered unit-preserving affine interpretation to the signal; retain context and error bound.

Reject
Codec or unit is incompatible with the meaning.
Counterplay
Change context before interpreting an old signal.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.03Expansionpure

Disambiguate

meanings: List<MeaningRef>, evidence: Evidence → MeaningRef

Choose the sole meaning whose declared discriminant is satisfied by evidence.

Reject
Zero or multiple meanings satisfy the discriminant.
Counterplay
Withhold the discriminating observation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.04Expansionpure

Reframe

claim: Claim<Scalar>, context: ContextRef → Claim<Scalar>

Translate claim through an explicit reversible context mapping; record old context and mapping ID.

Reject
No mapping exists or mapping would lose a required distinction.
Counterplay
Use a context with no authorized equivalence.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.05Expansionpure

Translate

symbol: Atom, from: ContextRef, to: ContextRef → Atom

Look up an exact registered symbol-to-symbol mapping; retain source symbol in lineage.

Reject
Mapping is missing or one-to-many.
Counterplay
Use an idiom without an exact translation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.06Expansionwrite

Define

symbol: Atom, meaning: MeaningRef, context: ContextRef, duration: Duration → Effect

Add a local encounter dictionary binding owned by caster; it cannot overwrite a global entry.

Reject
Symbol is already bound incompatibly in that local context.
Counterplay
Move the encounter interaction outside that context.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P09.07Expansionwrite

Alias

symbol: Atom, existing: Atom, context: ContextRef, duration: Duration → Effect

Create one local synonym pointing to an existing resolved symbol; resolution depth remains at most four.

Reject
Alias cycle would occur or existing is unresolved.
Counterplay
Use a distinct meaning rather than a synonym.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P09.08Expansionpure

Differentiate

left: MeaningRef, right: MeaningRef → List<Atom>

Return sorted semantic feature keys whose values differ between the two meanings.

Reject
Meanings use incomparable feature schemas.
Counterplay
Use two meanings sharing every registered feature.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Semantics / contracts 09–16

P09.09Expansionpure

Entail

left: MeaningRef, right: MeaningRef → Boolean

Return true when left's registered feature constraints imply every constraint of right under exact subset rules.

Reject
Either meaning requires unsupported free-text inference.
Counterplay
Present a counterexample feature.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.10Expansionpure

Contextualize

claim: Claim<Scalar>, context: ContextRef → Claim<Scalar>

Attach a missing context to an unscoped claim without changing value; an existing context must match.

Reject
Claim is already scoped differently.
Counterplay
Demonstrate that the chosen context does not apply.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.11Expansionpure

MeasureDrift

before: MeaningRef, after: MeaningRef → Scalar

Return mismatched shared feature count divided by union feature count; empty union gives zero.

Reject
Meanings have different symbol identities.
Counterplay
Change an untracked feature to expose model limits.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.12Expansionwrite

PreserveMeaning

target: Entity, meaning: MeaningRef, duration: Duration → Effect

Freeze one local symbol binding against drift effects for duration; other bindings remain mutable.

Reject
Binding is absent or belongs to immutable narrative canon.
Counterplay
Attack another unprotected binding.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P09.13Expansionpure

Metaphor

from: MeaningRef, to: MeaningRef, relation: RelationKind → Rule

Create an explicitly analogical rule transferring only the named shared relation; output is never factual evidence.

Reject
No shared relation schema exists.
Counterplay
Exploit where the analogy stops applying.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.14Expansionwrite

Literalize

target: Entity, meaning: MeaningRef, duration: Duration → Effect

Apply one allowlisted environmental response tied to the symbol's literal feature, such as opening a named gate.

Reject
Meaning has no authored physical response.
Counterplay
Change the local binding before activation.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P09.15Expansionpure

Contradistinguish

left: MeaningRef, right: MeaningRef → Predicate

Return a predicate on the first sorted differentiating feature; this classifies records without changing meanings.

Reject
No differentiating feature exists.
Counterplay
Match the selected feature while differing elsewhere.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P09.16Expansionwrite

ScopeMeaning

meaning: MeaningRef, targets: EntitySet, duration: Duration → Effect

Limit one owned local dictionary binding to the specified observed entities for duration.

Reject
Binding is not owned or targets exceed sixteen.
Counterplay
Leave the explicitly scoped target set.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
RepresentationSECTION 09 / 32

Grammar

Inert typed syntax and reusable graph structures. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Grammar / contracts 01–08

The language itself becomes a reusable object.

Grammar handles inert syntax, named bindings, typed fragments and schema transformations. Quoting a graph does not execute it. Simplification cannot remove effects, lineage or charges. Every reconstructed graph still passes through the compiler.

Advanced players can abstract a reliable spell into a template, substitute a compatible fragment and preserve a versioned schema. The interface should make structural changes explainable without presenting arbitrary source code execution as magic.

Boundary Does not execute quoted graphs or bypass compilation.
P12.01Expansionpure

Tokenize

text: Text, grammar: GrammarRef → List<Token>

Split bounded DSL text using the registered lexer; report source spans for each token.

Reject
Text exceeds 4096 bytes or contains an invalid token.
Counterplay
In puzzles, use a symbol outside the admitted grammar.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.02Expansionpure

Parse

tokens: List<Token>, grammar: GrammarRef → SyntaxTree

Build a typed syntax tree with source spans using the named unambiguous grammar.

Reject
Token sequence has no valid parse or exceeds depth eight.
Counterplay
Present malformed inscriptions with a visible error span.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.03Expansionpure

Compose

left: GraphFragment, right: GraphFragment → GraphFragment

Connect left's sole output to right's sole input when exact port types match; renumber local node IDs deterministically.

Reject
Port arity or type differs.
Counterplay
Use an incompatible port to prevent automatic composition.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.04Expansionpure

Substitute

tree: SyntaxTree, symbol: Atom, replacement: SyntaxTree → SyntaxTree

Capture-avoiding replacement of free occurrences of symbol; alpha-rename bound variables by stable local IDs.

Reject
Replacement exceeds node budget or changes the required type.
Counterplay
Bind the symbol locally to prevent substitution.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.05Expansionpure

Inflect

token: Token, feature: Atom → Token

Select the exact registered token variant for feature; preserve its semantic type.

Reject
Variant is absent.
Counterplay
Choose a feature the language cannot express.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.06Expansionpure

Permute

fragment: GraphFragment, order: List<Integer> → GraphFragment

Reorder only independent pure sibling nodes according to a complete index permutation.

Reject
Any moved nodes share state or dependencies.
Counterplay
Introduce an explicit dependency to prevent reordering.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.07Expansionpure

Nest

fragment: GraphFragment, depth: Integer → GraphFragment

Wrap fragment in depth lexical scopes with fresh bindings; behavior is alpha-equivalent and no repetition is introduced.

Reject
Resulting lexical depth exceeds eight.
Counterplay
Use a free binding that must be supplied outside the scope.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.08Expansionpure

Abstract

fragment: GraphFragment, inputs: List<Atom> → GraphFragment

Replace specified constant bindings with named typed input ports, preserving all other graph structure.

Reject
Binding is effectful, absent or duplicated.
Counterplay
Require a value the caller cannot provide.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Grammar / contracts 09–16

P12.09Expansionpure

InstantiateSchema

schema: GraphFragment, bindings: Record → GraphFragment

Fill all required schema input ports with same-type constants or references; retain schema origin hash.

Reject
Required binding missing or has wrong type.
Counterplay
Alter the schema version to invalidate stale bindings.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.10Expansionpure

Quote

fragment: GraphFragment → SyntaxTree

Represent graph as inert syntax data with node types and source IDs; no gameplay node executes.

Reject
Graph has unresolved external references.
Counterplay
Keep quoted content inert until explicitly compiled.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.11Expansionpure

Unquote

tree: SyntaxTree, grammar: GrammarRef → GraphFragment

Convert admitted typed syntax into a graph candidate; it must pass the compiler before execution.

Reject
Tree references unknown or forbidden nodes.
Counterplay
Present a syntax tree with a precise type error.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.12Expansionpure

Simplify

fragment: GraphFragment → GraphFragment

Constant-fold pure nodes and remove unreachable pure nodes while retaining diagnostics mapping.

Reject
Rewrite would remove effects, lineage or resource charges.
Counterplay
Use stateful nodes that cannot be folded away.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.13Expansionpure

Annotate

fragment: GraphFragment, note: Text → GraphFragment

Attach a maximum 256-byte display note excluded from semantic hash and execution.

Reject
Note exceeds byte limit.
Counterplay
Ignore misleading notes and inspect the actual graph.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.14Expansionpure

ValidateSyntax

tree: SyntaxTree, grammar: GrammarRef → List<Diagnostic>

Return sorted syntax and binding diagnostics with exact spans; empty list means syntax valid only.

Reject
GrammarRef is unknown.
Counterplay
Provide valid syntax with a semantic type mismatch.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.15Expansionpure

Version

fragment: GraphFragment, version: Integer → GraphFragment

Attach an explicit schema version and parent content hash without altering node behavior.

Reject
Version is not greater than the fragment's current version.
Counterplay
Reject callers still pinned to the old version.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P12.16Expansionpure

SealSchema

fragment: GraphFragment → Certificate

Produce a content-addressed schema seal over normalized nodes, bindings and budgets; excludes presentation notes.

Reject
Fragment contains unresolved ports not declared public.
Counterplay
Any semantic edit invalidates the seal.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
RepresentationSECTION 10 / 32

Observation

Observable measurements and uncertainty. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Observation / contracts 01–08

Knowing begins with an available measurement.

Observation exposes visible fields, uncertainty and measurement age. It does not look through walls or authenticate a record’s origin. Missing samples become gaps; calibration cannot invent resolution. A remembered marker is not continuous tracking.

The player can illuminate a clue, instrument a construct or compare readings. Enemies can move within an error interval, break a sensor line, or change an unmeasured variable. Make those limits perceptible.

Boundary Does not read through walls, attest truth or promote absent data to zero.
P15.01Expansionread

Sense

target: Entity, field: FieldRef → Scalar

Read one currently visible allowlisted numeric field from target; include observation tick and unit in value metadata.

Reject
Field is hidden or belongs to another entity.
Counterplay
Occlude the target or conceal that field.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P15.02Expansionread

Inspect

target: Entity → Record

Return currently observable identity, position and revealed resistance fields; unknown fields remain explicitly absent.

Reject
Target is outside line of sight.
Counterplay
Break sight before inspection completes.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P15.03Expansionread

Measure

target: Entity, field: FieldRef, precision: Scalar → Signal<Scalar>

Read visible scalar rounded to precision, carrying error_bound=precision/2 and observation tick.

Reject
precision is nonpositive or has mismatched units.
Counterplay
Change the field within the measurement's error interval.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P15.04Expansionpure

Calibrate

sensor: SensorRef, reference: Scalar → SensorRef

Subtract the sensor's registered reference bias for the matching unit; calibration does not improve its resolution.

Reject
Reference is not an admitted calibration fixture.
Counterplay
Introduce drift after calibration.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P15.05Expansionpure

CompareReadings

left: Signal<Scalar>, right: Signal<Scalar> → Boolean

Return true when closed uncertainty intervals overlap in the same unit and subject.

Reject
Subjects, units or measurement contexts differ.
Counterplay
Produce clearly separated measurement intervals.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P15.06Expansionpure

DetectChange

before: Signal<Scalar>, after: Signal<Scalar> → Boolean

Return true when abs(after-before) exceeds sum of error bounds; equality is not a detected change.

Reject
Subjects or units differ.
Counterplay
Change more slowly than measurement resolution.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P15.07Expansionwrite

Occlude

target: Entity, radius: Scalar, duration: Duration → Effect

Create a sensor-occluding field around target that blocks distant inspection rays but not movement or damage.

Reject
Radius exceeds four meters.
Counterplay
Enter close range or use a different visible angle.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P15.08Expansionwrite

Illuminate

position: Vector3, radius: Scalar, duration: Duration → Effect

Raise reveal level in a visible area for optical sensors, exposing authored hidden clues but not private state.

Reject
Position is not visible or radius exceeds eight meters.
Counterplay
Move behind solid occlusion.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Observation / contracts 09–16

P15.09Expansionwrite

SampleOverTime

target: Entity, field: FieldRef, count: Integer, cadence: Duration → Effect

Schedule count visible measurements at cadence and emit a Record event per successful sample; missed samples are explicit gaps.

Reject
count exceeds eight or total horizon exceeds sixty-four ticks.
Counterplay
Break sight for selected sample times.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P15.10Expansionpure

Estimate

readings: List<Signal<Scalar>> → Signal<Scalar>

Return arithmetic mean and conservative error=max(error_i+abs(value_i-mean)); do not invent unseen samples.

Reject
Readings differ in subject or unit.
Counterplay
Create heterogeneous readings to widen uncertainty.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P15.11Expansionpure

TriangulatePosition

readings: List<Signal<Vector3>> → Signal<Vector3>

For at least three independent sensors return mean position with conservative maximum radial error; preserve source IDs.

Reject
Fewer than three independent sensors exist.
Counterplay
Block one sensor or move between sample times.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P15.12Expansionwrite

MarkObserved

target: Entity, duration: Duration → Effect

Store a caster-local observed marker and last-seen tick; marker never updates position through walls.

Reject
Target is not currently visible.
Counterplay
Break sight and exploit marker staleness.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P15.13Expansionread

Survey

position: Vector3, radius: Scalar → Record

Return visible navigation cells and restoration-anchor states in radius, excluding occluded cells.

Reject
Radius exceeds sixteen meters.
Counterplay
Hide routes behind occluding architecture.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P15.14Expansionsandbox

BlindSpot

sensor: SensorRef, scene: Scenario → List<Vector3>

Return model cells inside sensor range that fail its line-of-sight test, sorted by cell ID.

Reject
Scenario lacks collision geometry.
Counterplay
Move occluders after the forecast.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P15.15Expansionwrite

Instrument

target: Entity, sensor: SensorRef, duration: Duration → Effect

Attach one owned sensor to a construct; readings obey range, occlusion, cadence and the shared observation budget.

Reject
Target is unowned or sensor slot occupied.
Counterplay
Destroy or occlude the instrumented construct.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P15.16Expansionread

ObserveObserver

target: Entity → EntitySet

Return visible entities currently directing detectable sensors at target; undetectable sensors stay unknown.

Reject
Target is not owned or visible.
Counterplay
Disable sensor emission before observation.
BW 2 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
State & changeSECTION 11 / 32

Entropy

Loss, degradation and conserved redistribution. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Entropy / contracts 01–08

Loss should have a readable object.

Entropy attacks current values, maximum capacity, maintenance and recovery links through separate operations. Those distinctions matter because the healthy response changes: replenishing current shield helps against a drain but cannot remove a lowered capacity.

The player should recognize whether armor is rusted, a ward is unraveling or restoration is severed. Debt limits sustained manipulation. It should not become an excuse for unexplained random punishment.

Boundary Does not reroll probability, alter permanent progression or delete historical evidence.
P02.01Demowrite

Decay

target: FieldRef, rate: Scalar, duration: Duration → Effect

Reduce a nonnegative resource by rate per simulation second for duration, clamped at zero; schedule fixed-point tick deltas.

Reject
rate unit is not target unit per second.
Counterplay
Cleanse the decay status or replenish faster than the drain.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.02Demowrite

Diffuse

targets: List<FieldRef>, fraction: Scalar → Effect

Simultaneously move each value fraction of the way toward the group mean; conserve the group sum with remainder assigned by entity ID.

Reject
Fields differ in unit, faction eligibility or capacity bounds.
Counterplay
Break the group into separated clusters.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.03Demowrite

Dissipate

target: FieldRef, amount: Scalar → Effect

Remove min(amount,current) from a temporary shield or energy pool; no transfer or refund is created.

Reject
Target is health, an archive resource, or amount is negative.
Counterplay
Spend the temporary pool before impact.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.04Demopure

Scramble

pattern: Pattern, seed: Seed → Pattern

Permute existing pattern tokens with the seeded shuffle helper; preserve token multiplicity and total duration.

Reject
Pattern includes immutable boss phase transitions.
Counterplay
Use a one-token pattern or a scramble-resistant stance.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P02.05Demowrite

Fracture

target: Entity, parts: Integer, duration: Duration → Effect

Replace one breakable shield attachment with parts targetable fragments; divide integrity without increasing its sum; expiry recombines surviving integrity.

Reject
Attachment is not breakable or parts is outside 2..4.
Counterplay
Guard the exposed fragments or interrupt the cast.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.06Demowrite

Erode

target: FieldRef, fraction: Scalar, duration: Duration → Effect

Apply one max-capacity penalty equal to base_max*fraction; clamp current to effective max; expiry restores capacity but grants no current value.

Reject
Field has no capacity or fraction exceeds 0.25.
Counterplay
Cleanse erosion before a follow-up drain.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.07Demowrite

Equalize

targets: List<FieldRef> → Effect

Set eligible same-faction fields to their arithmetic mean in one transaction, conserving total value.

Reject
Mixed factions, mismatched units, or any capacity cannot hold the mean.
Counterplay
Isolate the weakest member before the transfer.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.08Demowrite

Sever

link: Relationship, duration: Duration → Effect

Disable a restoration-class link for duration without deleting its history or blocking unrelated recovery routes.

Reject
Link is a permanent world restoration or quest dependency.
Counterplay
Create a new eligible recovery route after the sever window.
BW 4 · Coherence 2 · Debt 2 · Authority 0

Entropy / contracts 09–16

P02.09Expansionwrite

Rust

target: Entity, fraction: Scalar, duration: Duration → Effect

Reduce equipment-derived armor contribution by fraction, leaving innate armor unchanged.

Reject
Target has no equipment armor or fraction exceeds 0.25.
Counterplay
Switch to innate defense or remove the rust status.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.10Expansionwrite

Leak

target: FieldRef, threshold: Scalar, duration: Duration → Effect

During duration discard only gains above threshold per tick; existing value is unchanged.

Reject
Threshold is negative or field is persistent Archive Authority.
Counterplay
Use smaller gains below the visible threshold.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.11Expansionwrite

Fatigue

target: Entity, surcharge: Scalar, duration: Duration → Effect

Add surcharge bandwidth to the next three accepted casts within duration; rejected casts do not consume a charge.

Reject
surcharge is outside 1..4 bandwidth.
Counterplay
Wait out the status or use a cheaper graph.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.12Expansionwrite

Abrade

target: Entity, hits: Integer → Effect

Remove one removable ward layer per confirmed carrier collision, up to hits layers and one layer per tick.

Reject
hits exceeds four or ward is a phase gate.
Counterplay
Dodge successive collisions and rebuild ward layers.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.13Expansionwrite

Desynchronize

target: Entity, delay: Duration, duration: Duration → Effect

Offset the target's periodic status cadence by delay once; preserve effect count and total scheduled magnitude.

Reject
Status has no periodic schedule or delay exceeds eight ticks.
Counterplay
Use immediate effects or re-establish cadence.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.14Expansionwrite

Unravel

target: Entity, count: Integer → Effect

Cancel up to count dispellable maintenance effects, newest first by applied tick then effect ID.

Reject
count exceeds two or only protected effects remain.
Counterplay
Maintain a cheap decoy effect to absorb removal.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.15Expansionwrite

Saturate

target: FieldRef, threshold: Scalar, duration: Duration → Effect

Cap this field's inbound restoration per tick at threshold; discard excess without affecting other fields.

Reject
Field cannot receive restoration or threshold is negative.
Counterplay
Heal through multiple fields or after expiry.
BW 4 · Coherence 2 · Debt 2 · Authority 0
P02.16Expansionwrite

Exhaust

target: Entity, duration: Duration → Effect

Suspend regeneration of temporary shield and bandwidth for duration; preserve current pools and movement.

Reject
duration exceeds thirty-two ticks.
Counterplay
Retreat until regeneration resumes.
BW 4 · Coherence 2 · Debt 2 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
State & changeSECTION 12 / 32

Memory

Recorded past state and bounded replay. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Memory / contracts 01–08

A record is not a reset button.

Memory separates capturing, reading, replaying and restoring. A snapshot carries identity, generation and expiry; a recall reads without changing reality. Restoration must honor current capacity, navigation and permanent progression boundaries.

The strongest memory play rewards preparation and timing. An opponent can block a bookmarked position or sever a recovery link. Echoes replay eligible committed events once and never create an unlimited chain of echoes.

Boundary Does not rewind global time, restore currency or echo an echo.
P03.01Demoread

Snapshot

target: Entity, fields: List<FieldRef>, ttl: Duration → Memory<Record>

Capture current allowed field values, entity generation and tick into an immutable memory; at most eight fields.

Reject
Fields belong to another entity or include persistent progression.
Counterplay
Move or change state after the snapshot is taken.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P03.02Demopure

Recall

memory: Memory<Record>, field: FieldRef → Scalar

Read a captured scalar from the immutable snapshot without changing the world.

Reject
Memory is expired, suppressed or lacks the field.
Counterplay
Suppress the memory before it is read.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.03Demowrite

Echo

event: Event<Effect>, scale: Scalar → Effect

Replay an eligible committed damage event at original targets with magnitude*scale; mark output replay_depth=1 and recheck current defenses.

Reject
Event is already an echo, target generation changed, or scale exceeds 0.5.
Counterplay
Dodge the new carrier or raise current resistance.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P03.04Demowrite

Restore

target: Entity, memory: Memory<Record>, fraction: Scalar → Effect

For mutable numeric fields set current+fraction*(saved-current), within current caps; position restores only to a navigable unoccupied point.

Reject
Snapshot entity generation differs, field is persistent, or snapshot age exceeds 320 ticks.
Counterplay
Sever restoration links or occupy the saved position.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P03.05Demopure

Consolidate

memories: List<Memory<Record>> → Memory<Record>

Combine disjoint fields or identical overlapping values from same-entity snapshots; use oldest expiry and retain all source IDs.

Reject
Overlapping values disagree.
Counterplay
Create conflicting observations to prevent consolidation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.06Demopure

Reinforce

memory: Memory<Record>, duration: Duration → Memory<Record>

Extend expiry once by duration, capped at capture_tick+640; contents and capture tick do not change.

Reject
Memory has already been reinforced.
Counterplay
Destroy access to the owning memory store.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.07Demowrite

Suppress

memory: Memory<Record>, duration: Duration → Effect

Make one accessible hostile memory unreadable for duration while keeping bytes and expiry intact.

Reject
Memory is a protected codex or save record.
Counterplay
Wait for suppression expiry or use another snapshot.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P03.08Demowrite

Forget

memory: Memory<Record> → Effect

Tombstone one caster-owned transient memory; release its quota and retain a minimal deletion event.

Reject
Memory belongs to permanent progression or another owner.
Counterplay
Copy a permitted transient record before deletion.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Memory / contracts 09–16

P03.09Expansionpure

Compare

before: Memory<Record>, after: Memory<Record> → Record

Return per-field numeric deltas for shared fields, after minus before, with capture ticks.

Reject
Snapshots refer to different entity generations.
Counterplay
Alter a field not included in both snapshots.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.10Expansionpure

Index

memories: List<Memory<Record>>, field: FieldRef → List<Memory<Record>>

Stable-sort records by the captured scalar, then capture tick and memory ID; do not alter records.

Reject
Any record lacks the requested scalar field.
Counterplay
Use equal values to make timing the deciding order.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.11Expansionpure

Cue

memory: Memory<Record>, event: Event<Record> → Boolean

Return true exactly when event.subject and event.kind match the memory's captured cue fields.

Reject
Memory has no cue fields.
Counterplay
Change the behavior that triggers the remembered cue.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.12Expansionsandbox

Rehearse

event: Event<Effect> → Forecast

Evaluate one replay against a copied current combat snapshot; return predicted deltas without emitting effects.

Reject
Event is not replayable or sandbox budget would be exceeded.
Counterplay
Change defenses after the forecast snapshot.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P03.13Expansionpure

Reconcile

left: Memory<Record>, right: Memory<Record>, evidence: Evidence → Memory<Record>

Choose the record whose content digest is directly supported by evidence; retain the other record as dissent metadata.

Reject
Evidence supports neither or both conflicting records.
Counterplay
Challenge the supporting evidence before downstream use.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.14Expansionread

Bookmark

target: Entity, ttl: Duration → Memory<Record>

Capture only navigable position, facing and entity generation into a movement bookmark.

Reject
Target is in an unbookmarkable transition volume.
Counterplay
Block the bookmarked return point.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P03.15Expansionpure

Redact

memory: Memory<Record>, fields: List<FieldRef> → Memory<Record>

Return a copy with selected payload fields removed and explicit redaction markers; keep lineage and capture tick.

Reject
Requested removal includes lineage or ownership metadata.
Counterplay
Require a redacted field and force fresh observation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P03.16Expansionpure

Interleave

left: Pattern, right: Pattern → Pattern

Alternate one event token from each pattern, preserving each internal order; append the remaining suffix.

Reject
Combined sequence exceeds sixteen tokens.
Counterplay
Interrupt between alternating attacks.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
State & changeSECTION 13 / 32

Causality

Explicit cause-response links and interventions. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Causality / contracts 01–08

A relationship can carry a consequence.

Causality adds bounded event-response behavior to explicit links. It distinguishes querying an event’s instigator from tracing its longer path, and a modeled intervention from a live world edit. Every hop costs budget and recursion stays guarded.

Players can defend a mediator, isolate a target or sever an early link instead of absorbing the final cascade. The architecture should reveal cause and response in sequence, so the encounter teaches its own causal rule.

Boundary Does not infer causation from correlation or mutate reality through a sandbox intervention.
P10.01Expansionwrite

Link

cause: Entity, effect: Entity, kind: RelationKind, duration: Duration → Effect

Create one allowlisted cause-to-response edge; every activation costs budget and a visited-edge guard prevents recursive activation.

Reject
Relation kind is not causal or edge creates a prohibited cycle.
Counterplay
Break the physical link or avoid the cause event.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.02Expansionwrite

Unlink

relation: Relationship → Effect

Remove one dispellable causal edge while preserving its event history.

Reject
Edge is a quest dependency or not causal.
Counterplay
Maintain an independent causal path.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.03Expansionsandbox

Intervene

scenario: Scenario, field: FieldRef, value: Scalar → Scenario

Copy scenario and force one field to value, disconnecting its incoming model edges in that copy only.

Reject
Field is absent or value violates its unit bounds.
Counterplay
Change an unmodeled cause in the real encounter.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P10.04Expansionwrite

Propagate

event: Event<Effect>, links: List<Relationship>, attenuation: Scalar → Effect

Forward eligible damage through up to eight causal edges once each, multiplying magnitude by attenuation per hop.

Reject
attenuation is outside 0..0.5 or an edge repeats.
Counterplay
Sever an early edge to stop downstream propagation.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.05Expansionread

Attribute

event: Event<Record> → Entity

Return the immediate recorded instigator of the event; does not infer ultimate blame.

Reject
Event has no visible instigator.
Counterplay
Use an intermediary whose role remains visible in Trace.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P10.06Expansionwrite

Mediate

relation: Relationship, mediator: Entity, duration: Duration → Effect

Replace one owned edge with two edges through mediator, preserving total delay and attenuation product.

Reject
Mediator is incompatible or either new edge exceeds degree limits.
Counterplay
Disable the mediator.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.07Expansionwrite

Isolate

target: Entity, duration: Duration → Effect

Suspend inbound dispellable causal links to target for duration; direct carrier hits still apply.

Reject
Target is a protected restoration anchor during commit.
Counterplay
Use a direct effect rather than a propagated one.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.08Expansionwrite

DelayCause

relation: Relationship, delay: Duration → Effect

Add delay to future activations of one owned causal edge; already queued events keep their timestamps.

Reject
Total edge delay would exceed sixty-four ticks.
Counterplay
Interrupt during the added response window.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Causality / contracts 09–16

P10.09Expansionread

TraceCause

event: Event<Record> → List<Relationship>

Return visible causal edges leading to this event, bounded to eight generations and sorted topologically.

Reject
Recorded graph contains an invalid cycle.
Counterplay
Exploit an explicitly marked missing causal record.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P10.10Expansionsandbox

Necessary

scenario: Scenario, cause: Atom, outcome: Atom → Boolean

Compare baseline with the same-seed scenario having cause disabled; true only when baseline outcome occurs and disabled outcome does not.

Reject
Scenario lacks a declared Boolean cause or outcome.
Counterplay
Introduce an alternative sufficient cause.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P10.11Expansionsandbox

Sufficient

scenario: Scenario, cause: Atom, outcome: Atom → Boolean

Enable only the selected modeled cause in the controlled scenario; true when the outcome occurs within horizon.

Reject
Other causes cannot be controlled by this scenario.
Counterplay
Require an additional independent condition.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P10.12Expansionwrite

Feedback

relation: Relationship, count: Integer, attenuation: Scalar → Effect

Schedule count reactivations of an eligible edge with geometric attenuation and shared original provenance; no new loop graph is created.

Reject
count exceeds four or attenuation exceeds 0.5.
Counterplay
Break the edge before the next recurrence.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.13Expansionwrite

Dampen

relation: Relationship, fraction: Scalar, duration: Duration → Effect

Multiply one edge's current response magnitude by 1-fraction for duration; minimum multiplier zero.

Reject
fraction is outside 0..1.
Counterplay
Use another undampened route.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.14Expansionwrite

ThresholdCause

relation: Relationship, threshold: Scalar, duration: Duration → Effect

Permit future edge activations only when event magnitude meets threshold in matching units.

Reject
Event magnitude unit and threshold differ.
Counterplay
Keep each activation below threshold.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.15Expansionwrite

TransferCause

relation: Relationship, replacement: Entity → Effect

Retarget the cause endpoint of an owned causal edge to a compatible entity; effect endpoint remains fixed.

Reject
Replacement lacks the required event source capability.
Counterplay
Avoid triggering the new cause entity.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P10.16Expansionwrite

BreakCycle

links: List<Relationship> → Effect

Suspend the lowest-priority dispellable edge in each supplied cyclic component, ties by edge ID.

Reject
Cycle includes no dispellable edge or more than sixteen links.
Counterplay
Use an acyclic chain instead of a loop.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
State & changeSECTION 14 / 32

Temporality

Ordering, durations and local schedules. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Temporality / contracts 01–08

Timing changes without erasing history.

Temporality owns ages, intervals, local schedules and duration. A stretched status lasts longer; it does not heal its target. Hasten changes future windups, not every game clock. Stasis leaves damage and cooldown clocks running.

Readable time rings and half-open windows make timing a skill rather than a hidden exception. Enemies can commit an attack before slow lands, interrupt a synchronized group, or pressure a stationary construct.

Boundary Does not pause the global clock or restore saved state.
P13.01Expansionread

Now

clock: ClockRef → Duration

Return the current simulation tick as a duration from encounter start; render time is inaccessible.

Reject
ClockRef is not the simulation clock.
Counterplay
Act between separate observation ticks.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P13.02Expansionpure

Age

event: Event<Record>, now: Duration → Duration

Return max(0,now-event.tick) after rejecting future events; units are ticks.

Reject
event.tick is later than now.
Counterplay
Use recent evidence to avoid an age threshold.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.03Expansionpure

Before

left: Event<Record>, right: Event<Record> → Boolean

Compare event ordering tuples (tick,priority,event_id) lexicographically.

Reject
Events are from different encounter clocks.
Counterplay
Change which event occurs first.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.04Expansionpure

After

left: Event<Record>, right: Event<Record> → Boolean

Return whether left ordering tuple is strictly greater than right's.

Reject
Events use different clocks.
Counterplay
Cause simultaneous events with a known priority ordering.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.05Expansionpure

During

event: Event<Record>, interval: Interval → Boolean

Return start<=event.tick<end using a half-open interval.

Reject
Interval end precedes start.
Counterplay
Act on or after the exclusive end tick.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.06Expansionpure

Overlap

left: Interval, right: Interval → Duration

Return max(0,min(end)-max(start)) in ticks.

Reject
Either interval is inverted.
Counterplay
Separate the windows so they do not overlap.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.07Expansionwrite

Stretch

target: Entity, factor: Scalar, duration: Duration → Effect

Multiply remaining time of one selected dispellable status by factor once, maximum original lifetime times two; magnitudes do not scale.

Reject
factor is outside 1..2 or status already stretched.
Counterplay
Cleanse the status rather than waiting.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.08Expansionwrite

Shorten

target: Entity, fraction: Scalar → Effect

Reduce remaining time of oldest eligible negative status by fraction, rounding up removed ticks.

Reject
fraction is outside 0..0.5 or no status is eligible.
Counterplay
Apply a fresh negative status after shortening.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Temporality / contracts 09–16

P13.09Expansionwrite

Hasten

target: Entity, fraction: Scalar, duration: Duration → Effect

Reduce owned actor's future action windups by fraction with an eight-tick minimum; cooldown and movement remain unchanged.

Reject
fraction exceeds 0.25.
Counterplay
Use range control during the remaining visible windup.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.10Expansionwrite

Slow

target: Entity, fraction: Scalar, duration: Duration → Effect

Increase future interruptible windups by fraction, capped at original times 1.5; active windups remain unchanged.

Reject
fraction exceeds 0.5 or target has temporal immunity.
Counterplay
Commit an attack before slow lands.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.11Expansionwrite

Synchronize

targets: EntitySet, cadence: Duration → Effect

Align owned actors' next periodic pulse to the next shared cadence boundary; preserve remaining pulse counts.

Reject
cadence is zero or actors have incompatible periodic statuses.
Counterplay
Interrupt the group before the shared pulse.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.12Expansionwrite

PhaseShift

target: Entity, offset: Duration → Effect

Shift one owned periodic schedule forward by offset without changing count or granting invulnerability.

Reject
offset exceeds sixteen ticks or would exceed effect expiry.
Counterplay
React to the shifted visible cadence.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.13Expansionwrite

Deadline

target: Entity, interval: Interval → Effect

Attach a visible objective timer that emits one DeadlineMissed event if the tagged objective is unfinished at end.

Reject
Objective is not a local optional encounter objective.
Counterplay
Complete the objective before the displayed deadline.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P13.14Expansionread

CooldownRead

target: Entity, ability: Atom → Duration

Return remaining cooldown ticks of an observed ability; hidden ability IDs are rejected.

Reject
Ability has not been observed.
Counterplay
Use an unrevealed ability.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P13.15Expansionpure

Reorder

events: List<Event<Record>> → List<Event<Record>>

Stable-sort supplied records by original event tuple; does not reschedule committed world events.

Reject
Events span incomparable clocks.
Counterplay
Use actual timing differences rather than list ordering.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P13.16Expansionwrite

Stasis

target: Entity, duration: Duration → Effect

Pause one owned construct's AI and movement for at most sixteen ticks; damage, status expiry and cooldown clocks continue.

Reject
Target is player, boss or not owned.
Counterplay
Damage the stationary construct while its clocks continue.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
ReasoningSECTION 15 / 32

Logic

Explicit predicates and finite inference. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Logic / contracts 01–08

A clever condition can be the spell.

Logic produces explicit Boolean results, bindings and premise-linked claims. It does not hide execution inside a truth operator. Imply computes material implication; Gate decides whether another expression runs. Unknown facts must remain visible as missing input rather than convenient false values.

A logic-focused build trades broad effect coverage for the right response at the right time. Give predicates readable thresholds and let enemies invalidate one premise. The player needs to understand why the graph chose not to cast.

Boundary Does not turn unknown into false or execute consequences through Imply.
P04.01Demopure

Test

value: Scalar, comparator: Comparator, threshold: Scalar → Boolean

Apply the selected eq, ne, lt, le, gt or ge comparator to same-unit exact fixed-point values.

Reject
Units differ or either value is unknown.
Counterplay
Cross the predicate threshold before effects commit.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.02Demopure

Negate

value: Boolean → Boolean

Return logical NOT of value; unknown values must first be handled by Option logic.

Reject
Input is not a resolved Boolean.
Counterplay
Make the original predicate true to disable its negation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.03Demopure

Conjoin

values: List<Boolean> → Boolean

Return true if every value is true; empty list returns true.

Reject
List exceeds sixteen entries.
Counterplay
Invalidate any one required predicate.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.04Demopure

Disjoin

values: List<Boolean> → Boolean

Return true if at least one value is true; empty list returns false.

Reject
List exceeds sixteen entries.
Counterplay
Invalidate every alternative predicate.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.05Demopure

Imply

antecedent: Boolean, consequent: Boolean → Boolean

Return NOT antecedent OR consequent; this computes implication and does not execute a branch.

Reject
Inputs contain unknown values.
Counterplay
Make the antecedent true while its consequence is false.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.06Demopure

Unify

left: Record, right: Record → Option<Record>

Merge identical or disjoint bindings; conflicting values produce None rather than coerced equality.

Reject
Either record has untyped keys.
Counterplay
Use a conflicting binding to break a match.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.07Demopure

Resolve

left: Clause, right: Clause, atom: Atom → Clause

Remove complementary atom literals and union remaining literals in canonical order for one resolution step.

Reject
Clauses do not contain the selected complementary literals.
Counterplay
Remove one premise from the enemy's evidence set.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.08Demopure

Infer

facts: List<Claim<Boolean>>, rule: Rule → Claim<Boolean>

Apply one named rule when all antecedent claims are present and supported; output cites premises and inherits minimum confidence.

Reject
Premise is absent, disputed or rule is not admitted to the spell.
Counterplay
Break a premise instead of attacking the conclusion.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Logic / contracts 09–16

P04.09Expansionpure

Exclusive

values: List<Boolean> → Boolean

Return true when exactly one list value is true.

Reject
List exceeds sixteen entries.
Counterplay
Make zero or two alternatives true.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.10Expansionpure

Equivalent

left: Boolean, right: Boolean → Boolean

Return true when both Boolean inputs are identical.

Reject
Inputs are unresolved.
Counterplay
Change only one side of the equivalence.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.11Expansionpure

AtLeast

values: List<Boolean>, count: Integer → Boolean

Return true when the number of true entries is at least count; count may be zero.

Reject
count is negative or greater than list length.
Counterplay
Keep valid targets below the visible count.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.12Expansionpure

All

values: List<Scalar>, predicate: Predicate → Boolean

Apply the pure typed predicate to every value; use universal empty-set truth.

Reject
Predicate has effects or incompatible unit.
Counterplay
Supply one counterexample.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.13Expansionpure

Any

values: List<Scalar>, predicate: Predicate → Boolean

Apply the pure typed predicate until a true result exists; empty set returns false.

Reject
Predicate has effects or incompatible unit.
Counterplay
Remove every eligible witness.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.14Expansionpure

Contradicts

left: Claim<Boolean>, right: Claim<Boolean> → Boolean

Return true only for same proposition key, subject and time interval with opposite asserted truth.

Reject
Claim contexts are incomparable.
Counterplay
Separate claims by context or time.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.15Expansionpure

Explain

claim: Claim<Boolean> → List<Digest>

Return the bounded topological premise digest chain supporting this claim; no confidence is added.

Reject
Lineage is cyclic or exceeds thirty-two links.
Counterplay
Expose a missing premise to interrupt explanation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P04.16Expansionsandbox

Satisfy

variables: List<Atom>, constraints: List<Clause> → Option<Record>

Enumerate Boolean assignments in ascending bit order and return the first satisfying binding; at most eight variables.

Reject
Variables exceed eight or clause set exceeds sixteen.
Counterplay
Add an incompatible clause so the result is None.
BW 8 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
ReasoningSECTION 16 / 32

Ontology

Entity types, schemas and relationships. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Ontology / contracts 01–08

Classification changes what can interact.

Ontology owns encounter types, admissible relationships and carefully bounded transformation. A membership query does not retype an enemy. A local subtype does not rewrite the world’s permanent taxonomy. These boundaries keep type manipulation powerful without becoming unrestricted reality editing.

A precise classification can turn a modest effect into a good answer for one enemy family. Broader classifications should lose specificity. Make temporary tags and relation proxies visible so opponents can escape, cleanse or attack them.

Boundary Does not fabricate evidence, change identity through a query or write global type definitions.
P05.01Demoread

Type

target: Entity, type: TypeRef → Boolean

Query membership in the current encounter type hierarchy; no assignment is performed.

Reject
TypeRef is unknown.
Counterplay
Shed a temporary type before the query.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P05.02Demowrite

Instantiate

schema: TypeRef, position: Vector3, duration: Duration → Effect

Spawn one owned construct from an admitted schema with fixed initial stats; charge its complete summon budget.

Reject
Schema is not spawnable or position is blocked.
Counterplay
Interrupt creation or destroy the construct.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.03Demowrite

Relate

from: Entity, to: Entity, kind: RelationKind, duration: Duration → Effect

Create one directed typed encounter edge with explicit expiry; duplicate same-owner edges refresh to the later allowed expiry.

Reject
Relation violates endpoint types or maximum degree eight.
Counterplay
Move beyond tether reach to break a spatial edge.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.04Demowrite

Reify

relation: Relationship, duration: Duration → Effect

Create a targetable proxy for one dispellable relation; destroying proxy cancels that relation; proxy grants no loot.

Reject
Relation already has a proxy or is a quest dependency.
Counterplay
Defend the proxy or replace the relation.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.05Demopure

Generalize

type: TypeRef → TypeRef

Return the immediate declared parent type; if multiple parents exist use explicitly designated primary parent.

Reject
Type is the root or has no designated primary parent.
Counterplay
Exploit reduced specificity in the broader category.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.06Demopure

Specialize

type: TypeRef, predicate: Predicate → TypeRef

Construct an encounter-local subtype equal to parent membership AND the pure predicate; no global taxonomy edits.

Reject
Predicate reads hidden state or subtype budget exceeds sixteen.
Counterplay
Change the property used by the subtype predicate.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.07Demowrite

Inherit

type: TypeRef, modifier: Modifier, duration: Duration → Effect

Attach a capped modifier rule to currently present descendants; refresh descendants only at cast time, not on future spawn.

Reject
Modifier attempts recursive inheritance or targets a root-wide class.
Counterplay
Leave the selected subtype before a later cast.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.08Demowrite

Constrain

target: Entity, constraint: Constraint, duration: Duration → Effect

Add one encounter-local prohibition from the movement, transform or heal allowlist; strongest restriction wins without extending duration.

Reject
Constraint would block all player input or a required quest action.
Counterplay
Cleanse the constraint or use an unconstrained action.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Ontology / contracts 09–16

P05.09Expansionpure

Distinguish

left: TypeRef, right: TypeRef → List<FieldKey>

Return sorted schema fields whose declared type or requiredness differs.

Reject
Either schema is unavailable.
Counterplay
Use entities sharing the same declared schema.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.10Expansionpure

Compose

left: TypeRef, right: TypeRef → TypeRef

Build a local intersection type requiring membership in both; fields merge only when identically typed.

Reject
Fields conflict or intersection introduces forbidden inheritance cycle.
Counterplay
Lose one required membership.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.11Expansionpure

Decompose

type: TypeRef → List<TypeRef>

Return the immediate constituent types of an intersection or composition, without flattening descendants.

Reject
Type has no composition record.
Counterplay
Use a simple type with no composite weakness.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.12Expansionwrite

Retype

target: Entity, from: TypeRef, to: TypeRef, duration: Duration → Effect

Replace one mutable encounter tag from with to if the target schema permits both; physical stats stay unchanged.

Reject
from is absent or either tag is immutable identity.
Counterplay
Use immutable taxonomy or cleanse the temporary tag.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.13Expansionwrite

Substitute

relation: Relationship, endpoint: Entity, replacement: Entity → Effect

Replace exactly one endpoint of an owned relation after endpoint-type and reach validation.

Reject
Endpoint is absent, relation is protected or replacement is incompatible.
Counterplay
Move the replacement out of reach.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P05.14Expansionpure

Exclude

type: TypeRef, excluded: TypeRef → TypeRef

Return a local set-difference type matching type AND NOT excluded.

Reject
Types belong to different registries.
Counterplay
Adopt the excluded temporary classification.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P05.15Expansionread

Enumerate

type: TypeRef, candidates: EntitySet → EntitySet

Return present candidates matching type in ascending ID order; never discovers unseen entities.

Reject
Candidates contain entities inaccessible to the caster.
Counterplay
Hide outside the observed candidate set.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P05.16Expansionpure

Normalize

type: TypeRef → TypeRef

Resolve registry aliases to the canonical type ID without changing membership.

Reject
Alias graph is cyclic or unresolved.
Counterplay
Use an actual subtype difference rather than an alias.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
ReasoningSECTION 17 / 32

Probability

Explicit distributions and seeded sampling. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Probability / contracts 01–08

Uncertainty is something the player can shape.

Weights, distributions and explicit seeds let the player choose how much variability to tolerate. Sampling a distribution and changing its outcomes are different operations. A shared roll can create correlation, but never becomes knowledge that the underlying claim is true.

The interface should expose possible outcomes and bounds before a commitment. A low-variance build and a reroll-focused build can feel different without requiring opaque luck. Replays preserve exact keyed draws so observed behavior can be explained.

Boundary Does not predict truth or search unbounded alternatives.
P06.01Demopure

Seed

value: Integer, stream: Integer → Seed

Create an explicit deterministic random stream from unsigned value and stream index; consumes no draws.

Reject
Either integer is outside unsigned 32-bit range.
Counterplay
Learn the repeated pattern of a reused seed.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.02Demopure

Sample

distribution: Distribution<Scalar>, seed: Seed → Scalar

Draw once from the normalized discrete distribution using the cast/node/draw keyed seed helper.

Reject
Weights are negative or total weight is zero.
Counterplay
Reduce the weight of a dangerous outcome upstream.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.03Demopure

Weight

distribution: Distribution<Scalar>, index: Integer, factor: Scalar → Distribution<Scalar>

Multiply one nonnegative weight by factor and renormalize all weights; values remain unchanged.

Reject
factor is negative, index absent or total weight becomes zero.
Counterplay
Remove the favored outcome before weighting.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.04Demopure

Shuffle

values: List<Scalar>, seed: Seed → List<Scalar>

Apply seeded Fisher-Yates to a copy; preserve the exact multiset and units.

Reject
List exceeds sixteen entries.
Counterplay
Use equivalent values so order provides no advantage.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.05Demopure

Perturb

value: Scalar, amplitude: Scalar, seed: Seed → Scalar

Add a uniform quantized offset in inclusive range [-amplitude,+amplitude] using the keyed seed.

Reject
Units differ or amplitude is negative.
Counterplay
Use margins larger than the maximum perturbation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.06Demopure

Correlate

distribution: Distribution<Scalar>, seed: Seed, group: Integer → RollRef

Create a shared percentile roll token identified by cast and group; every consumer in that group uses the same percentile.

Reject
Group is outside 0..7.
Counterplay
Avoid stacking defenses against only one correlated outcome.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.07Demopure

Resample

distribution: Distribution<Scalar>, previous: RollRef, seed: Seed → Scalar

Draw one fresh keyed value with draw_index+1; previous result is discarded and reroll count increments.

Reject
Reroll count already equals two.
Counterplay
Force the caster to spend both rerolls before a critical window.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.08Demopure

Collapse

roll: RollRef → Scalar

Return the sampled value already bound to the roll; never draws again or chooses a preferred result.

Reject
Roll is unbound.
Counterplay
React to the now-visible committed result.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Probability / contracts 09–16

P06.09Expansionpure

Condition

distribution: Distribution<Scalar>, mask: List<Boolean> → Distribution<Scalar>

Set weights at false mask entries to zero and normalize retained mass.

Reject
Mask length differs or retained mass is zero.
Counterplay
Eliminate the condition's eligible outcomes.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.10Expansionpure

Expectation

distribution: Distribution<Scalar> → Scalar

Return sum(value*normalized_weight) with ties-to-even fixed-point rounding.

Reject
Outcomes have mixed units.
Counterplay
Use a high-variance distribution whose mean is uninformative.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.11Expansionpure

Variance

distribution: Distribution<Scalar> → Scalar

Return sum(weight*(value-mean)^2) with squared input units.

Reject
Input scalar unit cannot be squared.
Counterplay
Choose a constant outcome distribution.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.12Expansionpure

Quantile

distribution: Distribution<Scalar>, q: Scalar → Scalar

Sort outcomes ascending and return first whose cumulative mass is at least q; q=0 returns minimum.

Reject
q is outside 0..1.
Counterplay
Shift mass across the visible quantile boundary.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.13Expansionpure

Truncate

distribution: Distribution<Scalar>, low: Scalar, high: Scalar → Distribution<Scalar>

Drop outcomes outside inclusive bounds and renormalize retained probability.

Reject
low exceeds high or no mass remains.
Counterplay
Force useful outcomes outside the retained interval.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.14Expansionpure

Mixture

left: Distribution<Scalar>, right: Distribution<Scalar>, alpha: Scalar → Distribution<Scalar>

Combine identical outcomes by alpha*left_mass+(1-alpha)*right_mass; retain at most sixteen outcomes.

Reject
alpha is outside 0..1 or units differ.
Counterplay
Introduce a costly outcome into the heavier component.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.15Expansionpure

Stratify

distribution: Distribution<Scalar>, count: Integer, seed: Seed → List<Scalar>

Divide percentile space into count equal bins and take one seeded percentile per bin; return inverse-CDF values.

Reject
count is outside 1..8.
Counterplay
Exploit predictable coverage rather than expecting independent rolls.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P06.16Expansionpure

Likelihood

distribution: Distribution<Scalar>, observation: Scalar → Scalar

Return the normalized probability mass of the exact observed discrete value, zero when absent.

Reject
Observed unit differs.
Counterplay
Produce an observation the model assigns negligible mass.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
ReasoningSECTION 18 / 32

Counterfactual

Explicit hypothetical scenarios and comparison. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Counterfactual / contracts 01–08

Alternatives help decide; they do not rewrite the past.

Counterfactual branches are copied scenarios with explicit assumptions, missing fields and finite horizons. A forecast is hypothetical. Contrast, regret and sensitivity mean something only when the compared baselines and metrics match.

The player can rehearse a plan, identify a robust choice and precommit conditionally. Live checks still happen at execution. An opponent can change an assumption and invalidate the forecast without the game pretending the simulation had perfect knowledge.

Boundary Does not modify past history, assert forecasts as fact or carry unknown state into simulation.
P16.01Expansionsandbox

BranchHistory

memory: Memory<Record> → Scenario

Create an isolated scenario from captured allowed fields, with explicit missing-field list and no world-write capability.

Reject
Memory is expired or lacks minimum combat fields.
Counterplay
Exploit missing variables that the branch cannot model.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.02Expansionsandbox

AssumeAlternative

scenario: Scenario, field: FieldRef, value: Scalar → Scenario

Copy scenario and replace one input assumption while retaining a diff from baseline.

Reject
Field is not an exposed scenario input.
Counterplay
Change another input in the real encounter.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.03Expansionsandbox

Simulate

scenario: Scenario, plan: PlanRef → Forecast

Execute admitted plan in copied scenario for at most sixty-four ticks using its explicit seed; return deltas and model coverage.

Reject
Model lacks required action semantics.
Counterplay
Introduce an action outside model coverage.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.04Expansionpure

Contrast

baseline: Forecast, alternative: Forecast → Record

Return alternative minus baseline numeric outcomes for equal initial scenario hash and horizon.

Reject
Baselines, horizon or units differ.
Counterplay
Change the real initial conditions after comparison.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.05Expansionpure

Regret

chosen: Forecast, alternative: Forecast, metric: FieldKey → Scalar

Return max(0,alternative.metric-chosen.metric) for a declared higher-is-better metric.

Reject
Metric is absent or not comparable.
Counterplay
Trade off a different metric the regret score ignores.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.06Expansionpure

Robustness

forecasts: List<Forecast>, threshold: Scalar, metric: FieldKey → Scalar

Return fraction of modeled forecasts whose metric meets threshold; this is scenario coverage, not real-world probability.

Reject
Forecast set is empty or metric units differ.
Counterplay
Exploit a scenario absent from the sample set.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.07Expansionsandbox

NearestAlternative

scenarios: List<Scenario>, predicate: Predicate → Scenario

Choose satisfying scenario with fewest changed input fields, ties by scenario ID; examine at most eight candidates.

Reject
No supplied scenario satisfies predicate.
Counterplay
Require changes to more than the allowed input set.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.08Expansionsandbox

UndoPreview

event: Event<Effect>, scenario: Scenario → Forecast

Evaluate the scenario with one reversible event delta omitted; return predicted difference without undoing the world.

Reject
Event is persistent, unknown or has unmodeled descendants.
Counterplay
Create irreversible or unmodeled follow-up effects.
BW 8 · Coherence 0 · Debt 0 · Authority 0

Counterfactual / contracts 09–16

P16.09Expansionpure

Opportunity

forecast: Forecast, goal: GoalRef → Scalar

Return the goal's declared utility function over forecast fields; retain model coverage metadata.

Reject
Utility needs an absent field.
Counterplay
Make a neglected cost decisive.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.10Expansionsandbox

BranchMerge

left: Scenario, right: Scenario → Scenario

Combine disjoint input edits from the same baseline; identical overlapping edits are retained once.

Reject
Overlapping edits disagree or baselines differ.
Counterplay
Create conflicting assumptions between branches.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.11Expansionpure

Prune

scenarios: List<Scenario>, predicate: Predicate → List<Scenario>

Retain scenarios satisfying a pure predicate; preserve original IDs and order.

Reject
Predicate reads live world state.
Counterplay
Expose the cost of pruning a relevant scenario.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.12Expansionpure

Sensitivity

baseline: Forecast, perturbed: Forecast, input_delta: Scalar, metric: FieldKey → Scalar

Return (perturbed.metric-baseline.metric)/input_delta with derived units and explicit local-only interpretation.

Reject
input_delta is zero or more than one input differs.
Counterplay
Operate beyond the small perturbation's valid range.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P16.13Expansionsandbox

Counterexample

scenarios: List<Scenario>, claim: Claim<Boolean> → Scenario

Return first scenario in ID order violating the claim's evaluable predicate; model result is hypothetical evidence only.

Reject
No counterexample exists in supplied candidates.
Counterplay
Narrow or revise the claim.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.14Expansionwrite

Precommit

target: Entity, scenario: Scenario, duration: Duration → Effect

Reserve one owned plan choice keyed to the scenario's assumption digest; execute only after ordinary live precondition checks.

Reject
Scenario lacks a plan choice or reservation slot is occupied.
Counterplay
Invalidate the stored assumptions before action.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P16.15Expansionsandbox

EscapePlan

scenario: Scenario, safe: Predicate → PlanRef

Find a bounded path through modeled navigation to a state satisfying safe, at most thirty-two expanded cells.

Reject
No path exists within model and budget.
Counterplay
Block the proposed escape route in live play.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P16.16Expansionsandbox

Rebase

scenario: Scenario, current: Memory<Record> → Scenario

Apply scenario's explicit input edits to a newer compatible snapshot; mark forecast caches invalid.

Reject
Entity generation changed or edited fields disappeared.
Counterplay
Change the entity identity to invalidate stale alternatives.
BW 8 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Actors & trustSECTION 19 / 32

Persona

Perceived identity and archetype traits. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Persona / contracts 01–08

Identity has appearance, behavior and limits.

Persona works with masks, temporary archetypes, traits and owned aspects. A perceived faction never changes actual damage permissions. Copying an observed attack does not grant every behavior of its origin. Archetypes keep weaknesses as well as bonuses.

A familiar can wear a role or project a convincing decoy, while a witness-focused opponent reveals the mismatch. The player keeps control of their own actions; these mechanics affect NPC interpretation and bounded owned actors.

Boundary Does not rewrite actual faction permissions or control player decisions.
P07.01Demowrite

Mask

target: Entity, persona: PersonaRef, duration: Duration → Effect

Replace perceived faction and silhouette tags for observers without reveal capability; actual faction and damage permissions remain unchanged.

Reject
Persona lacks mask fields or target is reveal-locked.
Counterplay
Use Persona.Reveal or direct behavioral evidence.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.02Demowrite

Assume

target: Entity, persona: PersonaRef, duration: Duration → Effect

Equip one temporary archetype profile on an owned actor; replace the prior Assume slot and recompute capped bonuses.

Reject
Target is not owned or persona exceeds mastery.
Counterplay
Exploit the archetype's declared weakness.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.03Demowrite

Imprint

target: Entity, trait: Trait, duration: Duration → Effect

Add one allowed behavior trait to a non-player actor; merge identical traits by maximum strength, not addition.

Reject
Trait conflicts with a protected boss phase.
Counterplay
Cleanse the trait or satisfy its terminating condition.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.04Demowrite

Invoke

persona: PersonaRef, position: Vector3, duration: Duration → Effect

Spawn one temporary aspect with its authored ability allowlist; it shares the caster's summon cap and grants no loot.

Reject
Aspect schema is absent or summon cap is full.
Counterplay
Destroy the aspect or its control tether.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.05Demowrite

Project

target: Entity, persona: PersonaRef, radius: Scalar, duration: Duration → Effect

Apply a capped threat preference to observed NPCs inside radius at each eight-tick pulse; no faction conversion.

Reject
Radius exceeds eight meters or target persona has no influence tag.
Counterplay
Leave the visible influence radius.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.06Demowrite

Fragment

target: Entity, count: Integer, duration: Duration → Effect

Split an owned aspect into count weaker aspects sharing original total health and action budget.

Reject
Target is not an aspect or count is outside 2..4.
Counterplay
Defeat exposed fragments individually.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.07Demopure

Integrate

left: PersonaRef, right: PersonaRef → PersonaRef

Create a hybrid using disjoint traits; for shared traits choose the lower strength and retain both weaknesses.

Reject
Exclusive traits conflict.
Counterplay
Exploit either inherited weakness.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P07.08Demoread

Reveal

target: Entity → Record

Return actual encounter identity tags and mark active masks as detected for this caster; does not alter immutable identity.

Reject
Target lacks line of sight or is outside observation range.
Counterplay
Break sight before reveal completes.
BW 2 · Coherence 0 · Debt 0 · Authority 0

Persona / contracts 09–16

P07.09Expansionwrite

Vow

target: Entity, rule: Rule, duration: Duration → Effect

Attach an owned conditional bonus active only while the named action restriction holds; first violation cancels it.

Reject
Rule is not a registered vow template.
Counterplay
Bait the actor into the forbidden action.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.10Expansionwrite

Betray

target: Entity, evidence: Evidence → Effect

Cancel one active vow whose violation event digest is directly witnessed; no invented violation is accepted.

Reject
Evidence does not reference a matching post-vow event.
Counterplay
Keep the vow or conceal its actual violation.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.11Expansionwrite

Mimic

target: Entity, event: Event<Effect>, duration: Duration → Effect

Grant an owned aspect one observed, copyable attack template at half power for one use; retain original provenance.

Reject
Event is a boss phase action, summon or replay.
Counterplay
Use an uncopiable movement or a weak decoy attack.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.12Expansionread

Recognize

target: Entity, persona: PersonaRef → Boolean

Compare observed behavioral trait IDs with the persona's required signature; masks alone do not satisfy it.

Reject
Required behavior has not been observed.
Counterplay
Change behavior before completing the signature.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P07.13Expansionwrite

Resist

target: Entity, strength: Scalar, duration: Duration → Effect

Raise resistance to persona influence by strength, capped at 0.75; does not resist damage or ontology tags.

Reject
strength is outside 0..0.75.
Counterplay
Use direct damage or non-persona control.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.14Expansionsandbox

RehearseRole

persona: PersonaRef, scenario: Scenario → Forecast

Simulate the persona policy for sixteen ticks in the provided copied scenario; return chosen actions and outcomes.

Reject
Scenario lacks required observable policy fields.
Counterplay
Change encounter conditions after rehearsal.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P07.15Expansionwrite

Transfer

from: Entity, to: Entity, trait: Trait, duration: Duration → Effect

Move one removable trait between two owned aspects atomically; source loses exactly what destination receives.

Reject
Source lacks trait or destination has an exclusive conflict.
Counterplay
Break reach between aspects before transfer.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P07.16Expansionwrite

AnchorIdentity

target: Entity, duration: Duration → Effect

Prevent replacement of one actor's Assume and Mask slots for duration; existing slots persist.

Reject
Target is not owned or anchor already active.
Counterplay
Wait for anchor expiry instead of attempting overwrite.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Actors & trustSECTION 20 / 32

Provenance

Evidence lineage, support and contested claims. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Provenance / contracts 01–08

A claim needs a route back to its support.

Witnessing, citing, tracing, checking and attesting are separate operations. Ten copies of one record are not ten independent witnesses. An attestation authenticates origin, not truth. A supported claim may still become disputed when relevant counterevidence appears.

Restoration becomes a meaningful culmination of combat and observation. Canonize requires a supported claim, independent sources, no unresolved dispute and explicit Authority. Rejected commits spend no Authority, and required evidence remains recoverable.

Boundary Does not equate confidence with certainty or turn simulated evidence into witnessed fact.
P08.01Demoread

Witness

event: Event<Record> → Evidence

Create evidence containing visible event digest, source entity, observation tick and observer ID; unseen fields remain absent.

Reject
Event was not observable by the caster.
Counterplay
Break line of sight or obscure the event.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P08.02Demopure

Cite

claim: Claim<Boolean>, evidence: Evidence → Claim<Boolean>

Attach evidence ID to claim without changing its asserted truth; confidence is computed from support rules, never raw citation count.

Reject
Evidence scope does not match claim subject and interval.
Counterplay
Challenge the cited evidence's relevance.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.03Demoread

Trace

event: Event<Record> → List<Digest>

Return at most thirty-two origin links from visible event lineage, oldest first; mark an inaccessible segment explicitly.

Reject
Accessible lineage has a cycle.
Counterplay
Sever access to a source while retaining the visible gap.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P08.04Demopure

Verify

claim: Claim<Boolean>, evidence: Evidence → Claim<Boolean>

Set disposition supported or disputed by exact proposition comparison with applicable evidence; missing proposition gives unresolved.

Reject
Evidence is revoked or outside validity interval.
Counterplay
Present a conflicting, independently witnessed event.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.05Demopure

Falsify

claim: Claim<Boolean>, evidence: Evidence → Boolean

Return true only when evidence contains a matching subject/time counterexample to the claim predicate.

Reject
Evidence is not independently checkable.
Counterplay
Narrow the claim to exclude the counterexample honestly.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.06Demopure

Triangulate

evidence: List<Evidence> → Evidence

Deduplicate by ultimate source ID and combine support as 1-product(1-confidence) across independent groups; cap at 0.95.

Reject
Evidence concerns different propositions or no independent sources remain.
Counterplay
Reveal that apparent witnesses share one origin.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.07Demopure

Attest

evidence: Evidence, key: KeyRef → Evidence

Add a game-issued attestation binding evidence digest to an authorized in-game witness key; truth is unchanged.

Reject
Key cannot attest for the stated witness.
Counterplay
Revoke the witness key or supply contradictory evidence.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.08Demowrite

Canonize

claim: Claim<Boolean>, target: Entity → Effect

Commit one restoration milestone when claim is supported, confidence>=0.9, two independent sources exist and no unresolved dispute remains; spend one Archive Authority.

Reject
Target is not a restoration anchor or milestone already committed.
Counterplay
Expose a dispute before the explicit commit action.
BW 4 · Coherence 2 · Debt 0 · Authority 1

Provenance / contracts 09–16

P08.09Expansionpure

Challenge

claim: Claim<Boolean>, evidence: Evidence → Claim<Boolean>

Append a relevant dissent record and mark disputed when it contradicts supported evidence.

Reject
Evidence concerns another subject or time.
Counterplay
Answer the challenge with independent observations.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.10Expansionwrite

Revoke

evidence: Evidence, reason: Atom → Effect

Invalidate a caster-issued encounter attestation from the current tick onward, preserving historical use records.

Reject
Caster did not issue the attestation or evidence is a permanent source record.
Counterplay
Use another still-valid attestation.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P08.11Expansionpure

Corroborate

left: Evidence, right: Evidence → Boolean

Return true when propositions agree and ultimate sources differ; duplicate copies never corroborate.

Reject
Either evidence lacks an ultimate source ID.
Counterplay
Expose common-source dependence.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.12Expansionread

Audit

claim: Claim<Boolean> → Record

Return counts and IDs of missing, expired, revoked and dependent supports without changing the claim.

Reject
Claim lineage is inaccessible.
Counterplay
Repair the reported gap before another audit.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P08.13Expansionpure

Timestamp

evidence: Evidence → Evidence

Attach current simulation tick as receipt time while preserving original observation time.

Reject
Evidence already has a conflicting receipt stamp.
Counterplay
Use an old observation that remains visibly old despite new receipt.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.14Expansionpure

Chain

parent: Evidence, child: Evidence → Evidence

Add an explicit derived-from link when child names parent digest; resulting confidence cannot exceed parent's.

Reject
Link would form a cycle or parent digest mismatches.
Counterplay
Invalidate the parent to undermine dependent support.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P08.15Expansionwrite

Quarantine

claim: Claim<Boolean>, duration: Duration → Effect

Prevent this caster's graphs from using one disputed claim as a premise for duration; do not erase it.

Reject
Claim is not disputed or not in the caster's encounter ledger.
Counterplay
Resolve the dispute or select another premise.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P08.16Expansionpure

Certify

graph: GraphRef, evidence: List<Evidence> → Certificate

Bind graph content hash and required premise digests into a certificate with earliest evidence expiry; grants no new permissions.

Reject
Any declared required premise is unsupported.
Counterplay
Change the graph or allow evidence to expire.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Actors & trustSECTION 21 / 32

Attention

Salience and allocation of perception. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Attention / contracts 01–08

What an actor notices is not what it must do.

Attention governs salience, focus, retained observations and allocation. A stimulus may influence an NPC without forcing its next action. An old last-seen position stays visibly stale. Observation owns field visibility; Agency owns an owned actor’s goals.

Decoys, divided attention and narrow perception create spatial tactics. Counterplay should be concrete: inspect the decoy, flank the cone, break sight or create stronger legitimate evidence of danger.

Boundary Does not reveal hidden fields or guarantee an actor will obey a stimulus.
P11.01Expansionwrite

Focus

target: Entity, subject: Entity, strength: Scalar, duration: Duration → Effect

Add strength to one NPC's salience score for subject without forcing an action.

Reject
Target is player-controlled or strength exceeds sixteen.
Counterplay
Break sight or create a higher-salience threat.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.02Expansionwrite

Distract

target: Entity, position: Vector3, duration: Duration → Effect

Create one decoy stimulus with fixed salience eight at position; it is disproven on close inspection.

Reject
Position is outside perception range.
Counterplay
Inspect the decoy or retain a stronger threat.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.03Expansionpure

Prioritize

subjects: EntitySet, scores: List<Scalar> → EntitySet

Order subjects by descending supplied score then entity ID; preserve membership.

Reject
Score count differs from subject count.
Counterplay
Change the highest-ranked subject's situation.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P11.04Expansionwrite

SuppressSalience

target: Entity, subject: Entity, fraction: Scalar, duration: Duration → Effect

Multiply the subject's perceived salience by 1-fraction, minimum one for a directly damaging threat.

Reject
fraction is outside 0..0.75.
Counterplay
Deal direct damage to retain the salience floor.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.05Expansionpure

Divide

budget: Scalar, subjects: EntitySet → Record

Allocate budget equally by subject, assigning fixed-point remainder by ID; total allocation equals budget.

Reject
Budget is negative or subject set empty.
Counterplay
Increase the number of competing subjects.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P11.06Expansionwrite

Sustain

target: Entity, subject: Entity, duration: Duration → Effect

Prevent passive decay of one existing salience record for duration; new evidence can still override it.

Reject
No salience record exists.
Counterplay
Create stronger evidence for another target.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.07Expansionwrite

Switch

target: Entity, from: Entity, to: Entity, duration: Duration → Effect

Transfer half of an NPC's current salience from one observed subject to another; total salience conserved.

Reject
Either subject is unobserved or from has no salience.
Counterplay
Hide the proposed replacement subject.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.08Expansionwrite

Tunnel

target: Entity, cone: Scalar, duration: Duration → Effect

Narrow NPC peripheral perception to cone degrees while raising forward detection range by twenty-five percent.

Reject
cone is outside 45..180 degrees or target is player-controlled.
Counterplay
Flank outside the narrowed cone.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Attention / contracts 09–16

P11.09Expansionread

Scan

target: Entity, radius: Scalar → EntitySet

Return already detectable stimuli in radius with salience above zero, sorted by distance then ID.

Reject
Radius exceeds sixteen meters.
Counterplay
Use occlusion or suppress stimulus salience.
BW 2 · Coherence 0 · Debt 0 · Authority 0
P11.10Expansionwrite

Orient

target: Entity, subject: Entity → Effect

Request an NPC facing change toward an observed subject at its existing turn-rate limit; movement policy remains unchanged.

Reject
Target cannot rotate or subject is unobserved.
Counterplay
Move faster than the turn rate.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.11Expansionwrite

Reserve

target: Entity, amount: Scalar, duration: Duration → Effect

Reserve amount of an owned construct's attention budget for defensive reactions; offensive allocation is reduced equally.

Reject
Reservation exceeds half of total attention capacity.
Counterplay
Pressure it with multiple simultaneous defensive demands.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.12Expansionwrite

ReleaseFocus

target: Entity, subject: Entity → Effect

Remove caster-owned focus modifiers on this salience pair, leaving naturally earned threat untouched.

Reject
No matching owned modifier exists.
Counterplay
Rely on genuine threat rather than induced focus.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.13Expansionwrite

Habituate

target: Entity, stimulus: Atom, duration: Duration → Effect

Reduce salience of repeated identical stimulus IDs by half after the third occurrence within duration, floor one.

Reject
Stimulus is a protected emergency warning.
Counterplay
Vary the stimulus identity or timing.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.14Expansionwrite

Startle

target: Entity, strength: Scalar → Effect

Inject one immediate stimulus impulse and interrupt only interruptible low-priority windups; grants target thirty-two tick startle immunity.

Reject
Target is immune, uninterruptible or already recovering.
Counterplay
Use a protected attack or bait the immunity window.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.15Expansionwrite

Track

target: Entity, subject: Entity, duration: Duration → Effect

Retain last-seen position for duration with an explicit stale marker; does not reveal movement behind occlusion.

Reject
Subject has never been observed.
Counterplay
Change direction after breaking sight.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P11.16Expansionwrite

ShareFocus

from: Entity, allies: EntitySet, duration: Duration → Effect

Copy an owned actor's highest observed stimulus as a low-strength suggestion to allies, preserving observation age.

Reject
Recipients are hostile or exceed eight.
Counterplay
Break sight after the shared observation.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Actors & trustSECTION 22 / 32

Agency

Bounded goals, plans and owned actors. Sixteen distinct contracts and their interaction boundaries.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Agency / contracts 01–08

A plan is conditional, not a promise.

Agency separates goals, plans, evaluation and commitment. An owned construct has a bounded action allowance, an authored ability schema and safe fallback behaviors. Planning can fail honestly when no valid route exists inside its search budget.

A familiar can defend, pursue or hold without gaining unlimited autonomy. The interesting choice is which goal to reserve resources for, and when new evidence should make the player abandon that plan.

Boundary Does not grant abilities outside an actor schema or override player input.
P14.01Expansionwrite

Intent

target: Entity, goal: GoalRef, duration: Duration → Effect

Set one owned construct's desired goal without choosing its next action; policy still applies constraints.

Reject
Target is not owned or goal is unavailable.
Counterplay
Make the goal temporarily unreachable.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.02Expansionsandbox

Plan

scenario: Scenario, goal: GoalRef → PlanRef

Run bounded breadth-first planning over at most thirty-two states and depth four using admitted actions; return first shortest plan.

Reject
No plan exists within budget.
Counterplay
Change a precondition after planning.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P14.03Expansionwrite

Commit

target: Entity, plan: PlanRef, duration: Duration → Effect

Assign an owned actor a plan and reserve its declared action budget; recheck each step before execution.

Reject
Plan is stale or actor lacks required actions.
Counterplay
Invalidate a step precondition.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.04Expansionwrite

Reconsider

target: Entity, evidence: Evidence → Effect

Cancel the current owned plan at its next safe action boundary when evidence disproves a precondition.

Reject
Evidence does not affect the active plan.
Counterplay
Keep the plan valid or exploit its current uninterruptible step.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.05Expansionwrite

Delegate

target: Entity, goal: GoalRef, budget: Scalar, duration: Duration → Effect

Assign a goal and fixed shared action allowance to one owned construct; allowance is deducted from caster summon budget.

Reject
Target cannot accept goals or allowance exceeds available budget.
Counterplay
Exhaust the construct's allowance with distractions.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.06Expansionwrite

Permit

target: Entity, action: Atom, duration: Duration → Effect

Add one action to an owned construct's policy allowlist only if its schema already supports that action.

Reject
Action is absent from the schema.
Counterplay
Force a situation requiring another action.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.07Expansionwrite

Forbid

target: Entity, action: Atom, duration: Duration → Effect

Remove one action from an owned construct's policy allowlist, retaining at least idle and retreat.

Reject
Action is a required safe fallback.
Counterplay
Pressure the actor where its remaining actions are weak.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.08Expansionpure

Negotiate

left: GoalRef, right: GoalRef, weights: List<Scalar> → GoalRef

Choose the feasible goal with highest explicit weighted utility; ties use goal ID and no social persuasion is inferred.

Reject
Weights are negative or goal utility fields are absent.
Counterplay
Change feasibility rather than utility.
BW 1 · Coherence 0 · Debt 0 · Authority 0

Agency / contracts 09–16

P14.09Expansionwrite

Coordinate

targets: EntitySet, goal: GoalRef, duration: Duration → Effect

Assign distinct role slots to owned actors by ascending ID, at most one actor per slot; unassigned actors keep prior goals.

Reject
Goal lacks role slots or any actor is unowned.
Counterplay
Disable the actor holding a critical role.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.10Expansionwrite

ReserveAction

target: Entity, action: Atom, duration: Duration → Effect

Reserve one owned actor's next action slot for the named supported action; expire if its preconditions never become true.

Reject
Actor already has a reservation.
Counterplay
Deny the reserved action's precondition.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.11Expansionwrite

InterruptPlan

target: Entity, duration: Duration → Effect

Suspend an interruptible NPC plan for duration and enter its recovery behavior; repeated hits grant immunity for thirty-two ticks.

Reject
Target is immune or in a protected boss action.
Counterplay
Use protected actions during the interrupt window.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.12Expansionwrite

PersistGoal

target: Entity, goal: GoalRef, duration: Duration → Effect

Prevent low-salience stimuli from replacing the owned actor's goal; emergency retreat always overrides.

Reject
Goal is not currently active.
Counterplay
Create a legitimate emergency retreat condition.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.13Expansionwrite

Abandon

target: Entity, goal: GoalRef → Effect

Release one owned goal, reservations and unused action budget exactly once; enter idle or retreat.

Reject
Goal does not match actor's current assignment.
Counterplay
Exploit the brief idle period before a new goal.
BW 4 · Coherence 2 · Debt 0 · Authority 0
P14.14Expansionsandbox

Evaluate

plan: PlanRef, scenario: Scenario → Forecast

Simulate plan against copied scenario for sixty-four ticks and return goal progress, cost and violations.

Reject
Plan references actions outside the scenario model.
Counterplay
Change a modeled assumption after evaluation.
BW 8 · Coherence 0 · Debt 0 · Authority 0
P14.15Expansionpure

Contingency

primary: PlanRef, fallback: PlanRef → PlanRef

Build a plan that switches once to fallback when a primary precondition fails; combined depth is at most eight.

Reject
Fallback can refer back to primary.
Counterplay
Invalidate both plans with different constraints.
BW 1 · Coherence 0 · Debt 0 · Authority 0
P14.16Expansionwrite

Autonomy

target: Entity, level: Integer, duration: Duration → Effect

Set owned construct policy mode to 0=hold, 1=defend, 2=pursue; enforce shared leash and budget in every mode.

Reject
level is outside 0..2.
Counterplay
Bait pursuit toward the leash boundary.
BW 4 · Coherence 2 · Debt 0 · Authority 0

Shared rule: exact typed ports; resource reservation before commit; no authoritative sandbox writes. Every primitive requires positive, rejection, boundary, legal-edge and illegal-edge evidence. Full state, cost, source and acceptance fields are available in its contract panel and source YAML.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 23 / 32

Composition operators

Thirty-two operators, with exact ports, evaluation behavior and hard bounds.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

The source grammar / O01–O16

The first sixteen operators form the demo vocabulary. They are domain-neutral and preserve effect linearity: deferred effects cannot be freely copied, memoized or retried.

O01demo

Sequence

first: Expr<A>, second: Expr<B> → B

Evaluate first to completion then second, preserving effect order and charging both worst-case budgets.

Bound: No cyclic dependency; A may be discarded only if it is not an unconsumed linear Effect.

O02demo

Parallel

branches: List<Expr<T>> → List<T>

Evaluate branches against one snapshot; merge in branch index order, never wall-clock completion order.

Bound: At most four branches; reject incompatible exclusive writes.

O03demo

Fork

value: T, count: Integer → List<T>

Copy an immutable value count times, charging payload bandwidth for every copy.

Bound: count 1..4; T must not contain Effect or mutable capability.

O04demo

Join

values: List<T> → List<T>

Wait for all declared sibling results and return their original branch order.

Bound: One failed sibling fails Join; no unbounded wait.

O05demo

Gate

condition: Boolean, body: Expr<T> → Option<T>

Evaluate body only when condition is true; otherwise return None without charging body execution cost.

Bound: Static analysis still reserves the body's possible worst-case budget.

O06demo

Select

index: Integer, branches: List<Expr<T>> → T

Evaluate exactly the zero-based selected branch.

Bound: Index must be in bounds; all branches share output type.

O07demo

Map

items: List<T>, body: Expr<U> → List<U>

Bind item and index, evaluate body once per item in input order.

Bound: At most sixteen items; aggregate all child costs and target caps.

O08demo

Reduce

items: List<T>, initial: U, body: Expr<U> → U

Fold left using explicit accumulator and item bindings.

Bound: Body must be pure; no assumed associativity or parallel reassociation.

O09demo

Iterate

initial: T, count: Integer, body: Expr<T> → T

Apply body count times with accumulator and iteration bindings.

Bound: count 0..8; nested total operations must fit the cast budget.

O10demo

Delay

duration: Duration, body: Expr<T> → Event<T>

Schedule one evaluation at current tick plus duration with copied immutable bindings.

Bound: duration 1..320 ticks; recheck live handles at activation; pending event count is bounded.

O11demo

Trigger

kind: Atom, body: Expr<T>, lifetime: Duration → Event<T>

Subscribe for one matching visible event during lifetime, then evaluate body once and remove subscription.

Bound: At most eight subscriptions per caster; generated events cannot retrigger the same cast subscription.

O12demo

Accumulate

events: List<Event<Scalar>>, initial: Scalar → Scalar

Sum explicit event payload scalars in event order plus initial.

Bound: Same units; at most sixteen events; no hidden cross-cast accumulator.

O13demo

Bind

value: T, body: Expr<U> → U

Lexically bind value to a declared typed name for body evaluation.

Bound: No shadowing of capability bindings; no extra world reads.

O14demo

Redirect

target: Entity, body: Expr<T> → T

Replace the target binding within body with the supplied reachable entity.

Bound: Recheck targeting permissions and carrier reach; no semantic type conversion.

O15demo

Clamp

value: Scalar, low: Scalar, high: Scalar → Scalar

Return min(high,max(low,value)) in matching units.

Bound: low<=high; cannot clamp a failure into success.

O16demo

Window

events: List<Event<T>>, interval: Interval → List<Event<T>>

Retain events with start<=tick<end, preserving order.

Bound: Interval must be valid and available history bounded.

Extensions / O17–O32

These extensions add collection handling, bounded event control and typed recovery. They are specified for the full catalog and are not silently enabled in the first demo.

O17full-catalog

Filter

items: List<T>, predicate: Expr<Boolean> → List<T>

Retain items whose pure predicate evaluates true in input order.

Bound: Predicate must not emit effects or read hidden state.

O18full-catalog

Branch

condition: Boolean, when_true: Expr<T>, when_false: Expr<T> → T

Evaluate exactly one of two same-type branches based on condition.

Bound: Both branches must type-check; unchosen branch has no effects.

O19full-catalog

Zip

left: List<T>, right: List<U> → List<Pair<T,U>>

Pair items at matching indices without padding.

Bound: Unequal lengths reject; maximum sixteen pairs.

O20full-catalog

Partition

items: List<T>, predicate: Expr<Boolean> → Pair<List<T>,List<T>>

Return true and false partitions in stable input order.

Bound: Predicate pure; partitions preserve exact input multiset.

O21full-catalog

Sort

items: List<T>, key: Expr<Scalar> → List<T>

Stable-sort by pure numeric key, then original index.

Bound: Keys have identical units; item count at most sixteen.

O22full-catalog

Unique

items: List<T> → List<T>

Keep first occurrence of each canonical serialized value.

Bound: T must be immutable and canonically serializable.

O23full-catalog

Take

items: List<T>, count: Integer → List<T>

Return first min(count,length) items without changing order.

Bound: count 0..16.

O24full-catalog

Scan

items: List<T>, initial: U, body: Expr<U> → List<U>

Fold left and return every post-step accumulator.

Bound: Pure body, at most sixteen outputs.

O25full-catalog

Debounce

events: List<Event<T>>, quiet: Duration → List<Event<T>>

For each run of events with gaps less than quiet retain the final event, emitted at final tick+quiet.

Bound: Finite supplied event list; no unbounded live subscription.

O26full-catalog

Throttle

events: List<Event<T>>, interval: Duration → List<Event<T>>

Retain first event, then earliest event at least interval ticks after last retained event.

Bound: interval>=1 tick; do not silently drop required persistence events.

O27full-catalog

Race

branches: List<Expr<Event<T>>> → Event<T>

Choose event with earliest simulation timestamp, ties by branch index; cancel uncommitted losing intents.

Bound: Branches must be read-only or sandbox until a winner is selected.

O28full-catalog

Timeout

body: Expr<Event<T>>, duration: Duration → Option<Event<T>>

Return first event when timestamp is at most start+duration, otherwise None and cancel subscription.

Bound: No rollback of committed prior ticks; effectful pre-winner branches forbidden.

O29full-catalog

Retry

body: Expr<T>, attempts: Integer → T

Re-evaluate a pure/read expression for declared transient stale-version failures at next ticks, up to attempts total.

Bound: attempts 1..2; deterministic retry schedule; never retry persistent writes or structural type errors.

O30full-catalog

Memoize

body: Expr<T>, inputs: Record → T

Cache a pure expression by normalized graph hash and complete input digest for this cast only.

Bound: No world reads, effects, hidden clock or unkeyed randomness.

O31full-catalog

Switch

key: Atom, cases: Record, fallback: Expr<T> → T

Evaluate exact-key case expression, else fallback; all expressions produce T.

Bound: Maximum sixteen cases; no wildcard ambiguity.

O32full-catalog

Validate

value: T, predicate: Expr<Boolean> → Result<T>

Return Ok(value) when pure predicate holds, otherwise a named validation diagnostic.

Bound: Failure remains typed; never grants permission or repairs the value.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 24 / 32

Carriers & interactions

Eight delivery forms, explicit targeting, 32 typed edges and eight numerical examples.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Delivery is geometry

K01

Bolt

Swept projectile, first eligible collision

Caster/target generations and collision layer masks; no tunneling at fixed tick.

demo
K02

Beam

Line segment sampled each tick

One hit per entity per eight ticks; stop at solid occlusion.

demo
K03

Field

Stationary bounded disk

Enter/stay/exit events; one pulse per eight ticks, at most sixteen targets.

demo
K04

Aura

Disk following owned entity

Owner death cancels; follows authoritative position only.

full-catalog
K05

Tether

Validated pairwise connection

Break on occlusion or range violation; degree cap eight.

full-catalog
K06

Sigil

Ground trigger

Arms after eight ticks; one activation, lifetime at most 320 ticks.

full-catalog
K07

Construct

Owned autonomous carrier actor

Shares summon/action budget; never creates free recurrent spells.

full-catalog
K08

Self

Immediate caster-bound application

Cannot redirect into another entity; uses same budget and commit checks.

demo
SELECT

Explicit targets

caster, observed single target, visible circle, visible cone, visible line, typed observed subset, owned allies, explicit relationship neighbors

TRIGGER

Visible events

OnCast, OnHit, OnObserved, OnDamageTaken, OnEnterField, OnTimer, OnRestore, OnArchive

Compatible connections and deliberate rejections

IDProducer → consumerResult
I01Information.Encode → Information.DecodeExact codec round-trip preserves scalar value and unit.
I02Information.Encode → Information.QuantizeThreshold classification uses the encoded value, with thresholds supplied separately.
I03Memory.Snapshot → Memory.RecallRecall reads a captured field without restoring live state.
I04Memory.Snapshot → Memory.RestoreRestore requires the same entity generation and excludes persistent fields.
I05Logic.Test → Logic.NegateNegation inverts a resolved Boolean only.
I06Ontology.Type → Logic.NegateInvert an observed membership query to select nonmembers.
I07Probability.Weight → Probability.SampleWeighting changes frequencies; sampling still requires an explicit seed.
I08Probability.Seed → Probability.SampleSeed input makes a chosen distribution reproducible.
I09Persona.Integrate → Persona.AssumeA compatible hybrid can be assumed by an owned actor.
I10Provenance.Witness → Provenance.VerifyA visible event can support or dispute a matching claim.
I11Provenance.Verify → Provenance.CanonizeSupported claim is necessary but not sufficient; independent sources and milestone gates remain.
I12Semantics.Denote → Semantics.InterpretSignal interpretation uses the explicitly resolved context meaning.
I13Causality.Intervene → Causality.NecessaryNecessity is evaluated only inside the intervened model.
I14Attention.Scan → Attention.PrioritizeObserved stimuli can be ranked with separately supplied scores.
I15Grammar.Tokenize → Grammar.ParseLexer tokens preserve source spans into parsing.
I16Grammar.Parse → Grammar.ValidateSyntaxA syntax tree can yield diagnostics without execution.
I17Temporality.Age → Temporality.DuringREJECT: a Duration cannot satisfy an Interval port.
I18Agency.Plan → Agency.CommitCommit rechecks the planned actor's live preconditions.
I19Agency.Plan → Agency.EvaluateA plan can be simulated without assigning an actor.
I20Observation.Measure → Observation.DetectChangeA new reading compares to a separately supplied earlier reading.
I21Memory.Snapshot → Counterfactual.BranchHistoryCaptured state becomes a hypothetical scenario with explicit missing fields.
I22Counterfactual.BranchHistory → Counterfactual.AssumeAlternativeAlternative inputs modify only copied scenario data.
I23Counterfactual.Simulate → Counterfactual.ContrastCompare matched scenario baselines and horizons.
I24Provenance.Witness → Provenance.AttestAttestation authenticates origin but cannot add truth.
I25Information.Delta → Information.DecodeA packet difference can be decoded without applying world damage.
I26Ontology.Compose → Ontology.EnumerateIntersection types filter an explicitly supplied candidate set.
I27Memory.Rehearse → Provenance.VerifyREJECT: hypothetical Forecast cannot become witnessed Evidence.
I28Probability.Sample → Persona.AssumeREJECT: Scalar cannot become PersonaRef.
I29Entropy.Erode → Memory.EchoREJECT: uncommitted Effect is not Event<Effect>.
I30Semantics.Interpret → Provenance.CanonizeREJECT: Claim<Scalar> is not Claim<Boolean> and has no implied verification.
I31Counterfactual.AssumeAlternative → Memory.RestoreREJECT: Scenario is not Memory<Record> and cannot rewrite reality.
I32Information.Encode → Provenance.WitnessREJECT: Signal is not an observed Event<Record>.

Eight numeric golden cases

G01

Information.Quantize

{"signal_value": 25, "thresholds": [10, 20, 30]}

Expected: {"result": 2}

G02

Entropy.Dissipate

{"shield": 6, "amount": 9}

Expected: {"shield": 0, "removed": 6}

G03

Memory.Restore

{"current_health": 40, "snapshot_health": 80, "fraction": 0.5, "current_max": 60}

Expected: {"health": 60}

G04

Logic.Imply

{"antecedent": true, "consequent": false}

Expected: {"result": false}

G05

Probability.Condition

{"outcomes": [10, 20, 30], "weights_raw": [256, 512, 256], "mask": [true, false, true]}

Expected: {"outcomes": [10, 30], "weights_raw": [512, 512]}

G06

Temporality.During

{"event_tick": 16, "interval": {"start": 8, "end": 16}}

Expected: {"result": false}

G07

Provenance.Triangulate

{"source_ids": ["a", "a", "b"], "confidence_raw": [512, 512, 512]}

Expected: {"independent_sources": 2, "confidence_raw": 768}

G08

Observation.DetectChange

{"before_value": 10, "after_value": 12, "before_error": 1, "after_error": 1}

Expected: {"result": false}

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 25 / 32

Resources & progression

Five resource dimensions, four progression tracks and loot that changes the spell language.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Power pays in five currencies

01

Bandwidth

Pays for computation and transport. Capacity 64; regeneration target 8 per second. Missed carriers still cost bandwidth.

02

Complexity

Caps the graph: 16 nodes in the demo, 64 in the full design. More targets and repetitions also consume static budget.

03

Coherence

Reserve cost while effect active; release on expiry. Do not permit reservations above capacity.

04

Entropy Debt

Accumulate on commit up to 100; reject a cast that would exceed 100; decay by one per second out of combat, no random punishment.

05

Archive Authority

Start demo with one; receive one only at designated milestone, never from ordinary enemy loot; milestone spends are idempotent.

Progression expands expression

TRACK

Archivist

Survivability, basic attributes and recovery.

TRACK

Domains

Mastery and access to semantic primitives.

TRACK

Grammar

New operators and bounded composition depth.

TRACK

Codex

Stored spells, observations, schemas and enemy knowledge.

Items modify the language

The demo contains eight authored items centered on slots, modifiers and reusable schemas. Full-product signatures, axioms, exceptions and artifacts require admitted graph transformations. No item may bypass typing, budget analysis or persistence exclusions.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 26 / 32

Components & features

Thirty-two owned implementation components and all 64 demo requirements.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Components 01–08 / the semantic kernel

Owned paths are proposed locations in the future game repository. Each component must return its implemented feature IDs and actual acceptance evidence.

C01 / phase 02

Catalog loader

Load versioned primitive, operator, carrier and asset data without evaluating it.

  • F01 Resolve all 256 primitive IDs
  • F02 Reject duplicate or unknown catalog IDs

Accept: All catalog IDs resolve and an unknown ID yields UNKNOWN_NODE before execution.

src/catalog/ · depends: none

C02 / phase 02

Type system

Own exact port unification, generic binding and unit dimensions.

  • F03 Enforce nominal payload shapes
  • F04 Reject illegal unit conversions

Accept: Entity-to-Vector and hp-to-m inputs reject with the precise node and port.

src/types/ · depends: C01

C03 / phase 02

Graph model

Own immutable graph documents, edges, bindings and revisions.

  • F05 Serialize graph documents
  • F06 Track semantic and presentation hashes separately

Accept: A graph round-trip preserves semantic hash; changing only a note preserves that hash.

src/graph/ · depends: C01, C02

C04 / phase 03

Compiler

Transform validated graphs into source-mapped bounded effect plans.

  • F07 Compile typed graphs
  • F08 Explain invalid graphs at their source nodes

Accept: Golden legal graph emits a plan and each invalid edge produces its named diagnostic.

src/compiler/ · depends: C01, C02, C03

C05 / phase 03

Budget analyzer

Compute conservative graph, fanout, memory and event ceilings.

  • F09 Estimate worst-case spell cost
  • F10 Reject unbounded schedules before play

Accept: Nested loops exceeding 64 events reject before any runtime allocation.

src/budgets/ · depends: C04

C06 / phase 04

Reference VM

Execute plans with deterministic ordering and explicit seeds.

  • F11 Run plans without rendering
  • F12 Record replayable execution traces

Accept: The same snapshot, graph and action log produce byte-identical effect traces.

src/vm/ · depends: C04, C05

C07 / phase 04

Effect resolver

Stage, conflict-check and commit authoritative world deltas.

  • F13 Apply atomic current-tick effects
  • F14 Enforce write conflicts and restoration exclusions

Accept: A failed precondition leaves all current-tick writes unchanged and restores reservations.

src/effects/ · depends: C06

C08 / phase 07

Observation service

Expose visible field/event bindings with timestamps and unknown markers.

  • F15 Reveal observed enemy fields
  • F16 Preserve measurement age and uncertainty

Accept: An occluded field is unavailable; cached observations retain their original tick.

src/observation/ · depends: C06, C07

Components 09–16 / a playable simulation

Owned paths are proposed locations in the future game repository. Each component must return its implemented feature IDs and actual acceptance evidence.

C09 / phase 04

Simulation clock and events

Own ticks, event queues, stable ordering and bounded subscriptions.

  • F17 Schedule deterministic delayed actions
  • F18 Cancel expired subscriptions

Accept: Same-tick events order identically at different rendering frame rates.

src/events/ · depends: C06

C10 / phase 05

Resource economy

Own bandwidth, coherence, complexity, entropy debt and authority ledgers.

  • F19 Reserve and settle cast resources
  • F20 Prevent authority and restoration duplication

Accept: Repeated milestone activation spends and rewards once; a miss still costs bandwidth.

src/resources/ · depends: C05, C07, C09

C11 / phase 06

Archivist controller

Own player locomotion, aim, dodge, health and death actions.

  • F21 Move aim cast and dodge
  • F22 Recover from death at checkpoint

Accept: Movement remains responsive while casting and death returns to a valid checkpoint.

src/player/ · depends: C07, C09, C10

C12 / phase 06

Camera and input

Own fixed isometric camera, input mapping and device prompts.

  • F23 Support keyboard mouse and gamepad
  • F24 Support remapping and focus loss

Accept: Unplugging a controller or losing focus never leaves movement or casting held.

src/input/ · depends: C11

C13 / phase 06

Carrier system

Own geometric delivery and hit eligibility.

  • F25 Deliver Bolt Beam Field Self
  • F26 Bound repeated hits and collision targets

Accept: A fast bolt does not tunnel through the test wall and a beam respects its hit cadence.

src/carriers/ · depends: C07, C09

C14 / phase 06

Targeting service

Resolve observed candidate sets and explicit selectors.

  • F27 Select visible eligible targets
  • F28 Preview affected area before casting

Accept: Preview and committed target eligibility agree on the same tick snapshot.

src/targeting/ · depends: C08, C12, C13

C15 / phase 07

Primitive runtime registry

Dispatch semantic handlers and report unimplemented nodes honestly.

  • F29 Implement core 64 semantic handlers
  • F30 Hide unsupported content behind clear availability state

Accept: Every demo primitive passes its contract fixture; other 192 return UNSUPPORTED_PRIMITIVE in play.

src/primitives/ · depends: C01, C06, C07, C08

C16 / phase 08

Combat and statuses

Own damage, resistance, status expiry and interrupt windows.

  • F31 Resolve shields health and resistance
  • F32 Expose status stacking and cleansing

Accept: Erosion expiry restores capacity without healing; shields absorb only eligible damage.

src/combat/ · depends: C07, C10, C11, C13, C15

Components 17–24 / encounter and world systems

Owned paths are proposed locations in the future game repository. Each component must return its implemented feature IDs and actual acceptance evidence.

C17 / phase 08

Enemy ecology and AI

Own four demo corruption families and deterministic behavior policies.

  • F33 Teach distinct corruption counterplay
  • F34 Telegraph attacks and recovery windows

Accept: Each family has one unique behavior, readable weakness and a non-damage discovery action.

src/enemies/ · depends: C08, C09, C14, C16

C18 / phase 08

Encounter director

Own spawn pacing, room completion and retry state.

  • F35 Run authored encounter templates
  • F36 Prevent impossible spawn combinations

Accept: Each of sixteen test seeds has a reachable exit and no required target outside navigation.

src/encounters/ · depends: C16, C17

C19 / phase 09

Spell editor

Own typed node editing, templates, undo and live diagnostics.

  • F37 Edit spell graphs visually
  • F38 Keep Manuscript Graph and Glyph views synchronized

Accept: Editing one parameter updates all three views; invalid graph cannot enter the cast slot.

src/editor/ · depends: C03, C04, C05, C15

C20 / phase 09

Spellbook and loadouts

Own named spell revisions, slots and equipped graphs.

  • F39 Save reusable spell templates
  • F40 Equip four combat spells

Accept: Reload restores exact graph hashes and unavailable nodes remain explainable.

src/spellbook/ · depends: C03, C19

C21 / phase 10

Progression and Codex

Own Archivist, Domain, Grammar and Codex unlock tracks.

  • F41 Unlock expressive options through discovery
  • F42 Record observed enemy knowledge

Accept: A discovered resistance persists after reload without granting unobserved properties.

src/progression/ · depends: C08, C10, C20

C22 / phase 10

Item and schema system

Own equipment modifiers and admitted graph fragments.

  • F43 Provide eight authored demo items
  • F44 Apply slots modifiers and reusable schemas safely

Accept: An item cannot grant a node that bypasses type, budget or persistence rules.

src/items/ · depends: C01, C04, C10, C21

C23 / phase 11

Region grammar and navigation

Own seeded room topology, navigation and restoration-state geometry.

  • F45 Generate one biome from bounded room grammar
  • F46 Reconnect restored routes

Accept: Generated critical path is reachable before and after restoration for sixteen fixed seeds.

src/world/ · depends: C13, C18

C24 / phase 11

Restoration and Archive

Own source-backed restoration objectives and permanent milestones.

  • F47 Restore three local knowledge anchors
  • F48 Persist final Archive milestone idempotently

Accept: Canonize requires the exact evidence gate and repeat commit cannot duplicate rewards.

src/archive/ · depends: C07, C10, C21, C23

Components 25–32 / presentation, recovery and return

Owned paths are proposed locations in the future game repository. Each component must return its implemented feature IDs and actual acceptance evidence.

C25 / phase 11

Narrative and onboarding

Own authored prompts, tutorial beats and skip/re-entry.

  • F49 Teach the eight-stage expedition loop
  • F50 Explain the Unwriting through playable clues

Accept: A novice can observe, modify a template and restore one anchor without opening Graph View.

src/narrative/ · depends: C19, C21, C23, C24

C26 / phase 12

Boss encounter

Own the Lacuna Warden's three stages and evidence puzzle.

  • F51 Run a learnable three-stage boss
  • F52 Unlock victory through restoration and combat

Accept: Damage alone cannot bypass the evidence stage; every stage has a visible recovery route.

src/boss/ · depends: C16, C17, C18, C24, C25

C27 / phase 13

Visual effect grammar

Map domain/operator/carrier events to legible bounded visuals.

  • F53 Compose spell visuals from grammar
  • F54 Scale effects to readability and frame budgets

Accept: Two domains remain distinguishable in grayscale and VFX disable does not change simulation trace.

src/presentation/vfx/ · depends: C09, C13, C16

C28 / phase 13

Audio grammar

Map spell and corruption events to a bounded audio vocabulary.

  • F55 Compose domain attack sustain release sounds
  • F56 Cap polyphony and mix threat cues

Accept: Critical enemy telegraphs remain audible during eight simultaneous carriers.

src/presentation/audio/ · depends: C09, C16, C27

C29 / phase 14

HUD and accessibility

Own resource readouts, source badges, scaling and assist settings.

  • F57 Present readable feedback and failure remedies
  • F58 Support text scaling reduced motion and non-color cues

Accept: At 200 percent text scale all essential controls remain reachable with keyboard and gamepad.

src/ui/ · depends: C10, C12, C19, C21, C27, C28

C30 / phase 14

Persistence and migrations

Own save checksums, migrations and checkpoint recovery.

  • F59 Save atomically with a recoverable backup
  • F60 Handle older or corrupted saves safely

Accept: A corrupt newest save loads last valid backup; migration never overwrites the only valid source.

src/persistence/ · depends: C03, C20, C21, C24

C31 / phase 13

Asset import and manifests

Own local import recipes, provenance and resource limits.

  • F61 Import approved art and audio
  • F62 Validate scale collision rights and export hashes

Accept: Every imported demo asset has a manifest; rejected meshes use a traceable placeholder.

tools/assets/ · depends: C01, C27, C28

C32 / phase 16

Replay evaluation and packaging

Own evidence bundles, demo builds and reproducible session scripts.

  • F63 Run deterministic and playability evidence suite
  • F64 Package a local Linux demo with known limitations

Accept: Clean local launch completes tutorial-to-boss-to-Archive and records exact build and catalog hashes.

tools/demo/ · depends: C06, C18, C26, C29, C30, C31

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 27 / 32

The sixteen-phase roadmap

From a typed semantic kernel to an editable spellbook, complete expedition and local demo.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Phases 01–08 / prove the playable kernel

Relative scope labels are not duration estimates. Each phase begins from the previous evidence gate; phase 7 requires eight bounded domain batches.

PH01M scope

Scope and reproducible foundation

Choose the separate implementation repository, pin local Godot and import tools, record architecture decisions and establish a runnable empty scene.

Deliver
Toolchain manifest, selected paths, run instructions, baseline launch receipt.
Exit gate
A clean local launch and headless entry point work with placeholder geometry.
If blocked
If engine/toolchain unavailable, return exact missing prerequisite and keep package untouched.
PH02L scope

Catalog and type kernel

Import the complete 256/32/8 catalog and implement nominal types, generic ports, graph documents and public service interfaces.

Deliver
Closed schemas, catalog importer, graph serializer, interface definitions for later systems.
Exit gate
All IDs and typed ports validate; duplicate IDs, malformed units and unknown versions reject.
If blocked
Reduce editor scope, never weaken type validation.
PH03L scope

Compiler and static budgets

Implement parsing, ID resolution, exact typing, normalization, cost and termination analysis with source maps.

Deliver
Compiled-plan format, diagnostics, worst-case budget calculator.
Exit gate
Legal graph compiles; mismatched ports, raw cycles and excess fanout reject before runtime.
If blocked
Disable an unsupported operator explicitly and record feature deferral.
PH04XL scope

Deterministic semantic runner

Implement reference VM, seeded draws, event queue, effect intents and atomic resolution independent of rendering.

Deliver
Replay runner, event traces, current-tick transaction tests.
Exit gate
Same seed/state/input trace repeats exactly; conflicting writes and delayed failures have defined outcomes.
If blocked
Keep visual scene out of the runner and fix the earliest trace divergence.
PH05L scope

Resource economy and anti-exploit rules

Implement five resources, reservations, refunds, expiry, summon caps and persistent-write exclusions.

Deliver
Resource ledger, budget HUD stub, anti-duplication fixtures.
Exit gate
Misses cost bandwidth; rejected milestones do not spend authority; echo cannot replay echo.
If blocked
Lower content ceilings instead of adding hidden random penalties.
PH06L scope

Playable graybox controls

Build fixed isometric locomotion, camera, aim, dodge, baseline visibility interface, targeting and four demo carriers.

Deliver
One test arena with keyboard/mouse and controller actions, collision diagnostics.
Exit gate
Complete move/aim/cast/dodge/death loop; bolt collision and beam cadence pass.
If blocked
Use primitive meshes and a flat arena; retain control and collision criteria.
PH07XXL scope

Core sixty-four primitives

Implement first eight primitives in each core domain in eight domain batches, using the shared contracts.

Deliver
64 semantic handlers, 320 minimum contract cases, eight template candidates.
Exit gate
Each primitive has positive, negative, boundary, legal-composition and illegal-composition evidence; unsupported 192 reject explicitly.
If blocked
Return per-primitive failures; do not substitute no-op handlers to meet the count.
PH08XL scope

Combat and corruption ecology

Integrate health, armor, statuses, observation, four enemy families and authored encounter templates.

Deliver
Combat sandbox, four enemy dossiers, encounter seed set.
Exit gate
Each family has a distinct discoverable rule and counterplay; status and spawn rules remain deterministic.
If blocked
Reduce simultaneous enemies before simplifying their semantic differences.

Phases 09–16 / author, restore, evaluate, return

PH09XL scope

Spellcraft authoring loop

Build template editing, typed Graph View, readable Manuscript View, Glyph loadouts and undo.

Deliver
Eight starter templates, four equipped slots, synchronized representations.
Exit gate
A user edits a template, sees cost and diagnostics, casts it, and restores an earlier revision.
If blocked
Ship bounded node editing; defer free-text DSL authoring but retain machine-readable SpellIR.
PH10L scope

Expressive progression and loot

Implement four progression tracks, Codex discovery and eight authored items affecting slots, modifiers or schemas.

Deliver
Unlock table, knowledge records, item definitions and persistence payloads.
Exit gate
Discovery unlocks a meaningful composition; no loot or schema bypasses compiler rules.
If blocked
Keep unlock order authored and deterministic before random loot.
PH11XL scope

Region restoration and onboarding

Build eight-room Information Aqueducts, a Mnemonic Vault chamber, three anchors, tutorial and Archive return.

Deliver
Seeded region grammar, restoration objectives, authored text, checkpoint flow.
Exit gate
Sixteen fixed seeds preserve critical reachability; first restoration can be completed without Graph View.
If blocked
Fallback to a validated authored room layout and mark procedural generation deferred.
PH12L scope

Lacuna Warden and complete loop

Build three boss stages with recovery routes and the final evidence-backed restoration commit.

Deliver
Boss scene, stage data, tutorial-to-Archive scenario script.
Exit gate
Damage cannot skip the evidence stage; retry always permits recovery of needed observations and authority.
If blocked
Use a simple silhouette, but retain all three readable gameplay stages.
PH13XL scope

Asset and presentation integration

Import selected assets, add domain/carrier VFX and audio grammar, provenance manifests and budgets.

Deliver
Imported demo assets, placeholder manifest, VFX/audio event mapping and screenshots.
Exit gate
Presentation disable preserves simulation trace; every asset has source/rights/import records.
If blocked
Keep traceable placeholders wherever generation or cleanup is not ready.
PH14L scope

Persistence accessibility and recovery

Finish atomic saves, migrations, key rebinding, gamepad navigation, text scaling, non-color cues and motion controls.

Deliver
Recovery fixtures, three save slots, accessibility settings and walkthrough.
Exit gate
Corrupt newest save recovers backup; essential UI usable at 200 percent scale; focus loss clears held input.
If blocked
Drop optional decoration or UI density to protect essential access and recovery.
PH15XL scope

Evaluation balance and performance

Run the evidence plan on pinned hardware, tune numerical hypotheses, collect first-run sessions and triage failures.

Deliver
Replay corpus, performance traces, session notes, issue ledger and updated candidate values.
Exit gate
Meet demo thresholds or document explicit human waivers; no unsupported fun, accessibility or performance claim.
If blocked
Reduce active effects or room density with a recorded tradeoff and repeat affected evidence.
PH16L scope

Local demo and delegation return

Package a reproducible offline Linux build with source hashes, controls, known issues, credits and a start-to-finish walkthrough.

Deliver
Local demo artifact, build manifest, evidence index and final implementation return.
Exit gate
Clean install-directory launch completes tutorial, editor change, boss, Archive commit and reload without blocking defect.
If blocked
Return a candidate build with failed gates named; never label it accepted or publish it automatically.
Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 28 / 32

The asset production atlas

Sixty-four briefs with generation prompts, deliverables, budgets and traceable placeholders.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Assets 001–032 / establish the world

The first calibration set is the Archivist, restoration anchor, Lacuna Scribe and Information VFX vocabulary. Every entry below is a brief, not generated or approved media.

IDFamilyAsset & purposeReview
A001environmentaqueduct floor
Walkable archive floor module with inset readable channels
demo
A002environmentaqueduct wall
Occluding wall with shelf niches and clean collision silhouette
demo
A003environmentbridge segment
Graph-edge bridge with intact and missing-link sockets
demo
A004environmentindex pillar
Index tower pillar framing routes without blocking the camera
demo
A005environmentarchive door
Closed and restored doorway sharing collision bounds
demo
A006environmentstairs ramp
Walkable ramp disguised as broad archive stairs
demo
A007environmentrestoration anchor
Three-source anchor with broken, ready and restored states
demo
A008environmentfragment pickup
Collectible knowledge shard with a square center and clear pickup radius
demo
A009environmentmnemonic overlay
Translucent historical floor overlay without collision
demo
A010environmentward gate
Predicate gate with separate true, false and unknown symbols
demo
A011environmentsafe platform
Unmistakable permanent refuge in the boss arena
demo
A012environmentboss arena ring
Segmented circular floor framing three phase stations
demo
A013environmentsource pedestal
Independent witness source with a traceable beam socket
demo
A014environmentcorruption gap
Nonwalkable missing topology with a visible warning rim
demo
A015environmentarchive terminal
Home Archive workstation with spellbook and restoration access
demo
A016environmentwayfinding markers
Eight distinct room navigation signs with text-safe blank panels
demo
A017characterarchivist
Readable cloaked player silhouette with free hands and a manuscript focus
demo
A018characterlacuna scribe
Hollow scribe with visibly missing torso geometry
demo
A019characternoiseborn relay
Floating signal relay with three distinguishable packet emitters
demo
A020charactercontradictor bailiff
Shielded figure carrying mutually exclusive ward plates
demo
A021characterdriftform indexer
Angular index creature with swappable type-tag plates
demo
A022characterlacuna warden
Large archive custodian with three visible phase sockets
demo
A023characterpersona aspect
Neutral modular summon silhouette with mask and trait attachment sockets
demo
A024charactertraining construct
Stationary test dummy with visible field and status labels
demo
A025vfxinformation vocabulary
packet lines and square pulses
demo
A026vfxentropy vocabulary
crumbling edges and draining grains
demo
A027vfxmemory vocabulary
offset silhouettes and layered frames
demo
A028vfxlogic vocabulary
brackets and true/false branch glyphs
demo
A029vfxontology vocabulary
nested polygons and branching arches
demo
A030vfxprobability vocabulary
dotted fans and outcome wedges
demo
A031vfxpersona vocabulary
masks and split silhouettes
demo
A032vfxprovenance vocabulary
threads and broken/complete seals
demo

Assets 033–064 / a readable visual and audio language

IDFamilyAsset & purposeReview
A033vfxsemantics vocabulary
paired inscriptions and contextual frames
full-catalog
A034vfxcausality vocabulary
directional links and domino pulses
full-catalog
A035vfxattention vocabulary
focused apertures and fading markers
full-catalog
A036vfxgrammar vocabulary
manuscript ligatures and node sockets
full-catalog
A037vfxtemporality vocabulary
tick rings and segmented hourglasses
full-catalog
A038vfxagency vocabulary
goal pennants and planned footprints
full-catalog
A039vfxobservation vocabulary
measurement reticles and error bands
full-catalog
A040vfxcounterfactual vocabulary
dashed alternatives and unrealized paths
full-catalog
A041uidomain glyph sheet
Sixteen unique domain glyphs, recognizable without hue
demo
A042uioperator glyph sheet
Thirty-two operator glyphs showing graph operation rather than domain flavor
demo
A043uicarrier glyph sheet
Eight geometric carrier icons with consistent orientation
demo
A044uiresource symbols
Five distinct resource silhouettes for bandwidth complexity coherence debt authority
demo
A045uievidence badges
Witnessed derived hypothetical disputed revoked and unknown badges
demo
A046uistatus symbols
Sixteen status indicators with debuff buff expiry and cleanse variants
demo
A047uimanuscript panels
Readable manuscript frames with plain high-contrast text regions
demo
A048uicontroller prompts
Device-neutral action prompt frames supporting remapped labels
demo
A049audioarchivist movement
Footsteps dodge cloth and safe landing cues
demo
A050audioinformation packets
Packet attack sustain release and corruption sound atoms
demo
A051audioentropy decay
Granular erosion and abrupt fracture sound atoms
demo
A052audiomemory echo
Delayed harmonic afterimage and snapshot cues
demo
A053audiologic ontology
Distinct predicate decision and type-change cues
demo
A054audioprobability persona
Outcome commitment and mask reveal cues with distinct envelopes
demo
A055audioprovenance archive
Witness dispute verification and restoration chimes
demo
A056audioencounter threats
Enemy windup hit stagger death and boss phase alerts
demo
A057animationarchivist locomotion
Idle walk run and eight-direction aim blend references
demo
A058animationarchivist cast
Cast windup release and recovery with event marker references
demo
A059animationarchivist dodge
Dodge anticipation motion and recovery with collision references
demo
A060animationscribe attack
Gap attack tell release stagger and death
demo
A061animationrelay attack
Packet charge triple emission and collapse
demo
A062animationbailiff attack
Ward swap cone windup release and recoil
demo
A063animationindexer attack
Type shift dash tell dash and recovery
demo
A064animationwarden phases
Three phase transitions attack tells restoration kneel and defeat
demo
Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 29 / 32

Art, audio & interface

Ember Circuit gives the document its reading language; Noetic Gothic gives the game its world.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Noetic Gothic, rendered through Ember Circuit

Charcoal#0e1114
Parchment#f1e7d2
Ember#f07a37
Antique gold#d4ab63
Cyan#82c4c3

The game’s source direction combines archives, astronomical instruments, diagrams and impossible information architecture. This review surface uses the current Ember Circuit web palette and typography. Symbolic geometry supports reading; it does not pretend to be live gameplay.

TYPE

A book with technical edges

Fraunces carries titles and editorial passages. Inter carries dense controls and body reading. Monospaced signatures distinguish contracts from prose.

VFX

Let the graph have a visual vocabulary

Information pulses, Entropy fragments, Memory leaves afterimages, Logic branches, Ontology nests, Probability fans, Persona masks and Provenance threads.

AUDIO

Make important behavior recognizable

Compose attack, sustain and release atoms from committed events. Cap polyphony and keep enemy threat cues audible during complex casts.

EDITOR

Three readings of one graph

Manuscript explains intent, Graph exposes structure and Glyph supports combat use. A change in one must update the others.

ACCESS

Redundant channels

Use shapes, text and sound alongside color. Preserve keyboard/controller navigation, large text, reduced motion and visible focus.

REVIEW

Judge at the actual distance

A concept sheet can look beautiful and still fail in the isometric camera. Inspect silhouette, collision, timing and grayscale before approving an asset.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 30 / 32

Evidence & risk

Sixteen evidence gates, concrete falsifiers and a small, honest playtest protocol.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

What would count as evidence?

V01

Catalog completeness

256 unique primitives, sixteen per domain, 32 operators, eight carriers and all ports resolve.

Artifact: schema report

PH02 · not run
V02

Primitive semantics

Each enabled primitive has positive, rejection, boundary, legal-edge and illegal-edge tests; demo minimum 320 cases.

Artifact: machine-readable test results with fixture IDs

PH07 · not run
V03

Type and unit rejection

All 32 interaction fixtures have expected edge disposition; illegal unknown/persistent/hypothetical conversions reject.

Artifact: diagnostic snapshots

PH03 · not run
V04

Determinism

Sixteen fixed seeds, three render rates (30/60/144), same action log yield same simulation hash per seed.

Artifact: per-tick hashes and first-divergence report

PH15 · not run
V05

Termination and resource bounds

Adversarial graphs hit static/runtime caps without hang, queue growth beyond cap or uncharged fanout.

Artifact: budget traces and fuzz seeds

PH05 · not run
V06

Anti-duplication

Restore/Echo/Retry/Canonize cannot duplicate loot, authority, persistent milestones or previously replayed events.

Artifact: before/after ledger fixtures

PH11 · not run
V07

Navigation and region integrity

Sixteen specified region seeds retain a reachable critical path and boss recovery route before and after restoration.

Artifact: seeded reachability reports

PH11 · not run
V08

Enemy differentiation

Each of four families has a distinct observed rule, telegraph and counterplay; damage-only route cannot skip boss evidence gate.

Artifact: recorded encounter walkthrough and rubric

PH12 · not run
V09

Editor and save round-trip

Graph edits preserve synchronized views and reload exact semantic hashes; corrupt/migrated saves preserve last valid backup.

Artifact: round-trip and recovery fixtures

PH14 · not run
V10

Performance

On pinned hardware at 1080p target p95 frame<=16.7ms, simulation<=4ms, compile<=16ms for demo graphs, with eight carriers and sixteen enemies.

Artifact: hardware/driver manifest, warmup method and 120-second trace

PH15 · not run
V11

Accessibility

Essential flow is navigable by keyboard and gamepad at 200 percent text scale, reduced motion and grayscale; cues have redundant channels.

Artifact: manual walkthrough and screenshots

PH14 · not run
V12

Playability

At least four consenting playtesters: three complete first restoration within ten minutes without facilitator repair, and three explain their spell change and a counterplay rule.

Artifact: anonymized session protocol and observations

PH15 · not run
V13

Asset production

Every imported asset has source/rights/import records and applicable scale/collision/rig/audio checks.

Artifact: asset manifest and review sheet

PH13 · not run
V14

Complete demo

Fresh local launch -> tutorial -> template edit -> four families -> Warden -> Archive -> reload without a blocking defect.

Artifact: build hash, action log, walkthrough, known issues

PH16 · not run
V15

Source fidelity and distinctness

Original 64 named concepts remain recognizable; all new primitives own a distinct state/query transformation and avoid fake synonym expansion.

Artifact: human domain comparison review

PH07 · not run
V16

Delegation traceability

Each feature maps to owner, phase, implementation paths, check and receipt; actual outcomes distinguished from target criteria.

Artifact: feature/evidence matrix

PH16 · not run

Playtest, falsify, recover

Four sessions are directional design evidence, not proof of market demand or broad usability.

SESSION

A first-run script

Start without Graph View. → Explain visible corruption clue. → Modify a supplied spell template. → Predict what the change will do. → Fight using the change. → Restore one anchor. → Explain one failure and recovery.

MEASURE

Observe the actual attempt

time to first useful cast; time to first restoration; invalid graph attempts; unassisted recovery; prediction versus observed effect; self-reported clarity and desire to try another build

R01

256 names can conceal overlapping mechanics.

Two primitives cannot be distinguished by a state-delta example.

Response: Require unique postconditions and human domain comparison; merge or redesign rather than pad.

R02

Spellcraft UI overwhelms first-time players.

More than one of four cannot make a useful change without intervention.

Response: Improve templates and error remedies before widening graph freedom.

R03

Combinatorial event growth bypasses cost bounds.

Nested schedules exceed predicted queue or resource use.

Response: Worst-case static analysis plus runtime caps and deterministic failure.

R04

Restoration and evidence create duplication or dead ends.

A commit repeats rewards or required evidence becomes unobtainable.

Response: Idempotent milestones, repeatable observations, safe boss recovery.

R05

Asset production delays gameplay learning.

Playable loop waits for rigged/generated assets.

Response: Use manifested placeholders until core evidence exists.

R06

Confidence is presented as objective truth.

Copies increase confidence or hypothetical output canonizes an anchor.

Response: Independent source groups, explicit dissent, hypothetical type barrier.

R07

The initial demo is too large.

Core semantic or editor gates remain unproven after repeated batches.

Response: Return a proposed smaller eight-template prototype with exact omitted primitive IDs; do not silently claim the 64-primitive milestone.

R08

Determinism differs across tools or hardware.

First divergent tick in replay corpus.

Response: Fixed arithmetic, explicit seeds/order, pinned versions and golden state hashes.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 31 / 32

Implementation handoff

Thirty-two task packets with owned paths, dependencies and evidence-bearing returns.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

Give an agent a bounded job

The implementing agent works in a separately selected game repository. It reads the assigned task, shared contracts and relevant domain sources, implements the behavior, runs real checks and returns evidence. This document does not start that work.

TaskOwner / phaseDeliverable & acceptance
T01Catalog loader / PH02All catalog IDs resolve and an unknown ID yields UNKNOWN_NODE before execution.
T02Type system / PH02Entity-to-Vector and hp-to-m inputs reject with the precise node and port.
T03Graph model / PH02A graph round-trip preserves semantic hash; changing only a note preserves that hash.
T04Compiler / PH03Golden legal graph emits a plan and each invalid edge produces its named diagnostic.
T05Budget analyzer / PH03Nested loops exceeding 64 events reject before any runtime allocation.
T06Reference VM / PH04The same snapshot, graph and action log produce byte-identical effect traces.
T07Effect resolver / PH04A failed precondition leaves all current-tick writes unchanged and restores reservations.
T08Observation service / PH07An occluded field is unavailable; cached observations retain their original tick.
T09Simulation clock and events / PH04Same-tick events order identically at different rendering frame rates.
T10Resource economy / PH05Repeated milestone activation spends and rewards once; a miss still costs bandwidth.
T11Archivist controller / PH06Movement remains responsive while casting and death returns to a valid checkpoint.
T12Camera and input / PH06Unplugging a controller or losing focus never leaves movement or casting held.
T13Carrier system / PH06A fast bolt does not tunnel through the test wall and a beam respects its hit cadence.
T14Targeting service / PH06Preview and committed target eligibility agree on the same tick snapshot.
T15Primitive runtime registry / PH07Every demo primitive passes its contract fixture; other 192 return UNSUPPORTED_PRIMITIVE in play.
T16Combat and statuses / PH08Erosion expiry restores capacity without healing; shields absorb only eligible damage.
T17Enemy ecology and AI / PH08Each family has one unique behavior, readable weakness and a non-damage discovery action.
T18Encounter director / PH08Each of sixteen test seeds has a reachable exit and no required target outside navigation.
T19Spell editor / PH09Editing one parameter updates all three views; invalid graph cannot enter the cast slot.
T20Spellbook and loadouts / PH09Reload restores exact graph hashes and unavailable nodes remain explainable.
T21Progression and Codex / PH10A discovered resistance persists after reload without granting unobserved properties.
T22Item and schema system / PH10An item cannot grant a node that bypasses type, budget or persistence rules.
T23Region grammar and navigation / PH11Generated critical path is reachable before and after restoration for sixteen fixed seeds.
T24Restoration and Archive / PH11Canonize requires the exact evidence gate and repeat commit cannot duplicate rewards.
T25Narrative and onboarding / PH11A novice can observe, modify a template and restore one anchor without opening Graph View.
T26Boss encounter / PH12Damage alone cannot bypass the evidence stage; every stage has a visible recovery route.
T27Visual effect grammar / PH13Two domains remain distinguishable in grayscale and VFX disable does not change simulation trace.
T28Audio grammar / PH13Critical enemy telegraphs remain audible during eight simultaneous carriers.
T29HUD and accessibility / PH14At 200 percent text scale all essential controls remain reachable with keyboard and gamepad.
T30Persistence and migrations / PH14A corrupt newest save loads last valid backup; migration never overwrites the only valid source.
T31Asset import and manifests / PH13Every imported demo asset has a manifest; rejected meshes use a traceable placeholder.
T32Replay evaluation and packaging / PH16Clean local launch completes tutorial-to-boss-to-Archive and records exact build and catalog hashes.
Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence
Systems & deliverySECTION 32 / 32

Decisions & review

Sixteen proposed defaults, a bounded Socratic method and a clear route back to source.

PALIMPSEST / DESIGN EDITION 01 · CANDIDATE

The decisions that can change this design

DecisionProposed defaultQuestion
Q01 / First milestone64 runtime primitives / 16 operators / 4 carriers, full 256 catalog specifiedDoes this demo scope justify its semantic implementation cost?
Q02 / Camera and platformFixed isometric 3D, Linux offline single-playerIs fixed isometric presentation the desired first experience?
Q03 / Engine directionSource-preferred Godot 4 family; exact versions pinned in PH01Which separate implementation repository should own the game?
Q04 / Determinism32 Hz fixed simulation with fixed-point game quantitiesDoes the prototype feel responsive under the selected tick and dodge timing?
Q05 / Primitive differentiationPreserve source 64 and author distinct additional 192Which domain boundary or primitive transformation feels redundant?
Q06 / Persistent restorationCanonize requires supported claim, two independent sources, no dispute and one AuthorityHow much evidence work should a restoration require?
Q07 / Failure feelReadable deterministic rejection and recovery; no arbitrary random graph corruptionShould risky builds add later, explicit player-chosen consequences?
Q08 / Editor onboardingStart with templates; synchronize Manuscript, Graph and GlyphWhat is the smallest satisfying first template edit?
Q09 / AssetsGraybox first, four calibration assets before broader generationWhich silhouette or mood should the calibration pass change?
Q10 / Full expansionX01-X08 backlog follows demo evidenceWhich expansion domain should receive the first post-demo implementation batch?
Q11 / Operator reconciliationRestore the original sixteen domain-neutral operators and add sixteen explicit extensionsAre any old bundle concepts worth reintroducing under a distinct contract?
Q12 / Interaction safetyHypothetical scenarios never masquerade as witnessed evidenceShould any future game mechanic bridge hypothesis to observation through an explicit experiment?
Q13 / Numerical tuningTreat every balance number and performance threshold as a hypothesisWhich resource should constrain expert builds most strongly?
Q14 / Player controlPersona and Agency affect NPCs and owned constructs, not player inputHow autonomous should a familiar feel within its leash and budget?
Q15 / Review cadenceTwo domain chapters per review, then a cross-domain worked spellWhat must become easier, what must stay costly, and what failure is unacceptable?
Q16 / Acceptance evidenceMachine contracts plus recorded gameplay and four voluntary first-run sessionsWhat observed outcome would make us reduce or redirect scope?

Lineage and return

The original 64 primitive names remain in their source order. The additional 192 and the detailed numerical contracts are proposed synthesis. New Pdd.pp identities do not silently replace old scaffold slots. The old defaults, components and September 7 receipt remain intact.

Review notes in this HTML stay in this browser when storage is available. Export them as a JSON review packet to carry them into a later design revision. Notes do not change the YAML or approve the design.

Hearth & Code / Ember CircuitSource-bound projection · proposed design, not gameplay evidence

Search the design

Source YAML

Full contract

Compare primitive contracts

Review notes

What should become easier? What should remain costly? Name a primitive or decision, one unacceptable failure and one readable counterplay rule.

Notes stay in this browser when storage is available. Export a review packet before moving to another browser. This surface never changes the source YAML or marks a proposal approved.