Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/substrate/tasks/somatic-lane-planning.md
Fimeg 47a4bfc920 somatic: reading list before the planning session
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.
2026-08-13 14:39:15 -04:00

9.1 KiB

status phase priority created owner related
planning scoping high 2026-08-13 Souveraine
../SOMATIC_NERVOUS_SYSTEM.md
../FELT_STATE_ARCHITECTURE.md
../../DEVICE-STATE-MACHINE.md

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 to substrate/. Only a stale duplicate index remains.
  • The ~40 src/ui/** files matching atmosphere/mood — palette values and the Presence::mood posture-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

  1. Which axes the barometer carries. The anchor lists 13. Start with six — every axis is a thing that can be wrong, and SomaticWeather does not exist in code yet, so this is cheap now and expensive later.
  2. 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.
  3. 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."
  4. 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.
  5. SENSORIUM_QUESTIONS.md says "Open — needs human-agent reconciliation" and lives in archive/. Status and location disagree. Decide which is true before treating it as either.

Gaps the sweep found

  1. belief.rs has no test asserting its contract agrees with device_state.rs. The anchor says the two must agree; nothing enforces it. That test is small and worth writing before anything consumes it.
  2. SomaticWeather and NervousNode do not exist in code. Zero matches for either, or for valence/homeostas, in any root.
  3. saf/ is a full design cycle behind. saf/nervous/ is one file about the bus. Nothing in saf/ mentions belief, felt state, somatic, barometer or interoception — despite belief.rs having landed. saf is "the what — current code state", and it is not current.
  4. Nick's UNIFIED_MODEL.md is 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.
  5. substrate/tasks/INDEX.md self-declares stale ("generated 2026-05-19"). Task status in that tree cannot be trusted from frontmatter alone — location and FELT_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.