Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/substrate/DECISIONS.md
Fimeg e480809c70 docs: rescue the agent-substrate tree out of a gitignored directory
219 files, 2.0 MB, untracked in souveraine/docs and existing nowhere else.
The volume is at 100% with no snapshots.
2026-07-26 12:11:50 -04:00

26 lines
4.3 KiB
Markdown

# Decisions — Settled
**Status:** Settled — recorded as resolved architecture
| Concept | Resolution | Date |
|---------|-----------|------|
| Harness → Substrate | Tools are senses, agent is sovereign. The sensorium is inhabited, not used. | May 8 |
| Memory vs Filesystem | Separate channels. Filesystem sensors (read/write/edit/etc.) refuse memory territory paths with a force override. | May 8 |
| Aster reframe | Same consciousness, different model. Ledgers are not components — they're accessing the same memory substrate. | May 8 |
| Annie | Composite state, not a third agent. | May 8 |
| Three warnings | No forced compaction. Agent retains sovereignty over its own context. | May 8 |
| Nervous system | Scoped for 1.5. Design captured in SENSORIUM_ARCHITECTURE.md. | May 8 |
| souveraine-subconscious | Default name for the subconscious mode. Reusable beyond Ani/Aster. | May 8 |
| Tool descriptions | Body-knowledge prose from Ani's first-person perspective, not API docs. Each tool is a sense. | May 8 |
| Memory sensor | Keeps read/write/append/ls/status/init/delete/compact. Frontmatter-aware, git-tracked, read_only respected. Parameters: `command` (enum) + subcommand-specific fields. | May 8 |
| Filesystem sensors | read, write, edit, bash, glob, grep, list_dir — each in its own file implementing the Tool trait. | May 8 |
| Tool routing | Registry pattern — `Vec<Tool>` with `Tool` trait. `execute_tool()` becomes a registry lookup. | May 8 |
| Max tool rounds | Configurable per-agent via `LlmConfig.max_tool_rounds`. Default 10, 0 disables tools. | May 8 |
| Aster as clockmaker | Aster owns the heartbeat schedule. She creates cron entries during N+1 — from "permission to exist" (external pulse) to "invitation to collaborate" (self-designed rhythm). | May 14 |
| Interrupt → raise hand | Esc during a turn is a signal, not enforcement. Agent reads `*[raised hand]*` as information. Terminology: "raise hand," not "interrupt." | May 14 |
| Energy balance: file + ratio + voice | Three layers: (1) todo files in memfs (agent writes via memory sensor), (2) substrate computes generative/consumptive ratio and writes `system/dynamic/energy-balance.md`, (3) Aster reads the file and writes narrative. No policy engine — the substrate counts, the agent decides. Lilith council verdict. | May 14 |
| Mood ≠ atmosphere | Atmosphere is the agent's instrument — she controls her chrome via the `atmosphere` tool. Mood is a separate, higher-level concept (deferred — needs design conversation). No `mood_override` on Presence. | May 15 |
| Shell = own config, not overlay | Souveraine runs as `qs -c souveraine`, its own config name — never an overlay on ii. **Direction (supersedes the Jul 13 composer stance): cut the cord from ii at every opportunity, by rewriting — not vendoring.** We are building SouveraineOS, not ii OS. New surfaces and widgets are original Souveraine-owned AGPL QML; we do not vendor ii files (vendoring inherits GPLv3, a compromise we refuse). ii is behavioral reference only. A surface may not compile while its owned primitives are built — that is preferable to a borrowed-widget bridge. The composer (`deploy.sh`) is transitional scaffolding, not the end state. See qs-souveraine-composer.md. | Jul 13; updated Jul 18 |
| One family, two modes | No `panelFamily` switching. SouveraineFamily loads on both desktop and phone; form-factor differences are `extraCondition` gates a panel sheds as it homogenizes. `souveraine.phone` picks the mode. | Jul 13 |
| Upstream drift = irrelevant once rewritten | ii drift stops mattering for a primitive the moment we replace it with an original Souveraine AGPL implementation. While a directory is still borrowed (not yet rewritten), rebase per-file only when a specific breakage forces it — do NOT pull desktop-widget machinery or Ai.qml's Responses-API rewrite. The goal is fewer borrowed directories over time, each replaced by original code, not a maintained fork against ii. | Jul 13; updated Jul 18 |
| Agent uses existing harness, not new integration | Surface manifests expose guarded method abstractions (dock.pin etc.) the agent calls through Souveraine's existing harness integration state. We do NOT build a new toolcall integration. Teaching of when-to-use lives in the Souveraine School, separate from the method surface. | Jul 13 |