S40 · Financial & Asset Management (delegated to RUBEN)

Declared state: **delegated to RUBEN (D-97), built 2026-10-15** - `ask_ruben` briefs, runs a saved RUBEN session (follow-ups, file intake), reviews the tool log, speaks short answers whole and long ones as tone + key sentences; the full transcript goes to Telegram on request via RUBEN's own bot. Open: six-language routing fixture (R4), conversation-store half of never-store (R8), a week of real use (E2)..

This is the repository plan and evidence, not a live health reading. A task marked done may still depend on credentials, devices, deployment or a newer acceptance test.

Dependencies

S39

Tasks and gates

40.F1 · A Beancount ledger the owner controls, read by a `portfolio_snapshot` tool that values it

Tier F · cancelled · Verification: manual

Gate: retired with `test_portfolio.py` (D-97: RUBEN owns this)

  • recorded-note · 2026-09-13 · docs/SYSTEMS-DETAILS.md:3983
  • owner-decision · undated · docs/DECISIONS.md D-97

40.F2 · **No transaction capability, by construction** — asserted, not merely absent.

Tier F · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [one owner]

  • recorded-note · 2026-09-13 · docs/SYSTEMS-DETAILS.md:3995
  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [one owner]

40.F3 · Values carry their as-of time and source; a stale price says so.

Tier F · cancelled · Verification: manual

Gate: retired with `test_portfolio.py` (D-97: RUBEN owns this)

  • recorded-note · 2026-09-13 · docs/SYSTEMS-DETAILS.md:4003
  • owner-decision · undated · docs/DECISIONS.md D-97

40.R1 · Change notification — a threshold move raises a proactive signal.

Tier R · cancelled · Verification: hermetic-test

Gate: `test_proactive_thresholds.py` [finance kind]

  • owner-decision · undated · docs/DECISIONS.md D-97

40.R2 · Spending awareness from statements the owner supplies; categories and monthly trend.

Tier R · cancelled · Verification: manual

Gate: retired with `test_portfolio.py` (D-97: RUBEN owns this)

  • owner-decision · undated · docs/DECISIONS.md D-12

40.R3 · Subscription and recurring-charge detection.

Tier R · cancelled · Verification: manual

Gate: retired with `test_portfolio.py` (D-97: RUBEN owns this)

  • owner-decision · undated · docs/DECISIONS.md D-12

40.E1 · A monthly financial brief the owner trusts enough not to re-check.

Tier E · cancelled · Verification: manual

Gate: brief review recorded in TODO.

  • owner-decision · undated · docs/DECISIONS.md D-12

40.R4 · **Every money question routes to RUBEN, none is answered from Mushegh's own head.** Finances, personal cash, transactions, equity, salary, funds, assets, taxes, management and recommendations all resolve to the `ruben` executor (D-83's FINANCE kind), in every supported language; Mushegh's own model never states a financial figure or gives financial advice. Mushegh acknowledges at once ('Asking Ruben, sir') because RUBEN can take tens of seconds.

Tier R · in-progress · Verification: planned-test

Gate: new `test_finance_routing.py` — a fixture set of money utterances across the six languages all route to `ruben`; near-misses (a restaurant bill split, 'how much is a coffee') do not; a money question with RUBEN down is answered 'Ruben is unreachable', never by Mushegh's model.

  • recorded-note · 2026-10-15 · src/mushegh/brain/tools/ruben.py

40.R5 · **The brief is written well, by code, not by the turn.** Built on 39.R6's `briefing.py`: the owner's literal words; references resolved from the conversation ('that flat' -> which one); the outcome wanted (a figure, a comparison, a recommendation, a plan); jurisdiction and currency when known; the time horizon; the answer shape required — the bottom line first, every figure with its as-of time and source, assumptions named, 'I don't know' allowed; and the fixed constraint that nothing moves money (D-13). Follow-ups in one conversation keep one RUBEN session rather than starting cold.

Tier R · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [brief]

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [brief]

40.R6 · **RUBEN returns its session, and Mushegh reviews it before speaking.** `ruben ask` gains `--json`: the answer plus the session transcript (tool calls, their results' status, sources and as-of times). Mushegh checks the answer is grounded — a figure question where no tool ran, a failed tool, or a stale as-of is said plainly, not smoothed over — and only then summarises. Cross-repo: the flag lands in `C:\Users\iamva\dexter` `src/ask.ts`.

Tier R · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [review]

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [review]

40.R7 · **A long answer is cut to tone and key sentences; the full session goes to Telegram on request.** Mushegh decides from the reviewed answer whether it is extensive (over the voice budget, a table, a list of figures, a plan). Short: spoken whole. Extensive: the overall tone (good news / mixed / needs action) and two or three key sentences, then the offer. When the owner asks, RUBEN sends the whole session transcript with its own bot (`ruben transcript <id> --telegram`), so Mushegh never holds RUBEN's token. A failed delivery is said, with an offer to read it out.

Tier R · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [length]

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [length]

40.R8 · **D-83's never-store line holds through the new path.** The brief, RUBEN's transcript, the full answer and the spoken summary are not written to memory, the vault mirror or the audit trail; the audit records only that a delegation happened, its duration, and whether Telegram delivery succeeded.

Tier R · in-progress · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [never-store]

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [never-store]

40.R9 · **One finance owner: retire Mushegh's own finance tools.** `portfolio_snapshot` and the in-brain ledger read (40.F1–F3) are removed; the finance family inside Mushegh is the RUBEN delegation and nothing else.

Tier R · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [one owner]

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [one owner]

40.R10 · **RUBEN work is a managed session, not a one-shot.** Each delegation is a saved RUBEN session (origin `mushegh`, resumable from RUBEN's Telegram with /resume); follow-ups continue it by `session_id`; data files (statements, spreadsheets) are ingested as attachments, inlined when small text and passed by path otherwise; `ruben_sessions` lists recent ones to pick a matter back up.

Tier R · done · Verification: hermetic-test

Gate: `test_ruben_delegation.py` [session], RUBEN `src/ask.test.ts`

  • hermetic-green · 2026-10-15 · bench/test_ruben_delegation.py [session]

40.E2 · A week of real money questions by voice: every one delegated, zero answered from Mushegh's own model, and the owner never finds a spoken summary that contradicts RUBEN's Telegram text.

Tier E · open · Verification: manual

Gate: delegation log review recorded in TODO.

    HUD screen contracts

    All subsystems · Source: docs/systems-plan.json.