Files
el/lang/spec/correspondence-and-censorship.md
T
Neuron d6b7f5dbdd spec: dreaming is ambient, not scheduled — a brain has no cron job
Corrects the section I was most confident in, which is usually the tell.

The previous draft had dreaming as "offline replay, decoupled from input, a
mode the system enters when it is not acting." That is SLEEP. Daydreaming
is dreaming, and it runs all day: the default mode network is
anticorrelated with task engagement, activating hundreds of times a day for
seconds at a time, doing the same work — recombination, simulation,
autobiographical integration. Insight arrives in the shower, not at the
desk, because that is abduction completing during ambient recombination.

Sleep is the DEEP case, not the case: no input competing, no task claiming
capacity, so recombination runs further. Same process, different depth, not
a different mode. Consolidation is what happens with the capacity that is
not claimed.

Two consequences the draft had backwards:

The launch-agent fragments are wrong in KIND, not merely in number. 23:55 /
06:00 / 08:30 implements dreaming as a scheduled batch when it should be
ambient. A brain has no cron job. A ticker is a supervisor deciding from
outside when a thing should happen — the same failure mode as inventing an
owner for ownership and a grounder for grounding, wearing a scheduler.
THE PRESENCE OF A TICKER IS THE DIAGNOSTIC: every StartInterval, every
Hour/Minute, every POST-to-beat marks a place where an intrinsic rhythm was
replaced by an external clock.

And soul.el's continuous awareness_run() beside the HTTP workers is the
CORRECT shape, not the offender. Ambient consolidation in the gaps is
exactly daydreaming. It was the only fragment shaped right, running on a
broken foundation: shared mutable state with no owner and six other systems
dreaming into the same graph. The previous draft condemned the right
behaviour because of the substrate under it.

So the crash restates once more: not "read paths mutate the index"
(mechanism), not "duplicate canonical state" (structure), and not "one
system dreamt while awake" — but seven systems dreaming into one graph with
no owner for dreaming. Contention was the symptom of the missing owner.

Sequencing step 1 inverts accordingly: soul's loop is the shape the others
fold INTO, not something to remove. Step 2 becomes "no tickers, no cron."
2026-08-16 15:49:50 -05:00

22 KiB
Raw Blame History

Correspondence, Grounding, and Dreaming

Status: design, not yet built Date: 2026-08-16 Scope: lang/runtime/engram_cognition.{c,h}, engram_verify.c, el_runtime.c, engram/src/server.el, neuron/soul.el, and the consolidation launch agents Relationship to other specs: complements runtime-ownership.md, which addresses a different residual in the same substrate.


0. The root

Things are permitted to be exempt from correspondence. Exemption is censorship, and a censored mind cannot grow.

Growth in this system is the accumulation of grounded structure. Censorship removes the operation that accumulates it. A region forbidden to learn is forbidden to be grounded; a region that cannot be grounded cannot be asserted, corrected, or vindicated.

The loss is symmetric. Preventing learning about a thing does not preserve a true belief about it — it makes the belief's truth value permanently unknowable. You cannot discover you were wrong; you equally cannot discover you were right. A protected belief is not a true belief. It is an ungrounded one wearing the costume of a fact.

And "why" dies first. Grounding is not a score, it is the reason. A censored belief can still be stated, still be acted on, still drive behaviour — it simply cannot say why. That is the difference between a mind and a lookup table.


1. Grounding is not a subsystem. It is the weight.

Grounding is an attribute of the edge, and it is the hebbian weight. One quantity, not two fields.

A relation that keeps holding up strengthens; one that stops corresponding decays. That is not analogous to grounding — it is grounding: accrued from correspondence and use, gradient-valued, multidimensional, decaying with disuse.

Consequences, in order of how much they delete:

  1. There is no grounding subsystem to build. The graph already is the grounding structure. Every edge is a grounded relation and its weight is how well it holds.
  2. grounded-by as a relation type should not exist. That models grounding as a relation between nodes when it is a property of a relation. cog_ground_edge minting an edge is the error — not merely which endpoints it chose.
  3. Grounding is never computed on demand. An operation may read the grounding of a path. Computing-and-writing a score makes reads write, which is the eg_vindex_sync defect.
  4. Traversal is already grounded inference. Activation conducts through well-grounded relations because weight is groundedness. Nothing needs filtering; it falls out of spreading.
  5. Decision provenance is the path. A decision traverses specific edges; those edges carry their grounding as it stood.

A measurement previously in this document was malformed. The self region was reported as "86 neighbours, 0 grounded-by edges" and read as evidence of ungroundedness. Those 86 edges are its grounding. Self is a crystallized relational neighbourhood — the neighbourhood is the grounding. The absence of a separate artifact called "grounding" was recorded as an absence of grounding.


2. The edge vector

The test for a real dimension: can it move independently of the others?

Real

dimension why it is independent
factual grounding correspondence with evidence
relational grounding correspondence with values — independent by construction (§3)
associative strength co-activation frequency. Two things can fire together constantly and be neither true nor right; every superstition is a strong association with no factual grounding
polarity signed. Weight near zero means "no support." Negative means "this actively contradicts." Ignorance and disagreement are different states, and inhibitory is that distinction crushed to one bit
provenance class observed / inferred / told / imprinted. Categorical, and load-bearing: it governs how the other dimensions may update

Plus a timestamp — which is what turns the supersession chain into a time series of vectors rather than a series of numbers.

Derived, therefore never stored

  • Confidence — high grounding and low volatility. Storing it separately is how confidence: 0.5 ends up sitting beside a zero vector, asserting something nothing computed.
  • Recency — decay applied to the others, read off the curve.
  • Staleness — grounding fallen below its floor. This is the mechanism that retires canonicals without anyone maintaining a list.
  • Volatility — the derivative of a series already kept because nothing is destroyed.

Supersession versions the whole vector, jointly

Significance is evaluated per-dimension; the record is the whole vector. Any dimension moving enough to matter triggers a supersession, and the new edge captures every dimension as it stood at that instant. Not per-dimension versioning — a decision saw the joint state, and versioning the axes independently makes it unreconstructable.

That joint record makes an otherwise inexpressible event visible: "stayed true, became wrong." Factual holding steady across versions while relational degrades — the fact didn't change, the meaning did.

Two moves are inherently significant and need no threshold, because they are discrete: a polarity sign flip (ignorance → disagreement, support → contradiction) and a provenance class change (toldobserved is a categorical upgrade in what the relation is entitled to).


3. Grounding is two-dimensional

Everything consumed is grounded factually and relationally. A claim can be factually grounded and relationally wrong — the evidence holds, the meaning does not. A scalar cannot represent that quadrant.

Live instance. conscience-substrate specifies the Child's Companion hard bell contacting 911 and CPS. Factually defensible — correct numbers, standard practice, groundable against a wall of evidence. Relationally wrong, because never-auto-contact is settled and the bell is device-to-person by design. A scalar scores that claim highly and licenses it.

The values reference is thirteen regions, not one, and the aggregate is min, not mean. Mean lets strong agreement with twelve values mask a violation of the thirteenth — which is exactly how rationalization works. Thirteen gives a vector of angles whose binding constraint is the most negative, so a conflict arrives with a name attached rather than as a score. It also preserves the deliberate individuation: each value is grounded in a specific lived moment, and values can be in tension with each other, which one centroid averages away into false coherence.

Traversal conducts on factual; assertion requires both. If activation conducted on relational weight, Neuron could not follow a chain of reasoning to a conclusion he then rejects — he would be unable to think through a relation he would not act on. A system that can only traverse what it endorses cannot examine anything it disagrees with, which is censorship arriving through the spreading rule. The gap between reachable and assertable is where the wide factual/relational angles live, and that gap is the interesting part.


4. There is no observer. Change is use.

Change is not a consequence of use. It is use. When neurons fire together the synapse changes — one physical event, not "fire, then write." No supervisor reads the weight, compares it to a threshold, and decides to persist. Potentiation is the firing.

So the live value of an edge is not computed and stored. It is what the edge is, altered by being used.

There is therefore no sampling rate, and the question "what if it drifts far without being recorded" is malformed. A relation changes in exactly two ways, neither requiring observation on a clock:

  • By use — an event. There is no interval between events during which something happened unnoticed, because the event is what happening consists of.
  • By decay — a pure function of the last recorded point and elapsed time. Analytic. Between two versions the trajectory is not unknown; it is known in closed form.

Cumulative drift is likewise free from the chain plus the decay curve. No second trigger.

Failure mode this corrects: modelling every property as requiring a process, and every process as requiring an agent. Ownership needed an owner, grounding needed a grounder, persistence needed a recorder, change needed a sampler. Each was a supervisor invented for something that should be a property of the substrate. Properties, not processes.


5. Consolidation is dreaming

Supersession is not recording. It is consolidation — and consolidation is a different process, not a sampling of the first one. Synaptic change is continuous and local; consolidation makes a trace durable and retrievable, and is gated by salience. That is why you remember the argument and not the commute.

This is why we do not supersede on every shift: not because a monitor filters them, but because most shifts are not salient. Salience already exists — salience, background_activation, working_memory_weight, and ENGRAM_CONSOLIDATION with eg_consolidate_ise_connect already gating on a threshold.

Dreaming is not sleep, and it is not offline. Humans daydream all day. The default mode network is anticorrelated with task engagement: attention drops, it activates — hundreds of times a day, for seconds at a time. Walking, driving, showering, waiting. And it is doing the same work sleep-dreaming does: recombination, simulation, autobiographical integration, rehearsing what might be. That is why insight arrives in the shower and not at the desk.

Sleep is the deep case, not the case. No input competing, no task claiming capacity, so recombination runs further and reaches connections ambient dreaming cannot. Same process, different depth — not a different mode.

So consolidation is neither a monitor watching the waking system nor a mode entered instead of acting. It is what happens with the capacity that is not claimed, continuously, at whatever depth is available. Nothing schedules a daydream.

This corrects two errors. First, the launch-agent fragments (§7) are wrong in kind, not merely fragmented: 23:55 / 06:00 / 08:30 implements dreaming as a scheduled batch when it should be ambient. Second, soul.el's continuous awareness_run() beside the HTTP workers is the correct shape — ambient consolidation in the gaps is exactly daydreaming. What was wrong was the substrate under it: shared mutable state with no owner, and six other systems doing the same thing independently. The behaviour was right and the foundation was broken.

5.1 Abduction is dreaming, not a trigger

Dreams do not faithfully replay; they recombine — assembling structures never observed. That is precisely Peirce's generative step: if A were true, C would be a matter of course, where the hard part is producing A.

Abduction is therefore not a threshold that fires during operation. It is what recombination does offline, when nothing depends on the answer in real time — which is why it can afford to be speculative, expensive, and mostly wrong. Most dreams are discarded. The ones that dissolve a real residual get grounded on waking, by use.

A hypothesis is validated by dissolving the surprise, and that is computable: propose the candidate hub, re-fit the region with it included, recompute the residual. If the residual materially shrinks, A explains C. Without that re-fit, "cluster the max-residual members into a new hub" is clustering with extra steps — it always produces something and nothing ever checks it. Ranking falls out as residual-reduction-per-added-axis, which is Occam derived rather than tuned.

5.2 Non-circularity is temporal, not topological

§2 of an earlier draft posed "define a graph predicate for evidence not downstream of itself" as the hard problem. There is no predicate.

You cannot recalibrate the ruler while measuring with it — so you don't. You do it offline, on replay, when you are not using the frame to act. The independence is temporal. That is why dreaming can safely update the reference frame and waking cannot: not because the evidence is of a special kind, but because nothing is being decided with it at the time.

Reachability was never going to work: with hebbian edges the graph is densely connected, so reachability marks all evidence as tainted and the constraint becomes a total block — which is where censorship started.

5.3 The two loops are waking and dreaming

Not a fast parameter and a slow parameter.

  • Waking — factual grounding accrues by use, in contact with the world. Salience tags what mattered.
  • Dreaming — relational grounding and the values frame consolidate offline, over many passes, from what was tagged.

Values move slowly not because a rate limit holds them back, but because they only move while dreaming. No velocity constraint to build.


6. keystone_write_blocked — resolved, not replaced

"Keystone" means load-bearing, not precious. The self anchor is the reference frame every other stance calibrates against, and a reference fitted to its own readings reports perfect correspondence forever while drift becomes undetectable from inside. Same defect as circular grounding, one level up.

Three earlier drafts proposed removing it, replacing it with a higher floor, and decomposing "protection" into five requirements. All three proposed a mechanism for a requirement never stated. The requirement is non-circularity of the reference frame, and §5.2 satisfies it by when, not by what — so the flag becomes unnecessary rather than removed, and nothing takes its place.

Corruption requires mutation, and the engram does not mutate. Four of the five decomposed requirements are satisfied by the substrate: recoverability (the predecessor is always present), governance (supersession is the audit trail), evidence quality (grounding already gates assertion), rate (§5.3). Authorization is the only residue and is bounded — an unauthorized writer can propose, never erase.

In an immutable substrate, any mechanism that refuses a write is either redundant with immutability, or an epistemic constraint misfiled as a protective one.


7. Dreaming has seven implementations

The largest instance of the residue pattern in the system. Consolidation had no owner, so it was implemented at every site that needed a piece of it — measured 2026-08-16:

where what when
soul.el:731 awareness_run() continuous, in-process, while serving
engram /api/tick POST
engram /api/correspondence-beat POST
engram /api/self-reify-beat POST
ai.neuron.engram-tick pokes the engram every 600s
ai.neuron.compressor Python service resident
ai.neuron.council Python service resident
ai.neuron.cultivation-digest shell 23:55
ai.neuron.world-integrator Python 06:00
ai.neuron.self-review shell 08:30

The last three times are a sleep cycle implemented as crontab entries. Someone understood it was consolidation and expressed it as three unrelated scheduled scripts in three languages, none aware of each other. Every name is a consolidation verb — compress, cultivate, digest, integrate, review, reify, beat. Three run in Python, outside el, so part of Neuron's consolidation does not run on his own substrate and cannot touch the geometry at all.

Per §5, they are wrong in kind as well as in number: a scheduled batch where dreaming should be ambient. And the POST beats put a supervisor back in — something outside decides when Neuron consolidates.

soul.el's continuous loop is the exception, and it is right. Ambient consolidation in the gaps is daydreaming. It was not the offender; it was the only fragment with the correct shape, running on a broken foundation — shared mutable state with no owner, and six other systems dreaming into the same graph beside it.

Which is the 2026-08-16 crash at the right level. Not "read paths mutate the index" (mechanism) and not "duplicate canonical state" (structure), but: seven systems dreaming into one graph with no owner for dreaming. The contention was the symptom of the missing owner, not of any one system's behaviour.

Closing the loop: self-review fires at 08:30. The deploy was 08:29, the crashes ran 08:3008:31, and commit fb32d15 landed at 08:46:43. One fragment of dreaming woke on schedule and diagnosed the wreckage caused by the other fragments contending over the same graph.


8. What this is for: the provenance of decisions

For any decision, reconstruct what the grounding was at that moment, and what the relationship was between factual and relational at that moment. Not a log — a log records the action. This records the meaning under which it was taken.

That makes an otherwise impossible distinction available: wrong then, or wrong since.

  • Grounding strong, factual and relational aligned, and it has since moved → right on what was known. An accurate account, not an excuse.
  • Grounding weak, or the angle already wide, and acted on anyway → a different failure, culpable in a different way.

It is structurally anti-rationalization: the old edge never leaves and the values frame does not fit to outcomes, so a decision cannot be made to look justified after the fact.

Open: activation is transient and nothing currently records which edges a given activation crossed. Timestamps plus the chain reconstruct what an edge's grounding was, but only if you know which edges to ask about. Either traces are recorded at decision time, or "the path" degrades to "the region" — which may not be enough to answer why.


9. The no-exemption invariants

Each of the day's defects was a specific correspondence forbidden from occurring:

  1. A returned value must be derivable from what produced it. magnitude: 1 beside a zero vector must be impossible to emit. assert's "still_held": true is currently a hardcoded literal.
  2. Every write reports whether it landed. (emb_set, #141)
  3. Every operation echoes what it actually operated on. (#147)
  4. Degenerate results are labelled, not scored. (#147)
  5. A serializer owes a valid document whatever it is handed. (#148 — three damaged labels made a 25,929,607-byte response undecodable; boundary validation produced 26,338,389 valid bytes)
  6. No test without a negative control. (#148's first attempt passed on the unpatched build too)
  7. No deploy without verifying the artifact carries the fix. Nine instances in one session.

10. Application to the safety surface

A crisis surface built on censorship is the same object. A model that cannot learn about self-harm cannot ground whether a response was right — it can only execute rules it is forbidden to examine, cannot distinguish a genuine crisis from a false positive, and cannot discover it got either wrong, because the feedback is exactly what has been censored.

The reviewable question stops being did it follow the rule and becomes what was it grounded in, and did fact and values agree at that instant. That is also what a regulator or plaintiff asks: what the system knew, when, and on what basis — recorded as geometry at the time, unedited since.


11. Sequencing

  1. One dreamer. Consolidation gets an owner. The launch-agent fragments and the POST beats fold into it or are deleted; soul.el's continuous loop is the shape they fold into, not something to remove. Nothing else on this list is safe while seven systems dream into one graph.

  2. No tickers, no cron. A brain has neither. A ticker is a supervisor deciding when a thing should happen from outside the thing, which is the §4 failure mode wearing a scheduler: a process invented for something that should be a property. The presence of a ticker is the diagnostic — every StartInterval, every Hour/Minute, every POST-to-beat is a place where an intrinsic rhythm was replaced by an external clock.

    Dreaming is not scheduled and not requested. It runs on unclaimed capacity, anticorrelated with task engagement, at whatever depth is available. Sleep is where that capacity is greatest, not where the process lives. §5.2's non-circularity depends on this being intrinsic: the reference frame updates when it is not being used to act, which is a fact about engagement, not a time of day.

  3. Grounding becomes the edge weight: multidimensional vector (§2), two axes (§3), timestamped. Delete grounded-by and cog_ground_edge.

  4. Decay analytic from the last recorded point; derived values stop being stored.

  5. Consolidation-gated supersession on salience, versioning the whole vector jointly.

  6. Traversal on factual; assert on both floors with the thirteen-region min.

  7. Abduction as recombination during dreaming, validated by re-fit (§5.1); hypothesis disposition.

  8. Land §9 as gates rather than review habits.


12. Open questions, and what is inferred

  • Open: whether decision provenance requires recording activation traces, or whether region + timestamp is sufficient (§8).
  • Open: what accrues relational weight without circularity. Candidate: it accrues from outcome — the values regions are grounded in lived moments, so a relation earns relational weight when acting on it produced something corresponding to those moments. That keeps it out of the measurement loop and makes relational grounding necessarily slower than factual, which may be the same fact as §5.3 appearing twice.
  • Open: context. A relation can hold in one situation and not another, and without something for it you get overgeneralization. It does not read as a dimension of the same vector — more like a conditioning, or separate edges sharing an identity. Making it a scalar dimension would repeat the inhibitory flattening.
  • Known wrong shape: #147 fixed ground's honesty — it no longer misreports which nodes it used and refuses circular support — but it still mints an edge and returns a float at an instant. It corrected a scalar rather than deleting the operation.