studio — structured LOG viewer

The right pod is one selectable text block — dividers and the sandbox · N lines line are real log text; select-all & copy gives clean log with no helper markup. The left rail (status dots, chips, fold chevrons) is a separate floating layer aligned to the text — it never enters the copy. Colour by level (error red · warn amber · rest black), blue for user log(). Try the “copy the log” button to see exactly what lands on the clipboard.
Timestamps: every node's ▶ started / finished line carries the full timestamp in the config format (display.datetime_format = YYYY-MM-DD HH:mm:ss, browser-local), the finished line also the node duration; the run-summary rail card shows the run start in the same format, its duration chip the whole run.

--lvl-error:#dc2626; --lvl-warn:#d97706; --src-user:#2563eb;
node-5tstf0v5
exit 01.2s
node-9xk2m1p7
1 error1 warn
exit 10.4s
run 2026-07-16 16:02:31
1 error1 warn
2 nodes1.6s
──── node-5tstf0v5 ──────────────────────────────
▶ started 2026-07-16 16:02:31
sandbox · 18 lines
[I] Mode: STANDALONE_ONCE
[I] Mount: '/usr' -> '/usr' · '/code' · '/scratch' · '/wd'
[I] Uid map: inside:0 outside:1000
[I] Executing '/usr/local/bin/python3'
[I] pid=1453 exited with status: 0
Loaded 1,240 rows from customers.csv
Wrote /wd/customers.parquet (1,240 rows)
starting transform · 3 input ports
done in 1.18s
finished — success · exit 0 · 2026-07-16 16:02:32 · 1.2s
 
──── node-9xk2m1p7 ──────────────────────────────
▶ started 2026-07-16 16:02:32
sandbox · 20 lines
[I] Mode: STANDALONE_ONCE
[I] Mount: '/usr' · '/code' · '/wd'
[W] cgroupv2: could not apply '+memory'; retrying without cap
[I] Executing '/usr/local/bin/python3'
[E] pid=1461 exited with status: 1
Traceback (most recent call last):
File "/code/script.py", line 12, in <module>
row["customer_id"]
KeyError: 'customer_id'
loading source table
failed to map column customer_id
finished — failed · exit 1 · 2026-07-16 16:02:33 · 0.4s