Context
scripts/e2e-smoke.sh (PR #69) boots the M1 pipeline, runs five assertions, and tears everything down. Great for CI, useless for day-to-day development or visual demos where the operator wants the chart in a browser and live ticks streaming until they Ctrl-C.
This issue introduces a sibling script aimed at the inverse use case: boot every service (including the Next.js dev server), wait for healthy, print a single ready URL, and stay up until the operator kills it.
Scope
scripts/dev-stack.sh — bash, macOS-compatible (bash 3.2), no assertions, holds open on wait.
Boots in dependency order:
docker compose up -d — clickhouse + redis (no down -v, data persists across runs)
cargo build --release --bin volx-ingestion --bin volx-engine — pre-build
go build -o api/api-bin ./cmd/api — pre-build
- Spawn
volx-ingestion, volx-engine, api-bin as background processes, logs → /tmp/volx-dev-<service>.log
- Spawn
pnpm --dir frontend dev background, log → /tmp/volx-dev-frontend.log
- Poll healthchecks:
/ping (clickhouse), redis-cli PING, /v1/health (api), http://localhost:3000 (frontend)
- Print:
READY → http://localhost:3000/chart/bvol (or whichever default chart route the frontend exposes)
wait — block on background PIDs
On Ctrl-C / EXIT:
pkill -f target/release/volx-ingestion, volx-engine, api-bin, frontend node process
docker compose down (no -v — keep clickhouse data for next run)
Flags / env
| Env |
Default |
Notes |
LOGS |
0 |
If 1, tail all four log files to stdout (multiplexed, prefixed by service) |
SKIP_BUILD |
0 |
If 1, skip cargo/go build (assume binaries fresh) |
FRONTEND_PORT |
3000 |
passthrough to pnpm dev |
Acceptance criteria
Out of scope
- Assertions (this is the inverse of
e2e-smoke.sh — no pass/fail, just boot-and-hold)
- Hot-reload of rust/go services (would need cargo-watch / air; orthogonal)
- Production-mode frontend (
pnpm build && pnpm start) — dev mode chosen for HMR + visual demo immediacy
- Browser auto-open (varies macOS/linux, leave to the operator)
Dependencies
Notes
The dependency on PR #69 is conceptual only — dev-stack.sh is a standalone file, not a refactor of the smoke script. Shared helpers can be extracted later if a third orchestrator appears.
Priority p2 because this is developer ergonomics, not on the M1 critical path. M1 closure is gated by #28 (CI), not this. But it ships alongside #28 as the visible artifact for "the local pipeline runs end-to-end and you can see it."
Context
scripts/e2e-smoke.sh(PR #69) boots the M1 pipeline, runs five assertions, and tears everything down. Great for CI, useless for day-to-day development or visual demos where the operator wants the chart in a browser and live ticks streaming until they Ctrl-C.This issue introduces a sibling script aimed at the inverse use case: boot every service (including the Next.js dev server), wait for healthy, print a single ready URL, and stay up until the operator kills it.
Scope
scripts/dev-stack.sh— bash, macOS-compatible (bash 3.2), no assertions, holds open onwait.Boots in dependency order:
docker compose up -d— clickhouse + redis (nodown -v, data persists across runs)cargo build --release --bin volx-ingestion --bin volx-engine— pre-buildgo build -o api/api-bin ./cmd/api— pre-buildvolx-ingestion,volx-engine,api-binas background processes, logs →/tmp/volx-dev-<service>.logpnpm --dir frontend devbackground, log →/tmp/volx-dev-frontend.log/ping(clickhouse),redis-cli PING,/v1/health(api),http://localhost:3000(frontend)READY → http://localhost:3000/chart/bvol(or whichever default chart route the frontend exposes)wait— block on background PIDsOn Ctrl-C / EXIT:
pkill -f target/release/volx-ingestion,volx-engine,api-bin, frontend node processdocker compose down(no-v— keep clickhouse data for next run)Flags / env
LOGS01, tail all four log files to stdout (multiplexed, prefixed by service)SKIP_BUILD01, skip cargo/go build (assume binaries fresh)FRONTEND_PORT3000pnpm devAcceptance criteria
bash scripts/dev-stack.shfrom repo root boots full stack, printsREADY → http://..., blocksdocker psempty for volx containers, no orphan rust/go/node processesLOGS=1streams all four log files to stdout, each line prefixed with[service]SKIP_BUILD=1skips both build phases when binaries already existOut of scope
e2e-smoke.sh— no pass/fail, just boot-and-hold)pnpm build && pnpm start) — dev mode chosen for HMR + visual demo immediacyDependencies
/chart/[index]candle chart + live WS #27 (frontend exists and serves/chart/bvol)Notes
The dependency on PR #69 is conceptual only —
dev-stack.shis a standalone file, not a refactor of the smoke script. Shared helpers can be extracted later if a third orchestrator appears.Priority
p2because this is developer ergonomics, not on the M1 critical path. M1 closure is gated by #28 (CI), not this. But it ships alongside #28 as the visible artifact for "the local pipeline runs end-to-end and you can see it."