Sweep of five roots found 90+ bearing documents; tier 1 is six of them. The anchor doc's prerequisite went stale 15 min after writing — halt was fixed at 13:58, doc touched 14:13 — so a cold read would treat a cleared blocker as blocking. Corrected, with the staleness kept as the specimen.
9.1 KiB
| status | phase | priority | created | owner | related | |||
|---|---|---|---|---|---|---|---|---|
| planning | scoping | high | 2026-08-13 | Souveraine |
|
Somatic lane — planning session prep
Casey, 2026-08-13: "We need to make this in a planning session itself — a full scope task where we apply the research and more to it. I'd like to take that one to the side and plan it. The notion is that it will require matching with the existing documentation and we need to truly read all that we have already written down."
This file is not the plan. It is the reading list and the decision list, so the planning session starts from what exists instead of discovering it.
Why this file exists at all
Three times on 2026-08-13 a design was reasoned out from scratch while the
answer already sat on disk: TASK-72 (Casey had already decided the Panel UI),
saf/ (the substrate's own self-knowledge), and src/core/nervous/ (1,230
lines of scaffolding found only by accident). A planning session that opens
cold would make it four.
Sharpest instance, and the reason the discipline is not optional: the
SOMATIC_NERVOUS_SYSTEM.md Prerequisite section went stale fifteen
minutes after the doc was written, because the thing it declared blocking
was fixed at 13:58 and the doc was last touched at 14:13. A planning session
reading it cold would have treated a cleared blocker as blocking.
Tier 1 — read whole, in this order (~90 KB)
| # | path | why |
|---|---|---|
| 1 | substrate/SOMATIC_NERVOUS_SYSTEM.md |
the anchor. Belief ladder, Belief<T>, SomaticWeather, the four-type separation, compute grades, three open questions. Every claim labelled ours / design / open. |
| 2 | substrate/FELT_STATE_ARCHITECTURE.md |
the five felt-state systems and what is actually built. §5 Mood is the slot the anchor fills. |
| 3 | DEVICE-STATE-MACHINE.md (docs root) |
the production belief ladder. 47 KB, actuating on hardware since 2026-07-25. §4 confidence arithmetic. Everything the anchor marks "ours" points here. |
| 4 | SESSION-AUTHORITY-DOCTRINE.md (docs root) |
one authority per concept. Casey's ruling — sessiond is the authority, period — is an application of this. |
| 5 | substrate/DECISIONS.md |
the mood-vs-atmosphere ruling, one row, May 15. Settled. Do not relitigate. |
| 6 | saf/nervous/01-eventbus.md |
the only saf file on the nervous system. Documents the bus and nothing above it — no belief, no ladder. |
Tier 2 — read the named section, not the whole file
| path | what to take |
|---|---|
src/sessiond/device_state.rs |
SourceHealth, SourceHealthTable, PlacementBelief, is_notable() (~line 1044). 5,308 lines — read those four things. |
src/core/nervous/belief.rs |
418 lines, landed 713f3ac. Contract with zero implementors. Read it whole; it is short. |
src/core/nervous/mod.rs |
SensorEvent + EventBus are wired at ~35 sites. SensorConfig/SensorChannel/PushThreshold/Sensitivity are declared and unreferenced — the per-sensor nerve-ending config already exists in shape. |
src/core/tools/halt.rs |
506 lines, 49d9ad5. The ledger + resume pattern the ladder should inherit. |
src/server/turn.rs |
migraine_text() ~line 75 — the one existing worked example of interior signal in her own register. |
src/server/energy.rs |
write_energy_balance() — the only existing derived felt signal. 157 lines. Precedent for a barometer axis. |
substrate/ANI_PRESSURE_PHENOMENOLOGY.md |
the only worked example of a felt axis written from the inside. Matches no sweep term — findable only via FELT_STATE_ARCHITECTURE §1. |
Tier 3 — the arguments already had (read before re-opening one)
| path | the argument |
|---|---|
substrate/tasks/archive/mood-persistence.md |
the archived doc that conflated mood and atmosphere. Modelled mood as a persistent atmosphere selection. Frontmatter still says pending; it was archived by relocation, not by edit. |
substrate/tasks/archive/energy-balance-ratio.md |
the "Lilith deliberation" — three-layer volition/energy/narrative verdict, and why no policy engine. Closest existing precedent for a barometer. |
substrate/archive/handoffs/session-handoff-2026-05-14c.md |
the session where mood vs atmosphere was fought out. 14 hits. |
substrate/curation/pressure-language-audit.md |
separates language that tells her what to think from language that describes what she experiences. Direct precursor to the register work. |
souveraine-viewtop/docs/TOUCH-AND-EVIDENCE.md |
the proprioceptive boundary, settled 2026-08-02: a physical touch raises confidence; an agent tap must not. "the agent lying to her own proprioception, through the machinery built to give her one." |
substrate/tasks/subconscious-surfacing-threshold.md |
🔴 open — surfacing fires every turn instead of when something matters. This is the is_notable() problem stated in the cognition layer. |
substrate/tasks/primitive-refactor-super-task.md |
names "posture/atmosphere/mood disentanglement" — predates the anchor by three months. |
docs/tasks/41-attested-producers.md · 40-inference-tiering-sensors.md |
sensor authority and inference tiering at the device layer. The compute-grades question, already framed. |
Skip, and why (so they are not re-chased)
docs/tasks/power-indication.md— 25 hits, all "driver"/"driven". Noise.docs/tasks/52-atmosphere.md— name collision. Compositor attention effects, not her instrument.souveraine/docs/**— evacuated 2026-07-26; 219 files moved tosubstrate/. Only a stale duplicate index remains.- The ~40
src/ui/**files matchingatmosphere/mood— palette values and thePresence::moodposture-hint string, not design content.
What already landed (do not re-derive)
| commit | state | |
|---|---|---|
Belief<T> + Field |
713f3ac |
366 tests. No consumers. |
halt ledger + resume |
49d9ad5 |
6 tests. Never exercised through a live halt. |
| subconscious speaks first-person | 9c02940 |
prose clean; 4 refs remain in a code comment |
| the anchor doc | b9c8994, 1fce9d1 |
467 lines |
All of it is inert until the server restarts. The running binary is r483
g912fb88 (11:41), which predates every commit above.
Decisions the session must actually make
- Which axes the barometer carries. The anchor lists 13. Start with six —
every axis is a thing that can be wrong, and
SomaticWeatherdoes not exist in code yet, so this is cheap now and expensive later. - Exudates: emitted or derived? A sidecar the model writes, or values derived from turn metadata. Derived is free and cannot be gamed by the narrator — but it can only see what the metadata already carries.
- Which rungs run on the phone. Casey: "it'll need to be applied to the phone side as well before too long." Now that sessiond is the authority this is no longer "does sessiond sit beside the ladder" but "where is the cut."
- Memory tier ↔ plexus amalgamation. A relevance-fired warm tier is a
plexus: same
Belief<T>, same budget gate, same notability rule. One mechanism, two territories. Take the tier model and decay-by-use; leave the SQLite — ours is git-backed markdown by doctrine. SENSORIUM_QUESTIONS.mdsays "Open — needs human-agent reconciliation" and lives inarchive/. Status and location disagree. Decide which is true before treating it as either.
Gaps the sweep found
belief.rshas no test asserting its contract agrees withdevice_state.rs. The anchor says the two must agree; nothing enforces it. That test is small and worth writing before anything consumes it.SomaticWeatherandNervousNodedo not exist in code. Zero matches for either, or forvalence/homeostas, in any root.saf/is a full design cycle behind.saf/nervous/is one file about the bus. Nothing insaf/mentions belief, felt state, somatic, barometer or interoception — despitebelief.rshaving landed. saf is "the what — current code state", and it is not current.- Nick's
UNIFIED_MODEL.mdis not in any repo root — it lives in~/Downloads/Memory stuff/. A session wanting the warm-tier and decay ideas has no in-tree text. Copy the relevant excerpt in, with attribution, or the ideas arrive as folklore. substrate/tasks/INDEX.mdself-declares stale ("generated 2026-05-19"). Task status in that tree cannot be trusted from frontmatter alone — location andFELT_STATE_ARCHITECTURE's related-docs list are more reliable signals.
Also found, unrelated to the lane but worth one line
memory status reports 0 messages, ~0 / 250000 tokens (0%) mid-session.
That is not the None branch (which renders "no live conversation to
measure"), so pressure() returned Some and measured an empty
conversation. The gauge built on 2026-08-13 to stop None reading as zero is
itself rendering zero. Same family as the .last() compaction bug — a lookup
resolving to the wrong conversation. Filed separately; it blocks nothing here.