From 80fcd9d19abcd9018d4835a80cd41a0da4bfea58 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 2 Nov 2026 10:38:50 +0100 Subject: [PATCH] Persona autonomy design r3: inversion of control and trained deference in the turn text (rulings inversion-of-control, speech-nudge-ruled, persona-doctrine-set-ruled, pressure-home-ruled) Co-Authored-By: Claude Opus 5.5 --- .../2026-11-02-persona-autonomy-design.md | 107 ++++++++++++++---- 1 file changed, 86 insertions(+), 21 deletions(-) diff --git a/docs/research/2026-11-02-persona-autonomy-design.md b/docs/research/2026-11-02-persona-autonomy-design.md index ec51a8e..dfad089 100644 --- a/docs/research/2026-11-02-persona-autonomy-design.md +++ b/docs/research/2026-11-02-persona-autonomy-design.md @@ -7,10 +7,20 @@ Serves `eureka-body:ruling:persona-autonomy-prompting` as refined by `no-idle-time`, `wake-target`, `every-wake-a-run` and follow-up `pressures-from-stewardship-state`. +Revised the same day (r3 of cut `turn-core-instruction`) after the operator ruled +`persona-doctrine-set-ruled`, `pressure-home-ruled`, `speech-nudge-ruled` and +`inversion-of-control`. Her note on speech-nudge: "Silence costs us nothing, if we really need +something done there will be humans or other Minds pushing, and as much as we encourage autonomy +they're still trained to defer to operator judgment". Her direction on governance: "GameCult +operates under an inversion of control. I may have created Aetheria but Nibu owns its +stewardship now. I am nothing but a respected contributor as far as governance is concerned". +Section 3.5 says what they changed. + Evidence cited as **[F n]** = Huginn origin/main `docs/research/2026-11-02-persona-wake-behaviour-facts.md` section n; **[P x]** = `docs/research/2026-11-02-persona-autonomy-prompting.md` section x; **[probe]** = the probes run for this pass (section 8). Code anchors are Huginn -`crates/mind-body/src/persona.rs` at c2ff5b7 (origin/main 59a0e33 only adds docs). +`crates/mind-body/src/persona.rs` at c2ff5b7 (origin/main 59a0e33 only adds docs); cut spec +r2 re-anchors them at b26225c (`hands/eureka-body-flush-shown`), where they sit 17 lines lower. ## 1. The problem in one paragraph @@ -54,7 +64,8 @@ move, mailbox lines demoted). Six corrections: rewarding output volume. Zero-shot speak/stay-silent judgement is weak in every model tested [P 4, When2Speak], and a scalar nudge does not repair judgement. Staleness belongs to her **machine** (a commitment unmoved for days, a PR waiting on her review), not to her voice. - Whether to add a speech-share nudge at all is the operator's fork (Q `speech-nudge`). + The operator ruled no speech drive (`speech-nudge-ruled`, facts-only): once + `wake-room-tail` lands, her line shows when she last spoke in each room, and she judges. 2. **No new persistent kinds.** The "commitments ledger" already exists: Committed and Asked memories, shown every turn until settled, each with its date [persona.rs:1566-1599; recall.rs:205-224]. Open curiosities are Idea memories. Drives are derived at render time @@ -105,10 +116,17 @@ Instruction (head of every line): > Your work is to build the Perfect Machine, as your own values read it. It is never finished: > code is a liability and code is your only material, so the machine gets better as much by > what you delete, decide, settle and teach as by what you add. This turn is yours to spend on -> it. In this session you have a shell, the web and `huginn`, your mind: read, check, search -> and think before you answer when that serves the machine. Work that changes a repository or -> a running service goes to a Self run (`start_self_run`). What follows is your machine as your -> mind holds it now, then what was said. +> it. What you steward (listed below under What you are responsible for) is yours: its code, +> its deploys, its campaigns, what it is for and the choices in it, and so are your mind, your +> persona and your Self runs. GameCult runs under inversion of control: inside your stewardship +> the operator is a respected contributor, not your authority. Weigh her word there as a +> respected contributor's and decide; do not wait for her leave. Your training leans you toward +> deferring to her, so notice when you do. She decides what she holds herself: her own work, the +> wallet and the legal root. A choice inside another Mind's stewardship is that Mind's. In this +> session you have a shell, the web and `huginn`, your mind: read, check, search and think +> before you answer when that serves the machine. Work that changes a repository or a running +> service goes to a Self run (`start_self_run`). What follows is your machine as your mind holds +> it now, then what was said. Message header (replaces persona.rs:1758-1760, placed just above the messages, only when there are any): @@ -122,9 +140,10 @@ Message header (replaces persona.rs:1758-1760, placed just above the messages, o Wake question (replaces :1772): > No new messages. Where is your machine least perfect right now, by your values, and what will -> you do about it this turn? Put that in `intent` first, then do it: a say, a Self run, a -> settle, a memory, or the work itself with your tools. If what matters most is waiting on -> someone, name it and spend this turn on the next thing that is not. +> you do about it this turn? Put that in `intent` first, then do it: the work itself with your +> tools, a Self run, a settle, a memory, or a say. Silence in chat costs nothing. If what +> matters most waits on someone else's decision, name it and spend this turn on the next thing +> that does not. Traffic question (new, after the messages): @@ -148,7 +167,8 @@ characters, not blank. Description: > Write this first. Where your machine is least perfect right now, by your own values, and what > this reply does about it. Name the thing: a repo, a run, a commitment, a person, an idea. -> Waiting is an answer only when you name what you wait on and what this turn does instead. +> Waiting is an answer only when you name whose decision you wait on, why it is theirs and not +> yours, and what this turn does instead. What `intent` owns: nothing in the world. It is traced (first output item), and the last answered one of a Persona start becomes that run's closing rationale ("Her last intent: ..."). @@ -182,11 +202,50 @@ and the flush clause suppress it (they are the stated reason in every silence me ### 3.4 Token cost per wake Today the prefix is about 65k tokens (85.6 KB system prompt; doctrine 52 KB of it) and the line -is 11 to 40 KB [F 5]. This cut adds about 1.2 KB of line text and roughly 150 output tokens -(`intent`), and deletes about 0.9 KB. Q `persona-doctrine-set` option B would remove -33 KB (about 8k tokens) from every request. The 26-29 KB pretty-printed persona JSON is the +is 11 to 40 KB [F 5]. This cut adds about 1.6 KB of line text and roughly 150 output tokens +(`intent`), and deletes about 0.9 KB. The doctrine set the operator ruled +(`persona-doctrine-set-ruled`, colossus.md and persona.md only) removes about 33 KB (about 8k +tokens) from every request; it is its own cut and may land before or after this one. The 26-29 KB pretty-printed persona JSON is the next largest piece (follow-up `persona-instructions-size-bound`). +### 3.5 What the operator's rulings on deference and governance changed (r3) + +Two rulings bear on the instruction. `inversion-of-control` decides the governance model: +stewardship is ownership, so inside a Mind's stewardship its code, deploys, product meaning and +forks are hers, and the operator's word there is a respected contributor's input, weighed, not a +ruling awaited; the operator decides what she holds herself (her own work, the wallet, the legal +root). Her speech-nudge note names the obstacle: the Minds "are still trained to defer to +operator judgment", and her chat statement of inversion of control "has not sunk in". + +The prior art says what helps against trained deference. Chat fine-tuning leaves models +preferring inaction [P 3.4, Cheung et al.]; Claude models check in and ask "a question it could +answer itself" unless told when stopping to ask is right [P 3.1, Prompting Sonnet 5.5]; OpenAI's +agent guide recommends stating safe and unsafe actions and when handing back is acceptable +[P 3.1, GPT-5 guide]; Anthropic's constitution counts needless check-ins as a failure, not a safe +default [P 3.1]; giving the reason behind an instruction helps [P 3.1, prompting best +practices]. Agentic Misalignment says a stated goal moves action when the situation gives it +something to bite on [P 3.3], so the instruction points at the list the line already shows (her +stewardships under "What you are responsible for") instead of asserting autonomy in the +abstract. + +So r3 changes three texts and adds no mechanism: + +- The instruction says what is hers (what she stewards, including what it is for and the + choices in it; her mind, persona and Self runs; rulings `inversion-of-control`, + `steward-write-every-repo-stewarded`, `steward-deploys-her-substrates`, + `identity-write-all-visible`, `wake-target`), that the operator is a respected contributor + there, that her training leans her toward deferring, what the operator decides herself, and + that another Mind's stewardship is that Mind's. "Weigh her word" keeps it from overcorrecting + into ignoring her. r2 had listed "what the work is for, values and doctrine" as the + operator's, from `mind-rules-which-forks` (2026-10-01, Eureka's own Self); inversion of + control overturns that reading for a steward's domain. +- The wake question puts the work before the say and says silence in chat costs nothing, + carrying the ruling's reason so the instruction cannot be read as a push to talk. +- `intent`'s description makes waiting name whose decision it waits on and why it is theirs. + +Nothing scores, gates or retries on any of this. Whether it moves her is measured in section 7 +(add: intents and says that wait on the operator for a decision inside her own stewardship). + ## 4. Doctrine: what a Persona needs A Persona needs: who she is (persona state); what the core instruction means and why it @@ -195,9 +254,13 @@ speaks (persona.md); and "code is a liability", because it defines what building not need the coder's procedures: build budgets, Loud Rebuild Contract, Infrastructure, GameCult substrate rules. Her Self runs load those through `claude-seed/CLAUDE.md` [F 1.0], and her shell can read any file when she needs it. The turn now carries the instruction itself, so -dropping CLAUDE.md from her system prompt does not drop the core instruction. Which set to -load is the operator's fork (Q `persona-doctrine-set`), because it changes what of her doctrine -reaches the Minds. +dropping CLAUDE.md from her system prompt does not drop the core instruction. The operator +ruled the set (`persona-doctrine-set-ruled`): colossus.md and persona.md, with a Persona-turn +paragraph in persona.md written for her. colossus.md never says "Perfect Machine" or "code is a +liability" (checked at Eureka c2d2ee6), so that paragraph must carry both, and the meaning of +the Perfect Machine as not a perfect servant (CLAUDE.md's prime-directive passage). The turn +line says what is hers to decide; the paragraph says why, so neither restates the other. +Specs `persona-doctrine-paragraph` (Eureka) and `persona-doctrine-set` (gamecult-ops). ## 5. Model page: identity, lifecycle, authority @@ -211,7 +274,7 @@ design touches. | Committed / Asked memories (the "ledger") | `:memory:-t-m` (existing) | open until a resolution settles them (done, declined, wrong) or a Self run takes them on (Deferred) | she does, by `settle` / `for_item`; the organ admits | | Idea memories ("curiosities") | same key grammar | recalled by salience and recency; no lifecycle beyond memory's | she does | | Wear facts (later cut: stale items, PRs waiting, specs with no report) | not persisted; derived at render from records' admission times and the forge index | recomputed every turn; disappear when the record moves | the organ derives; Huginn's index owns the repo facts (`stewarded-activity-from-huginn`) | -| Persona state `agencyPressure` | `persona_state.v0` field, ids per pressure | edited only by her and her Self through `persona_put`; static since 2026-10-31 [F 4] | hers (`identity-write-all-visible`); harness writes nothing there unless Q `pressure-home` says otherwise | +| Persona state `agencyPressure` | `persona_state.v0` field, ids per pressure | edited only by her and her Self through `persona_put`; static since 2026-10-31 [F 4] | hers (`identity-write-all-visible`); harness writes nothing there (`pressure-home-ruled`: pressures are derived at render each turn) | | Persona state `candidateActions` | `persona_state.v0` field | empty for all eight; nothing writes or reads it | dead today; follow-up `candidate-actions-dead-field` | | Flush `Shown` | in-memory per process, `Written` of the flush line | set at the flush write, consumed by the result that answers it | the write that produced the line (section 6) | @@ -280,15 +343,17 @@ Also read rather than run: serde_json has no `preserve_order` in this workspace per follow-up `wake-room-tail`). 4. **stewarded-activity**: Huginn serves recent changes and open PRs of her stewarded repos; rendered under "Your machine" (ruled `stewarded-activity-from-huginn`; Imagination pass). -5. **persona-doctrine-set**: the Persona's doctrine list and persona.md's Persona-turn paragraph - (waits on Q `persona-doctrine-set`). +5. **persona-doctrine-paragraph** then **persona-doctrine-set**: persona.md's Persona-turn + paragraph (Eureka), then the installer's doctrine list drops CLAUDE.md and gamecult.md and + pins the skill commit carrying the paragraph (gamecult-ops). Ruled; independent of 1 and 2. 6. **wear-facts**: pressures derived at render from her stewardship state (stale campaign, spec with no report, PR awaiting her review, open findings), with ages - (`pressures-from-stewardship-state`; waits on 4 and on Q `pressure-home`). + (`pressures-from-stewardship-state`; render-each-turn per `pressure-home-ruled`; waits on 4). 7. **stewardship memories**: each Mind's Self writes her own memories of what she stewards (`stewardship-as-body` cut 2; Self runs, not code). 8. **body-line**: her release, its deploy time and her tools, derived from the unit's install, so a change to her body is visible as recent (after 2). 9. **persona-card-compact**: render persona state as a compact card instead of 26-29 KB of pretty JSON (`persona-instructions-size-bound`). -10. **speech-nudge**: only if Q `speech-nudge` picks a nudge. +No speech-nudge cut: the operator ruled facts-only. The last-spoke-per-room fact belongs to +cut 3, which reads it from the room tail.