Spec · v2 · RULED 2026-07-17

Reach

Five wires between organs that already exist and the Slack mouth that cannot see them — so Alie’s Cement Creek question gets an Arby-grade answer from Neo. All three calls ruled: one flip, no ceiling, team scope confirmed.

Ruled · v1 notes folded · building starts when the bay clears

The story: Alie asks the Cement Creek question again

Today, if Alie asks “Did Robert send Cement Creek the checkout link?” Neo answers with a shrug — politely, honestly (the never-overclaim and always-carry contracts are live), but a shrug. He cannot see who Robert is, what’s in the work queue, any signed client, or any payment status. Every one of those organs already exists — in his own body or in DE Brain’s.

After this ships, the same question gets an Arby-grade answer from Neo: the account pulled live from DE Brain, the missing-Stripe-link gap named, the honest uncertainty stated, and a next step offered. Same brain as Arby for company truth; Neo’s own memory for Robert’s world. That was your Call 3, already ruled — this spec makes it real.

Step-back, answered: the two deeper plans under this one (what Neo is next to Arby; whether this is really “general tool use”) were caught and settled — Call 3 ruled the first; the toolset stays small, listed, and read-only for the second. And the memory precondition is met: the diary bound landed, so Neo can take in more of the world without the old memory deaths.

The five wires — the question’s journey through Neo

  1. Slack-Robert becomes real-Robert. The name-joining engine exists and is never called on this path — Neo literally doesn’t know the person mentioning him is you. One seed link plus one call into the existing engine, and “my queue,” “my deals,” “remind me” all start meaning something. Every other wire gets smarter the moment this one lands, so it goes first.
    ↘ go deeper — what the builder reads
    Seed one world-seed atom linking person:slack:U0D3K48GZ → canonical Robert. Lane path resolves event.personRef through canonicalPersonRef (person-basis.ts:263) before personFileRows (call site: eve-slack-lane-live.ts:434). Gates [M]: Plato backward-reach shows the lane imports person-basis.js; seed-presence check; fixture proves canonical rows differ from raw rows.
  2. The work queue reaches the mouth. A real, prioritized work queue already runs every cycle inside Neo’s own runtime — the Slack lane just has no path to it. We hand the lane the queue the runtime already built. No second queue, no rebuilding, no drift between what Neo works and what Neo says.
    ↘ go deeper — what the builder reads
    New lane seam workQueueSnapshot injected at the existing seam-wiring site (worker.ts lane block beside readEntityFile/activeEntries); read-only snapshot of the cycle’s built queue (buildWorkQueue, imported worker.ts:142). Gates [M]: “tell me about my work queue” fixture composes queue rows; queue questions stop routing exclusively into the ask ledger; byte-identical with the flag off.
  3. Company truth comes from DE Brain, live, at answer time. This is the load-bearing wire and your Call 3 made real. Signed clients stop being invisible NOT by widening Neo’s own Salesforce intake (that re-creates the memory deaths at bigger scale) but by asking the brain that already knows — a read-only consult at the moment of answering. Nothing from the consult is written into Neo’s memory: read it, answer with it, let it go.
    ↘ go deeper — what the builder reads
    New de-brain-consult.ts on the salesforce.ts transport boundary (salesforce.ts:15-24 pattern): injected fetcher, read-only allowlist (account_360, search_account_cases, read-only query_salesforce), new secret DE_BRAIN_TOKEN, hard timeout, degrade-but-label (status “down” + detail, never fabricated rows), trust tiers per field. Read-through invariant [M]: Plato forward-reach from the consult module excludes every store seam. Courts [J]: Cement-Creek fixture (mocked rows → must cite source, name the gap, end at a pickup; contradicted fixture = the live “no known entity address” reply MUST fail) and degrade fixture (timeout → honest “couldn’t check”; invented account facts MUST fail).
  4. Payment status becomes real. The “is this client paying” answer shape exists in the code today as a promise no code path ever produces. It gets produced for real from the consult — account, Stripe-link presence, payment state — so the Cement Creek class of question has a first-class answer instead of a near-miss.
    ↘ go deeper — what the builder reads
    billing_payment_status declared at eve-slack-lane.ts:52, zero producing return sites today (all emit entity_status). Producer maps consult result → typed lookup result with per-field trust tiers. Gates [M]: producer-count grep flips 0→≥1; regression fixture: closed-won account, Stripe link missing → billing_payment_status with the gap named.
  5. The composer grows from zero tools to the reach toolset. Today’s Slack composer answers from a bare prompt — its ceiling is two read-only memory reads behind a flag that’s off. It grows to the listed reach tools (identity, queue, DE Brain consult, payment status — all read-only), behind one new flag, with every tool call receipted — so the never-overclaim contract can mechanically check every claim against a call that actually happened.
    ↘ go deeper — what the builder reads
    REACH_TOOLS = RUNG2_TOOLS (eve-slack-lane.ts:304) + the four reach tools; enumerated const, no dynamic registry. Budgets extend RUNG2 constants (:38-40) — max ~8 calls, walk phase per Q2 ruling. Tool-call receipts enter the compose input; the Phase-0 [M] regression extends: claim naming a source with no matching receipt → red. Flag EVE_SLACK_REACH (“1” enables W1–W5); NOTE the existing unrelated REACH secret gates the reach-detector (worker.ts:557) — name collision deliberately avoided, do not touch it. OFF → byte-identical.

Your calls — RULED 2026-07-17

All three answered on the v1 surface. Recorded here; nothing open on this spec.

Q1 — One flip. RULED.

All five wires land behind ONE flag and flip together. Your words: “One flip… I agree with your recommendation.”

Q2 — No artificial ceiling. RULED.

An honest “digging into this — give me a minute” interim message whenever the walk runs long; never a truncated answer at an arbitrary cutoff.

Q3 — Team scope confirmed. RULED.

Consult-backed answers may reach team channels, per the audience-table rulings. Your words: “also agreed.”

What could go wrong

Slower answers

Real, bounded by Q2’s design. The knock’s instant ack is what keeps a 40-second dig from feeling like the old 11-minute silence.

DE Brain is down

The consult degrades honestly — “I couldn’t check the company system just now” — never a fabricated answer. Same degrade-but-label discipline as every existing source.

Overclaim grows with reach

More tools, more things to falsely claim. The twin contracts get sharper teeth: every claim naming a source must carry the receipt of the actual call — checked mechanically, not by vibes.

Memory creep

The consult is read-through by construction — a structural gate asserts the consult path cannot write to any store. The diary-bound lesson applies to every byte.

How we’ll know it works: the Cement-Creek-class fixtures and the work-queue fixture flip red → green live in #bot-test, asked by Alie, not by us. Every reached answer names its sources and ends at a pickup. Rollback is one flag to “0” — byte-identical to today.

Reference strip — identity seed + join · queue seam · consult transport + courts · payment producer · REACH_TOOLS + flag. Builds start only after the engine bay is cleared; verdict legs run as ruled (pair on the consult transport — new external call carrying a service token). Canonical source: docs/ai/design/slack-reach-2026-07-17.md.