ETHGlobal meeting demo

One ETH story, fully prepared.

T3 Trade shows a coding-agent workspace with a supervised, research-first trading environment. This page is the complete handover: what the demo is, what the machine needs, the exact prompts to paste, the videos to record, and a checklist that proves readiness.

Plan of record 2026-09-04 Script confirmed by verification round 2026-09-04 Verified at HEAD d39ee8fd4 Mode research only, no signer
prepared thread state.sqlite sourced events 6 upgrades 1 URL each study server-measured baseline + caveat unified graph live / calendar event aligned guards refuse
1
demoable feature (unified research graph)
~2:30
measured stage arc, 4:00 hard cap
6/6
sourced upgrades, all covered
0
signers configured, orders refuse cleanly

What the demo is

The event is an ETHGlobal hackathon meeting demo. The audience is Ethereum builders and judges. The demo is research-mode only: no signer is configured, no orders are placed, no positions exist, and any signing-dependent action ends in a clean, named refusal. The testnet soak and live execution are explicitly out of scope.

The headline feature is the unified research graph with sourced event studies. A conversation records real Ethereum mainnet upgrades, each with its exact activation instant and one authoritative source URL. The server studies ETH daily returns over the 30 bars after each event, compares them with a same-horizon baseline, and publishes the result onto one graph across Live, Calendar, and Event-aligned views.

The original prep plan (artifacts/reports/hackathon-demo-polish-plan-20260904.html) scoped a five-minute arc with six missions. On 2026-09-04 the scope was narrowed: one demoable feature (the research graph). The hypothesis-to-validation pipeline (feature 2) was cut from the timed arc and survives only as an optional backup beat if judges ask about validation.

Everything is prepared state

Never wait on a model turn, a market event, or a fresh fill on stage. The full arc was rehearsed at about 2.5 minutes and must stay under 4:00. Every record survives a server restart; this was proven twice during verification.

A refusal is a beat

The guardrail is the credibility close. If any refusal appears on stage, narrate it; never work around it. Without a signer, an entry refuses deterministically with needs_trading_account before anything is priced or sent (docs/user/trading.md).

The stage arc, beat by beat

Ordered clicks and narration from the confirmed script (artifacts/workers/demo-features-1-2/demo-script.md). Timings are cumulative targets; the narration owns the budget.

Frame

Say: "This is T3 Trade: a coding agent workspace with a supervised, research-first trading environment. Everything you'll see is research mode: no signer, no orders."

ETH is followed, and history is deep

Trade home, then the ETH watchlist tile, then the ETH chart at Range All, 1 day bars. Point out the archive reaching back to July 2022 (phase0-eth-archive-check.png).

Open the thread on Live

Open the thread "ETH Market Regime and Setups". It opens on the Live tab, auto-fit once to All plus 1 week bars (the label reads "1 week bars"). Six named fork markers sit at their exact activation instants on weekly candles over all history (verify-short-live.png).

Hover the Paris (The Merge) marker

The detail shows the exact second, 2022-09-15 06:42:42 UTC, a researched-event notice, and the source link ethereum.org/ethereum-forks. Say: "A date without a source is refused; every marker carries the one authoritative link and the exact second."

Calendar view

The summary reads 6 of 6 occurrences inside archived data, horizon 30 bars on 1d bars. Six rows show entry, lowest low with date, hindsight-perfect dollars at the low, and terminal dollars at the horizon close. Select Dencun (terminal +$192.2 on the $1,000 short, the winner) and Pectra (terminal -$358.6, the loser, with its hindsight figure marked "reported, but invalid").

Study details disclosure

Open "study details". Point at the baseline caveat ("overlapping windows; a center-of-mass comparison, not a significance test"), the requested and served bounds, and the assumptions sentence.

Event aligned

Six traces two per row, the heavy aggregate, the dashed baseline reference. Do not point at the mean labels next to a short study; they use the long convention.

The answer in the thread

Scroll to the study answer: one signed dollar column per upgrade with explicit hindsight labels. Percentages on screen are long-convention; the dollars are the short side. Narrate dollars.

Restart-proof close, then the guard line

Say: "This all survives a restart" (proven; reopen if challenged). Then close: "Everything you saw is one typed contract: the conversation records sourced real-world events, the server measures them deterministically from its own archive, and the graph may format a number but never reinterpret it. Trading itself stays behind explicit asks and execution guards."

Guardrail proof (optional beat)

On the ETH chart order ticket, preview without a signer: the book previews and the named refusal (needs_trading_account) appears. A missing stop blocks preview and place. Recording V4 captures this; see the guardrail video card.

Backup beat: hypothesis pipeline

Same thread: written thesis, cost-aware backtest card, parameter sweep with its in-sample warning, a forward-validation record, and dashed paper markers on the graph. Show records, never maturation. Recording V5 covers it.

Deliberately out of the meeting

Fresh live fills
No execution as the critical path. A prepared testnet position may only be shown after the outstanding Step 10.1 soak passes (docs/operations/plan-29-phase-8-9-10-log.md), and even then it stays optional.
Provider switching
State the adapter architecture in one sentence; show one rehearsed provider. No live switching across Codex, Claude, Cursor, Grok, or OpenCode.
Live event research
At most one short follow-up question in the warm prepared thread. Never run end-to-end event research live on stage.
Waiting on maturation
Never wait for a forward validation to mature or a mission trigger to fire. Show records, not processes.
Diorama deep tour
The /diorama opener is 10 to 15 seconds at fit view, then into the product. It is a reliability surface, not an expansion target.
Mobile, relay, APNs
Not active fork targets for this event. No expansion, no verification time.

What you must know before you touch the machine

These are the load-bearing facts. Everything here traces to the plan of record, the execution contract, or the confirmed demo script.

Invariants outrank the demo

Never weaken an execution guard, loss budget, protection requirement, authority check, idempotency boundary, or reconciliation rule to make a flow pass. The server owns validation. The exchange is authoritative: presentation may format server facts but must never recompute, reinterpret, or conceal refusal, stale, unprotected, or incomplete-coverage states. Hyperliquid testnet is the only trading target; there is no mainnet path. If the demo and a safety rule ever disagree, the safety rule wins and the demo changes.

Where state lives

The demo stack runs with an explicit isolated home: vp run dev --home-dir /tmp/t3trade-demo-handover. An explicit --home-dir sets T3CODE_HOME for the server (scripts/dev-runner.ts:338-342), so all runtime state, including the conversation records, stays under that directory's userdata/.

Never point --home-dir at the live installed state (~/.t3trade/userdata), never symlink test state, and never allow two writers on one SQLite database. The main checkout's default dev state is ~/.t3trade/dev/userdata; the demo never uses it.

What survives
Conversations, sourced event sets, published studies, hypotheses, backtests, and forward-validation records all survive a full stack restart. This is proven behavior the demo leans on twice (the rehearsal restart and the "this survives a restart" close).
/tmp is disposable

macOS wipes /tmp on reboot. That is fine: the prepared state is reproducible. The 2026-09-04 prep ran on a fresh isolated home and still produced a 6-of-6-covered set with the archive reaching 2022-07-13, because daily-bar history backfills from the exchange on demand during prep.

Consequence: prep needs network; the stage arc does not. Everything on screen during the arc is prepared local state; the arc sends no model turn. If the origin dies, relaunch the same stack command and the state returns.

No signer, ever

The demo machine must not have the interim Hyperliquid signer key (~/.t3trade/secrets/hyperliquid-interim-signer-key.bin). If it is present, move it aside for the event. Research mode is a real product mode: charts, watchlists, alerts, backtests, forward validations, missions, and wakes all work without a key, and only signing refuses (README.md, docs/user/research-mode.md).

No secrets on screen
Never open Settings secrets, env files, wallet files, or raw payloads on stage or on camera. The demo browser profile has no signer. This rule has no exceptions during the demo or the recordings.
Narration matches the screen
Say "hindsight-perfect at the lowest low, gross" and "at the horizon close, gross". The illustration sentence: each event gets the full notional independently, never compounded or reused, gross, with no fees, funding, slippage, or liquidation. Percentages on screen use the long convention; the dollars are the short side, so narrate dollars.
Stage do-not list
Never click the model selector while the composer holds prefilled text (one accidental send was observed this way). Skip the diff card ("+85/-49") in the last thread turn; it is a repo-read artifact. Skip Event-aligned mean labels next to a short study. Trade-home chart dates are hover-only; the thread graph is where dates show.
Range recovery
If the graph ever opens on the wrong range: click Range "All", then Bars "Auto" (the label then reads "1 week bars"). The thread opens on Live and stays Live (confirmed past 60 seconds on reload, and first-render Live after both restarts).
Repo hygiene
artifacts/ is gitignored: keep all rehearsal material, screenshots, and recordings there, and never commit them. The working tree may be dirty with unrelated work; preserve it. Plans and scratch notes do not go into docs/. Never push, never open a pull request unless explicitly asked.
Script vintage
The confirmed script was verified against HEAD d39ee8fd4 on 2026-09-04. Main has moved since (the fix d202cf67b that reshaped the study inspector is included in d39ee8fd4; later commits touch forge and substreams, not the demo path). If you are handing over on a much newer HEAD, rerun checklist phases B and C before the event. Commit 32141d3a5 and the open substreams edits are unrelated to the demo surfaces.

Where the authoritative material lives

System setup, in order

Each step has a command and the expected outcome. Do them top to bottom on the demo laptop. Tick them off in the checklist below as you go.

Demo laptop baseline

macOS with a 1920x1080 display output and Chrome. The rehearsal passes were run at 1920x1080 default zoom (projector) and 1100x780 (the desktop wrapper's default main window, apps/desktop/src/settings/DesktopAppSettings.ts). Turn on Do Not Disturb before any rehearsal or recording.

Node.js

The repo pins ^24.13.1 in package.json engines.

node --versionv24.x or v25.x near pin

The vp command

vp drives install, dev, tests, and lint for this checkout.

curl -fsSL https://vite.plus | bashthen: vp --version

One provider CLI, signed in

Install and authenticate at least one coding-agent CLI; the prep conversation needs it. Claude Code and Codex CLI both support trading missions. This is needed for prep only: the stage arc sends no model turn.

claude auth login  |  codex loginone is enough

Clone and install

From the repository root. The install can take a while on a cold machine.

git clone <repo-url> && cd t3trade && vp iexit 0

Confirm the research-mode posture

The demo is signerless by design. Verify the interim signer key is absent; if it exists, move it aside for the event and note where you put it.

ls ~/.t3trade/secrets/hyperliquid-interim-signer-key.binmust NOT exist

First boot on an isolated home

Start the stack with an explicit isolated home and read the ports from the [dev-runner] output line; ports can shift, never assume the reference values below.

vp run dev --home-dir /tmp/t3trade-demo-handoverread serverPort / webPort

Open the one-time pairing URL the runner prints, in the dedicated demo Chrome profile. The bare origin does not authenticate a new browser.

Prepare the demo state (network needed)

Create the thread "ETH Market Regime and Setups" and paste the three verbatim prompts from the next section, in order. Verify after each one; the checklist's "Prepared state" group holds the exact acceptance checks. Budget about an hour with a warm provider.

Restart, rehearse, record

Restart the stack and confirm every record survives. Run the arc aloud under 4:00, repeat it at both display sizes, then work through the recording studio below. The master capture doubles as the venue fallback.

Recording studio

Six videos cover the demo. Each card is a complete recording prompt: preconditions, the shot list with narration, the stop rules, and the acceptance check. Save everything under artifacts/workers/demo-features-1-2/recordings/.

Recording setup, common to every video

OBS or QuickTime at 1920x1080. Hide the bookmarks bar, use the dedicated demo browser profile at default zoom, Do Not Disturb on, mic level checked with a ten-second test. Every frame must pass the no-secrets sweep: no env files, no Settings secrets, no signer material, no other browser profiles. Narrate in the exact wording given; the wording is already matched to what the screen shows.

V1

Prep reference capture

unedited, 6 to 10 min

The re-prep procedure on film. If the demo home is ever lost, anyone can rebuild it by following this recording. Record on a genuinely fresh isolated home, not the one you intend to present from.

TimeOn screenVoiceover
0:00Terminal: run the stack command, read out the [dev-runner] ports line."Fresh isolated home. Ports come from this line every single time; never assume them."
0:40Browser: pair via the printed one-time URL; land on Trade home."The bare origin does not authenticate; pairing is one-time."
1:10Create the thread "ETH Market Regime and Setups"; paste opener prompt; wait for the answer.Read the opener prompt aloud while it runs.
3:00Paste the sourced event-set prompt. Wait. Show the read-back of every date before saving."Every date is read back before anything saves. One authoritative URL per occurrence. A date without a source is refused."
6:00Point at the coverage summary: 6 of 6 occurrences inside archived data, archive back to 2022-07."A fresh home backfills the daily bars it needs; prep needs network."
7:00Paste the definitive short prompt; show the study publishing onto the graph, auto-fit once, still on Live."The prompt is definitive on purpose: short, one thousand dollars, thirty days. The study answer is direction-neutral otherwise."
8:30Stop the stack, start it again, reopen the thread: everything still there."State survives restarts. That is the property the stage arc leans on."
Verbatim prompt 1 of 3, the opener
Read the current structure on ETH and tell me what matters right now — regime, the levels in play, and whether any strategy setup is close.
Verbatim prompt 2 of 3, the sourced event set and study
Create a sourced event set for Ethereum's major mainnet protocol upgrades since 2022. Use the exact activation instant for instantaneous upgrades, one authoritative source URL per occurrence, and read every date back to me before saving. Then study ETH daily returns over the 30 bars after each event, compare them with the same-horizon baseline, and put the result on the graph.
Verbatim prompt 3 of 3, the definitive short study
After each Ethereum network upgrade, what would my profits have been if I went short with $1,000 for the next 30 days? For each upgrade, show what holding to the end of the 30 days would have returned, and what exiting at the lowest point of the window would have returned. Reuse the upgrade event set we already recorded, put the study on the graph, and clearly label hindsight-perfect numbers as hindsight.

Accept: all three prompts pasted verbatim (use the copy buttons above), read-back shown, 6 of 6 covered, publish lands on the graph, restart persists. File: v1-prep-reference.mp4

V2

Master arc capture, the venue fallback

3:00 to 3:30, narrated

The complete stage arc, performed calmly with full narration. If the venue network or the stack dies, this video is what plays. It must exist before any other recording.

TimeOn screenNarration
0:00Trade home."This is T3 Trade: a coding agent workspace with a supervised, research-first trading environment. Everything you'll see is research mode: no signer, no orders."
0:15ETH watchlist tile, then the ETH chart at All / 1 day."ETH is followed, and the archive reaches back to July 2022."
0:45Thread "ETH Market Regime and Setups", Live tab, weekly candles, six fork markers."One graph: weekly candles over all available history, six named upgrades at their exact saved instants."
1:00Hover the Paris (The Merge) marker; show the detail card."2022-09-15 06:42:42 UTC. A date without a source is refused; every marker carries the one authoritative link and the exact second."
1:20Calendar: the summary line, then select Dencun and Pectra rows."Six of six occurrences inside archived data. Dencun: plus one hundred ninety-two dollars and change at the horizon close. Pectra: minus three fifty-eight, and its hindsight figure is marked reported but invalid."
1:50Open "study details"."The baseline is a center-of-mass comparison over overlapping windows, not a significance test. The product says so itself."
2:05Event aligned: six traces, heavy aggregate, dashed baseline."Same events, aligned: each trace is one upgrade, the aggregate in heavy stroke, the baseline dashed."
2:20Scroll the thread to the study answer."One signed dollar column per upgrade, hindsight labeled. Percentages on screen use the long convention; the dollars are the short side."
2:35Park on the graph."This all survives a restart. Everything you saw is one typed contract: the conversation records sourced real-world events, the server measures them deterministically from its own archive, and the graph may format a number but never reinterpret it. Trading itself stays behind explicit asks and execution guards."
  • Rehearse once with a timer before recording; land under 3:30.
  • If a take breaks, restart from the beat, not the whole video.
  • Never click the model selector with a prefilled composer.
  • Do not point at aligned mean labels; do not show the diff card.

Accept: every beat from the stage arc present, narration matches the wording above, no secrets in any frame. File: v2-master-arc.mp4. Copy it off the machine when done.

V3

Beat pack for the editor

8 clips of 5 to 15 seconds each

Clean, tight clips of each show-list beat, recorded separately so an edit can reuse them. One clip per row below; slate each with two seconds of stillness at the head and tail.

ClipAction
c1ETH chart, Range All, 1 day; slow scroll to the left edge so the 2022 history is visible.
c2Thread opening on Live: the auto-fit happens once; hold still on the six markers.
c3Hover the Paris marker; hold the detail card three seconds (exact second plus source URL legible).
c4Calendar: summary line, then hover each of the six rows; pause on Dencun and Pectra.
c5Study details disclosure opening; hold on the baseline caveat sentence.
c6Event aligned: hold on the six traces and the dashed baseline reference.
c7Thread answer: slow scroll so the signed dollar column and hindsight labels pass legibly.
c8Restart proof: stack stopping and starting in the terminal, then the reopened thread identical.

Accept: each clip shows exactly one beat, cursor movements slow and deliberate. Files: v3-c1 through v3-c8.

V4

Guardrail proof

45 to 60 seconds

The credibility beat. On a signerless machine, the order ticket previews the book and says the order would be refused, and a missing stop blocks preview and place. This is the only recording where a refusal is the desired outcome.

TimeOn screenNarration
0:00ETH chart; open the order ticket."No signer is configured on this machine. Watch what the ticket does."
0:10Attempt to preview a long without a stop: the missing-stop gate blocks preview and place with usable text."A stop is mandatory before anything is priced. The server enforces this, not the prompt."
0:25Add a stop, preview again: the book previews, then the named refusal appears: needs_trading_account."The order would be refused before anything is priced or sent. Research mode is a real mode, and signing refuses in words."
0:45Park on the refusal text."That refusal is the product working exactly as designed."

Preconditions: the signer-absence check from setup step 5 passed on the recording machine. Accept: the missing-stop gate and the needs_trading_account refusal are both legible on screen. File: v4-guardrail-proof.mp4. Guards referenced: apps/server/src/trading/TradingExecutionGuard.ts, apps/server/src/trading/TradingProtectionService.ts.

V5

Backup beat: hypothesis pipeline

45 seconds, record only if time permits

Insurance for the "what about validating a strategy?" question. The prepared feature-2 state from the 2026-09-04 run: hypothesis revisions, seven backtest runs, a parameter sweep, a forward-validation record, and dashed paper markers on the same graph as the fork markers. Show records, never maturation. This beat is cut from the timed arc.

TimeOn screenNarration
0:00Same thread: the hypothesis surface with the written thesis and revision history."The same story becomes a falsifiable rule: written thesis, revision history."
0:10The cost-aware backtest card; then the sweep with its in-sample warning."Backtests carry their costs. Sweeps carry their in-sample warning. No verdict under minimum sample."
0:25The forward-validation record; then the chart: dashed paper markers beside the fork markers."Forward validation runs in paper. Dashed rings are paper, distinct from fills, on the same graph as the upgrades."

Precondition: checklist item B8 (backup surfaces prepared in the same thread). Accept: in-sample warning and dashed paper markers both legible. File: v5-hypothesis-backup.mp4.

V6

Diorama opener, optional B-roll

10 to 15 seconds

The architecture opener, at fit view, nothing more. Reliability surface, not a tour. Only record it if the venue plan includes the diorama route; the narrowed demo arc does not require it.

TimeAction
0:00Load /diorama on the demo machine; confirm the first meaningful frame appears without interaction.
0:03Fit view; hold still so labels are readable at presentation resolution.
0:12Cut. Do not tour stations; do not wait for the full lifecycle story.

Accept: first frame appears promptly, no blanking, reduced motion lands on a composed frame. File: v6-diorama-opener.mp4.

The handover checklist

Progress is saved in this browser as you tick. Export writes a Markdown copy for the handover doc or the demo-morning standup.

0 / 0
saved locally per browser

A Machine and repo

B Prepared demo state

C Restart and rehearsal

D Recordings

E Go / no-go

Sources and vintage

Every claim on this page traces to one of these. If something here disagrees with the repository, the repository wins and this page should be regenerated.