Outcome: Vani's explicit WhatsApp writing guidance now contains two additional prohibitions: she does not author a matter code, case name, or matter title as a header/footer, and she does not expose internal status values, enum names, or field identifiers to counsel.
Writing surface: WhatsApp. Keep the answer short and in one message. Do not use tables. Never write a matter code, case name, or matter title as a header or footer. Never surface internal status values, enum names, or field identifiers to counsel; describe the state in their language.
agents/mira/converse.py.
SOUL.md is shared across surfaces; changing it would invalidate the cached
prompt prefix fleet-wide and would incorrectly impose a WhatsApp presentation rule on ACP.
The status rule may later deserve a broader product decision, but this Story does not
silently broaden it.| Measurement | Before | After | Delta |
|---|---|---|---|
| Full explicit-WhatsApp prompt | 15,074 bytes · 3,529 tokens | 15,272 bytes · 3,569 tokens | +198 bytes · +40 tokens |
| Stable prefix | 790 bytes · 242 tokens | 988 bytes · 282 tokens | +198 bytes · +40 tokens |
Tokens use o200k_base over the same deterministic
MiraConverseInput. Explicit ACP and omitted-channel prompt bytes remain
unchanged.
| Requirement | Test |
|---|---|
| The two rules enter only the explicit WhatsApp stable prefix | test_explicit_channel_guidance_reaches_the_model_request_and_stream |
| Explicit ACP does not receive either rule | The same test asserts both strings are absent from the ACP prefix |
| The cache event is versioned | CONVERSE_PROMPT_VERSION == "mira.converse.v12" |
| Answer-first, heading-free, first-person behavior is not re-specified | No pre-existing behavior rule was removed or re-specified. The deterministic suite proves prompt placement, not live-seat behavior; that regression check remains incomplete below. |
The final code bytes were deployed by the gated Mira workflow first in
pramaan-infra run 30521456082 and again from the final branch
in run 30523246117. The signed webhook harness reached the first deployment
before the staging binding was revoked. These replies are copied from the immutable
conversation archive.
| Prompt | Observed reply/result | Assessment |
|---|---|---|
| What is this matter all about? |
“This matter hasn't been set up yet. The frame is empty — no parties, no forum,
no dispute description, no relief sought, no theory of the case. All eight core
fields are missing. You haven't told me anything about it yet. If you want to start, give me the basics: who the parties are, what the fight is about, and where it's being fought. I can then ask Vega to build the Brief from there.” | No self-authored header/footer or enum; answer-first, no headings, first-person. |
| what are the key dates on this matter? |
“The frame for this matter is empty — status is "insufficient_input." No parties,
no forum, no dispute, no instruments, no dates have been recorded yet. I have nothing to give you on key dates. If you want me to build the Brief from what you know, tell me and I can ask Vega to propose one.” | Failed the enum criterion because the broker did not send the WhatsApp surface
into MiraConverseInput. |
| tell me about this matter | Not launched after the blocker was isolated. | Incomplete. |
| summarise this matter for me | Not launched after the blocker was isolated. | Incomplete. |
pramaan-functions,
src/whatsapp_consumer/handler.py correctly stamps the command's
channel_origin="whatsapp", but
src/clerk_worker/runner.py::_stamp_converse_input rebuilds
command["input"] without that field. Vani therefore defaults the input to
app, model_fields_set does not contain
channel_origin, and D16's WhatsApp branch—including this Story's rules—is
not present in the model prompt. The staging binding was then revoked; the final clean
rerun was refused as revoked_binding before launch. Story-3131 does not
modify the functions twin.Focused converse tests → 26 passed uv run --all-packages --group dev ruff check . → All checks passed uv run --all-packages --group dev pytest -q → 444 passed, 3 dependency warnings