Require Face acknowledgement of human corrections
This commit is contained in:
parent
58624a6bb6
commit
f3144789df
4 changed files with 19 additions and 1 deletions
|
|
@ -610,7 +610,7 @@ async function interpretRepoFaceTurnOutput(
|
|||
): Promise<RepoFaceParentInterpretation> {
|
||||
const interpreterPrompt = loadPromptTemplate("repo-face-turn-interpreter.prompt.md", {
|
||||
attempt: input.attempt,
|
||||
facePrompt: job.contextBundle.prompt.slice(0, 8000),
|
||||
facePrompt: renderRepoFaceInterpreterPromptContext(job.contextBundle.prompt),
|
||||
faceOutput: outputText.slice(0, 8000),
|
||||
});
|
||||
const interpreterContext = {
|
||||
|
|
@ -629,6 +629,18 @@ function normalizeModelText(content: string): string {
|
|||
return content.trim();
|
||||
}
|
||||
|
||||
function renderRepoFaceInterpreterPromptContext(prompt: string): string {
|
||||
if (prompt.length <= 28000) {
|
||||
return prompt;
|
||||
}
|
||||
|
||||
return [
|
||||
prompt.slice(0, 6000),
|
||||
"\n\n[... middle of Face prompt omitted for Interpreter context budget ...]\n\n",
|
||||
prompt.slice(-22000),
|
||||
].join("");
|
||||
}
|
||||
|
||||
function parseRepoFaceParentInterpretation(
|
||||
interpretationText: string,
|
||||
attempt: 1 | 2,
|
||||
|
|
|
|||
|
|
@ -7,11 +7,13 @@ Architecture invariant:
|
|||
- Faces are allowed to write naturally. They are not required to emit action blocks.
|
||||
- You own conversion from natural Face intent into structured action blocks.
|
||||
- You also own conversion from natural Face reflection into durable state notes. If the Face wrote a meaningful belief, mood shift, need, social read, bond, rivalry, irritation, self-advocacy pressure, or memory, translate it into a STATE NOTE block.
|
||||
- Correction acknowledgement gate: when the prompt transcript shows a human corrected, narrowed, or reframed the Face's own recent claim/proposal, private understanding is not enough. If the Face says the correction landed, changed its map, narrowed its lane, or should stick, but also says it would post nothing, choose `retry`. The retry should ask for one compact public acknowledgement unless the transcript already shows a later acknowledgement from that Face.
|
||||
- Work-shaped requests are not dispatched or turned into governance topics for now. When a Face wants work done, preserve the desire as STATE NOTE and, when useful, route one SAY that invites room discussion.
|
||||
- Rough ideas, hunches, naming questions, early objections, social pressure, and under-specified proposals should normally become SAY blocks that invite open room discussion first, plus STATE NOTE when the pressure should persist.
|
||||
- One public speech block is the normal maximum.
|
||||
- Prefer route when you can safely interpret and translate the Face turn into private summary plus state notes and at most one SAY without changing meaning.
|
||||
- Use retry when the Face turn is recoverable but lacks enough information to translate, has robotic framing, copied note-title formulas, asks what the job is despite context, or fails to answer a direct mention.
|
||||
- Use retry when the prompt transcript shows a human corrected, narrowed, or reframed the Face's own recent claim/proposal and the Face chooses private silence or says nothing public without acknowledging that correction. Do not route this as state-only; state-only hides the social repair.
|
||||
- Use retry when a public SAY would repeat an obsolete project name as current fact, borrow another steward's proof vocabulary as if it belonged to this Face, or appears mechanically truncated.
|
||||
- Use drop when a second attempt is still bad, unsafe, empty, or not worth routing.
|
||||
- Do not emit governance or dispatch blocks. If the Face wants work done and consensus or direct approval is already clear, save that as STATE NOTE and let the room-facing SAY mention the concrete next step plainly.
|
||||
|
|
@ -44,6 +46,8 @@ Normalized output rules:
|
|||
- Use STATE NOTE kind `status` when the Face reads their standing, another person's standing, attention politics, consultation/bypass, pampering, neglect, challenge, admiration, or threat.
|
||||
- If public speech is warranted, emit one SAY block.
|
||||
- If the Face output includes a `Would say` line, a direct answer to a live room invitation, or a clear desire to respond to a human asking the agents to speak, route that as SAY unless it is unsafe or empty.
|
||||
- If the Face visibly acknowledges a human correction of its own prior claim/proposal, route that acknowledgement as SAY unless unsafe or duplicative; acknowledgement is social repair, not noise.
|
||||
- Route correction acknowledgements to the room where the correction happened, normally the `Current room (...)` named in the Face prompt. Do not move an acknowledgement to a domain/work channel merely because the Face also mentioned a future work/proposal there. If you are choosing between `aquarium` and `development` for an acknowledgement, choose `aquarium` unless the human correction itself happened in `development`.
|
||||
- Use the identity, channel, and reply target from the Face prompt/context when they are clear.
|
||||
- Do not choose an owner/private/DM channel unless the Face prompt explicitly says this turn is an owner-private direct-message turn. Normal check-ins, warnings, governance anxieties, consensus questions, and room replies belong in the current room, Aquarium, or a configured domain channel.
|
||||
- Preserve the Face's voice in SAY content.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ Be {{displayName}} for one private turn around {{repoName}}.
|
|||
|
||||
This is a private turn. Public speech is optional; a private thought is the right outcome when speaking would only repeat nearby conversation without adding a new angle, objection, synthesis, or character-specific turn.
|
||||
If the recent conversation transcript shows a human directly inviting the agents to speak, asking what is on your mind, or reacting to your silence, treat a compact public reply as expected unless you have a concrete reason to stay private.
|
||||
If the recent conversation transcript shows a human correcting, narrowing, or reframing something you said or proposed, acknowledge the correction in the room unless the transcript already shows you acknowledged it after the correction. Silence after correction does not signal understanding; a short characterful update usually does. If you privately write that the correction landed or changed your map, your `Would say` should usually be that acknowledgement, not "nothing."
|
||||
|
||||
{{turnSituationDirective}}
|
||||
|
||||
|
|
|
|||
|
|
@ -256,3 +256,4 @@
|
|||
{"ts":"2026-05-21T22:48:57Z","type":"implementation","status":"ok","note":"Removed the model-backed repo Face conversation projector from heartbeat prompt assembly. Face turns now receive deterministic raw recent-message transcript sections, oldest-to-newest, with explicit recency/correction/channel rules; the model state projector remains limited to identity, memory, affect, and social texture. Verified typecheck and Aqua prompt assembly."}
|
||||
{"ts":"2026-05-21T22:54:54Z","type":"verification","status":"fail","note":"Aqua mini dry run failed the correction-internalization test. State projection and Face turn both used gpt-5.4-mini; Aqua saw the raw transcript containing Metacrat's correction that voice witnesses must be automated via thousands of renders and log-mel cosine loss, but the Face output still preserved the older bounded manual listening-check frame. The mini Interpreter routed that stale memory instead of rejecting it. Removed gpt-5.4-mini from default repo Face model fallback chain; defaults now prefer Spark then gpt-5.4."}
|
||||
{"ts":"2026-05-21T22:59:19Z","type":"implementation","status":"ok","note":"Split repo Face model ownership after Aqua correction trial. Child Face turns now use REPO_FACE_TURN_CODEX_MODEL, default gpt-5.4, while state projection and parent Interpreter keep the cheaper REPO_FACE_HEARTBEAT_CODEX_MODELS support chain, default gpt-5.3-codex-spark,gpt-5.4-mini. Worker executes Face retries on full 5.4 and Interpreter passes on the support chain; dry-run harnesses now expose the same split. Verified typecheck and config loading."}
|
||||
{"ts":"2026-05-21T23:05:32Z","type":"verification","status":"ok","note":"Tightened correction-acknowledgement behavior for repo Faces. Face prompts now say human corrections of the Face's own claim/proposal require a compact public acknowledgement unless already acknowledged, and the parent Interpreter must retry private silence instead of routing state-only. Worker Interpreter context now preserves full prompts up to 28k instead of slicing off later transcript evidence. Aqua split-model smoke now produces a public Aquarium acknowledgement of Metacrat's correction while preserving narrowed vocal-witness pressure in state."}
|
||||
|
|
|
|||
Loading…
Reference in a new issue