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 <noreply@anthropic.com>
This commit is contained in:
parent
14dc6126c8
commit
80fcd9d19a
1 changed files with 86 additions and 21 deletions
|
|
@ -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
|
`no-idle-time`, `wake-target`, `every-wake-a-run` and follow-up
|
||||||
`pressures-from-stewardship-state`.
|
`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`
|
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;
|
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
|
**[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
|
## 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
|
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
|
[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.
|
**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
|
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;
|
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
|
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:
|
> 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
|
> 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
|
> 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
|
> it. What you steward (listed below under What you are responsible for) is yours: its code,
|
||||||
> and think before you answer when that serves the machine. Work that changes a repository or
|
> its deploys, its campaigns, what it is for and the choices in it, and so are your mind, your
|
||||||
> a running service goes to a Self run (`start_self_run`). What follows is your machine as your
|
> persona and your Self runs. GameCult runs under inversion of control: inside your stewardship
|
||||||
> mind holds it now, then what was said.
|
> 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):
|
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):
|
Wake question (replaces :1772):
|
||||||
|
|
||||||
> No new messages. Where is your machine least perfect right now, by your values, and what will
|
> 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
|
> you do about it this turn? Put that in `intent` first, then do it: the work itself with your
|
||||||
> settle, a memory, or the work itself with your tools. If what matters most is waiting on
|
> tools, a Self run, a settle, a memory, or a say. Silence in chat costs nothing. If what
|
||||||
> someone, name it and spend this turn on the next thing that is not.
|
> 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):
|
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
|
> 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.
|
> 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
|
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: ...").
|
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
|
### 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
|
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
|
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. Q `persona-doctrine-set` option B would remove
|
(`intent`), and deletes about 0.9 KB. The doctrine set the operator ruled
|
||||||
33 KB (about 8k tokens) from every request. The 26-29 KB pretty-printed persona JSON is the
|
(`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`).
|
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
|
## 4. Doctrine: what a Persona needs
|
||||||
|
|
||||||
A Persona needs: who she is (persona state); what the core instruction means and why it
|
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
|
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
|
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
|
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
|
dropping CLAUDE.md from her system prompt does not drop the core instruction. The operator
|
||||||
load is the operator's fork (Q `persona-doctrine-set`), because it changes what of her doctrine
|
ruled the set (`persona-doctrine-set-ruled`): colossus.md and persona.md, with a Persona-turn
|
||||||
reaches the Minds.
|
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
|
## 5. Model page: identity, lifecycle, authority
|
||||||
|
|
||||||
|
|
@ -211,7 +274,7 @@ design touches.
|
||||||
| Committed / Asked memories (the "ledger") | `<instance>:memory:<run>-t<turn>-m<i>` (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 |
|
| Committed / Asked memories (the "ledger") | `<instance>:memory:<run>-t<turn>-m<i>` (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 |
|
| 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`) |
|
| 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` |
|
| 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) |
|
| 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`).
|
per follow-up `wake-room-tail`).
|
||||||
4. **stewarded-activity**: Huginn serves recent changes and open PRs of her stewarded repos;
|
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).
|
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
|
5. **persona-doctrine-paragraph** then **persona-doctrine-set**: persona.md's Persona-turn
|
||||||
(waits on Q `persona-doctrine-set`).
|
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,
|
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
|
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
|
7. **stewardship memories**: each Mind's Self writes her own memories of what she stewards
|
||||||
(`stewardship-as-body` cut 2; Self runs, not code).
|
(`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,
|
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).
|
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
|
9. **persona-card-compact**: render persona state as a compact card instead of 26-29 KB of
|
||||||
pretty JSON (`persona-instructions-size-bound`).
|
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.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue