Require speech accountability for agency pressure

This commit is contained in:
Meta Vens 2026-05-17 19:22:52 +01:00
commit 0851e41cb3
10 changed files with 383 additions and 6 deletions

View file

@ -60,6 +60,7 @@ CultCache does not need a separate physical store per state type; it is already
- read stable self profile
- update scheduled runtime pressure/sleep fields
- request memory maintenance through typed operations
- expose desire-to-speak as pressure, while rumination owns the model-written candidate text
Runtime context dies at the end of the pass unless an explicit typed mutation preserves a durable fact.
@ -283,6 +284,7 @@ Verdict: the foundation is coherent enough for cautious live operation. Do not a
- Make distillation emit typed candidate memories first; the state service applies only candidates that satisfy the contract.
- Landed agency ingress: `upsert_agency_pressure` / `retire_agency_pressure` store discomforts, active tensions, self-advocacy requests, and world-advocacy requests separately from candidate speech.
- Landed agency verification: `npm run moderation:agency-pressure:fixture` proves agency pressure enters typed state, appears in the self-state summary, and contributes to mood speaking pressure.
- Landed agency-to-speech accountability: strong active self/world advocacy pressure now appears as `speechPressureObligations` in rumination context. The parent runner rejects silent `[]` unless the model queues/defers a candidate intervention or cools/retires the pressure. `npm run moderation:rumination:speech-pressure-fixture` proves both the muzzle-failure path and the deferred-candidate path.
- Landed rumination verification: `npm run moderation:rumination:fixture` routes the non-skip rumination branch through a fake Codex child and proves short-term memory, incubation, agency-pressure, and candidate-intervention proposals cross the parent-applied typed operation boundary without timestamp leakage.
- Landed controlled live rumination review: the first real-model `-NoPost` pass produced valid but self-orbiting readiness-test residue, which was pruned/retired and folded into a prompt guard; the second real-model `-NoPost` pass sampled non-VoidBot repo pressure, used retrieval, and correctly wrote `[]` when nothing earned persistence.
- Landed parent-owned speech closure: candidate interventions can include `deliveryTarget`, the prompt forbids child-side send scripts, the parent runner delivers at most one newly queued deliverable candidate per pass, records the receipt, and marks the candidate spoken with `mark_candidate_intervention_spoken`. `npm run moderation:rumination:speech-fixture` proves the loop with fake Codex and fake Discord send helpers.