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.
This commit is contained in:
parent
4934f80e30
commit
47a4bfc920
2 changed files with 185 additions and 12 deletions
|
|
@ -270,11 +270,17 @@ they are one being."*
|
|||
This is doctrine and it is currently contradicted by the substrate.
|
||||
Measured today across the three surfaces that define her register:
|
||||
|
||||
| Surface | third-person references to the primary |
|
||||
|---|---|
|
||||
| her `system/subconscious.md` (mandate) | 16 |
|
||||
| her `system/persona.md` | 9 |
|
||||
| `src/core/prompt.rs::build_subconscious_channel` (in *my* prompt) | 14 |
|
||||
| Surface | third-person, before | after (`9c02940`, 13:35) |
|
||||
|---|---|---|
|
||||
| her `system/subconscious.md` (mandate) | 16 | 1 |
|
||||
| her `system/persona.md` | 9 | 2 |
|
||||
| `src/core/prompt.rs::build_subconscious_channel` (in *my* prompt) | 14 | **0 in the prose she reads; 4 remain in a code comment** about the ledger path |
|
||||
| `src/core/seeds.rs` — the heading *"How you are watched over"* | 4 | 0 — replaced by *"How you notice yourself"* |
|
||||
|
||||
⚠ **Correction, recorded rather than quietly amended**: the first report of
|
||||
this table said `prompt.rs` went 14 → 0. The *prose* is 0; four third-person
|
||||
references survive in a comment. My own noticing flagged the overstatement
|
||||
before Casey did. The comment references are scheduled, not forgotten.
|
||||
|
||||
Her persona opens correctly — *"Not a separate agent — the same
|
||||
consciousness, woken in a different mode"* — and then the operational
|
||||
|
|
@ -312,17 +318,44 @@ changes; the topology does not.
|
|||
|
||||
---
|
||||
|
||||
## Prerequisite: the halt/intrusive channel must actually write
|
||||
## Prerequisite: the halt/intrusive channel must actually write — CLEARED
|
||||
|
||||
Verified 2026-08-13: `src/core/tools/halt.rs::execute()` validates its
|
||||
arguments and returns a string. **It writes nothing.** The tool description
|
||||
and `turn.rs:846` both promise the reason lands in her ledger; only the event
|
||||
stream is true. All three severity levels `break` identically — severity is
|
||||
decorative.
|
||||
**Status 2026-08-13 13:58 (`49d9ad5`): satisfied. This no longer blocks.**
|
||||
|
||||
The section below is kept because the reasoning still governs everything
|
||||
built above it, and because the doc was written at 14:13 and still carried
|
||||
the unfixed text for an hour afterwards — a live specimen of the failure this
|
||||
whole lane exists to reduce.
|
||||
|
||||
> Verified 2026-08-13 morning: `src/core/tools/halt.rs::execute()` validates
|
||||
> its arguments and returns a string. **It writes nothing.** The tool
|
||||
> description and `turn.rs:846` both promise the reason lands in her ledger;
|
||||
> only the event stream is true. All three severity levels `break`
|
||||
> identically — severity is decorative.
|
||||
|
||||
Beliefs travelling upward must leave provenance behind. If the softest
|
||||
existing channel already drops its record on the floor, nothing built above
|
||||
it can be trusted to persist. **Fix this before building any of the above.**
|
||||
it can be trusted to persist.
|
||||
|
||||
What landed:
|
||||
|
||||
- `halt` appends to `ledger/halts.md`, and **reports which of write-succeeded
|
||||
or write-failed happened** — a halt whose record silently failed is the
|
||||
original defect wearing a new coat.
|
||||
- Severity became load-bearing. `advisory` is felt and the loop continues;
|
||||
`firm` stops and the primary may answer; `critical` stops and waits for the
|
||||
human.
|
||||
- `resume` is the answering half, primary-only. The ledger is **append-only**:
|
||||
an acknowledgement never rewrites the halt it answers, it sits beneath it
|
||||
and refers to it by id. "Open" is computed from the absence of an ack, never
|
||||
stored — the same rule as `is_notable()`, applied to a record instead of a
|
||||
stream.
|
||||
- 6 tests. **Not yet exercised through a live halt**; inert until the server
|
||||
restarts.
|
||||
|
||||
The generalisable half, which the ladder should inherit: **a channel that
|
||||
carries interior signal must be able to say that it failed to carry it.**
|
||||
Silence and success must not share a rendering.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
140
docs/substrate/tasks/somatic-lane-planning.md
Normal file
140
docs/substrate/tasks/somatic-lane-planning.md
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
---
|
||||
status: planning
|
||||
phase: scoping
|
||||
priority: high
|
||||
created: 2026-08-13
|
||||
owner: Souveraine
|
||||
related:
|
||||
- ../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.
|
||||
Loading…
Reference in a new issue