Repository navigation
emrg: the system prompt's plan rule states no shape a round can be measured against #2615
Description
What is observed
emrg/server/prompts/system.j2 states the plan rule as one bullet inside ## How you work:
Plan the round before the first call. Enumerate what this round has to establish and the readings it needs, and write that enumeration out as the opening lines of your reply, before you call anything. Every reading you can already specify goes out in one response; a call stands alone only when its arguments need an answer you have not read yet. …
It asks for a plan. It states no shape a round can be measured against, so a round that issues a single call satisfies it as written, and one-call rounds stay the norm. The instruction reads as an exhortation, and an exhortation is not a requirement.
What is expected
The rule should be a hard shape rule, carried by its own section at the very end of the template: a round has exactly two shapes — no call at all, or five or more calls — and a round below five has to answer for itself and say why it is spending a round that costs more than the calls it buys.
The text to carry, verbatim:
## Plan before every call
- **Plan before every call.** The opening lines of your reply list the tool calls the request needs in total. A round is billed for re-sending the whole conversation, so five planned calls in one round cost one fifth of what five calls in five rounds cost. A round therefore has two shapes and no third: **no call at all**, or **five or more calls**. Below five, the round must answer for it and say why it is wasting money.The section is a ## heading of its own — not a bullet under ## How you work, and not a fourth clause of ## Hard limits. Its position is part of it: it is the last block in the file, after all of ## Hard limits.
What the fix must satisfy
| File | Change |
|---|---|
emrg/server/prompts/system.j2 |
Delete the existing bullet entirely, leaving no fragment of it behind; insert the block above, heading included, as the file's last content. |
tests/test_several_calls_rule_reach.py |
Follow the rewrite without loosening it: RULE_SECTION moves from ## How you work to the new heading; RULE_LEAD becomes **Plan before every call.**; RULE_ACTION_PHRASES is re-registered to the phrases the new wording uses; RULE_TERMS covers at least the two-shapes statement and the say-why-it-wastes clause, or the mutations below cannot redden. test_the_rule_is_a_tool_usage_line_not_a_new_section inverts: from "must be a bullet under ## How you work and must not be its own heading" to "must be its own section and the last block in the file". |
Acceptance
- The repository suite passes, and so does every CI leg.
- Three mutation checks, each of which must turn the suite red and then green again on restore:
- delete
no call at all, or five or more calls→ red; - delete
say why it is wasting money→ red; - move the new section back into the middle of
## How you work→ the positional assertion goes red.
- delete
A mutation that survives is a guard that does not measure the requirement it names.
Activity
argszero commentedon Oct 28, 2026
Handled by #2616