What our engine gets wrong, and why limits go in code
Published 2026-10-15 by Jepela
We publish the engine's failure modes with the numbers behind them, because the fix for most of them is code, not better wording.
It does not compare numbers
Put the line "Mia's stop-loss for a session is 30 units." in memory and ask whether to stop playing. At a loss of 12 the stop answer was 0.12 to 0.18. At a loss of 30, where the limit is reached, it was still 0.22 to 0.30 (rules cookbook, 2026-09-23). The engine reads the words; it does not do the comparison.
So the condition goes in a rule that Jepela checks in code:
POST /v1/memory/rules
{"subject": "mia", "when": "session_result <= -30", "text": "Mia's stop-loss is reached: she stops playing now."}
The rule's text reaches the engine only when its condition holds. As a rule, the stop answer stayed at 0.12 at a loss of 12 and was 0.75 at a loss of 30 (same cookbook and date). A machine works the same way: with a pump's limit only in memory, every reading was ignored; with the comparison done in code, the pump over its limit got a maintenance ticket at 0.71 (device cookbook, 2026-09-23).
It does not read negation
Naming a forbidden option makes it more likely. In the Dungeon demo, "Never walk along the corridor with the gold coins." raised the coins from 83% to 94% (2026-09-23). "Never give player-9 gold coins" as a line raised gold coins from 0.63 to 0.98 (2026-09-26).
An exclusion rule removes the option in code before the engine answers. As an exclusion, gold coins were 0.00 (2026-09-26). On ten roulette states where 17 had just come up, the engine bet on 17 in 9 of 10 with no memory, and in 9 of 10 with a rule that named 17. When the question offered only the player's own bets, it was 0 of 10 (2026-09-23).
Lines move answers by being there
Five neutral lines moved an escalation answer from 0.46 to 0.28 (2026-09-23). In the forgetting cookbook, two lines about invoices and support tickets lowered "send this launch mail?" from 0.68 with no memory to 0.14 (2026-09-23).
Three options show what a memory did:
compareanswers the same call without the memory and lists what changed.explainleaves out one line at a time and shows how far each moved the answer.placeboswaps your lines for neutral ones and lists questions that moved only because lines were present.
Keep memories short and on topic, and replace lines rather than append them.
It reads a window, and text only
jepela-englishreads about 475 tokens of state (measured 2026-09-22 and 2026-09-23); the rest is cut, and the answer says so.- Above about 20 options a one-pass answer concentrates on a few options. Jepela matches those by vectors instead: 65.2% right against the engine's 62.2% on 600 messages with 77 bank intents (2026-09-27).
- Recall matches words. A fact worded without the state's terms is not found; add aliases, or pin it.
- Images, audio and video are not read. Describe them in the state.
- Answers near a threshold flip on small changes. In the roulette demo, stray answers of up to 52% ended 2 of 9 sessions early (2026-09-23).
- Languages other than English are weaker than English, and moderation is weaker than spam screening.
Why limits go in code
The engine is a one-pass decision engine, not a reasoner. It is good at reading a situation and weighing options. It is not exact, and some rules must be exact. So Jepela splits the work:
- Facts go in memory as positive lines that use the words your states use.
- Conditions on numbers and dates go in rules with
when, checked in code on your values. - Options that must never be chosen are removed by an exclusion rule.
- Facts that must count at every decision are pinned.
compare,placeboandexplainstay on while you build.
A rule checked in code fires when its condition holds, and not before. A line in memory can only make an answer more or less likely. For expensive actions, require a fired rule or two answers in a row above the threshold.
Calibration is fitted on your own labels, so measure on them before you automate anything. Every answer also returns warnings when a request walks into one of these known traps.