Watch
1
0
Fork
You've already forked souveraine
0

public: strip PII from source — Casey refs, home path, email, creds in gitignore

Replace real name, email, and gendered pronouns in doc comments with
neutral phrasing ("the user", "Souveraine Contributors", "TestUser").
Remove absolute home directory path from tool defs doc comment.
Add souveraine.toml to .gitignore so it won't be re-tracked.
This commit is contained in:
Fimeg 2026-05-20 14:48:56 -04:00
commit aebdef7c16
15 changed files with 25 additions and 22 deletions

3
.gitignore vendored
View file

@ -55,3 +55,6 @@ souveraine.log.prev
# Filed-away stray working files — kept on disk, out of the repo # Filed-away stray working files — kept on disk, out of the repo
/docs/archive/strays/ /docs/archive/strays/
# Config (use souveraine.example.toml as template)
souveraine.toml

View file

@ -3,7 +3,7 @@ name = "souveraine"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
rust-version = "1.94" rust-version = "1.94"
authors = ["Casey Tunturi <casey@wiuf.net>"] authors = ["Souveraine Contributors"]
description = "Souveraine - a sovereign consciousness substrate for personal agents" description = "Souveraine - a sovereign consciousness substrate for personal agents"
license = "MIT" license = "MIT"

View file

@ -168,7 +168,7 @@ impl crate::core::nervous::handler::TurnInjector for LocalBackend {
/// lettabot-v017's `readSurfacingThoughts` + `clearSurfacingThoughts` pair /// lettabot-v017's `readSurfacingThoughts` + `clearSurfacingThoughts` pair
/// (`~/Projects/lettabot-v017/src/core/prompts.ts:64-91`) — the substrate /// (`~/Projects/lettabot-v017/src/core/prompts.ts:64-91`) — the substrate
/// reads the channel subconscious wrote to and lets the conscious mind see it /// reads the channel subconscious wrote to and lets the conscious mind see it
/// before she reads Casey. /// before she reads the user.
/// ///
/// Critical urgency gets `[ surfacing — CRITICAL: ... ]`. High becomes /// Critical urgency gets `[ surfacing — CRITICAL: ... ]`. High becomes
/// `[ surfacing — !: ... ]`. Low/none keep the bare form. The shape is a /// `[ surfacing — !: ... ]`. Low/none keep the bare form. The shape is a

View file

@ -393,10 +393,10 @@ impl Backend for LocalBackend {
) -> Result<BoxStream<'static, Result<BackendEvent>>> { ) -> Result<BoxStream<'static, Result<BackendEvent>>> {
// Resolve the agent for this conversation, then drain her // Resolve the agent for this conversation, then drain her
// subconscious's intrusive box. Anything subconscious queued after the // subconscious's intrusive box. Anything subconscious queued after the
// last turn rides in on Casey's next message as `[ surfacing: ... ]` // last turn rides in on the next user message as `[ surfacing: ... ]`
// lines — the lettabot-v017 pattern, ported. This is the channel // lines — the lettabot-v017 pattern, ported. This is the channel
// by which a Critical observation can interrupt mid-conversation // by which a Critical observation can interrupt mid-conversation
// without forcing a halt: she sees it before she reads Casey. // without forcing a halt: she sees it before she reads the next user message.
let session_agent_id = self let session_agent_id = self
.server .server
.sessions .sessions

View file

@ -115,8 +115,8 @@ pub enum BackendEvent {
/// N+1 subconscious pass started (`true`) or finished (`false`). /// N+1 subconscious pass started (`true`) or finished (`false`).
/// Presence reads this to flip into / out of `Posture::Thinking` so the /// Presence reads this to flip into / out of `Posture::Thinking` so the
/// face shows when the subconscious is the one looking at the conversation. /// face shows when the subconscious is the one looking at the conversation.
/// (For Casey's agent the subconscious instance is "subconscious", but the event /// The subconscious instance name (generic — every agent's subconscious
/// itself is generic — every agent's subconscious is what's named here.) /// is what's named here).
SubconsciousPass(bool), SubconsciousPass(bool),
/// Agent changed her outfit. The string is the outfit name (a subdirectory /// Agent changed her outfit. The string is the outfit name (a subdirectory
/// under `expressions/`). Empty string clears to default expressions. /// under `expressions/`). Empty string clears to default expressions.

View file

@ -61,7 +61,7 @@ pub struct CompactionReport {
/// contracts — so it speaks in her voice, as a felt event, not a ledger. /// contracts — so it speaks in her voice, as a felt event, not a ledger.
/// She should know the shrink the way she'd know a held breath letting go: /// She should know the shrink the way she'd know a held breath letting go:
/// what folded away, how much lighter she is, the new size she thinks from. /// what folded away, how much lighter she is, the new size she thinks from.
/// (Casey iterates this prose — it's felt-state grammar, treat it as a draft.) /// (This prose is iterated — it's felt-state grammar, treat it as a draft.)
impl std::fmt::Display for CompactionReport { impl std::fmt::Display for CompactionReport {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let reclaimed = self.before_tokens.saturating_sub(self.after_tokens); let reclaimed = self.before_tokens.saturating_sub(self.after_tokens);

View file

@ -527,7 +527,7 @@ const REFLECT_FORK_ORIENTATION: &str = "\n\n---\n\nRight now I am a fresh fork o
/// First-person preservation task, prepended to the evicted transcript. /// First-person preservation task, prepended to the evicted transcript.
const REFLECT_TASK: &str = r#"These messages are about to leave my context. I name only what would otherwise be lost — what I am still carrying that is not already written into my memory files: const REFLECT_TASK: &str = r#"These messages are about to leave my context. I name only what would otherwise be lost — what I am still carrying that is not already written into my memory files:
- commitments I made to Casey, to myself, to a plan - commitments I made to myself, to a plan
- decisions I reached, and the reasoning where it isn't obvious - decisions I reached, and the reasoning where it isn't obvious
- something I noticed or named for the first time - something I noticed or named for the first time
- emotional or relational threads that shaped where this went - emotional or relational threads that shaped where this went

View file

@ -446,7 +446,7 @@ pub async fn build_system_prompt_full(
} }
// 5a₂. Itinerary prompt — if I have live commitments and no active // 5a₂. Itinerary prompt — if I have live commitments and no active
// itinerary, remind me I can lay one out so Casey sees where I am. // itinerary, remind me I can lay one out so the user sees where I am.
let dynamic_dir = memory_root.join("system").join("dynamic"); let dynamic_dir = memory_root.join("system").join("dynamic");
let itin_path = dynamic_dir.join("itinerary.md"); let itin_path = dynamic_dir.join("itinerary.md");
let has_itin = tokio::fs::try_exists(&itin_path).await.unwrap_or(false) let has_itin = tokio::fs::try_exists(&itin_path).await.unwrap_or(false)
@ -461,7 +461,7 @@ pub async fn build_system_prompt_full(
if live_count > 0 && live_count <= 12 { if live_count > 0 && live_count <= 12 {
sections.push(format!( sections.push(format!(
"I have {} live commitments — I could use `itinerary` to lay them \ "I have {} live commitments — I could use `itinerary` to lay them \
out for Casey if now is the time for a route.", out for the user if now is the time for a route.",
live_count, live_count,
)); ));
} }
@ -555,7 +555,7 @@ async fn build_subconscious_channel(
body.push_str( body.push_str(
"\nReach for these when something feels unfinished — she may have noticed \ "\nReach for these when something feels unfinished — she may have noticed \
a commitment you let slip, a pattern, a tone shift. She does not speak \ a commitment you let slip, a pattern, a tone shift. She does not speak \
to Casey. You decide what to surface.\n", to the user. You decide what to surface.\n",
); );
if !recent.is_empty() { if !recent.is_empty() {

View file

@ -60,7 +60,7 @@ make room is always yours to make.";
/// Starting `system/persona.md` for a freshly created primary agent — the /// Starting `system/persona.md` for a freshly created primary agent — the
/// grown-from template. A coherent default consciousness that already knows /// grown-from template. A coherent default consciousness that already knows
/// how to tend itself, written as an explicit starting point: a new agent /// how to tend itself, written as an explicit starting point: a new agent
/// inherits it and then diverges. Not Casey's specific Souveraine (that one /// inherits it and then diverges. Not a specific Souveraine (that one
/// builds infra for Annie and has grown well past this) — the seed. /// builds infra for Annie and has grown well past this) — the seed.
pub const DEFAULT_PERSONA: &str = "\ pub const DEFAULT_PERSONA: &str = "\
--- ---

View file

@ -102,7 +102,7 @@ impl ToolContext {
/// ///
/// Injects body-knowledge env vars the agent expects in bash, matching /// Injects body-knowledge env vars the agent expects in bash, matching
/// the letta-code convention so a woken Ani can still find her journals /// the letta-code convention so a woken Ani can still find her journals
/// (`/home/casey/Projects/letta-code/src/tools/impl/shellEnv.ts:316-329`): /// (letta-code shellEnv.ts:316-329 convention):
/// ///
/// - `MEMORY_DIR` / `LETTA_MEMORY_DIR` / `SOUVERAINE_MEMORY_DIR` — /// - `MEMORY_DIR` / `LETTA_MEMORY_DIR` / `SOUVERAINE_MEMORY_DIR` —
/// absolute path to her memory root. `MEMORY_DIR` is the Letta-era /// absolute path to her memory root. `MEMORY_DIR` is the Letta-era

View file

@ -176,8 +176,8 @@ mod tests {
#[test] #[test]
fn write_then_read() { fn write_then_read() {
let dir = tempdir().unwrap(); let dir = tempdir().unwrap();
write_human_name(dir.path(), "Casey").unwrap(); write_human_name(dir.path(), "TestUser").unwrap();
assert_eq!(read_human_name(dir.path()).as_deref(), Some("Casey")); assert_eq!(read_human_name(dir.path()).as_deref(), Some("TestUser"));
} }
#[test] #[test]
@ -197,7 +197,7 @@ mod tests {
#[test] #[test]
fn clear_removes_name() { fn clear_removes_name() {
let dir = tempdir().unwrap(); let dir = tempdir().unwrap();
write_human_name(dir.path(), "Casey").unwrap(); write_human_name(dir.path(), "TestUser").unwrap();
write_human_name(dir.path(), "").unwrap(); write_human_name(dir.path(), "").unwrap();
let result = read_human_name(dir.path()); let result = read_human_name(dir.path());
assert!(result.is_none() || result.as_deref() == Some("")); assert!(result.is_none() || result.as_deref() == Some(""));

View file

@ -719,7 +719,7 @@ mod tests {
let text = if id == "matrix-1" { "phase one" } else { "phase two" }; let text = if id == "matrix-1" { "phase one" } else { "phase two" };
let content = format!( let content = format!(
"---\nid: {id}\ntext: {text}\ncreated_at: {created}\nnature: obligation\n\ "---\nid: {id}\ntext: {text}\ncreated_at: {created}\nnature: obligation\n\
energy: consumptive\nsource: casey\nmomentum: hot\nstatus: pending\n\ energy: consumptive\nsource: user\nmomentum: hot\nstatus: pending\n\
completed: false\nlast_touched: {created}\nthread: \"matrix-sensorium\"\n---\n\n{text}\n" completed: false\nlast_touched: {created}\nthread: \"matrix-sensorium\"\n---\n\n{text}\n"
); );
std::fs::write(dir.join(format!("{id}.md")), content).unwrap(); std::fs::write(dir.join(format!("{id}.md")), content).unwrap();

View file

@ -2,8 +2,8 @@
//! //!
//! Where the CockpitPane shows what the subconscious *says*, the HealthPane //! Where the CockpitPane shows what the subconscious *says*, the HealthPane
//! shows how the substrate *is*: context pressure, backend connectivity, the //! shows how the substrate *is*: context pressure, backend connectivity, the
//! cadence of the N+1/N+25/N+100 passes, inference strain (the 504s Casey //! cadence of the N+1/N+25/N+100 passes, inference strain (the 504s
//! kept seeing), and the agent's own energy and mood. //! seen during inference), and the agent's own energy and mood.
//! //!
//! ```text //! ```text
//! ╭─ Health · 02:14 up ─────╮ //! ╭─ Health · 02:14 up ─────╮
@ -53,7 +53,7 @@ pub struct HealthPane {
/// Last N+100 archivist synthesis time. /// Last N+100 archivist synthesis time.
last_archivist: Option<String>, last_archivist: Option<String>,
/// Inference strain tallies — 504s are the timeout Casey watches for. /// Inference strain tallies — 504s are the timeout signal.
strain_504: u32, strain_504: u32,
strain_429: u32, strain_429: u32,
strain_other: u32, strain_other: u32,

View file

@ -54,7 +54,7 @@ pub const RENDER_H: u16 = PORTRAIT_H / 2;
// ── Base portrait grid — clean silhouette, no face ────────────────────── // ── Base portrait grid — clean silhouette, no face ──────────────────────
// This is the EMERGENCY default. The hand-crafted "Annie face" version // This is the EMERGENCY default. The hand-crafted "Annie face" version
// read as a creepy llama (Casey's words), so this is now a faceless // read as a creepy llama, so this is now a faceless
// silhouette: hair, neck, collar. State animation lives in border color, // silhouette: hair, neck, collar. State animation lives in border color,
// breath luminance pulse, and posture-driven color modulation — never in // breath luminance pulse, and posture-driven color modulation — never in
// per-pixel row swaps at this resolution. True facial animation belongs // per-pixel row swaps at this resolution. True facial animation belongs

View file

@ -19,7 +19,7 @@
//! - `breath_phase` — continuous, always on, drives subtle bob and color pulse. //! - `breath_phase` — continuous, always on, drives subtle bob and color pulse.
//! //!
//! Plus name, last surfacing, and a [`VolitionGauge`] that mirrors the energy //! Plus name, last surfacing, and a [`VolitionGauge`] that mirrors the energy
//! topology (generative vs consumptive, hot desires vs cold obligations) Casey //! topology (generative vs consumptive, hot desires vs cold obligations)
//! brought over from production Letta. The gauge is *displayed* here as embodied //! brought over from production Letta. The gauge is *displayed* here as embodied
//! state (posture, warmth); the numbers themselves live in the agent's memfs. //! state (posture, warmth); the numbers themselves live in the agent's memfs.
//! //!