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.
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
docs/operations/plan-29-phase-8-9-10-log.md), and even
then it stays optional.
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.
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.
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.
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).
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.
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
- Plan of record:
artifacts/reports/hackathon-demo-polish-plan-20260904.html(six missions, ranked features, cut list, risks). - Execution contract:
plan-demo-features-1-2-execution.md(repo root; the features 1 and 2 narrowing, phases 0 to 3). - Confirmed demo script:
artifacts/workers/demo-features-1-2/demo-script.md(the prompts, the show list, the fallback plan; this page restates it). - Progress log:
artifacts/workers/demo-features-1-2/progress.md(the one-feature decision, findings, the inspector fix, prepared feature-2 state). - Verification screenshots:
artifacts/workers/demo-features-1-2/shots/(every beat has a reference image). - Prompt archive:
artifacts/prompt-archive/fixes.md(where the proven prompts were recovered from).
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 pinThe vp command
vp drives install, dev, tests, and lint for this checkout.
curl -fsSL https://vite.plus | bashthen: vp --versionOne 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 enoughClone and install
From the repository root. The install can take a while on a cold machine.
git clone <repo-url> && cd t3trade && vp iexit 0Confirm 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 existFirst 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 / webPortOpen 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.
Prep reference capture
unedited, 6 to 10 minThe 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.
| Time | On screen | Voiceover |
|---|---|---|
| 0:00 | Terminal: 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:40 | Browser: pair via the printed one-time URL; land on Trade home. | "The bare origin does not authenticate; pairing is one-time." |
| 1:10 | Create the thread "ETH Market Regime and Setups"; paste opener prompt; wait for the answer. | Read the opener prompt aloud while it runs. |
| 3:00 | Paste 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:00 | Point 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:00 | Paste 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:30 | Stop the stack, start it again, reopen the thread: everything still there. | "State survives restarts. That is the property the stage arc leans on." |
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.
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.
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
Master arc capture, the venue fallback
3:00 to 3:30, narratedThe 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.
| Time | On screen | Narration |
|---|---|---|
| 0:00 | Trade 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:15 | ETH watchlist tile, then the ETH chart at All / 1 day. | "ETH is followed, and the archive reaches back to July 2022." |
| 0:45 | Thread "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:00 | Hover 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:20 | Calendar: 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:50 | Open "study details". | "The baseline is a center-of-mass comparison over overlapping windows, not a significance test. The product says so itself." |
| 2:05 | Event aligned: six traces, heavy aggregate, dashed baseline. | "Same events, aligned: each trace is one upgrade, the aggregate in heavy stroke, the baseline dashed." |
| 2:20 | Scroll 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:35 | Park 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.
Beat pack for the editor
8 clips of 5 to 15 seconds eachClean, 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.
| Clip | Action |
|---|---|
| c1 | ETH chart, Range All, 1 day; slow scroll to the left edge so the 2022 history is visible. |
| c2 | Thread opening on Live: the auto-fit happens once; hold still on the six markers. |
| c3 | Hover the Paris marker; hold the detail card three seconds (exact second plus source URL legible). |
| c4 | Calendar: summary line, then hover each of the six rows; pause on Dencun and Pectra. |
| c5 | Study details disclosure opening; hold on the baseline caveat sentence. |
| c6 | Event aligned: hold on the six traces and the dashed baseline reference. |
| c7 | Thread answer: slow scroll so the signed dollar column and hindsight labels pass legibly. |
| c8 | Restart 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.
Guardrail proof
45 to 60 secondsThe 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.
| Time | On screen | Narration |
|---|---|---|
| 0:00 | ETH chart; open the order ticket. | "No signer is configured on this machine. Watch what the ticket does." |
| 0:10 | Attempt 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:25 | Add 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:45 | Park 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.
Backup beat: hypothesis pipeline
45 seconds, record only if time permitsInsurance 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.
| Time | On screen | Narration |
|---|---|---|
| 0:00 | Same thread: the hypothesis surface with the written thesis and revision history. | "The same story becomes a falsifiable rule: written thesis, revision history." |
| 0:10 | The 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:25 | The 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.
Diorama opener, optional B-roll
10 to 15 secondsThe 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.
| Time | Action |
|---|---|
| 0:00 | Load /diorama on the demo machine; confirm the first meaningful frame appears without interaction. |
| 0:03 | Fit view; hold still so labels are readable at presentation resolution. |
| 0:12 | Cut. 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.
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.
- 2026-09-04
artifacts/reports/hackathon-demo-polish-plan-20260904.html: plan of record, read-only Sol consult, 19 cited paths verified. - 2026-09-04
plan-demo-features-1-2-execution.md: execution contract narrowing scope to the demo path. - 2026-09-04
artifacts/workers/demo-features-1-2/progress.md: the one-feature decision, prompt recovery, findings, the inspector fix. - 2026-09-04
artifacts/workers/demo-features-1-2/demo-script.md: the confirmed show list this page restates. - current
README.md,docs/operations/development.md,docs/user/trading.md,docs/user/research-mode.md: setup and research-mode behavior. - current
scripts/dev-runner.ts,apps/server/src/trading/archive/config.ts: home-dir, ports, and archive path behavior.