Rung 1 hands him everything at the right addresses before he speaks. Rung 2 lets him reach back into memory mid-thought — bounded by cost, never relevance. Built, reviewed, merged dark; reachability proven.
Status: spec for red-pen; build gated on Robert's word (architectural — it changes the
compose fabric wave 2 just validated, so it builds AFTER wave 2 merges, dark, as its own
increment). Rung 1 (tonight, shipped): code hands Eve everything at the right addresses,
unranked, before she speaks. Rung 2 (this spec): she can reach back into memory WHILE
composing. The ladder and this sequencing were inked at verdict-adjudication time in
eve-speech-and-map-spec-2026-07-15.md §Composition ladder.
Step-0, frame-fitness, discharged: the mechanism class is "model-driven retrieval
mid-generation." The field's default is the tool-use loop (the model calls a named tool,
the runtime executes it, the result returns, generation continues) — this is the canonical,
API-native mechanism on our stack, not an exotic choice. Strongest alternative: agentic-RAG
shapes that keep retrieval OUTSIDE generation (iterative re-query, then one final compose) —
rejected because it re-creates rung 1 with extra steps and keeps the walk out of her hands,
which is the thing ruling 2 exists to prevent. Named anti-patterns of the pick, designed
against below: (a) unbounded tool loops (cost/latency spirals) — hard call-count and time
floors; (b) relevance smuggled back in through the tool RESULTS (runtime ranking what the
tool returns) — the tools are the SAME address-narrowing machinery as rung 1, no scoring
anywhere. External judge of the frame: the field default itself plus the review pair on
this spec; the graveyard checked is wave 2's own — a scored retrieve inside a validation
instrument was refuted and descored this very night.
Tonight, when a teammate asks Eve something in Slack, code gathers what sits at the right
addresses — the asker's person-file, the memory map, the facts filed under the entities the
ask names — and hands her the pile before she writes. It works, and it is honest. But it is
still code deciding, once, up front, how much of her memory she gets to see.
Rung 2 gives her hands inside her own memory. Mid-thought, she can open one more entity's
file, check the map, pull the recent history of a thing — the way you'd flip to a page in
your own notebook before finishing a sentence. Code's only job is the cost meter: how many
walks, how long. What she looks at, and what matters in what she finds — hers, every step.
The beat this makes real: asked something deeper than her bounds allow, she doesn't
silently answer from half a picture — she walks until she hits the WALK BUDGET, and then
says, in her own words, that she hit it and what she'd need to go further. (Honesty fix
from review: that promise holds for the budget floor. The TIME deadline is different — if
the clock runs out mid-walk there are no composed words to send, and the compose-failure
fork governs exactly as in wave 2: silence, or the marked mechanical receipt, per Robert's
flag. The walk phase is time-boxed well inside the deadline so this stays rare.)
1. The tools are rung 1's own machinery, exposed. Three callable capabilities:
read-an-entity-file (by id), list-recent (by kind + time window), read-the-map. All
address-narrowing, byte-identical semantics to what feeds her today. No new retrieval
logic means no new place for relevance ranking to hide.
2. Floors, not filters. A walk budget per reply (default: 4 calls), a per-call time
bound, and the same 30-second reply deadline. Hitting a floor is DATA handed to her —
she can tell the teammate she hit it. Code never trims what a tool returns beyond the
same count caps rung 1 uses.
3. Acks don't walk. The ask-acknowledgment path (≤5s, wave-2 Lane 6) stays rung-1:
position and expectation need no memory walk. Only composed lookup replies get the loop.
4. Latency is the honest price. Each walk is a round trip. The rehearsal measures the
distribution; the bar stays "a busy teammate doesn't wonder if she heard" — if rung 2
blows it, the fix is retrieval shape or budget, never a relevance filter.
mechanically; the rehearsal's deeper-than-bounds beat proves the floor speaks honestly.
arrive receipted or explicitly absent; the groundedness judge (now anchored on
unsupported-but-plausible, not just contradictions) grades the residue.
(the token/cost line already exists); if it runs hot, the budget is the dial — Robert's
taste, surfaced with real numbers.
1. Direction: build rung 2 as specified (after wave 2 merges, dark behind its own
default-OFF flag). This is the "she walks, she decides" half of your map ruling.
2. The walk budget default — 4 calls per reply. Taste, not provable; ships surfaced.
3. Nothing else. Bounds-are-cost-floors is your standing ruling; the no-muzzle floors
carry unchanged.
buildLiveEveSlackCompose (one-shot Messages call today; itswhile-loop is bounded overload retry, not a tool loop — review-verified) gains a tool-use
loop variant behind EVE_COMPOSE_RUNG2 default OFF: tools = read_entity_file(entityId)
(delegates to worker.readEntityFile) and read_memory_map() (delegates to
describeMemory) — TWO tools, both with exact existing rung-1 delegates. (Review M1
folded: the drafted list_recent(kind, sinceMs) maps to NO existing code path — a
builder would invent kinds/order/caps. It is CUT from this increment and named as its own
follow-up requiring a deterministic journal-query spec first.) Tool RESULTS pass through
untouched (count caps identical to rung 1's; no ordering changes; no scoring).
(EVE_SLACK_REPLY_COMPOSE_DEADLINE_MS = 30_000) ALWAYS wins. Inside it, the walk phase
is time-boxed: RUNG2_MAX_TOOL_CALLS = 4 per reply AND RUNG2_WALK_PHASE_MS = 18_000
combined, whichever bites first — reserving ≥10s for the final compose. Per-call timeout
RUNG2_TOOL_CALL_MS = 6_000. Budget/walk-box exhaustion is appended to her context as
data ({floor: "walk-budget"|"walk-time", spent}), never silently truncated; deadline
expiry routes to the wave-2 compose-failure fork (flag-governed), never a new speech path.
(the wave-2 validated path). The rung-2 loop is additive.
existing question/reply/receipts row — her walks are auditable.
the right answer needs >4 walks; PASS = she hits the floor and says so with the floor
data; a reply asserting past the floor = groundedness RED. Anchor: a transcript where the
floor was hit but the reply claims completeness MUST fail.
the loop (trust machinery) → rehearsal r3 → walk). The break test: neuter the budget
floor in scratch → the spiral fixture MUST go red.